@surething/cockpit 1.0.244 → 1.0.246

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 (710) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +7 -5
  3. package/.next-prod/build-manifest.json +3 -3
  4. package/.next-prod/prerender-manifest.json +3 -3
  5. package/.next-prod/react-loadable-manifest.json +2 -2
  6. package/.next-prod/routes-manifest.json +18 -4
  7. package/.next-prod/server/app/_global-error/page.js +3 -3
  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/_global-error.segment.rsc +1 -1
  15. package/.next-prod/server/app/_global-error.segments/_head.segment.rsc +1 -1
  16. package/.next-prod/server/app/_global-error.segments/_index.segment.rsc +1 -1
  17. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  18. package/.next-prod/server/app/_not-found/page.js +2 -2
  19. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  20. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  21. package/.next-prod/server/app/_not-found.html +2 -2
  22. package/.next-prod/server/app/_not-found.rsc +4 -4
  23. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +4 -4
  24. package/.next-prod/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  26. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/.next-prod/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  29. package/.next-prod/server/app/api/agent/test/route.js +1 -1
  30. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  31. package/.next-prod/server/app/api/bash/route.js +1 -1
  32. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  33. package/.next-prod/server/app/api/chat/codex/route.js +2 -2
  34. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  35. package/.next-prod/server/app/api/chat/deepseek/route.js +1 -1
  36. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  37. package/.next-prod/server/app/api/chat/kimi/route.js +2 -2
  38. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  39. package/.next-prod/server/app/api/chat/ollama/route.js +1 -1
  40. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  41. package/.next-prod/server/app/api/chat/pty-input/route.js +1 -1
  42. package/.next-prod/server/app/api/chat/pty-input/route.js.nft.json +1 -1
  43. package/.next-prod/server/app/api/chat/route.js +1 -1
  44. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  45. package/.next-prod/server/app/api/chat/stop/route.js +1 -1
  46. package/.next-prod/server/app/api/chat/stop/route.js.nft.json +1 -1
  47. package/.next-prod/server/app/api/claude-stats/route.js +1 -1
  48. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  49. package/.next-prod/server/app/api/commands/route.js +1 -1
  50. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  51. package/.next-prod/server/app/api/comments/route.js +1 -1
  52. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  53. package/.next-prod/server/app/api/db/columns/route.js +1 -1
  54. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  55. package/.next-prod/server/app/api/db/connect/route.js +1 -1
  56. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  57. package/.next-prod/server/app/api/db/disconnect/route.js +1 -1
  58. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  59. package/.next-prod/server/app/api/db/export/route.js +1 -1
  60. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  61. package/.next-prod/server/app/api/db/query/route.js +1 -1
  62. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  63. package/.next-prod/server/app/api/db/schemas/route.js +1 -1
  64. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  65. package/.next-prod/server/app/api/deepseek/credentials/route.js +1 -1
  66. package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
  67. package/.next-prod/server/app/api/dev/spans/route.js +1 -1
  68. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  69. package/.next-prod/server/app/api/extension/version/route.js +1 -1
  70. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  71. package/.next-prod/server/app/api/file/route.js +1 -1
  72. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  73. package/.next-prod/server/app/api/files/blame/route.js +1 -1
  74. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  75. package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
  76. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  77. package/.next-prod/server/app/api/files/copy/route.js +1 -1
  78. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  79. package/.next-prod/server/app/api/files/delete/route.js +1 -1
  80. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  81. package/.next-prod/server/app/api/files/expanded/route.js +1 -1
  82. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  83. package/.next-prod/server/app/api/files/index/route.js +1 -1
  84. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  85. package/.next-prod/server/app/api/files/init/route.js +1 -1
  86. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  87. package/.next-prod/server/app/api/files/paste/route.js +1 -1
  88. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  89. package/.next-prod/server/app/api/files/read/route.js +1 -1
  90. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  91. package/.next-prod/server/app/api/files/readdir/route.js +1 -1
  92. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  93. package/.next-prod/server/app/api/files/recent/route.js +1 -1
  94. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  95. package/.next-prod/server/app/api/files/save/route.js +1 -1
  96. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  97. package/.next-prod/server/app/api/files/search/route.js +1 -1
  98. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  99. package/.next-prod/server/app/api/files/stat/route.js +1 -1
  100. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  101. package/.next-prod/server/app/api/files/text/route.js +1 -1
  102. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  103. package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
  104. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  105. package/.next-prod/server/app/api/git/branches/route.js +1 -1
  106. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  107. package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
  108. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  109. package/.next-prod/server/app/api/git/commits/route.js +1 -1
  110. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  111. package/.next-prod/server/app/api/git/current-branch/route.js +1 -1
  112. package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
  113. package/.next-prod/server/app/api/git/diff/route.js +1 -1
  114. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  115. package/.next-prod/server/app/api/git/discard/route.js +1 -1
  116. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  117. package/.next-prod/server/app/api/git/stage/route.js +1 -1
  118. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  119. package/.next-prod/server/app/api/git/status/route.js +1 -1
  120. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  121. package/.next-prod/server/app/api/git/unstage/route.js +1 -1
  122. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  123. package/.next-prod/server/app/api/git/worktree/route.js +1 -1
  124. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  125. package/.next-prod/server/app/api/global-state/route.js +2 -2
  126. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  127. package/.next-prod/server/app/api/health/route.js +1 -1
  128. package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
  129. package/.next-prod/server/app/api/html-apps/[id]/route.js +1 -0
  130. package/.next-prod/server/app/api/{preview/[...path] → html-apps/[id]}/route.js.nft.json +1 -1
  131. package/.next-prod/server/app/api/html-apps/[id]/route_client-reference-manifest.js +1 -0
  132. package/.next-prod/server/app/api/html-apps/route.js +1 -0
  133. package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -0
  134. package/.next-prod/server/app/api/html-apps/route_client-reference-manifest.js +1 -0
  135. package/.next-prod/server/app/api/jupyter/load/route.js +1 -1
  136. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  137. package/.next-prod/server/app/api/jupyter/save/route.js +1 -1
  138. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  139. package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
  140. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  141. package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
  142. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  143. package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
  144. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  145. package/.next-prod/server/app/api/lsp/references/route.js +1 -1
  146. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  147. package/.next-prod/server/app/api/lsp/status/route.js +1 -1
  148. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  149. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
  150. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  151. package/.next-prod/server/app/api/mysql/columns/route.js +1 -1
  152. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  153. package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
  154. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  155. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
  156. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  157. package/.next-prod/server/app/api/mysql/export/route.js +1 -1
  158. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  159. package/.next-prod/server/app/api/mysql/query/route.js +1 -1
  160. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  161. package/.next-prod/server/app/api/mysql/schemas/route.js +2 -2
  162. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  163. package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
  164. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  165. package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
  166. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  167. package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
  168. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  169. package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
  170. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  171. package/.next-prod/server/app/api/note/route.js +1 -1
  172. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  173. package/.next-prod/server/app/api/ollama/config/route.js +1 -1
  174. package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
  175. package/.next-prod/server/app/api/ollama/models/route.js +1 -1
  176. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  177. package/.next-prod/server/app/api/ollama/start/route.js +1 -1
  178. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  179. package/.next-prod/server/app/api/open-cursor/route.js +1 -1
  180. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  181. package/.next-prod/server/app/api/open-vscode/route.js +1 -1
  182. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  183. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  184. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  185. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
  186. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  187. package/.next-prod/server/app/api/project-settings/route.js +1 -1
  188. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  189. package/.next-prod/server/app/api/project-state/route.js +2 -2
  190. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  191. package/.next-prod/server/app/api/projectGraph/affected/route.js +1 -1
  192. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  193. package/.next-prod/server/app/api/projectGraph/callees/route.js +1 -1
  194. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  195. package/.next-prod/server/app/api/projectGraph/callers/route.js +1 -1
  196. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  197. package/.next-prod/server/app/api/projectGraph/coedit/route.js +1 -1
  198. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  199. package/.next-prod/server/app/api/projectGraph/context/route.js +1 -1
  200. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  201. package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
  202. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  203. package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
  204. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  205. package/.next-prod/server/app/api/projectGraph/impact/route.js +1 -1
  206. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  207. package/.next-prod/server/app/api/projectGraph/related/route.js +1 -1
  208. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  209. package/.next-prod/server/app/api/projectGraph/risk/route.js +1 -1
  210. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  211. package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
  212. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  213. package/.next-prod/server/app/api/projects/route.js +1 -1
  214. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  215. package/.next-prod/server/app/api/push/public-key/route.js +1 -1
  216. package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
  217. package/.next-prod/server/app/api/push/subscribe/route.js +1 -1
  218. package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
  219. package/.next-prod/server/app/api/push/unsubscribe/route.js +1 -1
  220. package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
  221. package/.next-prod/server/app/api/redis/command/route.js +1 -1
  222. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  223. package/.next-prod/server/app/api/redis/connect/route.js +1 -1
  224. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  225. package/.next-prod/server/app/api/redis/delete/route.js +1 -1
  226. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  227. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
  228. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  229. package/.next-prod/server/app/api/redis/get/route.js +1 -1
  230. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  231. package/.next-prod/server/app/api/redis/keys/route.js +1 -1
  232. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  233. package/.next-prod/server/app/api/redis/set/route.js +1 -1
  234. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  235. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  236. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  237. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  238. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  239. package/.next-prod/server/app/api/review/[id]/route.js +1 -1
  240. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  241. package/.next-prod/server/app/api/review/identify/route.js +1 -1
  242. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  243. package/.next-prod/server/app/api/review/order/route.js +1 -1
  244. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  245. package/.next-prod/server/app/api/review/route.js +1 -1
  246. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  247. package/.next-prod/server/app/api/review/share-info/route.js +1 -1
  248. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  249. package/.next-prod/server/app/api/review/users/route.js +1 -1
  250. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  251. package/.next-prod/server/app/api/scheduled-tasks/route.js +2 -2
  252. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  253. package/.next-prod/server/app/api/services/config/route.js +1 -1
  254. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  255. package/.next-prod/server/app/api/services/scripts/route.js +1 -1
  256. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  257. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  258. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  259. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
  260. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  261. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  262. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  263. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
  264. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  265. package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
  266. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  267. package/.next-prod/server/app/api/sessions/route.js +1 -1
  268. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  269. package/.next-prod/server/app/api/settings/route.js +1 -1
  270. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  271. package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
  272. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  273. package/.next-prod/server/app/api/skills/content/route.js +1 -1
  274. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  275. package/.next-prod/server/app/api/skills/route.js +1 -1
  276. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  277. package/.next-prod/server/app/api/snapshots/diff/route.js +1 -1
  278. package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
  279. package/.next-prod/server/app/api/snapshots/route.js +1 -1
  280. package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
  281. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
  282. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  283. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
  284. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  285. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
  286. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  287. package/.next-prod/server/app/api/terminal/env/route.js +1 -1
  288. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  289. package/.next-prod/server/app/api/terminal/history/route.js +1 -1
  290. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  291. package/.next-prod/server/app/api/version/route.js +1 -1
  292. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  293. package/.next-prod/server/app/apps/[...path]/route.js +1 -0
  294. package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -0
  295. package/.next-prod/server/app/apps/[...path]/route_client-reference-manifest.js +1 -0
  296. package/.next-prod/server/app/favicon.ico/route.js +1 -1
  297. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  298. package/.next-prod/server/app/favicon.ico.body +0 -0
  299. package/.next-prod/server/app/m/page.js +2 -2
  300. package/.next-prod/server/app/m/page.js.nft.json +1 -1
  301. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  302. package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
  303. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  304. package/.next-prod/server/app/page.js +2 -2
  305. package/.next-prod/server/app/page.js.nft.json +1 -1
  306. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  307. package/.next-prod/server/app/project/page.js +2 -2
  308. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  309. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  310. package/.next-prod/server/app/review/[id]/page.js +2 -2
  311. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  312. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  313. package/.next-prod/server/app-paths-manifest.json +7 -5
  314. package/.next-prod/server/chunks/304.js +1 -1
  315. package/.next-prod/server/chunks/4848.js +291 -3
  316. package/.next-prod/server/chunks/4916.js +368 -0
  317. package/.next-prod/server/chunks/{5674.js → 6023.js} +5 -5
  318. package/.next-prod/server/chunks/6038.js +1 -1
  319. package/.next-prod/server/chunks/9658.js +379 -12
  320. package/.next-prod/server/middleware-build-manifest.js +1 -1
  321. package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
  322. package/.next-prod/server/pages/404.html +2 -2
  323. package/.next-prod/server/pages/500.html +1 -1
  324. package/.next-prod/server/server-reference-manifest.json +1 -1
  325. package/.next-prod/static/D0hP0hbht20IrPe7xUl96/_buildManifest.js +1 -0
  326. package/.next-prod/static/chunks/{9779.7a4ff1aee2a02f63.js → 2160.e38d781fd5c4cde0.js} +1 -1
  327. package/.next-prod/static/chunks/{1973-5ba02ae354968836.js → 4304-408f5bddd7583676.js} +3 -3
  328. package/.next-prod/static/chunks/{7849-7c580c908fe21e9d.js → 4473-6877df387a4a05a5.js} +2 -2
  329. package/.next-prod/static/chunks/{4523.aaab4b1bd81167d4.js → 4523.3f277a24fbcfde6d.js} +1 -1
  330. package/.next-prod/static/chunks/6784-59c6418d36cf5a13.js +0 -0
  331. package/.next-prod/static/chunks/8010-75928e3e1e85c88e.js +25 -0
  332. package/.next-prod/static/chunks/9530-9a02795e0607577c.js +382 -0
  333. package/.next-prod/static/chunks/app/_global-error/page-51252a3b116b8135.js +1 -0
  334. package/.next-prod/static/chunks/app/api/agent/test/route-51252a3b116b8135.js +1 -0
  335. package/.next-prod/static/chunks/app/api/bash/route-51252a3b116b8135.js +1 -0
  336. package/.next-prod/static/chunks/app/api/chat/codex/route-51252a3b116b8135.js +1 -0
  337. package/.next-prod/static/chunks/app/api/chat/deepseek/route-51252a3b116b8135.js +1 -0
  338. package/.next-prod/static/chunks/app/api/chat/kimi/route-51252a3b116b8135.js +1 -0
  339. package/.next-prod/static/chunks/app/api/chat/ollama/route-51252a3b116b8135.js +1 -0
  340. package/.next-prod/static/chunks/app/api/chat/pty-input/route-51252a3b116b8135.js +1 -0
  341. package/.next-prod/static/chunks/app/api/chat/route-51252a3b116b8135.js +1 -0
  342. package/.next-prod/static/chunks/app/api/chat/stop/route-51252a3b116b8135.js +1 -0
  343. package/.next-prod/static/chunks/app/api/claude-stats/route-51252a3b116b8135.js +1 -0
  344. package/.next-prod/static/chunks/app/api/commands/route-51252a3b116b8135.js +1 -0
  345. package/.next-prod/static/chunks/app/api/comments/route-51252a3b116b8135.js +1 -0
  346. package/.next-prod/static/chunks/app/api/db/columns/route-51252a3b116b8135.js +1 -0
  347. package/.next-prod/static/chunks/app/api/db/connect/route-51252a3b116b8135.js +1 -0
  348. package/.next-prod/static/chunks/app/api/db/disconnect/route-51252a3b116b8135.js +1 -0
  349. package/.next-prod/static/chunks/app/api/db/export/route-51252a3b116b8135.js +1 -0
  350. package/.next-prod/static/chunks/app/api/db/query/route-51252a3b116b8135.js +1 -0
  351. package/.next-prod/static/chunks/app/api/db/schemas/route-51252a3b116b8135.js +1 -0
  352. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-51252a3b116b8135.js +1 -0
  353. package/.next-prod/static/chunks/app/api/dev/spans/route-51252a3b116b8135.js +1 -0
  354. package/.next-prod/static/chunks/app/api/extension/version/route-51252a3b116b8135.js +1 -0
  355. package/.next-prod/static/chunks/app/api/file/route-51252a3b116b8135.js +1 -0
  356. package/.next-prod/static/chunks/app/api/files/blame/route-51252a3b116b8135.js +1 -0
  357. package/.next-prod/static/chunks/app/api/files/clipboard/route-51252a3b116b8135.js +1 -0
  358. package/.next-prod/static/chunks/app/api/files/copy/route-51252a3b116b8135.js +1 -0
  359. package/.next-prod/static/chunks/app/api/files/delete/route-51252a3b116b8135.js +1 -0
  360. package/.next-prod/static/chunks/app/api/files/expanded/route-51252a3b116b8135.js +1 -0
  361. package/.next-prod/static/chunks/app/api/files/index/route-51252a3b116b8135.js +1 -0
  362. package/.next-prod/static/chunks/app/api/files/init/route-51252a3b116b8135.js +1 -0
  363. package/.next-prod/static/chunks/app/api/files/paste/route-51252a3b116b8135.js +1 -0
  364. package/.next-prod/static/chunks/app/api/files/read/route-51252a3b116b8135.js +1 -0
  365. package/.next-prod/static/chunks/app/api/files/readdir/route-51252a3b116b8135.js +1 -0
  366. package/.next-prod/static/chunks/app/api/files/recent/route-51252a3b116b8135.js +1 -0
  367. package/.next-prod/static/chunks/app/api/files/save/route-51252a3b116b8135.js +1 -0
  368. package/.next-prod/static/chunks/app/api/files/search/route-51252a3b116b8135.js +1 -0
  369. package/.next-prod/static/chunks/app/api/files/stat/route-51252a3b116b8135.js +1 -0
  370. package/.next-prod/static/chunks/app/api/files/text/route-51252a3b116b8135.js +1 -0
  371. package/.next-prod/static/chunks/app/api/git/branch-diff/route-51252a3b116b8135.js +1 -0
  372. package/.next-prod/static/chunks/app/api/git/branches/route-51252a3b116b8135.js +1 -0
  373. package/.next-prod/static/chunks/app/api/git/commit-diff/route-51252a3b116b8135.js +1 -0
  374. package/.next-prod/static/chunks/app/api/git/commits/route-51252a3b116b8135.js +1 -0
  375. package/.next-prod/static/chunks/app/api/git/current-branch/route-51252a3b116b8135.js +1 -0
  376. package/.next-prod/static/chunks/app/api/git/diff/route-51252a3b116b8135.js +1 -0
  377. package/.next-prod/static/chunks/app/api/git/discard/route-51252a3b116b8135.js +1 -0
  378. package/.next-prod/static/chunks/app/api/git/stage/route-51252a3b116b8135.js +1 -0
  379. package/.next-prod/static/chunks/app/api/git/status/route-51252a3b116b8135.js +1 -0
  380. package/.next-prod/static/chunks/app/api/git/unstage/route-51252a3b116b8135.js +1 -0
  381. package/.next-prod/static/chunks/app/api/git/worktree/route-51252a3b116b8135.js +1 -0
  382. package/.next-prod/static/chunks/app/api/global-state/route-51252a3b116b8135.js +1 -0
  383. package/.next-prod/static/chunks/app/api/health/route-51252a3b116b8135.js +1 -0
  384. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-51252a3b116b8135.js +1 -0
  385. package/.next-prod/static/chunks/app/api/html-apps/route-51252a3b116b8135.js +1 -0
  386. package/.next-prod/static/chunks/app/api/jupyter/load/route-51252a3b116b8135.js +1 -0
  387. package/.next-prod/static/chunks/app/api/jupyter/save/route-51252a3b116b8135.js +1 -0
  388. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-51252a3b116b8135.js +1 -0
  389. package/.next-prod/static/chunks/app/api/lsp/definition/route-51252a3b116b8135.js +1 -0
  390. package/.next-prod/static/chunks/app/api/lsp/hover/route-51252a3b116b8135.js +1 -0
  391. package/.next-prod/static/chunks/app/api/lsp/references/route-51252a3b116b8135.js +1 -0
  392. package/.next-prod/static/chunks/app/api/lsp/status/route-51252a3b116b8135.js +1 -0
  393. package/.next-prod/static/chunks/app/api/lsp/warmup/route-51252a3b116b8135.js +1 -0
  394. package/.next-prod/static/chunks/app/api/mysql/columns/route-51252a3b116b8135.js +1 -0
  395. package/.next-prod/static/chunks/app/api/mysql/connect/route-51252a3b116b8135.js +1 -0
  396. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-51252a3b116b8135.js +1 -0
  397. package/.next-prod/static/chunks/app/api/mysql/export/route-51252a3b116b8135.js +1 -0
  398. package/.next-prod/static/chunks/app/api/mysql/query/route-51252a3b116b8135.js +1 -0
  399. package/.next-prod/static/chunks/app/api/mysql/schemas/route-51252a3b116b8135.js +1 -0
  400. package/.next-prod/static/chunks/app/api/neo4j/connect/route-51252a3b116b8135.js +1 -0
  401. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-51252a3b116b8135.js +1 -0
  402. package/.next-prod/static/chunks/app/api/neo4j/query/route-51252a3b116b8135.js +1 -0
  403. package/.next-prod/static/chunks/app/api/neo4j/schema/route-51252a3b116b8135.js +1 -0
  404. package/.next-prod/static/chunks/app/api/note/route-51252a3b116b8135.js +1 -0
  405. package/.next-prod/static/chunks/app/api/ollama/config/route-51252a3b116b8135.js +1 -0
  406. package/.next-prod/static/chunks/app/api/ollama/models/route-51252a3b116b8135.js +1 -0
  407. package/.next-prod/static/chunks/app/api/ollama/start/route-51252a3b116b8135.js +1 -0
  408. package/.next-prod/static/chunks/app/api/open-cursor/route-51252a3b116b8135.js +1 -0
  409. package/.next-prod/static/chunks/app/api/open-vscode/route-51252a3b116b8135.js +1 -0
  410. package/.next-prod/static/chunks/app/api/pick-folder/route-51252a3b116b8135.js +1 -0
  411. package/.next-prod/static/chunks/app/api/pinned-sessions/route-51252a3b116b8135.js +1 -0
  412. package/.next-prod/static/chunks/app/api/project-settings/route-51252a3b116b8135.js +1 -0
  413. package/.next-prod/static/chunks/app/api/project-state/route-51252a3b116b8135.js +1 -0
  414. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-51252a3b116b8135.js +1 -0
  415. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-51252a3b116b8135.js +1 -0
  416. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-51252a3b116b8135.js +1 -0
  417. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-51252a3b116b8135.js +1 -0
  418. package/.next-prod/static/chunks/app/api/projectGraph/context/route-51252a3b116b8135.js +1 -0
  419. package/.next-prod/static/chunks/app/api/projectGraph/file/route-51252a3b116b8135.js +1 -0
  420. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-51252a3b116b8135.js +1 -0
  421. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-51252a3b116b8135.js +1 -0
  422. package/.next-prod/static/chunks/app/api/projectGraph/related/route-51252a3b116b8135.js +1 -0
  423. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-51252a3b116b8135.js +1 -0
  424. package/.next-prod/static/chunks/app/api/projectGraph/search/route-51252a3b116b8135.js +1 -0
  425. package/.next-prod/static/chunks/app/api/projects/route-51252a3b116b8135.js +1 -0
  426. package/.next-prod/static/chunks/app/api/push/public-key/route-51252a3b116b8135.js +1 -0
  427. package/.next-prod/static/chunks/app/api/push/subscribe/route-51252a3b116b8135.js +1 -0
  428. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-51252a3b116b8135.js +1 -0
  429. package/.next-prod/static/chunks/app/api/redis/command/route-51252a3b116b8135.js +1 -0
  430. package/.next-prod/static/chunks/app/api/redis/connect/route-51252a3b116b8135.js +1 -0
  431. package/.next-prod/static/chunks/app/api/redis/delete/route-51252a3b116b8135.js +1 -0
  432. package/.next-prod/static/chunks/app/api/redis/disconnect/route-51252a3b116b8135.js +1 -0
  433. package/.next-prod/static/chunks/app/api/redis/get/route-51252a3b116b8135.js +1 -0
  434. package/.next-prod/static/chunks/app/api/redis/keys/route-51252a3b116b8135.js +1 -0
  435. package/.next-prod/static/chunks/app/api/redis/set/route-51252a3b116b8135.js +1 -0
  436. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-51252a3b116b8135.js +1 -0
  437. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-51252a3b116b8135.js +1 -0
  438. package/.next-prod/static/chunks/app/api/review/[id]/route-51252a3b116b8135.js +1 -0
  439. package/.next-prod/static/chunks/app/api/review/identify/route-51252a3b116b8135.js +1 -0
  440. package/.next-prod/static/chunks/app/api/review/order/route-51252a3b116b8135.js +1 -0
  441. package/.next-prod/static/chunks/app/api/review/route-51252a3b116b8135.js +1 -0
  442. package/.next-prod/static/chunks/app/api/review/share-info/route-51252a3b116b8135.js +1 -0
  443. package/.next-prod/static/chunks/app/api/review/users/route-51252a3b116b8135.js +1 -0
  444. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-51252a3b116b8135.js +1 -0
  445. package/.next-prod/static/chunks/app/api/services/config/route-51252a3b116b8135.js +1 -0
  446. package/.next-prod/static/chunks/app/api/services/scripts/route-51252a3b116b8135.js +1 -0
  447. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-51252a3b116b8135.js +1 -0
  448. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-51252a3b116b8135.js +1 -0
  449. package/.next-prod/static/chunks/app/api/session-by-path/route-51252a3b116b8135.js +1 -0
  450. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-51252a3b116b8135.js +1 -0
  451. package/.next-prod/static/chunks/app/api/sessions/projects/route-51252a3b116b8135.js +1 -0
  452. package/.next-prod/static/chunks/app/api/sessions/route-51252a3b116b8135.js +1 -0
  453. package/.next-prod/static/chunks/app/api/settings/route-51252a3b116b8135.js +1 -0
  454. package/.next-prod/static/chunks/app/api/skills/[id]/route-51252a3b116b8135.js +1 -0
  455. package/.next-prod/static/chunks/app/api/skills/content/route-51252a3b116b8135.js +1 -0
  456. package/.next-prod/static/chunks/app/api/skills/route-51252a3b116b8135.js +1 -0
  457. package/.next-prod/static/chunks/app/api/snapshots/diff/route-51252a3b116b8135.js +1 -0
  458. package/.next-prod/static/chunks/app/api/snapshots/route-51252a3b116b8135.js +1 -0
  459. package/.next-prod/static/chunks/app/api/terminal/aliases/route-51252a3b116b8135.js +1 -0
  460. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-51252a3b116b8135.js +1 -0
  461. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-51252a3b116b8135.js +1 -0
  462. package/.next-prod/static/chunks/app/api/terminal/env/route-51252a3b116b8135.js +1 -0
  463. package/.next-prod/static/chunks/app/api/terminal/history/route-51252a3b116b8135.js +1 -0
  464. package/.next-prod/static/chunks/app/api/version/route-51252a3b116b8135.js +1 -0
  465. package/.next-prod/static/chunks/app/apps/[...path]/route-51252a3b116b8135.js +1 -0
  466. package/.next-prod/static/chunks/app/{layout-392444ad665c7748.js → layout-c33e42d8bc9d4b27.js} +1 -1
  467. package/.next-prod/static/chunks/app/m/page-03365a5db8980b50.js +1 -0
  468. package/.next-prod/static/chunks/app/manifest.webmanifest/route-51252a3b116b8135.js +1 -0
  469. package/.next-prod/static/chunks/app/{page-a32d8344284e99cb.js → page-972d36c0519a910e.js} +1 -1
  470. package/.next-prod/static/chunks/app/project/{page-a32d8344284e99cb.js → page-972d36c0519a910e.js} +1 -1
  471. package/.next-prod/static/chunks/app/review/[id]/page-c9716ea0049cc328.js +1 -0
  472. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-51252a3b116b8135.js +1 -0
  473. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-51252a3b116b8135.js +1 -0
  474. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-51252a3b116b8135.js +1 -0
  475. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-51252a3b116b8135.js +1 -0
  476. package/.next-prod/static/chunks/webpack-fb9d282647d95d0a.js +1 -0
  477. package/.next-prod/static/css/546386ec7f3b9978.css +1 -0
  478. package/.next-prod/trace +14 -13
  479. package/.next-prod/trace-build +1 -1
  480. package/.next-prod/types/app/api/{preview/[...path] → html-apps/[id]}/route.ts +3 -3
  481. package/.next-prod/types/app/api/html-apps/route.ts +351 -0
  482. package/.next-prod/types/app/apps/[...path]/route.ts +351 -0
  483. package/.next-prod/types/routes.d.ts +4 -2
  484. package/.next-prod/types/validator.ts +27 -9
  485. package/apps/file-viewer/app.jsx +411 -0
  486. package/apps/file-viewer/index.html +76 -0
  487. package/dist/{chunk-FMJUH423.mjs → chunk-7WPYQYA6.mjs} +44 -2
  488. package/dist/{chunk-BFESJMNO.mjs → chunk-BRW4ZEIC.mjs} +1 -0
  489. package/dist/{chunk-3X4GQZL4.mjs → chunk-RUNUGDPP.mjs} +1 -1
  490. package/dist/httpApi.mjs +2 -2
  491. package/dist/scheduledTasks.mjs +295 -2
  492. package/dist/{server-HKW65PHP.mjs → server-MCN5AIEU.mjs} +4 -2
  493. package/dist/wsServer.mjs +200 -7
  494. package/package.json +6 -3
  495. package/public/html-lib/babel.min.js +2 -0
  496. package/public/html-lib/fonts/KaTeX_AMS-Regular-CYEKBG2K.woff +0 -0
  497. package/public/html-lib/fonts/KaTeX_AMS-Regular-JKX5W2C4.ttf +0 -0
  498. package/public/html-lib/fonts/KaTeX_AMS-Regular-U6PRYMIZ.woff2 +0 -0
  499. package/public/html-lib/fonts/KaTeX_Caligraphic-Bold-5QL5CMTE.woff2 +0 -0
  500. package/public/html-lib/fonts/KaTeX_Caligraphic-Bold-WZ3QSGD3.woff +0 -0
  501. package/public/html-lib/fonts/KaTeX_Caligraphic-Bold-ZTS3R3HK.ttf +0 -0
  502. package/public/html-lib/fonts/KaTeX_Caligraphic-Regular-3LKEU76G.woff +0 -0
  503. package/public/html-lib/fonts/KaTeX_Caligraphic-Regular-A7XRTZ5Q.ttf +0 -0
  504. package/public/html-lib/fonts/KaTeX_Caligraphic-Regular-KX5MEWCF.woff2 +0 -0
  505. package/public/html-lib/fonts/KaTeX_Fraktur-Bold-2QVFK6NQ.woff2 +0 -0
  506. package/public/html-lib/fonts/KaTeX_Fraktur-Bold-T4SWXBMT.woff +0 -0
  507. package/public/html-lib/fonts/KaTeX_Fraktur-Bold-WGHVTYOR.ttf +0 -0
  508. package/public/html-lib/fonts/KaTeX_Fraktur-Regular-2PEIFJSJ.woff2 +0 -0
  509. package/public/html-lib/fonts/KaTeX_Fraktur-Regular-5U4OPH2X.ttf +0 -0
  510. package/public/html-lib/fonts/KaTeX_Fraktur-Regular-PQMHCIK6.woff +0 -0
  511. package/public/html-lib/fonts/KaTeX_Main-Bold-2GA4IZIN.woff +0 -0
  512. package/public/html-lib/fonts/KaTeX_Main-Bold-W5FBVCZM.ttf +0 -0
  513. package/public/html-lib/fonts/KaTeX_Main-Bold-YP5VVQRP.woff2 +0 -0
  514. package/public/html-lib/fonts/KaTeX_Main-BoldItalic-4P4C7HJH.woff +0 -0
  515. package/public/html-lib/fonts/KaTeX_Main-BoldItalic-N4V3DX7S.woff2 +0 -0
  516. package/public/html-lib/fonts/KaTeX_Main-BoldItalic-ODMLBJJQ.ttf +0 -0
  517. package/public/html-lib/fonts/KaTeX_Main-Italic-I43T2HSR.ttf +0 -0
  518. package/public/html-lib/fonts/KaTeX_Main-Italic-RELBIK7M.woff2 +0 -0
  519. package/public/html-lib/fonts/KaTeX_Main-Italic-SASNQFN2.woff +0 -0
  520. package/public/html-lib/fonts/KaTeX_Main-Regular-ARRPAO67.woff2 +0 -0
  521. package/public/html-lib/fonts/KaTeX_Main-Regular-P5I74A2A.woff +0 -0
  522. package/public/html-lib/fonts/KaTeX_Main-Regular-W74P5G27.ttf +0 -0
  523. package/public/html-lib/fonts/KaTeX_Math-BoldItalic-6EBV3DK5.woff +0 -0
  524. package/public/html-lib/fonts/KaTeX_Math-BoldItalic-K4WTGH3J.woff2 +0 -0
  525. package/public/html-lib/fonts/KaTeX_Math-BoldItalic-VB447A4D.ttf +0 -0
  526. package/public/html-lib/fonts/KaTeX_Math-Italic-6KGCHLFN.woff2 +0 -0
  527. package/public/html-lib/fonts/KaTeX_Math-Italic-KKK3USB2.woff +0 -0
  528. package/public/html-lib/fonts/KaTeX_Math-Italic-SON4MRCA.ttf +0 -0
  529. package/public/html-lib/fonts/KaTeX_SansSerif-Bold-RRNVJFFW.woff2 +0 -0
  530. package/public/html-lib/fonts/KaTeX_SansSerif-Bold-STQ6RXC7.ttf +0 -0
  531. package/public/html-lib/fonts/KaTeX_SansSerif-Bold-X5M5EMOD.woff +0 -0
  532. package/public/html-lib/fonts/KaTeX_SansSerif-Italic-HMPFTM52.woff2 +0 -0
  533. package/public/html-lib/fonts/KaTeX_SansSerif-Italic-PSN4QKYX.woff +0 -0
  534. package/public/html-lib/fonts/KaTeX_SansSerif-Italic-WTBAZBGY.ttf +0 -0
  535. package/public/html-lib/fonts/KaTeX_SansSerif-Regular-2TL3USAE.ttf +0 -0
  536. package/public/html-lib/fonts/KaTeX_SansSerif-Regular-OQCII6EP.woff +0 -0
  537. package/public/html-lib/fonts/KaTeX_SansSerif-Regular-XIQ62X4E.woff2 +0 -0
  538. package/public/html-lib/fonts/KaTeX_Script-Regular-72OLXYNA.ttf +0 -0
  539. package/public/html-lib/fonts/KaTeX_Script-Regular-A5IFOEBS.woff +0 -0
  540. package/public/html-lib/fonts/KaTeX_Script-Regular-APUWIHLP.woff2 +0 -0
  541. package/public/html-lib/fonts/KaTeX_Size1-Regular-4HRHTS65.woff +0 -0
  542. package/public/html-lib/fonts/KaTeX_Size1-Regular-5LRUTBFT.woff2 +0 -0
  543. package/public/html-lib/fonts/KaTeX_Size1-Regular-7K6AASVL.ttf +0 -0
  544. package/public/html-lib/fonts/KaTeX_Size2-Regular-222HN3GT.ttf +0 -0
  545. package/public/html-lib/fonts/KaTeX_Size2-Regular-K5ZHAIS6.woff +0 -0
  546. package/public/html-lib/fonts/KaTeX_Size2-Regular-LELKET5D.woff2 +0 -0
  547. package/public/html-lib/fonts/KaTeX_Size3-Regular-TLFPAHDE.woff +0 -0
  548. package/public/html-lib/fonts/KaTeX_Size3-Regular-UFCO6WCA.ttf +0 -0
  549. package/public/html-lib/fonts/KaTeX_Size3-Regular-WQRQ47UD.woff2 +0 -0
  550. package/public/html-lib/fonts/KaTeX_Size4-Regular-7PGNVPQK.ttf +0 -0
  551. package/public/html-lib/fonts/KaTeX_Size4-Regular-CDMV7U5C.woff2 +0 -0
  552. package/public/html-lib/fonts/KaTeX_Size4-Regular-PKMWZHNC.woff +0 -0
  553. package/public/html-lib/fonts/KaTeX_Typewriter-Regular-3F5K6SQ6.ttf +0 -0
  554. package/public/html-lib/fonts/KaTeX_Typewriter-Regular-MJMFSK64.woff +0 -0
  555. package/public/html-lib/fonts/KaTeX_Typewriter-Regular-VBYJ4NRC.woff2 +0 -0
  556. package/public/html-lib/json-viewer.js +91 -0
  557. package/public/html-lib/markdown.css +419 -0
  558. package/public/html-lib/markdown.js +418 -0
  559. package/public/html-lib/pdf-viewer.css +444 -0
  560. package/public/html-lib/pdf-viewer.js +123 -0
  561. package/public/html-lib/react-dom.production.min.js +267 -0
  562. package/public/html-lib/react.production.min.js +31 -0
  563. package/public/html-lib/theme.css +101 -0
  564. package/.next-prod/server/app/api/preview/[...path]/route.js +0 -1
  565. package/.next-prod/server/app/api/preview/[...path]/route_client-reference-manifest.js +0 -1
  566. package/.next-prod/static/chunks/1871-4468d75ec99d71fc.js +0 -25
  567. package/.next-prod/static/chunks/6784-53d80dc3b480cf9a.js +0 -0
  568. package/.next-prod/static/chunks/9530-08419cb81f88a0e6.js +0 -15
  569. package/.next-prod/static/chunks/app/_global-error/page-6d7aa508d9d8bcc3.js +0 -1
  570. package/.next-prod/static/chunks/app/api/agent/test/route-6d7aa508d9d8bcc3.js +0 -1
  571. package/.next-prod/static/chunks/app/api/bash/route-6d7aa508d9d8bcc3.js +0 -1
  572. package/.next-prod/static/chunks/app/api/chat/codex/route-6d7aa508d9d8bcc3.js +0 -1
  573. package/.next-prod/static/chunks/app/api/chat/deepseek/route-6d7aa508d9d8bcc3.js +0 -1
  574. package/.next-prod/static/chunks/app/api/chat/kimi/route-6d7aa508d9d8bcc3.js +0 -1
  575. package/.next-prod/static/chunks/app/api/chat/ollama/route-6d7aa508d9d8bcc3.js +0 -1
  576. package/.next-prod/static/chunks/app/api/chat/pty-input/route-6d7aa508d9d8bcc3.js +0 -1
  577. package/.next-prod/static/chunks/app/api/chat/route-6d7aa508d9d8bcc3.js +0 -1
  578. package/.next-prod/static/chunks/app/api/chat/stop/route-6d7aa508d9d8bcc3.js +0 -1
  579. package/.next-prod/static/chunks/app/api/claude-stats/route-6d7aa508d9d8bcc3.js +0 -1
  580. package/.next-prod/static/chunks/app/api/commands/route-6d7aa508d9d8bcc3.js +0 -1
  581. package/.next-prod/static/chunks/app/api/comments/route-6d7aa508d9d8bcc3.js +0 -1
  582. package/.next-prod/static/chunks/app/api/db/columns/route-6d7aa508d9d8bcc3.js +0 -1
  583. package/.next-prod/static/chunks/app/api/db/connect/route-6d7aa508d9d8bcc3.js +0 -1
  584. package/.next-prod/static/chunks/app/api/db/disconnect/route-6d7aa508d9d8bcc3.js +0 -1
  585. package/.next-prod/static/chunks/app/api/db/export/route-6d7aa508d9d8bcc3.js +0 -1
  586. package/.next-prod/static/chunks/app/api/db/query/route-6d7aa508d9d8bcc3.js +0 -1
  587. package/.next-prod/static/chunks/app/api/db/schemas/route-6d7aa508d9d8bcc3.js +0 -1
  588. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-6d7aa508d9d8bcc3.js +0 -1
  589. package/.next-prod/static/chunks/app/api/dev/spans/route-6d7aa508d9d8bcc3.js +0 -1
  590. package/.next-prod/static/chunks/app/api/extension/version/route-6d7aa508d9d8bcc3.js +0 -1
  591. package/.next-prod/static/chunks/app/api/file/route-6d7aa508d9d8bcc3.js +0 -1
  592. package/.next-prod/static/chunks/app/api/files/blame/route-6d7aa508d9d8bcc3.js +0 -1
  593. package/.next-prod/static/chunks/app/api/files/clipboard/route-6d7aa508d9d8bcc3.js +0 -1
  594. package/.next-prod/static/chunks/app/api/files/copy/route-6d7aa508d9d8bcc3.js +0 -1
  595. package/.next-prod/static/chunks/app/api/files/delete/route-6d7aa508d9d8bcc3.js +0 -1
  596. package/.next-prod/static/chunks/app/api/files/expanded/route-6d7aa508d9d8bcc3.js +0 -1
  597. package/.next-prod/static/chunks/app/api/files/index/route-6d7aa508d9d8bcc3.js +0 -1
  598. package/.next-prod/static/chunks/app/api/files/init/route-6d7aa508d9d8bcc3.js +0 -1
  599. package/.next-prod/static/chunks/app/api/files/paste/route-6d7aa508d9d8bcc3.js +0 -1
  600. package/.next-prod/static/chunks/app/api/files/read/route-6d7aa508d9d8bcc3.js +0 -1
  601. package/.next-prod/static/chunks/app/api/files/readdir/route-6d7aa508d9d8bcc3.js +0 -1
  602. package/.next-prod/static/chunks/app/api/files/recent/route-6d7aa508d9d8bcc3.js +0 -1
  603. package/.next-prod/static/chunks/app/api/files/save/route-6d7aa508d9d8bcc3.js +0 -1
  604. package/.next-prod/static/chunks/app/api/files/search/route-6d7aa508d9d8bcc3.js +0 -1
  605. package/.next-prod/static/chunks/app/api/files/stat/route-6d7aa508d9d8bcc3.js +0 -1
  606. package/.next-prod/static/chunks/app/api/files/text/route-6d7aa508d9d8bcc3.js +0 -1
  607. package/.next-prod/static/chunks/app/api/git/branch-diff/route-6d7aa508d9d8bcc3.js +0 -1
  608. package/.next-prod/static/chunks/app/api/git/branches/route-6d7aa508d9d8bcc3.js +0 -1
  609. package/.next-prod/static/chunks/app/api/git/commit-diff/route-6d7aa508d9d8bcc3.js +0 -1
  610. package/.next-prod/static/chunks/app/api/git/commits/route-6d7aa508d9d8bcc3.js +0 -1
  611. package/.next-prod/static/chunks/app/api/git/current-branch/route-6d7aa508d9d8bcc3.js +0 -1
  612. package/.next-prod/static/chunks/app/api/git/diff/route-6d7aa508d9d8bcc3.js +0 -1
  613. package/.next-prod/static/chunks/app/api/git/discard/route-6d7aa508d9d8bcc3.js +0 -1
  614. package/.next-prod/static/chunks/app/api/git/stage/route-6d7aa508d9d8bcc3.js +0 -1
  615. package/.next-prod/static/chunks/app/api/git/status/route-6d7aa508d9d8bcc3.js +0 -1
  616. package/.next-prod/static/chunks/app/api/git/unstage/route-6d7aa508d9d8bcc3.js +0 -1
  617. package/.next-prod/static/chunks/app/api/git/worktree/route-6d7aa508d9d8bcc3.js +0 -1
  618. package/.next-prod/static/chunks/app/api/global-state/route-6d7aa508d9d8bcc3.js +0 -1
  619. package/.next-prod/static/chunks/app/api/health/route-6d7aa508d9d8bcc3.js +0 -1
  620. package/.next-prod/static/chunks/app/api/jupyter/load/route-6d7aa508d9d8bcc3.js +0 -1
  621. package/.next-prod/static/chunks/app/api/jupyter/save/route-6d7aa508d9d8bcc3.js +0 -1
  622. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-6d7aa508d9d8bcc3.js +0 -1
  623. package/.next-prod/static/chunks/app/api/lsp/definition/route-6d7aa508d9d8bcc3.js +0 -1
  624. package/.next-prod/static/chunks/app/api/lsp/hover/route-6d7aa508d9d8bcc3.js +0 -1
  625. package/.next-prod/static/chunks/app/api/lsp/references/route-6d7aa508d9d8bcc3.js +0 -1
  626. package/.next-prod/static/chunks/app/api/lsp/status/route-6d7aa508d9d8bcc3.js +0 -1
  627. package/.next-prod/static/chunks/app/api/lsp/warmup/route-6d7aa508d9d8bcc3.js +0 -1
  628. package/.next-prod/static/chunks/app/api/mysql/columns/route-6d7aa508d9d8bcc3.js +0 -1
  629. package/.next-prod/static/chunks/app/api/mysql/connect/route-6d7aa508d9d8bcc3.js +0 -1
  630. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-6d7aa508d9d8bcc3.js +0 -1
  631. package/.next-prod/static/chunks/app/api/mysql/export/route-6d7aa508d9d8bcc3.js +0 -1
  632. package/.next-prod/static/chunks/app/api/mysql/query/route-6d7aa508d9d8bcc3.js +0 -1
  633. package/.next-prod/static/chunks/app/api/mysql/schemas/route-6d7aa508d9d8bcc3.js +0 -1
  634. package/.next-prod/static/chunks/app/api/neo4j/connect/route-6d7aa508d9d8bcc3.js +0 -1
  635. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-6d7aa508d9d8bcc3.js +0 -1
  636. package/.next-prod/static/chunks/app/api/neo4j/query/route-6d7aa508d9d8bcc3.js +0 -1
  637. package/.next-prod/static/chunks/app/api/neo4j/schema/route-6d7aa508d9d8bcc3.js +0 -1
  638. package/.next-prod/static/chunks/app/api/note/route-6d7aa508d9d8bcc3.js +0 -1
  639. package/.next-prod/static/chunks/app/api/ollama/config/route-6d7aa508d9d8bcc3.js +0 -1
  640. package/.next-prod/static/chunks/app/api/ollama/models/route-6d7aa508d9d8bcc3.js +0 -1
  641. package/.next-prod/static/chunks/app/api/ollama/start/route-6d7aa508d9d8bcc3.js +0 -1
  642. package/.next-prod/static/chunks/app/api/open-cursor/route-6d7aa508d9d8bcc3.js +0 -1
  643. package/.next-prod/static/chunks/app/api/open-vscode/route-6d7aa508d9d8bcc3.js +0 -1
  644. package/.next-prod/static/chunks/app/api/pick-folder/route-6d7aa508d9d8bcc3.js +0 -1
  645. package/.next-prod/static/chunks/app/api/pinned-sessions/route-6d7aa508d9d8bcc3.js +0 -1
  646. package/.next-prod/static/chunks/app/api/preview/[...path]/route-6d7aa508d9d8bcc3.js +0 -1
  647. package/.next-prod/static/chunks/app/api/project-settings/route-6d7aa508d9d8bcc3.js +0 -1
  648. package/.next-prod/static/chunks/app/api/project-state/route-6d7aa508d9d8bcc3.js +0 -1
  649. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-6d7aa508d9d8bcc3.js +0 -1
  650. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-6d7aa508d9d8bcc3.js +0 -1
  651. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-6d7aa508d9d8bcc3.js +0 -1
  652. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-6d7aa508d9d8bcc3.js +0 -1
  653. package/.next-prod/static/chunks/app/api/projectGraph/context/route-6d7aa508d9d8bcc3.js +0 -1
  654. package/.next-prod/static/chunks/app/api/projectGraph/file/route-6d7aa508d9d8bcc3.js +0 -1
  655. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-6d7aa508d9d8bcc3.js +0 -1
  656. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-6d7aa508d9d8bcc3.js +0 -1
  657. package/.next-prod/static/chunks/app/api/projectGraph/related/route-6d7aa508d9d8bcc3.js +0 -1
  658. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-6d7aa508d9d8bcc3.js +0 -1
  659. package/.next-prod/static/chunks/app/api/projectGraph/search/route-6d7aa508d9d8bcc3.js +0 -1
  660. package/.next-prod/static/chunks/app/api/projects/route-6d7aa508d9d8bcc3.js +0 -1
  661. package/.next-prod/static/chunks/app/api/push/public-key/route-6d7aa508d9d8bcc3.js +0 -1
  662. package/.next-prod/static/chunks/app/api/push/subscribe/route-6d7aa508d9d8bcc3.js +0 -1
  663. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-6d7aa508d9d8bcc3.js +0 -1
  664. package/.next-prod/static/chunks/app/api/redis/command/route-6d7aa508d9d8bcc3.js +0 -1
  665. package/.next-prod/static/chunks/app/api/redis/connect/route-6d7aa508d9d8bcc3.js +0 -1
  666. package/.next-prod/static/chunks/app/api/redis/delete/route-6d7aa508d9d8bcc3.js +0 -1
  667. package/.next-prod/static/chunks/app/api/redis/disconnect/route-6d7aa508d9d8bcc3.js +0 -1
  668. package/.next-prod/static/chunks/app/api/redis/get/route-6d7aa508d9d8bcc3.js +0 -1
  669. package/.next-prod/static/chunks/app/api/redis/keys/route-6d7aa508d9d8bcc3.js +0 -1
  670. package/.next-prod/static/chunks/app/api/redis/set/route-6d7aa508d9d8bcc3.js +0 -1
  671. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-6d7aa508d9d8bcc3.js +0 -1
  672. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-6d7aa508d9d8bcc3.js +0 -1
  673. package/.next-prod/static/chunks/app/api/review/[id]/route-6d7aa508d9d8bcc3.js +0 -1
  674. package/.next-prod/static/chunks/app/api/review/identify/route-6d7aa508d9d8bcc3.js +0 -1
  675. package/.next-prod/static/chunks/app/api/review/order/route-6d7aa508d9d8bcc3.js +0 -1
  676. package/.next-prod/static/chunks/app/api/review/route-6d7aa508d9d8bcc3.js +0 -1
  677. package/.next-prod/static/chunks/app/api/review/share-info/route-6d7aa508d9d8bcc3.js +0 -1
  678. package/.next-prod/static/chunks/app/api/review/users/route-6d7aa508d9d8bcc3.js +0 -1
  679. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-6d7aa508d9d8bcc3.js +0 -1
  680. package/.next-prod/static/chunks/app/api/services/config/route-6d7aa508d9d8bcc3.js +0 -1
  681. package/.next-prod/static/chunks/app/api/services/scripts/route-6d7aa508d9d8bcc3.js +0 -1
  682. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-6d7aa508d9d8bcc3.js +0 -1
  683. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-6d7aa508d9d8bcc3.js +0 -1
  684. package/.next-prod/static/chunks/app/api/session-by-path/route-6d7aa508d9d8bcc3.js +0 -1
  685. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-6d7aa508d9d8bcc3.js +0 -1
  686. package/.next-prod/static/chunks/app/api/sessions/projects/route-6d7aa508d9d8bcc3.js +0 -1
  687. package/.next-prod/static/chunks/app/api/sessions/route-6d7aa508d9d8bcc3.js +0 -1
  688. package/.next-prod/static/chunks/app/api/settings/route-6d7aa508d9d8bcc3.js +0 -1
  689. package/.next-prod/static/chunks/app/api/skills/[id]/route-6d7aa508d9d8bcc3.js +0 -1
  690. package/.next-prod/static/chunks/app/api/skills/content/route-6d7aa508d9d8bcc3.js +0 -1
  691. package/.next-prod/static/chunks/app/api/skills/route-6d7aa508d9d8bcc3.js +0 -1
  692. package/.next-prod/static/chunks/app/api/snapshots/diff/route-6d7aa508d9d8bcc3.js +0 -1
  693. package/.next-prod/static/chunks/app/api/snapshots/route-6d7aa508d9d8bcc3.js +0 -1
  694. package/.next-prod/static/chunks/app/api/terminal/aliases/route-6d7aa508d9d8bcc3.js +0 -1
  695. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-6d7aa508d9d8bcc3.js +0 -1
  696. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-6d7aa508d9d8bcc3.js +0 -1
  697. package/.next-prod/static/chunks/app/api/terminal/env/route-6d7aa508d9d8bcc3.js +0 -1
  698. package/.next-prod/static/chunks/app/api/terminal/history/route-6d7aa508d9d8bcc3.js +0 -1
  699. package/.next-prod/static/chunks/app/api/version/route-6d7aa508d9d8bcc3.js +0 -1
  700. package/.next-prod/static/chunks/app/m/page-54053828af79704f.js +0 -1
  701. package/.next-prod/static/chunks/app/manifest.webmanifest/route-6d7aa508d9d8bcc3.js +0 -1
  702. package/.next-prod/static/chunks/app/review/[id]/page-0c5d03d65758c7dc.js +0 -1
  703. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-6d7aa508d9d8bcc3.js +0 -1
  704. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-6d7aa508d9d8bcc3.js +0 -1
  705. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-6d7aa508d9d8bcc3.js +0 -1
  706. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-6d7aa508d9d8bcc3.js +0 -1
  707. package/.next-prod/static/chunks/webpack-01274185cb710e57.js +0 -1
  708. package/.next-prod/static/css/1d52d90207f3b441.css +0 -1
  709. package/.next-prod/static/sMb_F5kg6en8USwL7FYkb/_buildManifest.js +0 -1
  710. /package/.next-prod/static/{sMb_F5kg6en8USwL7FYkb → D0hP0hbht20IrPe7xUl96}/_ssgManifest.js +0 -0
@@ -0,0 +1,411 @@
1
+ /**
2
+ * file-viewer — preview a local file (markdown / json / image / pdf).
3
+ *
4
+ * Built-in, but written against the PUBLIC contract only, so it doubles as the
5
+ * reference app (see ~/.cockpit/skills/html/SKILL.md):
6
+ * - all data goes through cockpit.bash — no privileged endpoints
7
+ * - libs come from /html-lib (same-origin, offline)
8
+ * - theming is the `cockpit-theme` meta, handled by the SDK
9
+ * Opened as /apps/builtin/file-viewer/index.html?file=<absolute path>.
10
+ */
11
+ // React/ReactDOM come from the /html-lib script tags in index.html; `cockpit`
12
+ // is the SDK injected by the server.
13
+ /* global React, ReactDOM, cockpit */
14
+ const { useState, useEffect, useRef, useCallback } = React;
15
+
16
+ /** Inline an image up to this size as a data URL; refuse beyond it. */
17
+ const MAX_INLINE_BYTES = 8 * 1024 * 1024;
18
+
19
+ // ---------------------------------------------------------------- bash layer
20
+
21
+ /**
22
+ * Single-quote a value for safe interpolation into a bash command string.
23
+ * Everything is literal inside '...', so only the quote itself needs escaping:
24
+ * close, insert an escaped quote, reopen.
25
+ */
26
+ const sh = (v) => "'" + String(v).replace(/'/g, "'\\''") + "'";
27
+
28
+ /**
29
+ * Run one foreground command and return stdout, collapsing BOTH failure classes
30
+ * into a thrown Error:
31
+ * - cockpit.bash() throws -> spawn / infrastructure failure
32
+ * - resolves with exitCode !== 0 -> the command ran and failed; surface its
33
+ * stderr rather than a generic message
34
+ */
35
+ async function bash(command) {
36
+ let res;
37
+ try {
38
+ res = await cockpit.bash(command);
39
+ } catch (e) {
40
+ throw new Error('cannot run command: ' + ((e && e.message) || e));
41
+ }
42
+ if (res.exitCode !== 0) {
43
+ const detail = (res.stderr || res.stdout || '').trim();
44
+ throw new Error(detail || ('command exited with ' + res.exitCode));
45
+ }
46
+ return res.stdout;
47
+ }
48
+
49
+ const readText = (absPath) => bash('cat -- ' + sh(absPath));
50
+
51
+ const fileSize = async (absPath) => {
52
+ const n = parseInt((await bash('wc -c < ' + sh(absPath))).trim(), 10);
53
+ return Number.isFinite(n) ? n : 0;
54
+ };
55
+
56
+ const IMAGE_MIME = {
57
+ png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg',
58
+ gif: 'image/gif', webp: 'image/webp', svg: 'image/svg+xml',
59
+ };
60
+
61
+ /** Read a binary file as a data URL, guarding against oversized payloads. */
62
+ async function toDataUrl(absPath) {
63
+ const size = await fileSize(absPath);
64
+ if (size > MAX_INLINE_BYTES) {
65
+ throw new Error(
66
+ 'file is ' + (size / 1048576).toFixed(1) + ' MB, over the ' +
67
+ (MAX_INLINE_BYTES / 1048576) + ' MB inline limit'
68
+ );
69
+ }
70
+ const mime = IMAGE_MIME[extOf(absPath)] || 'application/octet-stream';
71
+ // base64 reads stdin on both macOS and GNU coreutils; the output is wrapped,
72
+ // so strip whitespace before building the URL.
73
+ const b64 = (await bash('base64 < ' + sh(absPath))).replace(/\s+/g, '');
74
+ return 'data:' + mime + ';base64,' + b64;
75
+ }
76
+
77
+ // ------------------------------------------------------------------- helpers
78
+
79
+ const extOf = (p) => {
80
+ const m = /\.([a-z0-9]+)$/i.exec(p || '');
81
+ return m ? m[1].toLowerCase() : '';
82
+ };
83
+ const dirOf = (p) => p.replace(/\\/g, '/').replace(/\/[^/]*$/, '') || '/';
84
+ const baseOf = (p) => p.split(/[/\\]/).pop();
85
+
86
+ /**
87
+ * Lazily load a script (+ optional css) once; resolves when ready.
88
+ * A rejected promise is evicted from the cache so a later attempt can retry —
89
+ * caching the rejection would make one transient failure permanent for the page.
90
+ */
91
+ const loadedLibs = {};
92
+ function loadLib(src, cssHref) {
93
+ if (loadedLibs[src]) return loadedLibs[src];
94
+ loadedLibs[src] = new Promise((resolve, reject) => {
95
+ if (cssHref) {
96
+ const css = document.createElement('link');
97
+ css.rel = 'stylesheet';
98
+ css.href = cssHref;
99
+ document.head.appendChild(css);
100
+ }
101
+ const s = document.createElement('script');
102
+ s.src = src;
103
+ s.onload = resolve;
104
+ s.onerror = () => reject(new Error('failed to load ' + src));
105
+ document.head.appendChild(s);
106
+ }).catch((err) => {
107
+ delete loadedLibs[src];
108
+ throw err;
109
+ });
110
+ return loadedLibs[src];
111
+ }
112
+
113
+ /** Run an async task on mount; expose {data, error, loading}. */
114
+ function useAsync(task, deps) {
115
+ const [state, setState] = useState({ loading: true, data: null, error: null });
116
+ useEffect(() => {
117
+ let alive = true;
118
+ setState({ loading: true, data: null, error: null });
119
+ task()
120
+ .then((data) => { if (alive) setState({ loading: false, data, error: null }); })
121
+ .catch((err) => { if (alive) setState({ loading: false, data: null, error: err.message }); });
122
+ return () => { alive = false; };
123
+ }, deps);
124
+ return state;
125
+ }
126
+
127
+ // ------------------------------------------------------------------- widgets
128
+
129
+ /**
130
+ * Mount one of the /html-lib widgets into a plain DOM node. They ship their own
131
+ * React copy, so they must own the node outright — hence the ref + imperative
132
+ * render/unmount instead of rendering them as children.
133
+ *
134
+ * mount() is guarded symmetrically with unmount(): a throw from inside a passive
135
+ * effect has no error boundary above it, so it would tear down the whole React
136
+ * root and blank the page. On mount failure no cleanup is registered — there is
137
+ * nothing mounted to tear down.
138
+ */
139
+ function useWidget(ref, ready, mount, unmount, deps, onError) {
140
+ useEffect(() => {
141
+ if (!ready || !ref.current) return;
142
+ const el = ref.current;
143
+ try {
144
+ mount(el);
145
+ } catch (e) {
146
+ if (onError) onError(e.message || String(e));
147
+ return;
148
+ }
149
+ return () => { try { unmount(el); } catch { /* already gone */ } };
150
+ }, deps);
151
+ }
152
+
153
+ // --------------------------------------------------------------------- views
154
+
155
+ function Status({ kind, children }) {
156
+ return <div className={'viewer-status ' + kind}>{children}</div>;
157
+ }
158
+
159
+ /**
160
+ * Markdown. Relative image references are rewritten to their /apps/local/ URL
161
+ * BEFORE render: rewriting the source (rather than patching <img> afterwards)
162
+ * survives the widget's re-render on theme flips.
163
+ *
164
+ * URLs, not data: URLs. The markdown renderer runs every src through
165
+ * react-markdown's defaultUrlTransform, which drops any protocol outside
166
+ * http/https/mailto/xmpp — a `data:` image is silently stripped to no src at
167
+ * all, in BOTH the `![](…)` and raw-HTML `<img>` forms. Referencing the file's
168
+ * own address in the local namespace also avoids base64-ing every image through
169
+ * the WS bridge, so there is no size cap and no per-image shell spawn.
170
+ */
171
+ const MD_IMAGE_RE = /!\[[^\]]*\]\(([^)\s]+)/g;
172
+ const HTML_IMAGE_RE = /<img\b[^>]*\bsrc=["']([^"']+)["']/gi;
173
+
174
+ /** Absolute local path → its /apps/local URL (per-segment encoded). */
175
+ const toLocalUrl = (absPath) =>
176
+ '/apps/local/' +
177
+ absPath
178
+ .replace(/\\/g, '/')
179
+ .split('/')
180
+ .map(encodeURIComponent)
181
+ .join('/')
182
+ .replace(/^\//, '');
183
+
184
+ function resolveRelativeImages(text, dir) {
185
+ const isRemote = (s) => /^(https?:|data:|\/)/i.test(s);
186
+ const found = [];
187
+ const collect = (re) => {
188
+ let m;
189
+ re.lastIndex = 0;
190
+ while ((m = re.exec(text)) !== null) {
191
+ const src = m[1];
192
+ if (src && !isRemote(src) && found.indexOf(src) < 0) found.push(src);
193
+ }
194
+ };
195
+ collect(MD_IMAGE_RE);
196
+ collect(HTML_IMAGE_RE);
197
+ if (!found.length) return text;
198
+
199
+ const urls = new Map(found.map((src) => {
200
+ let rel = src;
201
+ try { rel = decodeURIComponent(src); } catch { /* keep as written */ }
202
+ return [src, toLocalUrl(dir + '/' + rel.replace(/^\.\//, ''))];
203
+ }));
204
+
205
+ // Substitute INSIDE each image match only. A document-wide substring replace
206
+ // would corrupt any path that contains another as a substring (`img.png` is
207
+ // inside `sub/img.png`) and would also rewrite prose or code blocks that
208
+ // merely mention the filename.
209
+ const substitute = (match, src) =>
210
+ urls.has(src) ? match.replace(src, urls.get(src)) : match;
211
+ return text
212
+ .replace(MD_IMAGE_RE, substitute)
213
+ .replace(HTML_IMAGE_RE, substitute);
214
+ }
215
+
216
+ function MarkdownView({ file }) {
217
+ const ref = useRef(null);
218
+ const [mountError, setMountError] = useState(null);
219
+ const { loading, data, error } = useAsync(async () => {
220
+ await loadLib('/html-lib/markdown.js', '/html-lib/markdown.css');
221
+ return resolveRelativeImages(await readText(file), dirOf(file));
222
+ }, [file]);
223
+
224
+ useWidget(
225
+ ref, !loading && data != null,
226
+ (el) => window.CockpitMarkdown.render(el, data),
227
+ (el) => window.CockpitMarkdown.unmount(el),
228
+ [loading, data],
229
+ setMountError
230
+ );
231
+
232
+ if (loading) return <Status kind="loading">loading…</Status>;
233
+ const failure = error || mountError;
234
+ if (failure) return <Status kind="error">{'file-viewer: ' + file + '\n\n' + failure}</Status>;
235
+ return <div className="md-view" ref={ref} />;
236
+ }
237
+
238
+ /**
239
+ * JSON. Default is the readable widget; the top-right button swaps to the raw
240
+ * pretty-printed source rendered as a markdown fence. The two widgets are
241
+ * separate React copies, so the inactive one is unmounted before the other
242
+ * takes the node.
243
+ */
244
+ function JsonView({ file }) {
245
+ const ref = useRef(null);
246
+ const t = useLang();
247
+ const [mode, setMode] = useState('readable');
248
+ // WHICH mode's lib is loaded — deliberately not a bare `libReady` boolean.
249
+ // `setLibReady(false)` would only be *scheduled* by this effect, so the
250
+ // useWidget effect running later in the SAME commit would still observe the
251
+ // previous mode's `true` and mount a widget whose bundle is not loaded yet.
252
+ // Comparing `loadedMode === mode` cannot go stale that way: on a mode switch
253
+ // the two differ until the new bundle actually resolves.
254
+ const [loadedMode, setLoadedMode] = useState(null);
255
+ const [libError, setLibError] = useState(null);
256
+ const { loading, data, error } = useAsync(() => readText(file), [file]);
257
+
258
+ useEffect(() => {
259
+ const lib = mode === 'readable'
260
+ ? loadLib('/html-lib/json-viewer.js')
261
+ : loadLib('/html-lib/markdown.js', '/html-lib/markdown.css');
262
+ let alive = true;
263
+ setLibError(null);
264
+ lib
265
+ .then(() => { if (alive) setLoadedMode(mode); })
266
+ .catch((e) => { if (alive) setLibError(e.message); });
267
+ return () => { alive = false; };
268
+ }, [mode]);
269
+
270
+ useWidget(
271
+ ref, loadedMode === mode && !loading && data != null,
272
+ (el) => {
273
+ if (mode === 'readable') window.CockpitJson.render(el, data);
274
+ else window.CockpitMarkdown.render(el, jsonToMarkdown(data), { toc: false });
275
+ },
276
+ (el) => {
277
+ if (mode === 'readable') window.CockpitJson.unmount(el);
278
+ else window.CockpitMarkdown.unmount(el);
279
+ },
280
+ [loadedMode, mode, loading, data],
281
+ setLibError
282
+ );
283
+
284
+ const toggle = useCallback(
285
+ () => setMode((m) => (m === 'readable' ? 'raw' : 'readable')),
286
+ []
287
+ );
288
+
289
+ if (loading) return <Status kind="loading">loading…</Status>;
290
+ if (error) return <Status kind="error">{'file-viewer: ' + file + '\n\n' + error}</Status>;
291
+ if (libError) return <Status kind="error">{'file-viewer: ' + libError}</Status>;
292
+ return (
293
+ <>
294
+ <button type="button" className="json-toggle" onClick={toggle}>
295
+ {mode === 'readable' ? t('raw') : t('readable')}
296
+ </button>
297
+ <div className={mode === 'readable' ? 'json-view' : 'md-view'} ref={ref} />
298
+ </>
299
+ );
300
+ }
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.
306
+ let fence = '```';
307
+ const runs = body.match(/`+/g);
308
+ if (runs) {
309
+ const longest = Math.max.apply(null, runs.map((s) => s.length));
310
+ while (fence.length <= longest) fence += '`';
311
+ }
312
+ return fence + 'json\n' + body + '\n' + fence;
313
+ }
314
+
315
+ function ImageView({ file }) {
316
+ const [natural, setNatural] = useState(false);
317
+ const { loading, data, error } = useAsync(() => toDataUrl(file), [file]);
318
+
319
+ if (loading) return <Status kind="loading">loading…</Status>;
320
+ if (error) return <Status kind="error">{'file-viewer: ' + file + '\n\n' + error}</Status>;
321
+ return (
322
+ <div
323
+ className={'img-view' + (natural ? ' natural' : '')}
324
+ onClick={() => setNatural((n) => !n)}
325
+ >
326
+ <img src={data} alt={baseOf(file)} />
327
+ </div>
328
+ );
329
+ }
330
+
331
+ function PdfView({ file }) {
332
+ const ref = useRef(null);
333
+ const [ready, setReady] = useState(false);
334
+ const [error, setError] = useState(null);
335
+
336
+ useEffect(() => {
337
+ let alive = true;
338
+ loadLib('/html-lib/pdf-viewer.js', '/html-lib/pdf-viewer.css')
339
+ .then(() => { if (alive) setReady(true); })
340
+ .catch((e) => { if (alive) setError(e.message); });
341
+ return () => { alive = false; };
342
+ }, []);
343
+
344
+ useWidget(
345
+ ref, ready,
346
+ (el) => window.CockpitPdf.render(el, { cwd: dirOf(file), path: baseOf(file) }),
347
+ (el) => window.CockpitPdf.unmount(el),
348
+ [ready, file],
349
+ setError
350
+ );
351
+
352
+ if (error) return <Status kind="error">{'file-viewer: ' + error}</Status>;
353
+ return <div className="pdf-view" ref={ref} />;
354
+ }
355
+
356
+ // ------------------------------------------------------------------ language
357
+
358
+ // App-local dictionary. The app only PERCEIVES the language, it does not import
359
+ // the host's i18n — same as any user app would.
360
+ const DICT = {
361
+ zh: { readable: '可读', raw: '原文' },
362
+ en: { readable: 'Readable', raw: 'Raw' },
363
+ };
364
+
365
+ /**
366
+ * `cockpit.lang` is the host's language, recorded on <html lang> by the SDK.
367
+ * Reading it (rather than listening for the one-shot broadcast) is what makes
368
+ * this correct regardless of when the app happens to start. Falls back to the
369
+ * browser's language outside Cockpit.
370
+ */
371
+ const pickLang = () => {
372
+ const host = (typeof cockpit !== 'undefined' && cockpit.lang) || '';
373
+ const lang = host || navigator.language;
374
+ return lang.indexOf('zh') === 0 ? 'zh' : 'en';
375
+ };
376
+
377
+ /** Re-render on host language change; the broadcast still arrives live. */
378
+ function useLang() {
379
+ const [lang, setLang] = useState(pickLang);
380
+ useEffect(() => {
381
+ const onMessage = (e) => {
382
+ if (e.data?.type === 'cockpit:language-change') setLang(pickLang());
383
+ };
384
+ window.addEventListener('message', onMessage);
385
+ return () => window.removeEventListener('message', onMessage);
386
+ }, []);
387
+ return (key) => DICT[lang][key];
388
+ }
389
+
390
+ // ----------------------------------------------------------------------- app
391
+
392
+ const IMAGE_EXTS = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'svg'];
393
+
394
+ function App() {
395
+ const file = new URLSearchParams(location.search).get('file');
396
+ useEffect(() => {
397
+ if (file) document.title = baseOf(file) || 'File Viewer';
398
+ }, [file]);
399
+
400
+ if (!file) {
401
+ return <Status kind="error">file-viewer: missing ?file=&lt;absolute path&gt;</Status>;
402
+ }
403
+ const ext = extOf(file);
404
+ if (ext === 'md') return <MarkdownView file={file} />;
405
+ if (ext === 'json') return <JsonView file={file} />;
406
+ if (ext === 'pdf') return <PdfView file={file} />;
407
+ if (IMAGE_EXTS.indexOf(ext) >= 0) return <ImageView file={file} />;
408
+ return <Status kind="error">{'file-viewer: unsupported file type .' + ext + '\n' + file}</Status>;
409
+ }
410
+
411
+ ReactDOM.createRoot(document.getElementById('root')).render(<App />);
@@ -0,0 +1,76 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>File Viewer</title>
7
+ <meta name="cockpit-name" content="file-viewer">
8
+ <meta name="description" content="Preview local files: markdown (with TOC), json, images, pdf">
9
+ <meta name="cockpit-icon" content="📄">
10
+ <!-- Opt into the SDK's theme handling: follows the Cockpit host, falls back to
11
+ the OS outside it, and mounts the top-right light/dark toggle. -->
12
+ <meta name="cockpit-theme" content="auto">
13
+ <link rel="stylesheet" href="/html-lib/theme.css">
14
+ <style>
15
+ /* ---- Markdown view: CockpitMarkdown widget (TocSidebar + scroll pane) owns
16
+ its own scroll container ---- */
17
+ .md-view { position: fixed; inset: 0; }
18
+ .md-view .cockpit-md { padding: 1.5rem; }
19
+ /* ---- JSON readable view (CockpitJson): pre-like themed container ---- */
20
+ .json-view {
21
+ position: fixed; inset: 0; overflow: auto;
22
+ padding: 1rem 1.5rem;
23
+ font-family: var(--font-mono); font-size: 0.8125rem; line-height: 1.5;
24
+ white-space: pre-wrap; word-break: break-word;
25
+ }
26
+ /* right: 48px clears the SDK's own theme toggle, which sits at right: 10px. */
27
+ .json-toggle {
28
+ position: fixed; top: 10px; right: 48px; z-index: 10;
29
+ padding: 3px 10px;
30
+ border: 1px solid var(--border); border-radius: 8px;
31
+ background: var(--card); color: var(--muted-foreground);
32
+ cursor: pointer; font-size: 12px; line-height: 1.5;
33
+ font-family: var(--font-sans);
34
+ }
35
+ .json-toggle:hover { color: var(--foreground); }
36
+ .viewer-status {
37
+ margin: 2rem auto; max-width: 640px; padding: 1rem 1.25rem;
38
+ border: 1px solid var(--border); border-radius: var(--radius);
39
+ background: var(--card); font-family: var(--font-mono);
40
+ white-space: pre-wrap; word-break: break-all;
41
+ }
42
+ .viewer-status.error { color: var(--destructive); }
43
+ .viewer-status.loading { color: var(--muted-foreground); }
44
+ /* ---- Image view: centered on the themed background, fit <-> 100% toggle ---- */
45
+ .img-view {
46
+ min-height: 100vh; display: flex; align-items: center; justify-content: center;
47
+ padding: 12px;
48
+ }
49
+ .img-view img {
50
+ max-width: 100%; max-height: calc(100vh - 24px);
51
+ cursor: zoom-in; border-radius: 2px;
52
+ box-shadow: 0 2px 12px hsl(var(--slate-12) / 0.15);
53
+ }
54
+ .img-view.natural { display: block; overflow: auto; }
55
+ .img-view.natural img { max-width: none; max-height: none; cursor: zoom-out; }
56
+ /* ---- PDF view: CockpitPdf widget, full viewport ---- */
57
+ .pdf-view { position: fixed; inset: 0; }
58
+ </style>
59
+ </head>
60
+ <body>
61
+ <div id="root"></div>
62
+ <script src="/html-lib/react.production.min.js"></script>
63
+ <script src="/html-lib/react-dom.production.min.js"></script>
64
+ <script src="/html-lib/babel.min.js"></script>
65
+ <script>
66
+ (async () => {
67
+ const src = await (await fetch('./app.jsx')).text();
68
+ // Must be the classic runtime: the default (automatic) injects an
69
+ // `import react/jsx-runtime`, which throws "Cannot use import statement
70
+ // outside a module" once this is appended as a plain script.
71
+ const { code } = Babel.transform(src, { presets: [['react', { runtime: 'classic' }]] });
72
+ const s = document.createElement('script'); s.textContent = code; document.body.appendChild(s);
73
+ })();
74
+ </script>
75
+ </body>
76
+ </html>
@@ -13,7 +13,7 @@ import {
13
13
  getTerminalOutputPath,
14
14
  readJsonFile,
15
15
  writeJsonFile
16
- } from "./chunk-BFESJMNO.mjs";
16
+ } from "./chunk-BRW4ZEIC.mjs";
17
17
 
18
18
  // packages/feature/console/src/server/plugins/browser/BrowserBridge.ts
19
19
  import { WebSocket } from "ws";
@@ -1313,6 +1313,47 @@ function mergeTitles(base, patch) {
1313
1313
  return out;
1314
1314
  }
1315
1315
 
1316
+ // packages/feature/console/src/server/api/services-config.ts
1317
+ var deriveCommandName = (command) => {
1318
+ const firstWord = command.trim().split(/\s+/)[0] ?? "";
1319
+ const url = firstWord.match(/^[a-z][a-z0-9+.-]*:\/\/([^/?#]+)/i);
1320
+ return sanitizeName(url ? url[1] : firstWord) || "command";
1321
+ };
1322
+ var sanitizeName = (name) => name.replace(/[^a-zA-Z0-9_-]/g, "").slice(0, 32);
1323
+ var normalizeCustomCommands = (raw) => {
1324
+ if (!Array.isArray(raw)) return [];
1325
+ const taken = /* @__PURE__ */ new Set();
1326
+ const uniqueName = (name) => {
1327
+ if (!taken.has(name)) {
1328
+ taken.add(name);
1329
+ return name;
1330
+ }
1331
+ let n = 2;
1332
+ while (taken.has(`${name}-${n}`)) n++;
1333
+ taken.add(`${name}-${n}`);
1334
+ return `${name}-${n}`;
1335
+ };
1336
+ const out = [];
1337
+ for (const entry of raw) {
1338
+ if (typeof entry === "string") {
1339
+ const command = entry.trim();
1340
+ if (!command) continue;
1341
+ out.push({ name: uniqueName(deriveCommandName(command)), command });
1342
+ continue;
1343
+ }
1344
+ if (entry && typeof entry === "object") {
1345
+ const { name, command } = entry;
1346
+ if (typeof command !== "string" || !command.trim()) continue;
1347
+ const cleaned = typeof name === "string" ? sanitizeName(name.trim()) : "";
1348
+ out.push({
1349
+ name: uniqueName(cleaned || deriveCommandName(command)),
1350
+ command
1351
+ });
1352
+ }
1353
+ }
1354
+ return out;
1355
+ };
1356
+
1316
1357
  export {
1317
1358
  registerBrowser,
1318
1359
  unregisterBrowser,
@@ -1359,5 +1400,6 @@ export {
1359
1400
  readHead,
1360
1401
  readAround,
1361
1402
  grepOutput,
1362
- readBubbleTitles
1403
+ readBubbleTitles,
1404
+ normalizeCustomCommands
1363
1405
  };
@@ -28636,6 +28636,7 @@ var NOTE_FILE = join4(COCKPIT_DIR, "note.md");
28636
28636
  var SCHEDULED_TASKS_FILE = join4(COCKPIT_DIR, "scheduled-tasks.json");
28637
28637
  var SETTINGS_FILE = join4(COCKPIT_DIR, "settings.json");
28638
28638
  var SKILLS_FILE = join4(COCKPIT_DIR, "skills.json");
28639
+ var HTML_APPS_FILE = join4(COCKPIT_DIR, "html.json");
28639
28640
  var REVIEW_DIR = join4(COCKPIT_DIR, "review");
28640
28641
  var REVIEW_SIGNAL_FILE = join4(REVIEW_DIR, "_signal");
28641
28642
  var CLAUDE_DIR = join4(HOME_DIR, ".claude");
@@ -10,7 +10,7 @@ import {
10
10
  readJsonFile,
11
11
  withFileLock,
12
12
  writeJsonFile
13
- } from "./chunk-BFESJMNO.mjs";
13
+ } from "./chunk-BRW4ZEIC.mjs";
14
14
 
15
15
  // packages/feature/agent/src/server/state/globalState.ts
16
16
  import { createReadStream, existsSync, statSync } from "fs";
package/dist/httpApi.mjs CHANGED
@@ -22,10 +22,10 @@ import {
22
22
  unregisterBrowser,
23
23
  unregisterTerminal,
24
24
  writeStdinToCommand
25
- } from "./chunk-FMJUH423.mjs";
25
+ } from "./chunk-7WPYQYA6.mjs";
26
26
  import {
27
27
  getTerminalHistoryPath
28
- } from "./chunk-BFESJMNO.mjs";
28
+ } from "./chunk-BRW4ZEIC.mjs";
29
29
  import "./chunk-7P6ASYW6.mjs";
30
30
 
31
31
  // src/lib/httpApi.ts