@surething/cockpit 1.0.265 → 1.0.267

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 (695) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +5 -4
  3. package/.next-prod/build-manifest.json +2 -2
  4. package/.next-prod/cockpit-build.json +1 -1
  5. package/.next-prod/prerender-manifest.json +4 -4
  6. package/.next-prod/routes-manifest.json +6 -0
  7. package/.next-prod/server/app/_global-error/page.js +2 -2
  8. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next-prod/server/app/_global-error.html +1 -1
  11. package/.next-prod/server/app/_global-error.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next-prod/server/app/_not-found/page.js +1 -1
  16. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next-prod/server/app/_not-found.html +2 -2
  19. package/.next-prod/server/app/_not-found.rsc +3 -3
  20. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
  21. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  22. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  24. package/.next-prod/server/app/api/agent/test/route.js +1 -1
  25. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  26. package/.next-prod/server/app/api/bash/route.js +1 -1
  27. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  28. package/.next-prod/server/app/api/chat/codex/route.js +1 -1
  29. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  30. package/.next-prod/server/app/api/chat/deepseek/route.js +1 -1
  31. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  32. package/.next-prod/server/app/api/chat/glm/route.js +1 -1
  33. package/.next-prod/server/app/api/chat/glm/route.js.nft.json +1 -1
  34. package/.next-prod/server/app/api/chat/kimi/route.js +1 -1
  35. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/chat/ollama/route.js +1 -1
  37. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  38. package/.next-prod/server/app/api/chat/route.js +1 -1
  39. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/chat/stop/route.js +1 -1
  41. package/.next-prod/server/app/api/chat/stop/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 +1 -1
  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 +2 -2
  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 +2 -2
  59. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/deepseek/balance/route.js +1 -1
  61. package/.next-prod/server/app/api/deepseek/balance/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/deepseek/credentials/route.js +1 -1
  63. package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/deepseek/models/route.js +1 -1
  65. package/.next-prod/server/app/api/deepseek/models/route.js.nft.json +1 -1
  66. package/.next-prod/server/app/api/dev/spans/route.js +1 -1
  67. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  68. package/.next-prod/server/app/api/extension/version/route.js +1 -1
  69. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  70. package/.next-prod/server/app/api/file/route.js +1 -1
  71. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  72. package/.next-prod/server/app/api/files/blame/route.js +1 -1
  73. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  74. package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
  75. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  76. package/.next-prod/server/app/api/files/copy/route.js +1 -1
  77. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  78. package/.next-prod/server/app/api/files/delete/route.js +1 -1
  79. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  80. package/.next-prod/server/app/api/files/expanded/route.js +1 -1
  81. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  82. package/.next-prod/server/app/api/files/index/route.js +1 -1
  83. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  84. package/.next-prod/server/app/api/files/init/route.js +1 -1
  85. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  86. package/.next-prod/server/app/api/files/paste/route.js +1 -1
  87. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  88. package/.next-prod/server/app/api/files/read/route.js +1 -1
  89. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  90. package/.next-prod/server/app/api/files/readdir/route.js +1 -1
  91. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  92. package/.next-prod/server/app/api/files/recent/route.js +1 -1
  93. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  94. package/.next-prod/server/app/api/files/save/route.js +1 -1
  95. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  96. package/.next-prod/server/app/api/files/search/route.js +1 -1
  97. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  98. package/.next-prod/server/app/api/files/stat/route.js +1 -1
  99. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  100. package/.next-prod/server/app/api/files/text/route.js +1 -1
  101. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  102. package/.next-prod/server/app/api/git/blob/route.js +1 -1
  103. package/.next-prod/server/app/api/git/blob/route.js.nft.json +1 -1
  104. package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
  105. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  106. package/.next-prod/server/app/api/git/branches/route.js +1 -1
  107. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  108. package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
  109. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  110. package/.next-prod/server/app/api/git/commits/route.js +1 -1
  111. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  112. package/.next-prod/server/app/api/git/current-branch/route.js +1 -1
  113. package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
  114. package/.next-prod/server/app/api/git/diff/route.js +1 -1
  115. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  116. package/.next-prod/server/app/api/git/discard/route.js +1 -1
  117. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  118. package/.next-prod/server/app/api/git/stage/route.js +1 -1
  119. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  120. package/.next-prod/server/app/api/git/status/route.js +1 -1
  121. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  122. package/.next-prod/server/app/api/git/unstage/route.js +1 -1
  123. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  124. package/.next-prod/server/app/api/git/worktree/route.js +1 -1
  125. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  126. package/.next-prod/server/app/api/glm/credentials/route.js +1 -1
  127. package/.next-prod/server/app/api/glm/credentials/route.js.nft.json +1 -1
  128. package/.next-prod/server/app/api/glm/models/route.js +1 -1
  129. package/.next-prod/server/app/api/glm/models/route.js.nft.json +1 -1
  130. package/.next-prod/server/app/api/glm/usage/route.js +1 -1
  131. package/.next-prod/server/app/api/glm/usage/route.js.nft.json +1 -1
  132. package/.next-prod/server/app/api/global-state/route.js +1 -1
  133. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  134. package/.next-prod/server/app/api/health/route.js +1 -1
  135. package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
  136. package/.next-prod/server/app/api/html-apps/[id]/route.js +1 -1
  137. package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
  138. package/.next-prod/server/app/api/html-apps/route.js +1 -1
  139. package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
  140. package/.next-prod/server/app/api/jupyter/load/route.js +1 -1
  141. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  142. package/.next-prod/server/app/api/jupyter/save/route.js +1 -1
  143. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  144. package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
  145. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  146. package/.next-prod/server/app/api/kimi/credentials/route.js +1 -1
  147. package/.next-prod/server/app/api/kimi/credentials/route.js.nft.json +1 -1
  148. package/.next-prod/server/app/api/kimi/models/route.js +1 -1
  149. package/.next-prod/server/app/api/kimi/models/route.js.nft.json +1 -1
  150. package/.next-prod/server/app/api/kimi/usage/route.js +1 -1
  151. package/.next-prod/server/app/api/kimi/usage/route.js.nft.json +1 -1
  152. package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
  153. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  154. package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
  155. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  156. package/.next-prod/server/app/api/lsp/references/route.js +1 -1
  157. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  158. package/.next-prod/server/app/api/lsp/status/route.js +1 -1
  159. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  160. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
  161. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  162. package/.next-prod/server/app/api/mysql/columns/route.js +1 -1
  163. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  164. package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
  165. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  166. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
  167. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  168. package/.next-prod/server/app/api/mysql/export/route.js +1 -1
  169. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  170. package/.next-prod/server/app/api/mysql/query/route.js +1 -1
  171. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  172. package/.next-prod/server/app/api/mysql/schemas/route.js +2 -2
  173. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  174. package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
  175. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  176. package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
  177. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  178. package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
  179. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  180. package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
  181. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  182. package/.next-prod/server/app/api/note/route.js +1 -1
  183. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  184. package/.next-prod/server/app/api/ollama/config/route.js +1 -1
  185. package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
  186. package/.next-prod/server/app/api/ollama/models/route.js +1 -1
  187. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  188. package/.next-prod/server/app/api/ollama/start/route.js +1 -1
  189. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  190. package/.next-prod/server/app/api/open-cursor/route.js +1 -1
  191. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  192. package/.next-prod/server/app/api/open-vscode/route.js +1 -1
  193. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  194. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  195. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  196. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
  197. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  198. package/.next-prod/server/app/api/project-settings/route.js +1 -1
  199. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  200. package/.next-prod/server/app/api/project-state/route.js +2 -2
  201. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  202. package/.next-prod/server/app/api/projectGraph/affected/route.js +1 -1
  203. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  204. package/.next-prod/server/app/api/projectGraph/callees/route.js +1 -1
  205. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  206. package/.next-prod/server/app/api/projectGraph/callers/route.js +1 -1
  207. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  208. package/.next-prod/server/app/api/projectGraph/coedit/route.js +1 -1
  209. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  210. package/.next-prod/server/app/api/projectGraph/context/route.js +1 -1
  211. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  212. package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
  213. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  214. package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
  215. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  216. package/.next-prod/server/app/api/projectGraph/impact/route.js +1 -1
  217. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  218. package/.next-prod/server/app/api/projectGraph/related/route.js +1 -1
  219. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  220. package/.next-prod/server/app/api/projectGraph/risk/route.js +1 -1
  221. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  222. package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
  223. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  224. package/.next-prod/server/app/api/projects/route.js +1 -1
  225. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  226. package/.next-prod/server/app/api/prompts/config/route.js +1 -1
  227. package/.next-prod/server/app/api/prompts/config/route.js.nft.json +1 -1
  228. package/.next-prod/server/app/api/push/public-key/route.js +1 -1
  229. package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
  230. package/.next-prod/server/app/api/push/subscribe/route.js +1 -1
  231. package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
  232. package/.next-prod/server/app/api/push/unsubscribe/route.js +1 -1
  233. package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
  234. package/.next-prod/server/app/api/redis/command/route.js +1 -1
  235. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  236. package/.next-prod/server/app/api/redis/connect/route.js +1 -1
  237. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  238. package/.next-prod/server/app/api/redis/delete/route.js +1 -1
  239. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  240. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
  241. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  242. package/.next-prod/server/app/api/redis/get/route.js +1 -1
  243. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  244. package/.next-prod/server/app/api/redis/keys/route.js +1 -1
  245. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  246. package/.next-prod/server/app/api/redis/set/route.js +1 -1
  247. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  248. package/.next-prod/server/app/api/restart/route.js +1 -1
  249. package/.next-prod/server/app/api/restart/route.js.nft.json +1 -1
  250. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  251. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  252. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  253. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  254. package/.next-prod/server/app/api/review/[id]/route.js +1 -1
  255. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  256. package/.next-prod/server/app/api/review/identify/route.js +1 -1
  257. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  258. package/.next-prod/server/app/api/review/order/route.js +1 -1
  259. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  260. package/.next-prod/server/app/api/review/route.js +1 -1
  261. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  262. package/.next-prod/server/app/api/review/share-info/route.js +1 -1
  263. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  264. package/.next-prod/server/app/api/review/users/route.js +1 -1
  265. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  266. package/.next-prod/server/app/api/scheduled-tasks/route.js +2 -2
  267. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  268. package/.next-prod/server/app/api/services/config/route.js +1 -1
  269. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  270. package/.next-prod/server/app/api/services/scripts/route.js +1 -1
  271. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  272. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  273. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  274. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
  275. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  276. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  277. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  278. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
  279. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  280. package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
  281. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  282. package/.next-prod/server/app/api/sessions/route.js +1 -1
  283. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  284. package/.next-prod/server/app/api/settings/route.js +1 -1
  285. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  286. package/.next-prod/server/app/api/shutdown/route.js +1 -1
  287. package/.next-prod/server/app/api/shutdown/route.js.nft.json +1 -1
  288. package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
  289. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  290. package/.next-prod/server/app/api/skills/content/route.js +1 -1
  291. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  292. package/.next-prod/server/app/api/skills/route.js +1 -1
  293. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  294. package/.next-prod/server/app/api/snapshots/blob/route.js +1 -0
  295. package/.next-prod/server/app/api/snapshots/blob/route.js.nft.json +1 -0
  296. package/.next-prod/server/app/api/snapshots/blob/route_client-reference-manifest.js +1 -0
  297. package/.next-prod/server/app/api/snapshots/diff/route.js +1 -1
  298. package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
  299. package/.next-prod/server/app/api/snapshots/route.js +1 -1
  300. package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
  301. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
  302. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  303. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
  304. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  305. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
  306. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  307. package/.next-prod/server/app/api/terminal/env/route.js +1 -1
  308. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  309. package/.next-prod/server/app/api/terminal/history/route.js +1 -1
  310. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  311. package/.next-prod/server/app/api/update/route.js +1 -1
  312. package/.next-prod/server/app/api/update/route.js.nft.json +1 -1
  313. package/.next-prod/server/app/api/update-state/route.js +1 -1
  314. package/.next-prod/server/app/api/update-state/route.js.nft.json +1 -1
  315. package/.next-prod/server/app/api/version/route.js +1 -1
  316. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  317. package/.next-prod/server/app/apps/[...path]/route.js +1 -1
  318. package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -1
  319. package/.next-prod/server/app/favicon.ico/route.js +1 -1
  320. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  321. package/.next-prod/server/app/m/page.js +1 -1
  322. package/.next-prod/server/app/m/page.js.nft.json +1 -1
  323. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  324. package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
  325. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  326. package/.next-prod/server/app/page.js +1 -1
  327. package/.next-prod/server/app/page.js.nft.json +1 -1
  328. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  329. package/.next-prod/server/app/project/page.js +1 -1
  330. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  331. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  332. package/.next-prod/server/app/review/[id]/page.js +1 -1
  333. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  334. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  335. package/.next-prod/server/app-paths-manifest.json +5 -4
  336. package/.next-prod/server/chunks/2493.js +3 -3
  337. package/.next-prod/server/chunks/3286.js +2 -2
  338. package/.next-prod/server/chunks/4949.js +1 -0
  339. package/.next-prod/server/chunks/516.js +1 -1
  340. package/.next-prod/server/chunks/5750.js +15 -16
  341. package/.next-prod/server/chunks/6548.js +1 -1
  342. package/.next-prod/server/chunks/7184.js +4 -4
  343. package/.next-prod/server/chunks/816.js +1 -1
  344. package/.next-prod/server/chunks/9312.js +1 -1
  345. package/.next-prod/server/chunks/9352.js +1 -1
  346. package/.next-prod/server/middleware-build-manifest.js +1 -1
  347. package/.next-prod/server/pages/404.html +2 -2
  348. package/.next-prod/server/pages/500.html +1 -1
  349. package/.next-prod/server/server-reference-manifest.json +1 -1
  350. package/.next-prod/static/U8R610UNAk7MWsuSmrm28/_buildManifest.js +1 -0
  351. package/.next-prod/static/chunks/33372-5305e3772ba46050.js +34 -0
  352. package/.next-prod/static/chunks/46784-ff535f686b295919.js +716 -0
  353. package/.next-prod/static/chunks/{14333-ced10f36441c568c.js → 5504-583edbefcb22ed17.js} +7 -7
  354. package/.next-prod/static/chunks/{86160-b6431f3093820d49.js → 56819-56e9c6ff8d86d236.js} +1 -1
  355. package/.next-prod/static/chunks/96911-08609dc685108dcc.js +15 -0
  356. package/.next-prod/static/chunks/app/_global-error/{page-c1a2c7e62ce669f7.js → page-db8b43ac5e6e9ac5.js} +1 -1
  357. package/.next-prod/static/chunks/app/api/agent/test/{route-c1a2c7e62ce669f7.js → route-db8b43ac5e6e9ac5.js} +1 -1
  358. package/.next-prod/static/chunks/app/api/bash/{route-c1a2c7e62ce669f7.js → route-db8b43ac5e6e9ac5.js} +1 -1
  359. package/.next-prod/static/chunks/app/api/chat/codex/{route-c1a2c7e62ce669f7.js → route-db8b43ac5e6e9ac5.js} +1 -1
  360. package/.next-prod/static/chunks/app/api/chat/deepseek/route-db8b43ac5e6e9ac5.js +1 -0
  361. package/.next-prod/static/chunks/app/api/chat/glm/route-db8b43ac5e6e9ac5.js +1 -0
  362. package/.next-prod/static/chunks/app/api/chat/kimi/route-db8b43ac5e6e9ac5.js +1 -0
  363. package/.next-prod/static/chunks/app/api/chat/ollama/route-db8b43ac5e6e9ac5.js +1 -0
  364. package/.next-prod/static/chunks/app/api/chat/route-db8b43ac5e6e9ac5.js +1 -0
  365. package/.next-prod/static/chunks/app/api/chat/stop/route-db8b43ac5e6e9ac5.js +1 -0
  366. package/.next-prod/static/chunks/app/api/claude-stats/route-db8b43ac5e6e9ac5.js +1 -0
  367. package/.next-prod/static/chunks/app/api/commands/route-db8b43ac5e6e9ac5.js +1 -0
  368. package/.next-prod/static/chunks/app/api/comments/route-db8b43ac5e6e9ac5.js +1 -0
  369. package/.next-prod/static/chunks/app/api/db/columns/route-db8b43ac5e6e9ac5.js +1 -0
  370. package/.next-prod/static/chunks/app/api/db/connect/route-db8b43ac5e6e9ac5.js +1 -0
  371. package/.next-prod/static/chunks/app/api/db/disconnect/route-db8b43ac5e6e9ac5.js +1 -0
  372. package/.next-prod/static/chunks/app/api/db/export/route-db8b43ac5e6e9ac5.js +1 -0
  373. package/.next-prod/static/chunks/app/api/db/query/route-db8b43ac5e6e9ac5.js +1 -0
  374. package/.next-prod/static/chunks/app/api/db/schemas/route-db8b43ac5e6e9ac5.js +1 -0
  375. package/.next-prod/static/chunks/app/api/deepseek/balance/route-db8b43ac5e6e9ac5.js +1 -0
  376. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-db8b43ac5e6e9ac5.js +1 -0
  377. package/.next-prod/static/chunks/app/api/deepseek/models/route-db8b43ac5e6e9ac5.js +1 -0
  378. package/.next-prod/static/chunks/app/api/dev/spans/route-db8b43ac5e6e9ac5.js +1 -0
  379. package/.next-prod/static/chunks/app/api/extension/version/route-db8b43ac5e6e9ac5.js +1 -0
  380. package/.next-prod/static/chunks/app/api/file/route-db8b43ac5e6e9ac5.js +1 -0
  381. package/.next-prod/static/chunks/app/api/files/blame/route-db8b43ac5e6e9ac5.js +1 -0
  382. package/.next-prod/static/chunks/app/api/files/clipboard/route-db8b43ac5e6e9ac5.js +1 -0
  383. package/.next-prod/static/chunks/app/api/files/copy/route-db8b43ac5e6e9ac5.js +1 -0
  384. package/.next-prod/static/chunks/app/api/files/delete/route-db8b43ac5e6e9ac5.js +1 -0
  385. package/.next-prod/static/chunks/app/api/files/expanded/route-db8b43ac5e6e9ac5.js +1 -0
  386. package/.next-prod/static/chunks/app/api/files/index/route-db8b43ac5e6e9ac5.js +1 -0
  387. package/.next-prod/static/chunks/app/api/files/init/route-db8b43ac5e6e9ac5.js +1 -0
  388. package/.next-prod/static/chunks/app/api/files/paste/route-db8b43ac5e6e9ac5.js +1 -0
  389. package/.next-prod/static/chunks/app/api/files/read/route-db8b43ac5e6e9ac5.js +1 -0
  390. package/.next-prod/static/chunks/app/api/files/readdir/route-db8b43ac5e6e9ac5.js +1 -0
  391. package/.next-prod/static/chunks/app/api/files/recent/route-db8b43ac5e6e9ac5.js +1 -0
  392. package/.next-prod/static/chunks/app/api/files/save/route-db8b43ac5e6e9ac5.js +1 -0
  393. package/.next-prod/static/chunks/app/api/files/search/route-db8b43ac5e6e9ac5.js +1 -0
  394. package/.next-prod/static/chunks/app/api/files/stat/route-db8b43ac5e6e9ac5.js +1 -0
  395. package/.next-prod/static/chunks/app/api/files/text/route-db8b43ac5e6e9ac5.js +1 -0
  396. package/.next-prod/static/chunks/app/api/git/blob/route-db8b43ac5e6e9ac5.js +1 -0
  397. package/.next-prod/static/chunks/app/api/git/branch-diff/route-db8b43ac5e6e9ac5.js +1 -0
  398. package/.next-prod/static/chunks/app/api/git/branches/route-db8b43ac5e6e9ac5.js +1 -0
  399. package/.next-prod/static/chunks/app/api/git/commit-diff/route-db8b43ac5e6e9ac5.js +1 -0
  400. package/.next-prod/static/chunks/app/api/git/commits/route-db8b43ac5e6e9ac5.js +1 -0
  401. package/.next-prod/static/chunks/app/api/git/current-branch/route-db8b43ac5e6e9ac5.js +1 -0
  402. package/.next-prod/static/chunks/app/api/git/diff/route-db8b43ac5e6e9ac5.js +1 -0
  403. package/.next-prod/static/chunks/app/api/git/discard/route-db8b43ac5e6e9ac5.js +1 -0
  404. package/.next-prod/static/chunks/app/api/git/stage/route-db8b43ac5e6e9ac5.js +1 -0
  405. package/.next-prod/static/chunks/app/api/git/status/route-db8b43ac5e6e9ac5.js +1 -0
  406. package/.next-prod/static/chunks/app/api/git/unstage/route-db8b43ac5e6e9ac5.js +1 -0
  407. package/.next-prod/static/chunks/app/api/git/worktree/route-db8b43ac5e6e9ac5.js +1 -0
  408. package/.next-prod/static/chunks/app/api/glm/credentials/route-db8b43ac5e6e9ac5.js +1 -0
  409. package/.next-prod/static/chunks/app/api/glm/models/route-db8b43ac5e6e9ac5.js +1 -0
  410. package/.next-prod/static/chunks/app/api/glm/usage/route-db8b43ac5e6e9ac5.js +1 -0
  411. package/.next-prod/static/chunks/app/api/global-state/route-db8b43ac5e6e9ac5.js +1 -0
  412. package/.next-prod/static/chunks/app/api/health/route-db8b43ac5e6e9ac5.js +1 -0
  413. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-db8b43ac5e6e9ac5.js +1 -0
  414. package/.next-prod/static/chunks/app/api/html-apps/route-db8b43ac5e6e9ac5.js +1 -0
  415. package/.next-prod/static/chunks/app/api/jupyter/load/route-db8b43ac5e6e9ac5.js +1 -0
  416. package/.next-prod/static/chunks/app/api/jupyter/save/route-db8b43ac5e6e9ac5.js +1 -0
  417. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-db8b43ac5e6e9ac5.js +1 -0
  418. package/.next-prod/static/chunks/app/api/kimi/credentials/route-db8b43ac5e6e9ac5.js +1 -0
  419. package/.next-prod/static/chunks/app/api/kimi/models/route-db8b43ac5e6e9ac5.js +1 -0
  420. package/.next-prod/static/chunks/app/api/kimi/usage/route-db8b43ac5e6e9ac5.js +1 -0
  421. package/.next-prod/static/chunks/app/api/lsp/definition/route-db8b43ac5e6e9ac5.js +1 -0
  422. package/.next-prod/static/chunks/app/api/lsp/hover/route-db8b43ac5e6e9ac5.js +1 -0
  423. package/.next-prod/static/chunks/app/api/lsp/references/route-db8b43ac5e6e9ac5.js +1 -0
  424. package/.next-prod/static/chunks/app/api/lsp/status/route-db8b43ac5e6e9ac5.js +1 -0
  425. package/.next-prod/static/chunks/app/api/lsp/warmup/route-db8b43ac5e6e9ac5.js +1 -0
  426. package/.next-prod/static/chunks/app/api/mysql/columns/route-db8b43ac5e6e9ac5.js +1 -0
  427. package/.next-prod/static/chunks/app/api/mysql/connect/route-db8b43ac5e6e9ac5.js +1 -0
  428. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-db8b43ac5e6e9ac5.js +1 -0
  429. package/.next-prod/static/chunks/app/api/mysql/export/route-db8b43ac5e6e9ac5.js +1 -0
  430. package/.next-prod/static/chunks/app/api/mysql/query/route-db8b43ac5e6e9ac5.js +1 -0
  431. package/.next-prod/static/chunks/app/api/mysql/schemas/route-db8b43ac5e6e9ac5.js +1 -0
  432. package/.next-prod/static/chunks/app/api/neo4j/connect/route-db8b43ac5e6e9ac5.js +1 -0
  433. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-db8b43ac5e6e9ac5.js +1 -0
  434. package/.next-prod/static/chunks/app/api/neo4j/query/route-db8b43ac5e6e9ac5.js +1 -0
  435. package/.next-prod/static/chunks/app/api/neo4j/schema/route-db8b43ac5e6e9ac5.js +1 -0
  436. package/.next-prod/static/chunks/app/api/note/route-db8b43ac5e6e9ac5.js +1 -0
  437. package/.next-prod/static/chunks/app/api/ollama/config/route-db8b43ac5e6e9ac5.js +1 -0
  438. package/.next-prod/static/chunks/app/api/ollama/models/route-db8b43ac5e6e9ac5.js +1 -0
  439. package/.next-prod/static/chunks/app/api/ollama/start/route-db8b43ac5e6e9ac5.js +1 -0
  440. package/.next-prod/static/chunks/app/api/open-cursor/route-db8b43ac5e6e9ac5.js +1 -0
  441. package/.next-prod/static/chunks/app/api/open-vscode/route-db8b43ac5e6e9ac5.js +1 -0
  442. package/.next-prod/static/chunks/app/api/pick-folder/route-db8b43ac5e6e9ac5.js +1 -0
  443. package/.next-prod/static/chunks/app/api/pinned-sessions/route-db8b43ac5e6e9ac5.js +1 -0
  444. package/.next-prod/static/chunks/app/api/project-settings/route-db8b43ac5e6e9ac5.js +1 -0
  445. package/.next-prod/static/chunks/app/api/project-state/route-db8b43ac5e6e9ac5.js +1 -0
  446. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-db8b43ac5e6e9ac5.js +1 -0
  447. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-db8b43ac5e6e9ac5.js +1 -0
  448. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-db8b43ac5e6e9ac5.js +1 -0
  449. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-db8b43ac5e6e9ac5.js +1 -0
  450. package/.next-prod/static/chunks/app/api/projectGraph/context/route-db8b43ac5e6e9ac5.js +1 -0
  451. package/.next-prod/static/chunks/app/api/projectGraph/file/route-db8b43ac5e6e9ac5.js +1 -0
  452. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-db8b43ac5e6e9ac5.js +1 -0
  453. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-db8b43ac5e6e9ac5.js +1 -0
  454. package/.next-prod/static/chunks/app/api/projectGraph/related/route-db8b43ac5e6e9ac5.js +1 -0
  455. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-db8b43ac5e6e9ac5.js +1 -0
  456. package/.next-prod/static/chunks/app/api/projectGraph/search/route-db8b43ac5e6e9ac5.js +1 -0
  457. package/.next-prod/static/chunks/app/api/projects/route-db8b43ac5e6e9ac5.js +1 -0
  458. package/.next-prod/static/chunks/app/api/prompts/config/route-db8b43ac5e6e9ac5.js +1 -0
  459. package/.next-prod/static/chunks/app/api/push/public-key/route-db8b43ac5e6e9ac5.js +1 -0
  460. package/.next-prod/static/chunks/app/api/push/subscribe/route-db8b43ac5e6e9ac5.js +1 -0
  461. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-db8b43ac5e6e9ac5.js +1 -0
  462. package/.next-prod/static/chunks/app/api/redis/command/route-db8b43ac5e6e9ac5.js +1 -0
  463. package/.next-prod/static/chunks/app/api/redis/connect/route-db8b43ac5e6e9ac5.js +1 -0
  464. package/.next-prod/static/chunks/app/api/redis/delete/route-db8b43ac5e6e9ac5.js +1 -0
  465. package/.next-prod/static/chunks/app/api/redis/disconnect/route-db8b43ac5e6e9ac5.js +1 -0
  466. package/.next-prod/static/chunks/app/api/redis/get/route-db8b43ac5e6e9ac5.js +1 -0
  467. package/.next-prod/static/chunks/app/api/redis/keys/route-db8b43ac5e6e9ac5.js +1 -0
  468. package/.next-prod/static/chunks/app/api/redis/set/route-db8b43ac5e6e9ac5.js +1 -0
  469. package/.next-prod/static/chunks/app/api/restart/route-db8b43ac5e6e9ac5.js +1 -0
  470. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-db8b43ac5e6e9ac5.js +1 -0
  471. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-db8b43ac5e6e9ac5.js +1 -0
  472. package/.next-prod/static/chunks/app/api/review/[id]/route-db8b43ac5e6e9ac5.js +1 -0
  473. package/.next-prod/static/chunks/app/api/review/identify/route-db8b43ac5e6e9ac5.js +1 -0
  474. package/.next-prod/static/chunks/app/api/review/order/route-db8b43ac5e6e9ac5.js +1 -0
  475. package/.next-prod/static/chunks/app/api/review/route-db8b43ac5e6e9ac5.js +1 -0
  476. package/.next-prod/static/chunks/app/api/review/share-info/route-db8b43ac5e6e9ac5.js +1 -0
  477. package/.next-prod/static/chunks/app/api/review/users/route-db8b43ac5e6e9ac5.js +1 -0
  478. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-db8b43ac5e6e9ac5.js +1 -0
  479. package/.next-prod/static/chunks/app/api/services/config/route-db8b43ac5e6e9ac5.js +1 -0
  480. package/.next-prod/static/chunks/app/api/services/scripts/route-db8b43ac5e6e9ac5.js +1 -0
  481. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-db8b43ac5e6e9ac5.js +1 -0
  482. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-db8b43ac5e6e9ac5.js +1 -0
  483. package/.next-prod/static/chunks/app/api/session-by-path/route-db8b43ac5e6e9ac5.js +1 -0
  484. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-db8b43ac5e6e9ac5.js +1 -0
  485. package/.next-prod/static/chunks/app/api/sessions/projects/route-db8b43ac5e6e9ac5.js +1 -0
  486. package/.next-prod/static/chunks/app/api/sessions/route-db8b43ac5e6e9ac5.js +1 -0
  487. package/.next-prod/static/chunks/app/api/settings/route-db8b43ac5e6e9ac5.js +1 -0
  488. package/.next-prod/static/chunks/app/api/shutdown/route-db8b43ac5e6e9ac5.js +1 -0
  489. package/.next-prod/static/chunks/app/api/skills/[id]/route-db8b43ac5e6e9ac5.js +1 -0
  490. package/.next-prod/static/chunks/app/api/skills/content/route-db8b43ac5e6e9ac5.js +1 -0
  491. package/.next-prod/static/chunks/app/api/skills/route-db8b43ac5e6e9ac5.js +1 -0
  492. package/.next-prod/static/chunks/app/api/snapshots/blob/route-db8b43ac5e6e9ac5.js +1 -0
  493. package/.next-prod/static/chunks/app/api/snapshots/diff/route-db8b43ac5e6e9ac5.js +1 -0
  494. package/.next-prod/static/chunks/app/api/snapshots/route-db8b43ac5e6e9ac5.js +1 -0
  495. package/.next-prod/static/chunks/app/api/terminal/aliases/route-db8b43ac5e6e9ac5.js +1 -0
  496. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-db8b43ac5e6e9ac5.js +1 -0
  497. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-db8b43ac5e6e9ac5.js +1 -0
  498. package/.next-prod/static/chunks/app/api/terminal/env/route-db8b43ac5e6e9ac5.js +1 -0
  499. package/.next-prod/static/chunks/app/api/terminal/history/route-db8b43ac5e6e9ac5.js +1 -0
  500. package/.next-prod/static/chunks/app/api/update/route-db8b43ac5e6e9ac5.js +1 -0
  501. package/.next-prod/static/chunks/app/api/update-state/route-db8b43ac5e6e9ac5.js +1 -0
  502. package/.next-prod/static/chunks/app/api/version/route-db8b43ac5e6e9ac5.js +1 -0
  503. package/.next-prod/static/chunks/app/apps/[...path]/route-db8b43ac5e6e9ac5.js +1 -0
  504. package/.next-prod/static/chunks/app/{layout-2e2ffdc76c7f77f6.js → layout-65e8647a35bd5ef0.js} +1 -1
  505. package/.next-prod/static/chunks/app/m/page-69cf611ceae66f33.js +1 -0
  506. package/.next-prod/static/chunks/app/manifest.webmanifest/route-db8b43ac5e6e9ac5.js +1 -0
  507. package/.next-prod/static/chunks/app/page-6931b763a22d95be.js +1 -0
  508. package/.next-prod/static/chunks/app/project/page-6931b763a22d95be.js +1 -0
  509. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-db8b43ac5e6e9ac5.js +1 -0
  510. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-db8b43ac5e6e9ac5.js +1 -0
  511. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-db8b43ac5e6e9ac5.js +1 -0
  512. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-db8b43ac5e6e9ac5.js +1 -0
  513. package/.next-prod/static/css/303e8ac791ff3d31.css +1 -0
  514. package/.next-prod/trace +15 -14
  515. package/.next-prod/trace-build +1 -1
  516. package/.next-prod/types/app/api/snapshots/blob/route.ts +353 -0
  517. package/.next-prod/types/routes.d.ts +2 -1
  518. package/.next-prod/types/validator.ts +9 -0
  519. package/apps/file-viewer/app.jsx +83 -8
  520. package/apps/file-viewer/index.html +23 -1
  521. package/bin/cock-service.mjs +10 -8
  522. package/bin/cock.mjs +8 -6
  523. package/bin/postinstall.mjs +9 -8
  524. package/bin/updater.mjs +64 -26
  525. package/dist/{chunk-ZE2JXL6E.mjs → chunk-ETYX2YQF.mjs} +141 -59
  526. package/dist/{chunk-FBAFMLUC.mjs → chunk-SAKRITIQ.mjs} +3 -2
  527. package/dist/{chunk-H6AI4XJC.mjs → chunk-SGUW2QJI.mjs} +1 -1
  528. package/dist/httpApi.mjs +2 -2
  529. package/dist/scheduledTasks.mjs +212 -43
  530. package/dist/{server-HRP33LCV.mjs → server-C6LPAKPM.mjs} +2 -2
  531. package/dist/wsServer.mjs +20 -6
  532. package/package.json +6 -5
  533. package/public/html-lib/csv-viewer.css +416 -0
  534. package/public/html-lib/csv-viewer.js +100 -0
  535. package/public/html-lib/json-viewer.js +15 -15
  536. package/scripts/agentBinaries.mjs +86 -0
  537. package/.next-prod/server/chunks/9281.js +0 -1
  538. package/.next-prod/static/chunks/21372-8169ef641d8dec08.js +0 -15
  539. package/.next-prod/static/chunks/33940-eab092c09e660ac7.js +0 -35
  540. package/.next-prod/static/chunks/46784-55eed87a21c4c989.js +0 -716
  541. package/.next-prod/static/chunks/app/api/chat/deepseek/route-c1a2c7e62ce669f7.js +0 -1
  542. package/.next-prod/static/chunks/app/api/chat/glm/route-c1a2c7e62ce669f7.js +0 -1
  543. package/.next-prod/static/chunks/app/api/chat/kimi/route-c1a2c7e62ce669f7.js +0 -1
  544. package/.next-prod/static/chunks/app/api/chat/ollama/route-c1a2c7e62ce669f7.js +0 -1
  545. package/.next-prod/static/chunks/app/api/chat/route-c1a2c7e62ce669f7.js +0 -1
  546. package/.next-prod/static/chunks/app/api/chat/stop/route-c1a2c7e62ce669f7.js +0 -1
  547. package/.next-prod/static/chunks/app/api/claude-stats/route-c1a2c7e62ce669f7.js +0 -1
  548. package/.next-prod/static/chunks/app/api/commands/route-c1a2c7e62ce669f7.js +0 -1
  549. package/.next-prod/static/chunks/app/api/comments/route-c1a2c7e62ce669f7.js +0 -1
  550. package/.next-prod/static/chunks/app/api/db/columns/route-c1a2c7e62ce669f7.js +0 -1
  551. package/.next-prod/static/chunks/app/api/db/connect/route-c1a2c7e62ce669f7.js +0 -1
  552. package/.next-prod/static/chunks/app/api/db/disconnect/route-c1a2c7e62ce669f7.js +0 -1
  553. package/.next-prod/static/chunks/app/api/db/export/route-c1a2c7e62ce669f7.js +0 -1
  554. package/.next-prod/static/chunks/app/api/db/query/route-c1a2c7e62ce669f7.js +0 -1
  555. package/.next-prod/static/chunks/app/api/db/schemas/route-c1a2c7e62ce669f7.js +0 -1
  556. package/.next-prod/static/chunks/app/api/deepseek/balance/route-c1a2c7e62ce669f7.js +0 -1
  557. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-c1a2c7e62ce669f7.js +0 -1
  558. package/.next-prod/static/chunks/app/api/deepseek/models/route-c1a2c7e62ce669f7.js +0 -1
  559. package/.next-prod/static/chunks/app/api/dev/spans/route-c1a2c7e62ce669f7.js +0 -1
  560. package/.next-prod/static/chunks/app/api/extension/version/route-c1a2c7e62ce669f7.js +0 -1
  561. package/.next-prod/static/chunks/app/api/file/route-c1a2c7e62ce669f7.js +0 -1
  562. package/.next-prod/static/chunks/app/api/files/blame/route-c1a2c7e62ce669f7.js +0 -1
  563. package/.next-prod/static/chunks/app/api/files/clipboard/route-c1a2c7e62ce669f7.js +0 -1
  564. package/.next-prod/static/chunks/app/api/files/copy/route-c1a2c7e62ce669f7.js +0 -1
  565. package/.next-prod/static/chunks/app/api/files/delete/route-c1a2c7e62ce669f7.js +0 -1
  566. package/.next-prod/static/chunks/app/api/files/expanded/route-c1a2c7e62ce669f7.js +0 -1
  567. package/.next-prod/static/chunks/app/api/files/index/route-c1a2c7e62ce669f7.js +0 -1
  568. package/.next-prod/static/chunks/app/api/files/init/route-c1a2c7e62ce669f7.js +0 -1
  569. package/.next-prod/static/chunks/app/api/files/paste/route-c1a2c7e62ce669f7.js +0 -1
  570. package/.next-prod/static/chunks/app/api/files/read/route-c1a2c7e62ce669f7.js +0 -1
  571. package/.next-prod/static/chunks/app/api/files/readdir/route-c1a2c7e62ce669f7.js +0 -1
  572. package/.next-prod/static/chunks/app/api/files/recent/route-c1a2c7e62ce669f7.js +0 -1
  573. package/.next-prod/static/chunks/app/api/files/save/route-c1a2c7e62ce669f7.js +0 -1
  574. package/.next-prod/static/chunks/app/api/files/search/route-c1a2c7e62ce669f7.js +0 -1
  575. package/.next-prod/static/chunks/app/api/files/stat/route-c1a2c7e62ce669f7.js +0 -1
  576. package/.next-prod/static/chunks/app/api/files/text/route-c1a2c7e62ce669f7.js +0 -1
  577. package/.next-prod/static/chunks/app/api/git/blob/route-c1a2c7e62ce669f7.js +0 -1
  578. package/.next-prod/static/chunks/app/api/git/branch-diff/route-c1a2c7e62ce669f7.js +0 -1
  579. package/.next-prod/static/chunks/app/api/git/branches/route-c1a2c7e62ce669f7.js +0 -1
  580. package/.next-prod/static/chunks/app/api/git/commit-diff/route-c1a2c7e62ce669f7.js +0 -1
  581. package/.next-prod/static/chunks/app/api/git/commits/route-c1a2c7e62ce669f7.js +0 -1
  582. package/.next-prod/static/chunks/app/api/git/current-branch/route-c1a2c7e62ce669f7.js +0 -1
  583. package/.next-prod/static/chunks/app/api/git/diff/route-c1a2c7e62ce669f7.js +0 -1
  584. package/.next-prod/static/chunks/app/api/git/discard/route-c1a2c7e62ce669f7.js +0 -1
  585. package/.next-prod/static/chunks/app/api/git/stage/route-c1a2c7e62ce669f7.js +0 -1
  586. package/.next-prod/static/chunks/app/api/git/status/route-c1a2c7e62ce669f7.js +0 -1
  587. package/.next-prod/static/chunks/app/api/git/unstage/route-c1a2c7e62ce669f7.js +0 -1
  588. package/.next-prod/static/chunks/app/api/git/worktree/route-c1a2c7e62ce669f7.js +0 -1
  589. package/.next-prod/static/chunks/app/api/glm/credentials/route-c1a2c7e62ce669f7.js +0 -1
  590. package/.next-prod/static/chunks/app/api/glm/models/route-c1a2c7e62ce669f7.js +0 -1
  591. package/.next-prod/static/chunks/app/api/glm/usage/route-c1a2c7e62ce669f7.js +0 -1
  592. package/.next-prod/static/chunks/app/api/global-state/route-c1a2c7e62ce669f7.js +0 -1
  593. package/.next-prod/static/chunks/app/api/health/route-c1a2c7e62ce669f7.js +0 -1
  594. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-c1a2c7e62ce669f7.js +0 -1
  595. package/.next-prod/static/chunks/app/api/html-apps/route-c1a2c7e62ce669f7.js +0 -1
  596. package/.next-prod/static/chunks/app/api/jupyter/load/route-c1a2c7e62ce669f7.js +0 -1
  597. package/.next-prod/static/chunks/app/api/jupyter/save/route-c1a2c7e62ce669f7.js +0 -1
  598. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-c1a2c7e62ce669f7.js +0 -1
  599. package/.next-prod/static/chunks/app/api/kimi/credentials/route-c1a2c7e62ce669f7.js +0 -1
  600. package/.next-prod/static/chunks/app/api/kimi/models/route-c1a2c7e62ce669f7.js +0 -1
  601. package/.next-prod/static/chunks/app/api/kimi/usage/route-c1a2c7e62ce669f7.js +0 -1
  602. package/.next-prod/static/chunks/app/api/lsp/definition/route-c1a2c7e62ce669f7.js +0 -1
  603. package/.next-prod/static/chunks/app/api/lsp/hover/route-c1a2c7e62ce669f7.js +0 -1
  604. package/.next-prod/static/chunks/app/api/lsp/references/route-c1a2c7e62ce669f7.js +0 -1
  605. package/.next-prod/static/chunks/app/api/lsp/status/route-c1a2c7e62ce669f7.js +0 -1
  606. package/.next-prod/static/chunks/app/api/lsp/warmup/route-c1a2c7e62ce669f7.js +0 -1
  607. package/.next-prod/static/chunks/app/api/mysql/columns/route-c1a2c7e62ce669f7.js +0 -1
  608. package/.next-prod/static/chunks/app/api/mysql/connect/route-c1a2c7e62ce669f7.js +0 -1
  609. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-c1a2c7e62ce669f7.js +0 -1
  610. package/.next-prod/static/chunks/app/api/mysql/export/route-c1a2c7e62ce669f7.js +0 -1
  611. package/.next-prod/static/chunks/app/api/mysql/query/route-c1a2c7e62ce669f7.js +0 -1
  612. package/.next-prod/static/chunks/app/api/mysql/schemas/route-c1a2c7e62ce669f7.js +0 -1
  613. package/.next-prod/static/chunks/app/api/neo4j/connect/route-c1a2c7e62ce669f7.js +0 -1
  614. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-c1a2c7e62ce669f7.js +0 -1
  615. package/.next-prod/static/chunks/app/api/neo4j/query/route-c1a2c7e62ce669f7.js +0 -1
  616. package/.next-prod/static/chunks/app/api/neo4j/schema/route-c1a2c7e62ce669f7.js +0 -1
  617. package/.next-prod/static/chunks/app/api/note/route-c1a2c7e62ce669f7.js +0 -1
  618. package/.next-prod/static/chunks/app/api/ollama/config/route-c1a2c7e62ce669f7.js +0 -1
  619. package/.next-prod/static/chunks/app/api/ollama/models/route-c1a2c7e62ce669f7.js +0 -1
  620. package/.next-prod/static/chunks/app/api/ollama/start/route-c1a2c7e62ce669f7.js +0 -1
  621. package/.next-prod/static/chunks/app/api/open-cursor/route-c1a2c7e62ce669f7.js +0 -1
  622. package/.next-prod/static/chunks/app/api/open-vscode/route-c1a2c7e62ce669f7.js +0 -1
  623. package/.next-prod/static/chunks/app/api/pick-folder/route-c1a2c7e62ce669f7.js +0 -1
  624. package/.next-prod/static/chunks/app/api/pinned-sessions/route-c1a2c7e62ce669f7.js +0 -1
  625. package/.next-prod/static/chunks/app/api/project-settings/route-c1a2c7e62ce669f7.js +0 -1
  626. package/.next-prod/static/chunks/app/api/project-state/route-c1a2c7e62ce669f7.js +0 -1
  627. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-c1a2c7e62ce669f7.js +0 -1
  628. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-c1a2c7e62ce669f7.js +0 -1
  629. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-c1a2c7e62ce669f7.js +0 -1
  630. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-c1a2c7e62ce669f7.js +0 -1
  631. package/.next-prod/static/chunks/app/api/projectGraph/context/route-c1a2c7e62ce669f7.js +0 -1
  632. package/.next-prod/static/chunks/app/api/projectGraph/file/route-c1a2c7e62ce669f7.js +0 -1
  633. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-c1a2c7e62ce669f7.js +0 -1
  634. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-c1a2c7e62ce669f7.js +0 -1
  635. package/.next-prod/static/chunks/app/api/projectGraph/related/route-c1a2c7e62ce669f7.js +0 -1
  636. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-c1a2c7e62ce669f7.js +0 -1
  637. package/.next-prod/static/chunks/app/api/projectGraph/search/route-c1a2c7e62ce669f7.js +0 -1
  638. package/.next-prod/static/chunks/app/api/projects/route-c1a2c7e62ce669f7.js +0 -1
  639. package/.next-prod/static/chunks/app/api/prompts/config/route-c1a2c7e62ce669f7.js +0 -1
  640. package/.next-prod/static/chunks/app/api/push/public-key/route-c1a2c7e62ce669f7.js +0 -1
  641. package/.next-prod/static/chunks/app/api/push/subscribe/route-c1a2c7e62ce669f7.js +0 -1
  642. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-c1a2c7e62ce669f7.js +0 -1
  643. package/.next-prod/static/chunks/app/api/redis/command/route-c1a2c7e62ce669f7.js +0 -1
  644. package/.next-prod/static/chunks/app/api/redis/connect/route-c1a2c7e62ce669f7.js +0 -1
  645. package/.next-prod/static/chunks/app/api/redis/delete/route-c1a2c7e62ce669f7.js +0 -1
  646. package/.next-prod/static/chunks/app/api/redis/disconnect/route-c1a2c7e62ce669f7.js +0 -1
  647. package/.next-prod/static/chunks/app/api/redis/get/route-c1a2c7e62ce669f7.js +0 -1
  648. package/.next-prod/static/chunks/app/api/redis/keys/route-c1a2c7e62ce669f7.js +0 -1
  649. package/.next-prod/static/chunks/app/api/redis/set/route-c1a2c7e62ce669f7.js +0 -1
  650. package/.next-prod/static/chunks/app/api/restart/route-c1a2c7e62ce669f7.js +0 -1
  651. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-c1a2c7e62ce669f7.js +0 -1
  652. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-c1a2c7e62ce669f7.js +0 -1
  653. package/.next-prod/static/chunks/app/api/review/[id]/route-c1a2c7e62ce669f7.js +0 -1
  654. package/.next-prod/static/chunks/app/api/review/identify/route-c1a2c7e62ce669f7.js +0 -1
  655. package/.next-prod/static/chunks/app/api/review/order/route-c1a2c7e62ce669f7.js +0 -1
  656. package/.next-prod/static/chunks/app/api/review/route-c1a2c7e62ce669f7.js +0 -1
  657. package/.next-prod/static/chunks/app/api/review/share-info/route-c1a2c7e62ce669f7.js +0 -1
  658. package/.next-prod/static/chunks/app/api/review/users/route-c1a2c7e62ce669f7.js +0 -1
  659. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-c1a2c7e62ce669f7.js +0 -1
  660. package/.next-prod/static/chunks/app/api/services/config/route-c1a2c7e62ce669f7.js +0 -1
  661. package/.next-prod/static/chunks/app/api/services/scripts/route-c1a2c7e62ce669f7.js +0 -1
  662. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-c1a2c7e62ce669f7.js +0 -1
  663. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-c1a2c7e62ce669f7.js +0 -1
  664. package/.next-prod/static/chunks/app/api/session-by-path/route-c1a2c7e62ce669f7.js +0 -1
  665. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-c1a2c7e62ce669f7.js +0 -1
  666. package/.next-prod/static/chunks/app/api/sessions/projects/route-c1a2c7e62ce669f7.js +0 -1
  667. package/.next-prod/static/chunks/app/api/sessions/route-c1a2c7e62ce669f7.js +0 -1
  668. package/.next-prod/static/chunks/app/api/settings/route-c1a2c7e62ce669f7.js +0 -1
  669. package/.next-prod/static/chunks/app/api/shutdown/route-c1a2c7e62ce669f7.js +0 -1
  670. package/.next-prod/static/chunks/app/api/skills/[id]/route-c1a2c7e62ce669f7.js +0 -1
  671. package/.next-prod/static/chunks/app/api/skills/content/route-c1a2c7e62ce669f7.js +0 -1
  672. package/.next-prod/static/chunks/app/api/skills/route-c1a2c7e62ce669f7.js +0 -1
  673. package/.next-prod/static/chunks/app/api/snapshots/diff/route-c1a2c7e62ce669f7.js +0 -1
  674. package/.next-prod/static/chunks/app/api/snapshots/route-c1a2c7e62ce669f7.js +0 -1
  675. package/.next-prod/static/chunks/app/api/terminal/aliases/route-c1a2c7e62ce669f7.js +0 -1
  676. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-c1a2c7e62ce669f7.js +0 -1
  677. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-c1a2c7e62ce669f7.js +0 -1
  678. package/.next-prod/static/chunks/app/api/terminal/env/route-c1a2c7e62ce669f7.js +0 -1
  679. package/.next-prod/static/chunks/app/api/terminal/history/route-c1a2c7e62ce669f7.js +0 -1
  680. package/.next-prod/static/chunks/app/api/update/route-c1a2c7e62ce669f7.js +0 -1
  681. package/.next-prod/static/chunks/app/api/update-state/route-c1a2c7e62ce669f7.js +0 -1
  682. package/.next-prod/static/chunks/app/api/version/route-c1a2c7e62ce669f7.js +0 -1
  683. package/.next-prod/static/chunks/app/apps/[...path]/route-c1a2c7e62ce669f7.js +0 -1
  684. package/.next-prod/static/chunks/app/m/page-25cd9633a00ed40d.js +0 -1
  685. package/.next-prod/static/chunks/app/manifest.webmanifest/route-c1a2c7e62ce669f7.js +0 -1
  686. package/.next-prod/static/chunks/app/page-8b3591aba80eac74.js +0 -1
  687. package/.next-prod/static/chunks/app/project/page-8b3591aba80eac74.js +0 -1
  688. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-c1a2c7e62ce669f7.js +0 -1
  689. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-c1a2c7e62ce669f7.js +0 -1
  690. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-c1a2c7e62ce669f7.js +0 -1
  691. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-c1a2c7e62ce669f7.js +0 -1
  692. package/.next-prod/static/css/50c1581bbbec6990.css +0 -1
  693. package/.next-prod/static/kwmbFJqrsOBSPJpMWySD2/_buildManifest.js +0 -1
  694. package/scripts/claudeBinary.mjs +0 -38
  695. /package/.next-prod/static/{kwmbFJqrsOBSPJpMWySD2 → U8R610UNAk7MWsuSmrm28}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- [{"name":"run-webpack","duration":15159124,"timestamp":161806964,"id":14,"parentId":1,"tags":{},"startTime":1787048699681,"traceId":"3fc81d0f682b1c36"},{"name":"run-typescript","duration":4968078,"timestamp":176969667,"id":1483,"parentId":1,"tags":{},"startTime":1787048714844,"traceId":"3fc81d0f682b1c36"},{"name":"static-check","duration":1326382,"timestamp":181976902,"id":1486,"parentId":1,"tags":{},"startTime":1787048719851,"traceId":"3fc81d0f682b1c36"},{"name":"static-generation","duration":5629403,"timestamp":183444802,"id":1800,"parentId":1,"tags":{},"startTime":1787048721319,"traceId":"3fc81d0f682b1c36"},{"name":"collect-build-traces","duration":24011142,"timestamp":183303913,"id":1797,"parentId":1,"tags":{},"startTime":1787048721178,"traceId":"3fc81d0f682b1c36"},{"name":"telemetry-flush","duration":57,"timestamp":207318876,"id":1809,"parentId":1,"tags":{},"startTime":1787048745193,"traceId":"3fc81d0f682b1c36"},{"name":"next-build","duration":45692850,"timestamp":161626096,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1787048699500,"traceId":"3fc81d0f682b1c36"}]
1
+ [{"name":"run-webpack","duration":14966964,"timestamp":220356917,"id":14,"parentId":1,"tags":{},"startTime":1787715528803,"traceId":"40dc223f76e85a3d"},{"name":"run-typescript","duration":4600148,"timestamp":235328242,"id":1489,"parentId":1,"tags":{},"startTime":1787715543775,"traceId":"40dc223f76e85a3d"},{"name":"static-check","duration":1274501,"timestamp":239959041,"id":1492,"parentId":1,"tags":{},"startTime":1787715548406,"traceId":"40dc223f76e85a3d"},{"name":"static-generation","duration":5191483,"timestamp":241348262,"id":1808,"parentId":1,"tags":{},"startTime":1787715549795,"traceId":"40dc223f76e85a3d"},{"name":"collect-build-traces","duration":22703036,"timestamp":241237473,"id":1805,"parentId":1,"tags":{},"startTime":1787715549684,"traceId":"40dc223f76e85a3d"},{"name":"telemetry-flush","duration":58,"timestamp":263944117,"id":1817,"parentId":1,"tags":{},"startTime":1787715572391,"traceId":"40dc223f76e85a3d"},{"name":"next-build","duration":43854971,"timestamp":220089217,"id":1,"tags":{"buildMode":"default","version":"16.3.0","bundler":"webpack","has-custom-webpack-config":"true","use-build-worker":"false"},"startTime":1787715528536,"traceId":"40dc223f76e85a3d"}]
@@ -0,0 +1,353 @@
1
+ // File: /home/runner/work/cockpit/cockpit/src/app/api/snapshots/blob/route.ts
2
+ import * as entry from '../../../../../../src/app/api/snapshots/blob/route.js'
3
+ import type { NextRequest } from 'next/server.js'
4
+
5
+ import type { InstantConfigForTypeCheckInternal, Prefetch } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
+
7
+ type TEntry = typeof import('../../../../../../src/app/api/snapshots/blob/route.js')
8
+
9
+ type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
+ ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
11
+ : T
12
+
13
+ // Check that the entry is a valid entry
14
+ checkFields<Diff<{
15
+ GET?: Function
16
+ HEAD?: Function
17
+ OPTIONS?: Function
18
+ POST?: Function
19
+ PUT?: Function
20
+ DELETE?: Function
21
+ PATCH?: Function
22
+ config?: {}
23
+ generateStaticParams?: Function
24
+ instant?: InstantConfigForTypeCheckInternal
25
+ prefetch?: Prefetch
26
+ unstable_dynamicStaleTime?: number
27
+ revalidate?: RevalidateRange<TEntry> | false
28
+ dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
29
+ dynamicParams?: boolean
30
+ fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
31
+ /** @deprecated The `preferredRegion` config is deprecated. Remove this export. */
32
+ preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
33
+ runtime?: 'nodejs' | 'experimental-edge' | 'edge'
34
+ maxDuration?: number
35
+
36
+ }, TEntry, ''>>()
37
+
38
+ type RouteContext = { params: Promise<SegmentParams> }
39
+ // Check the prop type of the entry function
40
+ if ('GET' in entry) {
41
+ checkFields<
42
+ Diff<
43
+ ParamCheck<Request | NextRequest>,
44
+ {
45
+ __tag__: 'GET'
46
+ __param_position__: 'first'
47
+ __param_type__: FirstArg<MaybeField<TEntry, 'GET'>>
48
+ },
49
+ 'GET'
50
+ >
51
+ >()
52
+ checkFields<
53
+ Diff<
54
+ ParamCheck<RouteContext>,
55
+ {
56
+ __tag__: 'GET'
57
+ __param_position__: 'second'
58
+ __param_type__: SecondArg<MaybeField<TEntry, 'GET'>>
59
+ },
60
+ 'GET'
61
+ >
62
+ >()
63
+
64
+ checkFields<
65
+ Diff<
66
+ {
67
+ __tag__: 'GET',
68
+ __return_type__: Response | void | never | Promise<Response | void | never>
69
+ },
70
+ {
71
+ __tag__: 'GET',
72
+ __return_type__: ReturnType<MaybeField<TEntry, 'GET'>>
73
+ },
74
+ 'GET'
75
+ >
76
+ >()
77
+ }
78
+ // Check the prop type of the entry function
79
+ if ('HEAD' in entry) {
80
+ checkFields<
81
+ Diff<
82
+ ParamCheck<Request | NextRequest>,
83
+ {
84
+ __tag__: 'HEAD'
85
+ __param_position__: 'first'
86
+ __param_type__: FirstArg<MaybeField<TEntry, 'HEAD'>>
87
+ },
88
+ 'HEAD'
89
+ >
90
+ >()
91
+ checkFields<
92
+ Diff<
93
+ ParamCheck<RouteContext>,
94
+ {
95
+ __tag__: 'HEAD'
96
+ __param_position__: 'second'
97
+ __param_type__: SecondArg<MaybeField<TEntry, 'HEAD'>>
98
+ },
99
+ 'HEAD'
100
+ >
101
+ >()
102
+
103
+ checkFields<
104
+ Diff<
105
+ {
106
+ __tag__: 'HEAD',
107
+ __return_type__: Response | void | never | Promise<Response | void | never>
108
+ },
109
+ {
110
+ __tag__: 'HEAD',
111
+ __return_type__: ReturnType<MaybeField<TEntry, 'HEAD'>>
112
+ },
113
+ 'HEAD'
114
+ >
115
+ >()
116
+ }
117
+ // Check the prop type of the entry function
118
+ if ('OPTIONS' in entry) {
119
+ checkFields<
120
+ Diff<
121
+ ParamCheck<Request | NextRequest>,
122
+ {
123
+ __tag__: 'OPTIONS'
124
+ __param_position__: 'first'
125
+ __param_type__: FirstArg<MaybeField<TEntry, 'OPTIONS'>>
126
+ },
127
+ 'OPTIONS'
128
+ >
129
+ >()
130
+ checkFields<
131
+ Diff<
132
+ ParamCheck<RouteContext>,
133
+ {
134
+ __tag__: 'OPTIONS'
135
+ __param_position__: 'second'
136
+ __param_type__: SecondArg<MaybeField<TEntry, 'OPTIONS'>>
137
+ },
138
+ 'OPTIONS'
139
+ >
140
+ >()
141
+
142
+ checkFields<
143
+ Diff<
144
+ {
145
+ __tag__: 'OPTIONS',
146
+ __return_type__: Response | void | never | Promise<Response | void | never>
147
+ },
148
+ {
149
+ __tag__: 'OPTIONS',
150
+ __return_type__: ReturnType<MaybeField<TEntry, 'OPTIONS'>>
151
+ },
152
+ 'OPTIONS'
153
+ >
154
+ >()
155
+ }
156
+ // Check the prop type of the entry function
157
+ if ('POST' in entry) {
158
+ checkFields<
159
+ Diff<
160
+ ParamCheck<Request | NextRequest>,
161
+ {
162
+ __tag__: 'POST'
163
+ __param_position__: 'first'
164
+ __param_type__: FirstArg<MaybeField<TEntry, 'POST'>>
165
+ },
166
+ 'POST'
167
+ >
168
+ >()
169
+ checkFields<
170
+ Diff<
171
+ ParamCheck<RouteContext>,
172
+ {
173
+ __tag__: 'POST'
174
+ __param_position__: 'second'
175
+ __param_type__: SecondArg<MaybeField<TEntry, 'POST'>>
176
+ },
177
+ 'POST'
178
+ >
179
+ >()
180
+
181
+ checkFields<
182
+ Diff<
183
+ {
184
+ __tag__: 'POST',
185
+ __return_type__: Response | void | never | Promise<Response | void | never>
186
+ },
187
+ {
188
+ __tag__: 'POST',
189
+ __return_type__: ReturnType<MaybeField<TEntry, 'POST'>>
190
+ },
191
+ 'POST'
192
+ >
193
+ >()
194
+ }
195
+ // Check the prop type of the entry function
196
+ if ('PUT' in entry) {
197
+ checkFields<
198
+ Diff<
199
+ ParamCheck<Request | NextRequest>,
200
+ {
201
+ __tag__: 'PUT'
202
+ __param_position__: 'first'
203
+ __param_type__: FirstArg<MaybeField<TEntry, 'PUT'>>
204
+ },
205
+ 'PUT'
206
+ >
207
+ >()
208
+ checkFields<
209
+ Diff<
210
+ ParamCheck<RouteContext>,
211
+ {
212
+ __tag__: 'PUT'
213
+ __param_position__: 'second'
214
+ __param_type__: SecondArg<MaybeField<TEntry, 'PUT'>>
215
+ },
216
+ 'PUT'
217
+ >
218
+ >()
219
+
220
+ checkFields<
221
+ Diff<
222
+ {
223
+ __tag__: 'PUT',
224
+ __return_type__: Response | void | never | Promise<Response | void | never>
225
+ },
226
+ {
227
+ __tag__: 'PUT',
228
+ __return_type__: ReturnType<MaybeField<TEntry, 'PUT'>>
229
+ },
230
+ 'PUT'
231
+ >
232
+ >()
233
+ }
234
+ // Check the prop type of the entry function
235
+ if ('DELETE' in entry) {
236
+ checkFields<
237
+ Diff<
238
+ ParamCheck<Request | NextRequest>,
239
+ {
240
+ __tag__: 'DELETE'
241
+ __param_position__: 'first'
242
+ __param_type__: FirstArg<MaybeField<TEntry, 'DELETE'>>
243
+ },
244
+ 'DELETE'
245
+ >
246
+ >()
247
+ checkFields<
248
+ Diff<
249
+ ParamCheck<RouteContext>,
250
+ {
251
+ __tag__: 'DELETE'
252
+ __param_position__: 'second'
253
+ __param_type__: SecondArg<MaybeField<TEntry, 'DELETE'>>
254
+ },
255
+ 'DELETE'
256
+ >
257
+ >()
258
+
259
+ checkFields<
260
+ Diff<
261
+ {
262
+ __tag__: 'DELETE',
263
+ __return_type__: Response | void | never | Promise<Response | void | never>
264
+ },
265
+ {
266
+ __tag__: 'DELETE',
267
+ __return_type__: ReturnType<MaybeField<TEntry, 'DELETE'>>
268
+ },
269
+ 'DELETE'
270
+ >
271
+ >()
272
+ }
273
+ // Check the prop type of the entry function
274
+ if ('PATCH' in entry) {
275
+ checkFields<
276
+ Diff<
277
+ ParamCheck<Request | NextRequest>,
278
+ {
279
+ __tag__: 'PATCH'
280
+ __param_position__: 'first'
281
+ __param_type__: FirstArg<MaybeField<TEntry, 'PATCH'>>
282
+ },
283
+ 'PATCH'
284
+ >
285
+ >()
286
+ checkFields<
287
+ Diff<
288
+ ParamCheck<RouteContext>,
289
+ {
290
+ __tag__: 'PATCH'
291
+ __param_position__: 'second'
292
+ __param_type__: SecondArg<MaybeField<TEntry, 'PATCH'>>
293
+ },
294
+ 'PATCH'
295
+ >
296
+ >()
297
+
298
+ checkFields<
299
+ Diff<
300
+ {
301
+ __tag__: 'PATCH',
302
+ __return_type__: Response | void | never | Promise<Response | void | never>
303
+ },
304
+ {
305
+ __tag__: 'PATCH',
306
+ __return_type__: ReturnType<MaybeField<TEntry, 'PATCH'>>
307
+ },
308
+ 'PATCH'
309
+ >
310
+ >()
311
+ }
312
+
313
+ // Check the arguments and return type of the generateStaticParams function
314
+ if ('generateStaticParams' in entry) {
315
+ checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
316
+ checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
317
+ }
318
+
319
+ export interface PageProps {
320
+ params?: Promise<SegmentParams>
321
+ searchParams?: Promise<any>
322
+ }
323
+ export interface LayoutProps {
324
+ children?: React.ReactNode
325
+
326
+ params?: Promise<SegmentParams>
327
+ }
328
+
329
+ // =============
330
+ // Utility types
331
+ type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
332
+
333
+ // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
334
+ type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
335
+ type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
336
+
337
+ type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
338
+ type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
339
+ type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
340
+
341
+ type ParamCheck<T> = {
342
+ __tag__: string
343
+ __param_position__: string
344
+ __param_type__: T
345
+ }
346
+
347
+ function checkFields<_ extends { [k in keyof any]: never }>() {}
348
+
349
+ // https://github.com/sindresorhus/type-fest
350
+ type Numeric = number | bigint
351
+ type Zero = 0 | 0n
352
+ type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
353
+ type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/m" | "/project" | "/review/[id]"
5
- type AppRouteHandlerRoutes = "/api/agent/test" | "/api/bash" | "/api/chat" | "/api/chat/codex" | "/api/chat/deepseek" | "/api/chat/glm" | "/api/chat/kimi" | "/api/chat/ollama" | "/api/chat/stop" | "/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/deepseek/balance" | "/api/deepseek/credentials" | "/api/deepseek/models" | "/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/blob" | "/api/git/branch-diff" | "/api/git/branches" | "/api/git/commit-diff" | "/api/git/commits" | "/api/git/current-branch" | "/api/git/diff" | "/api/git/discard" | "/api/git/stage" | "/api/git/status" | "/api/git/unstage" | "/api/git/worktree" | "/api/glm/credentials" | "/api/glm/models" | "/api/glm/usage" | "/api/global-state" | "/api/health" | "/api/html-apps" | "/api/html-apps/[id]" | "/api/jupyter/load" | "/api/jupyter/save" | "/api/jupyter/shutdown" | "/api/kimi/credentials" | "/api/kimi/models" | "/api/kimi/usage" | "/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/config" | "/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/prompts/config" | "/api/push/public-key" | "/api/push/subscribe" | "/api/push/unsubscribe" | "/api/redis/command" | "/api/redis/connect" | "/api/redis/delete" | "/api/redis/disconnect" | "/api/redis/get" | "/api/redis/keys" | "/api/redis/set" | "/api/restart" | "/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/shutdown" | "/api/skills" | "/api/skills/[id]" | "/api/skills/content" | "/api/snapshots" | "/api/snapshots/diff" | "/api/terminal/aliases" | "/api/terminal/autocomplete" | "/api/terminal/bubble-order" | "/api/terminal/env" | "/api/terminal/history" | "/api/update" | "/api/update-state" | "/api/version" | "/apps/[...path]"
5
+ type AppRouteHandlerRoutes = "/api/agent/test" | "/api/bash" | "/api/chat" | "/api/chat/codex" | "/api/chat/deepseek" | "/api/chat/glm" | "/api/chat/kimi" | "/api/chat/ollama" | "/api/chat/stop" | "/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/deepseek/balance" | "/api/deepseek/credentials" | "/api/deepseek/models" | "/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/blob" | "/api/git/branch-diff" | "/api/git/branches" | "/api/git/commit-diff" | "/api/git/commits" | "/api/git/current-branch" | "/api/git/diff" | "/api/git/discard" | "/api/git/stage" | "/api/git/status" | "/api/git/unstage" | "/api/git/worktree" | "/api/glm/credentials" | "/api/glm/models" | "/api/glm/usage" | "/api/global-state" | "/api/health" | "/api/html-apps" | "/api/html-apps/[id]" | "/api/jupyter/load" | "/api/jupyter/save" | "/api/jupyter/shutdown" | "/api/kimi/credentials" | "/api/kimi/models" | "/api/kimi/usage" | "/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/config" | "/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/prompts/config" | "/api/push/public-key" | "/api/push/subscribe" | "/api/push/unsubscribe" | "/api/redis/command" | "/api/redis/connect" | "/api/redis/delete" | "/api/redis/disconnect" | "/api/redis/get" | "/api/redis/keys" | "/api/redis/set" | "/api/restart" | "/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/shutdown" | "/api/skills" | "/api/skills/[id]" | "/api/skills/content" | "/api/snapshots" | "/api/snapshots/blob" | "/api/snapshots/diff" | "/api/terminal/aliases" | "/api/terminal/autocomplete" | "/api/terminal/bubble-order" | "/api/terminal/env" | "/api/terminal/history" | "/api/update" | "/api/update-state" | "/api/version" | "/apps/[...path]"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -148,6 +148,7 @@ interface ParamMap {
148
148
  "/api/skills/[id]": { "id": string; }
149
149
  "/api/skills/content": {}
150
150
  "/api/snapshots": {}
151
+ "/api/snapshots/blob": {}
151
152
  "/api/snapshots/diff": {}
152
153
  "/api/terminal/aliases": {}
153
154
  "/api/terminal/autocomplete": {}
@@ -1298,6 +1298,15 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
1298
1298
  type __Unused = __Check
1299
1299
  }
1300
1300
 
1301
+ // Validate ../../src/app/api/snapshots/blob/route.ts
1302
+ {
1303
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/snapshots/blob">> = Specific
1304
+ const handler = {} as typeof import("../../src/app/api/snapshots/blob/route.js")
1305
+ type __Check = __IsExpected<typeof handler>
1306
+ // @ts-ignore
1307
+ type __Unused = __Check
1308
+ }
1309
+
1301
1310
  // Validate ../../src/app/api/snapshots/diff/route.ts
1302
1311
  {
1303
1312
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/snapshots/diff">> = Specific
@@ -1,5 +1,5 @@
1
1
  /**
2
- * file-viewer — preview a local file (markdown / json / image / pdf).
2
+ * file-viewer — preview a local file (markdown / json / csv / image / pdf).
3
3
  *
4
4
  * Built-in, but written against the PUBLIC contract only, so it doubles as the
5
5
  * reference app (see ~/.cockpit/skills/html/SKILL.md):
@@ -299,17 +299,91 @@ function JsonView({ file }) {
299
299
  );
300
300
  }
301
301
 
302
- function jsonToMarkdown(text) {
303
- let body = text;
304
- try { body = JSON.stringify(JSON.parse(text), null, 2); } catch { /* show raw */ }
305
- // The fence must be longer than any backtick run inside the content.
302
+ /** Wrap text in a markdown fence longer than any backtick run inside it. */
303
+ function toFence(body, lang) {
306
304
  let fence = '```';
307
305
  const runs = body.match(/`+/g);
308
306
  if (runs) {
309
307
  const longest = Math.max.apply(null, runs.map((s) => s.length));
310
308
  while (fence.length <= longest) fence += '`';
311
309
  }
312
- return fence + 'json\n' + body + '\n' + fence;
310
+ return fence + lang + '\n' + body + '\n' + fence;
311
+ }
312
+
313
+ function jsonToMarkdown(text) {
314
+ let body = text;
315
+ try { body = JSON.stringify(JSON.parse(text), null, 2); } catch { /* show raw */ }
316
+ return toFence(body, 'json');
317
+ }
318
+
319
+ /**
320
+ * CSV / TSV. Default is the table widget; a button swaps to the raw delimited
321
+ * source rendered as a markdown fence — same two-widget dance (and the same
322
+ * `loadedMode` reasoning) as JsonView.
323
+ *
324
+ * The button placement differs from JsonView on purpose: JsonView's floating
325
+ * .json-toggle would land on top of the table's sticky header, and it sits 48px
326
+ * in from the edge, so the button would visibly jump on every mode switch. Here
327
+ * table mode hands the button to the widget's filter toolbar and raw mode draws
328
+ * a bar with the same metrics, leaving it in one place.
329
+ */
330
+ function CsvView({ file }) {
331
+ const ref = useRef(null);
332
+ const t = useLang();
333
+ const lang = pickLang();
334
+ const [mode, setMode] = useState('table');
335
+ const [loadedMode, setLoadedMode] = useState(null);
336
+ const [libError, setLibError] = useState(null);
337
+ const { loading, data, error } = useAsync(() => readText(file), [file]);
338
+
339
+ useEffect(() => {
340
+ const lib = mode === 'table'
341
+ ? loadLib('/html-lib/csv-viewer.js', '/html-lib/csv-viewer.css')
342
+ : loadLib('/html-lib/markdown.js', '/html-lib/markdown.css');
343
+ let alive = true;
344
+ setLibError(null);
345
+ lib
346
+ .then(() => { if (alive) setLoadedMode(mode); })
347
+ .catch((e) => { if (alive) setLibError(e.message); });
348
+ return () => { alive = false; };
349
+ }, [mode]);
350
+
351
+ useWidget(
352
+ ref, loadedMode === mode && !loading && data != null,
353
+ (el) => {
354
+ if (mode === 'table') {
355
+ window.CockpitCsv.render(el, data, {
356
+ filePath: file,
357
+ actionLabel: t('raw'),
358
+ onAction: () => setMode('raw'),
359
+ });
360
+ } else {
361
+ window.CockpitMarkdown.render(el, toFence(data, ''), { toc: false });
362
+ }
363
+ },
364
+ (el) => {
365
+ if (mode === 'table') window.CockpitCsv.unmount(el);
366
+ else window.CockpitMarkdown.unmount(el);
367
+ },
368
+ [loadedMode, mode, loading, data, file, lang],
369
+ setLibError
370
+ );
371
+
372
+ if (loading) return <Status kind="loading">loading…</Status>;
373
+ if (error) return <Status kind="error">{'file-viewer: ' + file + '\n\n' + error}</Status>;
374
+ if (libError) return <Status kind="error">{'file-viewer: ' + libError}</Status>;
375
+ // Table mode: the toggle is handed to the widget (right end of its filter
376
+ // toolbar). Raw mode: the page draws a bar with the same metrics so the button
377
+ // stays in exactly the same spot across the switch.
378
+ if (mode === 'table') return <div className="csv-view" ref={ref} />;
379
+ return (
380
+ <div className="viewer-stack">
381
+ <div className="viewer-bar">
382
+ <button type="button" onClick={() => setMode('table')}>{t('table')}</button>
383
+ </div>
384
+ <div className="md-view" ref={ref} />
385
+ </div>
386
+ );
313
387
  }
314
388
 
315
389
  function ImageView({ file }) {
@@ -358,8 +432,8 @@ function PdfView({ file }) {
358
432
  // App-local dictionary. The app only PERCEIVES the language, it does not import
359
433
  // the host's i18n — same as any user app would.
360
434
  const DICT = {
361
- zh: { readable: '可读', raw: '原文' },
362
- en: { readable: 'Readable', raw: 'Raw' },
435
+ zh: { readable: '可读', raw: '原文', table: '表格' },
436
+ en: { readable: 'Readable', raw: 'Raw', table: 'Table' },
363
437
  };
364
438
 
365
439
  /**
@@ -404,6 +478,7 @@ function App() {
404
478
  if (ext === 'md') return <MarkdownView file={file} />;
405
479
  if (ext === 'json') return <JsonView file={file} />;
406
480
  if (ext === 'pdf') return <PdfView file={file} />;
481
+ if (ext === 'csv' || ext === 'tsv') return <CsvView file={file} />;
407
482
  if (IMAGE_EXTS.indexOf(ext) >= 0) return <ImageView file={file} />;
408
483
  return <Status kind="error">{'file-viewer: unsupported file type .' + ext + '\n' + file}</Status>;
409
484
  }
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>File Viewer</title>
7
7
  <meta name="cockpit-name" content="file-viewer">
8
- <meta name="description" content="Preview local files: markdown (with TOC), json, images, pdf">
8
+ <meta name="description" content="Preview local files: markdown (with TOC), json, csv, images, pdf">
9
9
  <meta name="cockpit-icon" content="📄">
10
10
  <!-- Opt into the SDK's theme handling: follows the Cockpit host, falls back to
11
11
  the OS outside it, and mounts the top-right light/dark toggle. -->
@@ -55,6 +55,28 @@
55
55
  .img-view.natural img { max-width: none; max-height: none; cursor: zoom-out; }
56
56
  /* ---- PDF view: CockpitPdf widget, full viewport ---- */
57
57
  .pdf-view { position: fixed; inset: 0; }
58
+ /* ---- CSV view: CockpitCsv widget owns its own scroll container ---- */
59
+ .csv-view { position: fixed; inset: 0; }
60
+ /* ---- Bar + content stack (CSV raw mode) ----
61
+ In table mode the toggle lives at the right end of the widget's own filter
62
+ toolbar. Raw mode has no widget toolbar, so the page draws a bar with the
63
+ SAME metrics (6px/8px padding, 12px button, bottom border) and the button
64
+ flush right — the button then does not MOVE between the two modes, which a
65
+ fixed floating one (.json-toggle, 48px in from the edge) could not do.
66
+ Flex column instead of a top offset: no magic number to keep in sync. */
67
+ .viewer-stack { position: fixed; inset: 0; display: flex; flex-direction: column; }
68
+ .viewer-bar {
69
+ flex: none; display: flex; align-items: center; justify-content: flex-end;
70
+ gap: 8px; padding: 6px 8px; border-bottom: 1px solid var(--border);
71
+ }
72
+ .viewer-bar button {
73
+ font-family: var(--font-sans); font-size: 12px; line-height: 16px;
74
+ padding: 4px 8px; border: 1px solid var(--border); border-radius: 4px;
75
+ background: transparent; color: var(--muted-foreground); cursor: pointer;
76
+ }
77
+ .viewer-bar button:hover { color: var(--foreground); background: var(--tint-hover); }
78
+ /* The widget inside a stack fills the leftover height instead of the viewport. */
79
+ .viewer-stack .md-view { position: relative; inset: auto; flex: 1; min-height: 0; }
58
80
  </style>
59
81
  </head>
60
82
  <body>
@@ -16,7 +16,7 @@ import { dirname, join, resolve } from 'path';
16
16
  import { fileURLToPath } from 'url';
17
17
  import { SERVER_JSON_PATH, LOG_DIR, SERVER_LOG_PATH, COCKPIT_HOME_DIR } from './cockpitHome.mjs';
18
18
  import { rotateIfLarge } from './rotateLog.mjs';
19
- import { hasClaudeBinary } from '../scripts/claudeBinary.mjs';
19
+ import { missingAgentBinaries } from '../scripts/agentBinaries.mjs';
20
20
 
21
21
  const __dirname = dirname(fileURLToPath(import.meta.url));
22
22
  const PROJECT_ROOT = resolve(__dirname, '..');
@@ -358,12 +358,13 @@ async function updateOffline() {
358
358
  const installArgs = ['install', '-g', `${PKG}@latest`, '--include=optional'];
359
359
  let status = runNpm(installArgs);
360
360
 
361
- // An in-place `npm i -g` can drop the SDK's platform-specific native binary
362
- // (an optional dependency) when the SDK version bumps — see
363
- // scripts/claudeBinary.mjs. A clean uninstall + reinstall reliably refetches
361
+ // An in-place `npm i -g` can drop an agent's platform-specific native binary
362
+ // (an optional dependency) when its version bumps — see
363
+ // scripts/agentBinaries.mjs. A clean uninstall + reinstall reliably refetches
364
364
  // it, so chat is never left silently broken.
365
- if (status === 0 && !hasClaudeBinary()) {
366
- console.log('Native Claude binary missing after update — reinstalling to repair...');
365
+ let missing = status === 0 ? missingAgentBinaries() : [];
366
+ if (missing.length) {
367
+ console.log(`Native ${missing.join(' and ')} binary missing after update — reinstalling to repair...`);
367
368
  runNpm(['uninstall', '-g', PKG]);
368
369
  status = runNpm(installArgs);
369
370
  }
@@ -374,8 +375,9 @@ async function updateOffline() {
374
375
  version = JSON.parse(readFileSync(resolve(PROJECT_ROOT, 'package.json'), 'utf8')).version;
375
376
  } catch { /* report what we can */ }
376
377
  console.log(`\nUpdated to v${version}`);
377
- if (!hasClaudeBinary()) {
378
- console.error('\nWarning: the native Claude CLI binary is still missing; chat will not work.');
378
+ missing = missingAgentBinaries();
379
+ if (missing.length) {
380
+ console.error(`\nWarning: the native ${missing.join(' and ')} CLI binary is still missing; ${missing.length > 1 ? 'those engines' : 'that engine'} will not work.`);
379
381
  console.error(`Fix manually: npm uninstall -g ${PKG} && npm install -g ${PKG}`);
380
382
  }
381
383
  }
package/bin/cock.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  import { dirname, resolve } from 'path';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { spawnSync } from 'child_process';
6
- import { hasClaudeBinary } from '../scripts/claudeBinary.mjs';
6
+ import { missingAgentBinaries } from '../scripts/agentBinaries.mjs';
7
7
 
8
8
  const __dirname = dirname(fileURLToPath(import.meta.url));
9
9
  const PROJECT_ROOT = resolve(__dirname, '..');
@@ -219,11 +219,13 @@ if (!isDev && !existsSync(resolve(PROJECT_ROOT, '.next-prod', 'BUILD_ID'))) {
219
219
  process.exit(1);
220
220
  }
221
221
 
222
- // Warn (don't block) if the SDK's native binary is missing — every panel but
223
- // the Claude chat still works, but chat would otherwise fail with a cryptic
224
- // runtime error only once the user sends a message. See scripts/claudeBinary.mjs.
225
- if (!hasClaudeBinary()) {
226
- console.error('Warning: the native Claude CLI binary is missing; chat may not work.');
222
+ // Warn (don't block) if an agent's native binary is missing — every other panel
223
+ // still works, but that engine would otherwise fail only once the user sends a
224
+ // message, and Codex would not even fail loudly: it silently falls back to an
225
+ // unpinned `codex` on PATH. See scripts/agentBinaries.mjs.
226
+ const missingBinaries = missingAgentBinaries();
227
+ if (missingBinaries.length) {
228
+ console.error(`Warning: the native ${missingBinaries.join(' and ')} CLI binary is missing; ${missingBinaries.length > 1 ? 'those engines' : 'that engine'} may not work.`);
227
229
  console.error('Fix: npm uninstall -g @surething/cockpit && npm install -g @surething/cockpit\n');
228
230
  }
229
231