@surething/cockpit 1.0.245 → 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 (698) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +5 -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 +8 -8
  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 +2 -2
  23. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +2 -2
  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 +2 -2
  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 +1 -1
  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 +2 -2
  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 +1 -1
  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 -1
  130. package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
  131. package/.next-prod/server/app/api/html-apps/route.js +1 -1
  132. package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
  133. package/.next-prod/server/app/api/jupyter/load/route.js +1 -1
  134. package/.next-prod/server/app/api/jupyter/load/route.js.nft.json +1 -1
  135. package/.next-prod/server/app/api/jupyter/save/route.js +1 -1
  136. package/.next-prod/server/app/api/jupyter/save/route.js.nft.json +1 -1
  137. package/.next-prod/server/app/api/jupyter/shutdown/route.js +1 -1
  138. package/.next-prod/server/app/api/jupyter/shutdown/route.js.nft.json +1 -1
  139. package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
  140. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  141. package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
  142. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  143. package/.next-prod/server/app/api/lsp/references/route.js +1 -1
  144. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  145. package/.next-prod/server/app/api/lsp/status/route.js +1 -1
  146. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  147. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
  148. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  149. package/.next-prod/server/app/api/mysql/columns/route.js +1 -1
  150. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  151. package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
  152. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  153. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
  154. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  155. package/.next-prod/server/app/api/mysql/export/route.js +1 -1
  156. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  157. package/.next-prod/server/app/api/mysql/query/route.js +1 -1
  158. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  159. package/.next-prod/server/app/api/mysql/schemas/route.js +2 -2
  160. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  161. package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
  162. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  163. package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
  164. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  165. package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
  166. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  167. package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
  168. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  169. package/.next-prod/server/app/api/note/route.js +1 -1
  170. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  171. package/.next-prod/server/app/api/ollama/config/route.js +1 -1
  172. package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
  173. package/.next-prod/server/app/api/ollama/models/route.js +1 -1
  174. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  175. package/.next-prod/server/app/api/ollama/start/route.js +1 -1
  176. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  177. package/.next-prod/server/app/api/open-cursor/route.js +1 -1
  178. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  179. package/.next-prod/server/app/api/open-vscode/route.js +1 -1
  180. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  181. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  182. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  183. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
  184. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  185. package/.next-prod/server/app/api/project-settings/route.js +1 -1
  186. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  187. package/.next-prod/server/app/api/project-state/route.js +1 -1
  188. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  189. package/.next-prod/server/app/api/projectGraph/affected/route.js +1 -1
  190. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  191. package/.next-prod/server/app/api/projectGraph/callees/route.js +1 -1
  192. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  193. package/.next-prod/server/app/api/projectGraph/callers/route.js +1 -1
  194. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  195. package/.next-prod/server/app/api/projectGraph/coedit/route.js +1 -1
  196. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  197. package/.next-prod/server/app/api/projectGraph/context/route.js +1 -1
  198. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  199. package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
  200. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  201. package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
  202. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  203. package/.next-prod/server/app/api/projectGraph/impact/route.js +1 -1
  204. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  205. package/.next-prod/server/app/api/projectGraph/related/route.js +1 -1
  206. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  207. package/.next-prod/server/app/api/projectGraph/risk/route.js +1 -1
  208. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  209. package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
  210. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  211. package/.next-prod/server/app/api/projects/route.js +1 -1
  212. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  213. package/.next-prod/server/app/api/push/public-key/route.js +1 -1
  214. package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
  215. package/.next-prod/server/app/api/push/subscribe/route.js +1 -1
  216. package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
  217. package/.next-prod/server/app/api/push/unsubscribe/route.js +1 -1
  218. package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
  219. package/.next-prod/server/app/api/redis/command/route.js +1 -1
  220. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  221. package/.next-prod/server/app/api/redis/connect/route.js +1 -1
  222. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  223. package/.next-prod/server/app/api/redis/delete/route.js +1 -1
  224. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  225. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
  226. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  227. package/.next-prod/server/app/api/redis/get/route.js +1 -1
  228. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  229. package/.next-prod/server/app/api/redis/keys/route.js +1 -1
  230. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  231. package/.next-prod/server/app/api/redis/set/route.js +1 -1
  232. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  233. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  234. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  235. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  236. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  237. package/.next-prod/server/app/api/review/[id]/route.js +1 -1
  238. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  239. package/.next-prod/server/app/api/review/identify/route.js +1 -1
  240. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  241. package/.next-prod/server/app/api/review/order/route.js +1 -1
  242. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  243. package/.next-prod/server/app/api/review/route.js +1 -1
  244. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  245. package/.next-prod/server/app/api/review/share-info/route.js +1 -1
  246. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  247. package/.next-prod/server/app/api/review/users/route.js +1 -1
  248. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  249. package/.next-prod/server/app/api/scheduled-tasks/route.js +2 -2
  250. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  251. package/.next-prod/server/app/api/services/config/route.js +1 -1
  252. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  253. package/.next-prod/server/app/api/services/scripts/route.js +1 -1
  254. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  255. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  256. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  257. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
  258. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  259. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  260. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  261. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
  262. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  263. package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
  264. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  265. package/.next-prod/server/app/api/sessions/route.js +1 -1
  266. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  267. package/.next-prod/server/app/api/settings/route.js +1 -1
  268. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  269. package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
  270. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  271. package/.next-prod/server/app/api/skills/content/route.js +1 -1
  272. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  273. package/.next-prod/server/app/api/skills/route.js +1 -1
  274. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  275. package/.next-prod/server/app/api/snapshots/diff/route.js +1 -1
  276. package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
  277. package/.next-prod/server/app/api/snapshots/route.js +1 -1
  278. package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
  279. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
  280. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  281. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
  282. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  283. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
  284. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  285. package/.next-prod/server/app/api/terminal/env/route.js +1 -1
  286. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  287. package/.next-prod/server/app/api/terminal/history/route.js +1 -1
  288. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  289. package/.next-prod/server/app/api/version/route.js +1 -1
  290. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  291. package/.next-prod/server/app/apps/[...path]/route.js +1 -0
  292. package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -0
  293. package/.next-prod/server/app/apps/[...path]/route_client-reference-manifest.js +1 -0
  294. package/.next-prod/server/app/favicon.ico/route.js +1 -1
  295. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  296. package/.next-prod/server/app/m/page.js +2 -2
  297. package/.next-prod/server/app/m/page.js.nft.json +1 -1
  298. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  299. package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
  300. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  301. package/.next-prod/server/app/page.js +2 -2
  302. package/.next-prod/server/app/page.js.nft.json +1 -1
  303. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  304. package/.next-prod/server/app/project/page.js +2 -2
  305. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  306. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  307. package/.next-prod/server/app/review/[id]/page.js +2 -2
  308. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  309. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  310. package/.next-prod/server/app-paths-manifest.json +5 -5
  311. package/.next-prod/server/chunks/1813.js +1 -1
  312. package/.next-prod/server/chunks/4848.js +10 -6
  313. package/.next-prod/server/chunks/4916.js +206 -15
  314. package/.next-prod/server/chunks/{3282.js → 6023.js} +2 -2
  315. package/.next-prod/server/chunks/6038.js +1 -1
  316. package/.next-prod/server/chunks/9658.js +217 -26
  317. package/.next-prod/server/middleware-build-manifest.js +1 -1
  318. package/.next-prod/server/middleware-react-loadable-manifest.js +1 -1
  319. package/.next-prod/server/pages/404.html +2 -2
  320. package/.next-prod/server/pages/500.html +1 -1
  321. package/.next-prod/server/server-reference-manifest.json +1 -1
  322. package/.next-prod/static/{PlTlBBOBl0rKPGTdXqONe → D0hP0hbht20IrPe7xUl96}/_buildManifest.js +1 -1
  323. package/.next-prod/static/chunks/{9779.7a4ff1aee2a02f63.js → 2160.e38d781fd5c4cde0.js} +1 -1
  324. package/.next-prod/static/chunks/{2443-e80dab81d8fc10ab.js → 4304-408f5bddd7583676.js} +2 -2
  325. package/.next-prod/static/chunks/{4523.aaab4b1bd81167d4.js → 4523.3f277a24fbcfde6d.js} +1 -1
  326. package/.next-prod/static/chunks/6784-59c6418d36cf5a13.js +0 -0
  327. package/.next-prod/static/chunks/8010-75928e3e1e85c88e.js +25 -0
  328. package/.next-prod/static/chunks/{9530-cb2a4490ee7128d8.js → 9530-9a02795e0607577c.js} +210 -19
  329. package/.next-prod/static/chunks/app/_global-error/page-51252a3b116b8135.js +1 -0
  330. package/.next-prod/static/chunks/app/api/agent/test/route-51252a3b116b8135.js +1 -0
  331. package/.next-prod/static/chunks/app/api/bash/route-51252a3b116b8135.js +1 -0
  332. package/.next-prod/static/chunks/app/api/chat/codex/route-51252a3b116b8135.js +1 -0
  333. package/.next-prod/static/chunks/app/api/chat/deepseek/route-51252a3b116b8135.js +1 -0
  334. package/.next-prod/static/chunks/app/api/chat/kimi/route-51252a3b116b8135.js +1 -0
  335. package/.next-prod/static/chunks/app/api/chat/ollama/route-51252a3b116b8135.js +1 -0
  336. package/.next-prod/static/chunks/app/api/chat/pty-input/route-51252a3b116b8135.js +1 -0
  337. package/.next-prod/static/chunks/app/api/chat/route-51252a3b116b8135.js +1 -0
  338. package/.next-prod/static/chunks/app/api/chat/stop/route-51252a3b116b8135.js +1 -0
  339. package/.next-prod/static/chunks/app/api/claude-stats/route-51252a3b116b8135.js +1 -0
  340. package/.next-prod/static/chunks/app/api/commands/route-51252a3b116b8135.js +1 -0
  341. package/.next-prod/static/chunks/app/api/comments/route-51252a3b116b8135.js +1 -0
  342. package/.next-prod/static/chunks/app/api/db/columns/route-51252a3b116b8135.js +1 -0
  343. package/.next-prod/static/chunks/app/api/db/connect/route-51252a3b116b8135.js +1 -0
  344. package/.next-prod/static/chunks/app/api/db/disconnect/route-51252a3b116b8135.js +1 -0
  345. package/.next-prod/static/chunks/app/api/db/export/route-51252a3b116b8135.js +1 -0
  346. package/.next-prod/static/chunks/app/api/db/query/route-51252a3b116b8135.js +1 -0
  347. package/.next-prod/static/chunks/app/api/db/schemas/route-51252a3b116b8135.js +1 -0
  348. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-51252a3b116b8135.js +1 -0
  349. package/.next-prod/static/chunks/app/api/dev/spans/route-51252a3b116b8135.js +1 -0
  350. package/.next-prod/static/chunks/app/api/extension/version/route-51252a3b116b8135.js +1 -0
  351. package/.next-prod/static/chunks/app/api/file/route-51252a3b116b8135.js +1 -0
  352. package/.next-prod/static/chunks/app/api/files/blame/route-51252a3b116b8135.js +1 -0
  353. package/.next-prod/static/chunks/app/api/files/clipboard/route-51252a3b116b8135.js +1 -0
  354. package/.next-prod/static/chunks/app/api/files/copy/route-51252a3b116b8135.js +1 -0
  355. package/.next-prod/static/chunks/app/api/files/delete/route-51252a3b116b8135.js +1 -0
  356. package/.next-prod/static/chunks/app/api/files/expanded/route-51252a3b116b8135.js +1 -0
  357. package/.next-prod/static/chunks/app/api/files/index/route-51252a3b116b8135.js +1 -0
  358. package/.next-prod/static/chunks/app/api/files/init/route-51252a3b116b8135.js +1 -0
  359. package/.next-prod/static/chunks/app/api/files/paste/route-51252a3b116b8135.js +1 -0
  360. package/.next-prod/static/chunks/app/api/files/read/route-51252a3b116b8135.js +1 -0
  361. package/.next-prod/static/chunks/app/api/files/readdir/route-51252a3b116b8135.js +1 -0
  362. package/.next-prod/static/chunks/app/api/files/recent/route-51252a3b116b8135.js +1 -0
  363. package/.next-prod/static/chunks/app/api/files/save/route-51252a3b116b8135.js +1 -0
  364. package/.next-prod/static/chunks/app/api/files/search/route-51252a3b116b8135.js +1 -0
  365. package/.next-prod/static/chunks/app/api/files/stat/route-51252a3b116b8135.js +1 -0
  366. package/.next-prod/static/chunks/app/api/files/text/route-51252a3b116b8135.js +1 -0
  367. package/.next-prod/static/chunks/app/api/git/branch-diff/route-51252a3b116b8135.js +1 -0
  368. package/.next-prod/static/chunks/app/api/git/branches/route-51252a3b116b8135.js +1 -0
  369. package/.next-prod/static/chunks/app/api/git/commit-diff/route-51252a3b116b8135.js +1 -0
  370. package/.next-prod/static/chunks/app/api/git/commits/route-51252a3b116b8135.js +1 -0
  371. package/.next-prod/static/chunks/app/api/git/current-branch/route-51252a3b116b8135.js +1 -0
  372. package/.next-prod/static/chunks/app/api/git/diff/route-51252a3b116b8135.js +1 -0
  373. package/.next-prod/static/chunks/app/api/git/discard/route-51252a3b116b8135.js +1 -0
  374. package/.next-prod/static/chunks/app/api/git/stage/route-51252a3b116b8135.js +1 -0
  375. package/.next-prod/static/chunks/app/api/git/status/route-51252a3b116b8135.js +1 -0
  376. package/.next-prod/static/chunks/app/api/git/unstage/route-51252a3b116b8135.js +1 -0
  377. package/.next-prod/static/chunks/app/api/git/worktree/route-51252a3b116b8135.js +1 -0
  378. package/.next-prod/static/chunks/app/api/global-state/route-51252a3b116b8135.js +1 -0
  379. package/.next-prod/static/chunks/app/api/health/route-51252a3b116b8135.js +1 -0
  380. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-51252a3b116b8135.js +1 -0
  381. package/.next-prod/static/chunks/app/api/html-apps/route-51252a3b116b8135.js +1 -0
  382. package/.next-prod/static/chunks/app/api/jupyter/load/route-51252a3b116b8135.js +1 -0
  383. package/.next-prod/static/chunks/app/api/jupyter/save/route-51252a3b116b8135.js +1 -0
  384. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-51252a3b116b8135.js +1 -0
  385. package/.next-prod/static/chunks/app/api/lsp/definition/route-51252a3b116b8135.js +1 -0
  386. package/.next-prod/static/chunks/app/api/lsp/hover/route-51252a3b116b8135.js +1 -0
  387. package/.next-prod/static/chunks/app/api/lsp/references/route-51252a3b116b8135.js +1 -0
  388. package/.next-prod/static/chunks/app/api/lsp/status/route-51252a3b116b8135.js +1 -0
  389. package/.next-prod/static/chunks/app/api/lsp/warmup/route-51252a3b116b8135.js +1 -0
  390. package/.next-prod/static/chunks/app/api/mysql/columns/route-51252a3b116b8135.js +1 -0
  391. package/.next-prod/static/chunks/app/api/mysql/connect/route-51252a3b116b8135.js +1 -0
  392. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-51252a3b116b8135.js +1 -0
  393. package/.next-prod/static/chunks/app/api/mysql/export/route-51252a3b116b8135.js +1 -0
  394. package/.next-prod/static/chunks/app/api/mysql/query/route-51252a3b116b8135.js +1 -0
  395. package/.next-prod/static/chunks/app/api/mysql/schemas/route-51252a3b116b8135.js +1 -0
  396. package/.next-prod/static/chunks/app/api/neo4j/connect/route-51252a3b116b8135.js +1 -0
  397. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-51252a3b116b8135.js +1 -0
  398. package/.next-prod/static/chunks/app/api/neo4j/query/route-51252a3b116b8135.js +1 -0
  399. package/.next-prod/static/chunks/app/api/neo4j/schema/route-51252a3b116b8135.js +1 -0
  400. package/.next-prod/static/chunks/app/api/note/route-51252a3b116b8135.js +1 -0
  401. package/.next-prod/static/chunks/app/api/ollama/config/route-51252a3b116b8135.js +1 -0
  402. package/.next-prod/static/chunks/app/api/ollama/models/route-51252a3b116b8135.js +1 -0
  403. package/.next-prod/static/chunks/app/api/ollama/start/route-51252a3b116b8135.js +1 -0
  404. package/.next-prod/static/chunks/app/api/open-cursor/route-51252a3b116b8135.js +1 -0
  405. package/.next-prod/static/chunks/app/api/open-vscode/route-51252a3b116b8135.js +1 -0
  406. package/.next-prod/static/chunks/app/api/pick-folder/route-51252a3b116b8135.js +1 -0
  407. package/.next-prod/static/chunks/app/api/pinned-sessions/route-51252a3b116b8135.js +1 -0
  408. package/.next-prod/static/chunks/app/api/project-settings/route-51252a3b116b8135.js +1 -0
  409. package/.next-prod/static/chunks/app/api/project-state/route-51252a3b116b8135.js +1 -0
  410. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-51252a3b116b8135.js +1 -0
  411. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-51252a3b116b8135.js +1 -0
  412. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-51252a3b116b8135.js +1 -0
  413. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-51252a3b116b8135.js +1 -0
  414. package/.next-prod/static/chunks/app/api/projectGraph/context/route-51252a3b116b8135.js +1 -0
  415. package/.next-prod/static/chunks/app/api/projectGraph/file/route-51252a3b116b8135.js +1 -0
  416. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-51252a3b116b8135.js +1 -0
  417. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-51252a3b116b8135.js +1 -0
  418. package/.next-prod/static/chunks/app/api/projectGraph/related/route-51252a3b116b8135.js +1 -0
  419. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-51252a3b116b8135.js +1 -0
  420. package/.next-prod/static/chunks/app/api/projectGraph/search/route-51252a3b116b8135.js +1 -0
  421. package/.next-prod/static/chunks/app/api/projects/route-51252a3b116b8135.js +1 -0
  422. package/.next-prod/static/chunks/app/api/push/public-key/route-51252a3b116b8135.js +1 -0
  423. package/.next-prod/static/chunks/app/api/push/subscribe/route-51252a3b116b8135.js +1 -0
  424. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-51252a3b116b8135.js +1 -0
  425. package/.next-prod/static/chunks/app/api/redis/command/route-51252a3b116b8135.js +1 -0
  426. package/.next-prod/static/chunks/app/api/redis/connect/route-51252a3b116b8135.js +1 -0
  427. package/.next-prod/static/chunks/app/api/redis/delete/route-51252a3b116b8135.js +1 -0
  428. package/.next-prod/static/chunks/app/api/redis/disconnect/route-51252a3b116b8135.js +1 -0
  429. package/.next-prod/static/chunks/app/api/redis/get/route-51252a3b116b8135.js +1 -0
  430. package/.next-prod/static/chunks/app/api/redis/keys/route-51252a3b116b8135.js +1 -0
  431. package/.next-prod/static/chunks/app/api/redis/set/route-51252a3b116b8135.js +1 -0
  432. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-51252a3b116b8135.js +1 -0
  433. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-51252a3b116b8135.js +1 -0
  434. package/.next-prod/static/chunks/app/api/review/[id]/route-51252a3b116b8135.js +1 -0
  435. package/.next-prod/static/chunks/app/api/review/identify/route-51252a3b116b8135.js +1 -0
  436. package/.next-prod/static/chunks/app/api/review/order/route-51252a3b116b8135.js +1 -0
  437. package/.next-prod/static/chunks/app/api/review/route-51252a3b116b8135.js +1 -0
  438. package/.next-prod/static/chunks/app/api/review/share-info/route-51252a3b116b8135.js +1 -0
  439. package/.next-prod/static/chunks/app/api/review/users/route-51252a3b116b8135.js +1 -0
  440. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-51252a3b116b8135.js +1 -0
  441. package/.next-prod/static/chunks/app/api/services/config/route-51252a3b116b8135.js +1 -0
  442. package/.next-prod/static/chunks/app/api/services/scripts/route-51252a3b116b8135.js +1 -0
  443. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-51252a3b116b8135.js +1 -0
  444. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-51252a3b116b8135.js +1 -0
  445. package/.next-prod/static/chunks/app/api/session-by-path/route-51252a3b116b8135.js +1 -0
  446. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-51252a3b116b8135.js +1 -0
  447. package/.next-prod/static/chunks/app/api/sessions/projects/route-51252a3b116b8135.js +1 -0
  448. package/.next-prod/static/chunks/app/api/sessions/route-51252a3b116b8135.js +1 -0
  449. package/.next-prod/static/chunks/app/api/settings/route-51252a3b116b8135.js +1 -0
  450. package/.next-prod/static/chunks/app/api/skills/[id]/route-51252a3b116b8135.js +1 -0
  451. package/.next-prod/static/chunks/app/api/skills/content/route-51252a3b116b8135.js +1 -0
  452. package/.next-prod/static/chunks/app/api/skills/route-51252a3b116b8135.js +1 -0
  453. package/.next-prod/static/chunks/app/api/snapshots/diff/route-51252a3b116b8135.js +1 -0
  454. package/.next-prod/static/chunks/app/api/snapshots/route-51252a3b116b8135.js +1 -0
  455. package/.next-prod/static/chunks/app/api/terminal/aliases/route-51252a3b116b8135.js +1 -0
  456. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-51252a3b116b8135.js +1 -0
  457. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-51252a3b116b8135.js +1 -0
  458. package/.next-prod/static/chunks/app/api/terminal/env/route-51252a3b116b8135.js +1 -0
  459. package/.next-prod/static/chunks/app/api/terminal/history/route-51252a3b116b8135.js +1 -0
  460. package/.next-prod/static/chunks/app/api/version/route-51252a3b116b8135.js +1 -0
  461. package/.next-prod/static/chunks/app/apps/[...path]/route-51252a3b116b8135.js +1 -0
  462. package/.next-prod/static/chunks/app/{layout-f34cd2c3e09fc25f.js → layout-c33e42d8bc9d4b27.js} +1 -1
  463. package/.next-prod/static/chunks/app/m/page-03365a5db8980b50.js +1 -0
  464. package/.next-prod/static/chunks/app/manifest.webmanifest/route-51252a3b116b8135.js +1 -0
  465. package/.next-prod/static/chunks/app/{page-a9db2a83c07440f4.js → page-972d36c0519a910e.js} +1 -1
  466. package/.next-prod/static/chunks/app/project/{page-a9db2a83c07440f4.js → page-972d36c0519a910e.js} +1 -1
  467. package/.next-prod/static/chunks/app/review/[id]/page-c9716ea0049cc328.js +1 -0
  468. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-51252a3b116b8135.js +1 -0
  469. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-51252a3b116b8135.js +1 -0
  470. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-51252a3b116b8135.js +1 -0
  471. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-51252a3b116b8135.js +1 -0
  472. package/.next-prod/static/chunks/webpack-fb9d282647d95d0a.js +1 -0
  473. package/.next-prod/trace +14 -14
  474. package/.next-prod/trace-build +1 -1
  475. package/.next-prod/types/app/{api/preview → apps}/[...path]/route.ts +3 -3
  476. package/.next-prod/types/routes.d.ts +2 -2
  477. package/.next-prod/types/validator.ts +9 -9
  478. package/apps/file-viewer/app.jsx +411 -0
  479. package/apps/file-viewer/index.html +76 -0
  480. package/dist/{chunk-GOOVG5NZ.mjs → chunk-7WPYQYA6.mjs} +43 -1
  481. package/dist/httpApi.mjs +1 -1
  482. package/dist/scheduledTasks.mjs +10 -6
  483. package/dist/{server-SVZ344NE.mjs → server-MCN5AIEU.mjs} +3 -1
  484. package/dist/wsServer.mjs +2 -2
  485. package/package.json +6 -3
  486. package/public/html-lib/fonts/KaTeX_AMS-Regular-CYEKBG2K.woff +0 -0
  487. package/public/html-lib/fonts/KaTeX_AMS-Regular-JKX5W2C4.ttf +0 -0
  488. package/public/html-lib/fonts/KaTeX_AMS-Regular-U6PRYMIZ.woff2 +0 -0
  489. package/public/html-lib/fonts/KaTeX_Caligraphic-Bold-5QL5CMTE.woff2 +0 -0
  490. package/public/html-lib/fonts/KaTeX_Caligraphic-Bold-WZ3QSGD3.woff +0 -0
  491. package/public/html-lib/fonts/KaTeX_Caligraphic-Bold-ZTS3R3HK.ttf +0 -0
  492. package/public/html-lib/fonts/KaTeX_Caligraphic-Regular-3LKEU76G.woff +0 -0
  493. package/public/html-lib/fonts/KaTeX_Caligraphic-Regular-A7XRTZ5Q.ttf +0 -0
  494. package/public/html-lib/fonts/KaTeX_Caligraphic-Regular-KX5MEWCF.woff2 +0 -0
  495. package/public/html-lib/fonts/KaTeX_Fraktur-Bold-2QVFK6NQ.woff2 +0 -0
  496. package/public/html-lib/fonts/KaTeX_Fraktur-Bold-T4SWXBMT.woff +0 -0
  497. package/public/html-lib/fonts/KaTeX_Fraktur-Bold-WGHVTYOR.ttf +0 -0
  498. package/public/html-lib/fonts/KaTeX_Fraktur-Regular-2PEIFJSJ.woff2 +0 -0
  499. package/public/html-lib/fonts/KaTeX_Fraktur-Regular-5U4OPH2X.ttf +0 -0
  500. package/public/html-lib/fonts/KaTeX_Fraktur-Regular-PQMHCIK6.woff +0 -0
  501. package/public/html-lib/fonts/KaTeX_Main-Bold-2GA4IZIN.woff +0 -0
  502. package/public/html-lib/fonts/KaTeX_Main-Bold-W5FBVCZM.ttf +0 -0
  503. package/public/html-lib/fonts/KaTeX_Main-Bold-YP5VVQRP.woff2 +0 -0
  504. package/public/html-lib/fonts/KaTeX_Main-BoldItalic-4P4C7HJH.woff +0 -0
  505. package/public/html-lib/fonts/KaTeX_Main-BoldItalic-N4V3DX7S.woff2 +0 -0
  506. package/public/html-lib/fonts/KaTeX_Main-BoldItalic-ODMLBJJQ.ttf +0 -0
  507. package/public/html-lib/fonts/KaTeX_Main-Italic-I43T2HSR.ttf +0 -0
  508. package/public/html-lib/fonts/KaTeX_Main-Italic-RELBIK7M.woff2 +0 -0
  509. package/public/html-lib/fonts/KaTeX_Main-Italic-SASNQFN2.woff +0 -0
  510. package/public/html-lib/fonts/KaTeX_Main-Regular-ARRPAO67.woff2 +0 -0
  511. package/public/html-lib/fonts/KaTeX_Main-Regular-P5I74A2A.woff +0 -0
  512. package/public/html-lib/fonts/KaTeX_Main-Regular-W74P5G27.ttf +0 -0
  513. package/public/html-lib/fonts/KaTeX_Math-BoldItalic-6EBV3DK5.woff +0 -0
  514. package/public/html-lib/fonts/KaTeX_Math-BoldItalic-K4WTGH3J.woff2 +0 -0
  515. package/public/html-lib/fonts/KaTeX_Math-BoldItalic-VB447A4D.ttf +0 -0
  516. package/public/html-lib/fonts/KaTeX_Math-Italic-6KGCHLFN.woff2 +0 -0
  517. package/public/html-lib/fonts/KaTeX_Math-Italic-KKK3USB2.woff +0 -0
  518. package/public/html-lib/fonts/KaTeX_Math-Italic-SON4MRCA.ttf +0 -0
  519. package/public/html-lib/fonts/KaTeX_SansSerif-Bold-RRNVJFFW.woff2 +0 -0
  520. package/public/html-lib/fonts/KaTeX_SansSerif-Bold-STQ6RXC7.ttf +0 -0
  521. package/public/html-lib/fonts/KaTeX_SansSerif-Bold-X5M5EMOD.woff +0 -0
  522. package/public/html-lib/fonts/KaTeX_SansSerif-Italic-HMPFTM52.woff2 +0 -0
  523. package/public/html-lib/fonts/KaTeX_SansSerif-Italic-PSN4QKYX.woff +0 -0
  524. package/public/html-lib/fonts/KaTeX_SansSerif-Italic-WTBAZBGY.ttf +0 -0
  525. package/public/html-lib/fonts/KaTeX_SansSerif-Regular-2TL3USAE.ttf +0 -0
  526. package/public/html-lib/fonts/KaTeX_SansSerif-Regular-OQCII6EP.woff +0 -0
  527. package/public/html-lib/fonts/KaTeX_SansSerif-Regular-XIQ62X4E.woff2 +0 -0
  528. package/public/html-lib/fonts/KaTeX_Script-Regular-72OLXYNA.ttf +0 -0
  529. package/public/html-lib/fonts/KaTeX_Script-Regular-A5IFOEBS.woff +0 -0
  530. package/public/html-lib/fonts/KaTeX_Script-Regular-APUWIHLP.woff2 +0 -0
  531. package/public/html-lib/fonts/KaTeX_Size1-Regular-4HRHTS65.woff +0 -0
  532. package/public/html-lib/fonts/KaTeX_Size1-Regular-5LRUTBFT.woff2 +0 -0
  533. package/public/html-lib/fonts/KaTeX_Size1-Regular-7K6AASVL.ttf +0 -0
  534. package/public/html-lib/fonts/KaTeX_Size2-Regular-222HN3GT.ttf +0 -0
  535. package/public/html-lib/fonts/KaTeX_Size2-Regular-K5ZHAIS6.woff +0 -0
  536. package/public/html-lib/fonts/KaTeX_Size2-Regular-LELKET5D.woff2 +0 -0
  537. package/public/html-lib/fonts/KaTeX_Size3-Regular-TLFPAHDE.woff +0 -0
  538. package/public/html-lib/fonts/KaTeX_Size3-Regular-UFCO6WCA.ttf +0 -0
  539. package/public/html-lib/fonts/KaTeX_Size3-Regular-WQRQ47UD.woff2 +0 -0
  540. package/public/html-lib/fonts/KaTeX_Size4-Regular-7PGNVPQK.ttf +0 -0
  541. package/public/html-lib/fonts/KaTeX_Size4-Regular-CDMV7U5C.woff2 +0 -0
  542. package/public/html-lib/fonts/KaTeX_Size4-Regular-PKMWZHNC.woff +0 -0
  543. package/public/html-lib/fonts/KaTeX_Typewriter-Regular-3F5K6SQ6.ttf +0 -0
  544. package/public/html-lib/fonts/KaTeX_Typewriter-Regular-MJMFSK64.woff +0 -0
  545. package/public/html-lib/fonts/KaTeX_Typewriter-Regular-VBYJ4NRC.woff2 +0 -0
  546. package/public/html-lib/json-viewer.js +91 -0
  547. package/public/html-lib/markdown.css +419 -0
  548. package/public/html-lib/markdown.js +418 -0
  549. package/public/html-lib/pdf-viewer.css +444 -0
  550. package/public/html-lib/pdf-viewer.js +123 -0
  551. package/public/html-lib/theme.css +2 -0
  552. package/.next-prod/server/app/api/preview/[...path]/route.js +0 -1
  553. package/.next-prod/server/app/api/preview/[...path]/route.js.nft.json +0 -1
  554. package/.next-prod/server/app/api/preview/[...path]/route_client-reference-manifest.js +0 -1
  555. package/.next-prod/static/chunks/6784-0122b1622ba5c509.js +0 -0
  556. package/.next-prod/static/chunks/8010-2f5cec4469580ed9.js +0 -25
  557. package/.next-prod/static/chunks/app/_global-error/page-e255a9d1bcc8de59.js +0 -1
  558. package/.next-prod/static/chunks/app/api/agent/test/route-e255a9d1bcc8de59.js +0 -1
  559. package/.next-prod/static/chunks/app/api/bash/route-e255a9d1bcc8de59.js +0 -1
  560. package/.next-prod/static/chunks/app/api/chat/codex/route-e255a9d1bcc8de59.js +0 -1
  561. package/.next-prod/static/chunks/app/api/chat/deepseek/route-e255a9d1bcc8de59.js +0 -1
  562. package/.next-prod/static/chunks/app/api/chat/kimi/route-e255a9d1bcc8de59.js +0 -1
  563. package/.next-prod/static/chunks/app/api/chat/ollama/route-e255a9d1bcc8de59.js +0 -1
  564. package/.next-prod/static/chunks/app/api/chat/pty-input/route-e255a9d1bcc8de59.js +0 -1
  565. package/.next-prod/static/chunks/app/api/chat/route-e255a9d1bcc8de59.js +0 -1
  566. package/.next-prod/static/chunks/app/api/chat/stop/route-e255a9d1bcc8de59.js +0 -1
  567. package/.next-prod/static/chunks/app/api/claude-stats/route-e255a9d1bcc8de59.js +0 -1
  568. package/.next-prod/static/chunks/app/api/commands/route-e255a9d1bcc8de59.js +0 -1
  569. package/.next-prod/static/chunks/app/api/comments/route-e255a9d1bcc8de59.js +0 -1
  570. package/.next-prod/static/chunks/app/api/db/columns/route-e255a9d1bcc8de59.js +0 -1
  571. package/.next-prod/static/chunks/app/api/db/connect/route-e255a9d1bcc8de59.js +0 -1
  572. package/.next-prod/static/chunks/app/api/db/disconnect/route-e255a9d1bcc8de59.js +0 -1
  573. package/.next-prod/static/chunks/app/api/db/export/route-e255a9d1bcc8de59.js +0 -1
  574. package/.next-prod/static/chunks/app/api/db/query/route-e255a9d1bcc8de59.js +0 -1
  575. package/.next-prod/static/chunks/app/api/db/schemas/route-e255a9d1bcc8de59.js +0 -1
  576. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-e255a9d1bcc8de59.js +0 -1
  577. package/.next-prod/static/chunks/app/api/dev/spans/route-e255a9d1bcc8de59.js +0 -1
  578. package/.next-prod/static/chunks/app/api/extension/version/route-e255a9d1bcc8de59.js +0 -1
  579. package/.next-prod/static/chunks/app/api/file/route-e255a9d1bcc8de59.js +0 -1
  580. package/.next-prod/static/chunks/app/api/files/blame/route-e255a9d1bcc8de59.js +0 -1
  581. package/.next-prod/static/chunks/app/api/files/clipboard/route-e255a9d1bcc8de59.js +0 -1
  582. package/.next-prod/static/chunks/app/api/files/copy/route-e255a9d1bcc8de59.js +0 -1
  583. package/.next-prod/static/chunks/app/api/files/delete/route-e255a9d1bcc8de59.js +0 -1
  584. package/.next-prod/static/chunks/app/api/files/expanded/route-e255a9d1bcc8de59.js +0 -1
  585. package/.next-prod/static/chunks/app/api/files/index/route-e255a9d1bcc8de59.js +0 -1
  586. package/.next-prod/static/chunks/app/api/files/init/route-e255a9d1bcc8de59.js +0 -1
  587. package/.next-prod/static/chunks/app/api/files/paste/route-e255a9d1bcc8de59.js +0 -1
  588. package/.next-prod/static/chunks/app/api/files/read/route-e255a9d1bcc8de59.js +0 -1
  589. package/.next-prod/static/chunks/app/api/files/readdir/route-e255a9d1bcc8de59.js +0 -1
  590. package/.next-prod/static/chunks/app/api/files/recent/route-e255a9d1bcc8de59.js +0 -1
  591. package/.next-prod/static/chunks/app/api/files/save/route-e255a9d1bcc8de59.js +0 -1
  592. package/.next-prod/static/chunks/app/api/files/search/route-e255a9d1bcc8de59.js +0 -1
  593. package/.next-prod/static/chunks/app/api/files/stat/route-e255a9d1bcc8de59.js +0 -1
  594. package/.next-prod/static/chunks/app/api/files/text/route-e255a9d1bcc8de59.js +0 -1
  595. package/.next-prod/static/chunks/app/api/git/branch-diff/route-e255a9d1bcc8de59.js +0 -1
  596. package/.next-prod/static/chunks/app/api/git/branches/route-e255a9d1bcc8de59.js +0 -1
  597. package/.next-prod/static/chunks/app/api/git/commit-diff/route-e255a9d1bcc8de59.js +0 -1
  598. package/.next-prod/static/chunks/app/api/git/commits/route-e255a9d1bcc8de59.js +0 -1
  599. package/.next-prod/static/chunks/app/api/git/current-branch/route-e255a9d1bcc8de59.js +0 -1
  600. package/.next-prod/static/chunks/app/api/git/diff/route-e255a9d1bcc8de59.js +0 -1
  601. package/.next-prod/static/chunks/app/api/git/discard/route-e255a9d1bcc8de59.js +0 -1
  602. package/.next-prod/static/chunks/app/api/git/stage/route-e255a9d1bcc8de59.js +0 -1
  603. package/.next-prod/static/chunks/app/api/git/status/route-e255a9d1bcc8de59.js +0 -1
  604. package/.next-prod/static/chunks/app/api/git/unstage/route-e255a9d1bcc8de59.js +0 -1
  605. package/.next-prod/static/chunks/app/api/git/worktree/route-e255a9d1bcc8de59.js +0 -1
  606. package/.next-prod/static/chunks/app/api/global-state/route-e255a9d1bcc8de59.js +0 -1
  607. package/.next-prod/static/chunks/app/api/health/route-e255a9d1bcc8de59.js +0 -1
  608. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-e255a9d1bcc8de59.js +0 -1
  609. package/.next-prod/static/chunks/app/api/html-apps/route-e255a9d1bcc8de59.js +0 -1
  610. package/.next-prod/static/chunks/app/api/jupyter/load/route-e255a9d1bcc8de59.js +0 -1
  611. package/.next-prod/static/chunks/app/api/jupyter/save/route-e255a9d1bcc8de59.js +0 -1
  612. package/.next-prod/static/chunks/app/api/jupyter/shutdown/route-e255a9d1bcc8de59.js +0 -1
  613. package/.next-prod/static/chunks/app/api/lsp/definition/route-e255a9d1bcc8de59.js +0 -1
  614. package/.next-prod/static/chunks/app/api/lsp/hover/route-e255a9d1bcc8de59.js +0 -1
  615. package/.next-prod/static/chunks/app/api/lsp/references/route-e255a9d1bcc8de59.js +0 -1
  616. package/.next-prod/static/chunks/app/api/lsp/status/route-e255a9d1bcc8de59.js +0 -1
  617. package/.next-prod/static/chunks/app/api/lsp/warmup/route-e255a9d1bcc8de59.js +0 -1
  618. package/.next-prod/static/chunks/app/api/mysql/columns/route-e255a9d1bcc8de59.js +0 -1
  619. package/.next-prod/static/chunks/app/api/mysql/connect/route-e255a9d1bcc8de59.js +0 -1
  620. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-e255a9d1bcc8de59.js +0 -1
  621. package/.next-prod/static/chunks/app/api/mysql/export/route-e255a9d1bcc8de59.js +0 -1
  622. package/.next-prod/static/chunks/app/api/mysql/query/route-e255a9d1bcc8de59.js +0 -1
  623. package/.next-prod/static/chunks/app/api/mysql/schemas/route-e255a9d1bcc8de59.js +0 -1
  624. package/.next-prod/static/chunks/app/api/neo4j/connect/route-e255a9d1bcc8de59.js +0 -1
  625. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-e255a9d1bcc8de59.js +0 -1
  626. package/.next-prod/static/chunks/app/api/neo4j/query/route-e255a9d1bcc8de59.js +0 -1
  627. package/.next-prod/static/chunks/app/api/neo4j/schema/route-e255a9d1bcc8de59.js +0 -1
  628. package/.next-prod/static/chunks/app/api/note/route-e255a9d1bcc8de59.js +0 -1
  629. package/.next-prod/static/chunks/app/api/ollama/config/route-e255a9d1bcc8de59.js +0 -1
  630. package/.next-prod/static/chunks/app/api/ollama/models/route-e255a9d1bcc8de59.js +0 -1
  631. package/.next-prod/static/chunks/app/api/ollama/start/route-e255a9d1bcc8de59.js +0 -1
  632. package/.next-prod/static/chunks/app/api/open-cursor/route-e255a9d1bcc8de59.js +0 -1
  633. package/.next-prod/static/chunks/app/api/open-vscode/route-e255a9d1bcc8de59.js +0 -1
  634. package/.next-prod/static/chunks/app/api/pick-folder/route-e255a9d1bcc8de59.js +0 -1
  635. package/.next-prod/static/chunks/app/api/pinned-sessions/route-e255a9d1bcc8de59.js +0 -1
  636. package/.next-prod/static/chunks/app/api/preview/[...path]/route-e255a9d1bcc8de59.js +0 -1
  637. package/.next-prod/static/chunks/app/api/project-settings/route-e255a9d1bcc8de59.js +0 -1
  638. package/.next-prod/static/chunks/app/api/project-state/route-e255a9d1bcc8de59.js +0 -1
  639. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-e255a9d1bcc8de59.js +0 -1
  640. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-e255a9d1bcc8de59.js +0 -1
  641. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-e255a9d1bcc8de59.js +0 -1
  642. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-e255a9d1bcc8de59.js +0 -1
  643. package/.next-prod/static/chunks/app/api/projectGraph/context/route-e255a9d1bcc8de59.js +0 -1
  644. package/.next-prod/static/chunks/app/api/projectGraph/file/route-e255a9d1bcc8de59.js +0 -1
  645. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-e255a9d1bcc8de59.js +0 -1
  646. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-e255a9d1bcc8de59.js +0 -1
  647. package/.next-prod/static/chunks/app/api/projectGraph/related/route-e255a9d1bcc8de59.js +0 -1
  648. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-e255a9d1bcc8de59.js +0 -1
  649. package/.next-prod/static/chunks/app/api/projectGraph/search/route-e255a9d1bcc8de59.js +0 -1
  650. package/.next-prod/static/chunks/app/api/projects/route-e255a9d1bcc8de59.js +0 -1
  651. package/.next-prod/static/chunks/app/api/push/public-key/route-e255a9d1bcc8de59.js +0 -1
  652. package/.next-prod/static/chunks/app/api/push/subscribe/route-e255a9d1bcc8de59.js +0 -1
  653. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-e255a9d1bcc8de59.js +0 -1
  654. package/.next-prod/static/chunks/app/api/redis/command/route-e255a9d1bcc8de59.js +0 -1
  655. package/.next-prod/static/chunks/app/api/redis/connect/route-e255a9d1bcc8de59.js +0 -1
  656. package/.next-prod/static/chunks/app/api/redis/delete/route-e255a9d1bcc8de59.js +0 -1
  657. package/.next-prod/static/chunks/app/api/redis/disconnect/route-e255a9d1bcc8de59.js +0 -1
  658. package/.next-prod/static/chunks/app/api/redis/get/route-e255a9d1bcc8de59.js +0 -1
  659. package/.next-prod/static/chunks/app/api/redis/keys/route-e255a9d1bcc8de59.js +0 -1
  660. package/.next-prod/static/chunks/app/api/redis/set/route-e255a9d1bcc8de59.js +0 -1
  661. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-e255a9d1bcc8de59.js +0 -1
  662. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-e255a9d1bcc8de59.js +0 -1
  663. package/.next-prod/static/chunks/app/api/review/[id]/route-e255a9d1bcc8de59.js +0 -1
  664. package/.next-prod/static/chunks/app/api/review/identify/route-e255a9d1bcc8de59.js +0 -1
  665. package/.next-prod/static/chunks/app/api/review/order/route-e255a9d1bcc8de59.js +0 -1
  666. package/.next-prod/static/chunks/app/api/review/route-e255a9d1bcc8de59.js +0 -1
  667. package/.next-prod/static/chunks/app/api/review/share-info/route-e255a9d1bcc8de59.js +0 -1
  668. package/.next-prod/static/chunks/app/api/review/users/route-e255a9d1bcc8de59.js +0 -1
  669. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-e255a9d1bcc8de59.js +0 -1
  670. package/.next-prod/static/chunks/app/api/services/config/route-e255a9d1bcc8de59.js +0 -1
  671. package/.next-prod/static/chunks/app/api/services/scripts/route-e255a9d1bcc8de59.js +0 -1
  672. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-e255a9d1bcc8de59.js +0 -1
  673. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-e255a9d1bcc8de59.js +0 -1
  674. package/.next-prod/static/chunks/app/api/session-by-path/route-e255a9d1bcc8de59.js +0 -1
  675. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-e255a9d1bcc8de59.js +0 -1
  676. package/.next-prod/static/chunks/app/api/sessions/projects/route-e255a9d1bcc8de59.js +0 -1
  677. package/.next-prod/static/chunks/app/api/sessions/route-e255a9d1bcc8de59.js +0 -1
  678. package/.next-prod/static/chunks/app/api/settings/route-e255a9d1bcc8de59.js +0 -1
  679. package/.next-prod/static/chunks/app/api/skills/[id]/route-e255a9d1bcc8de59.js +0 -1
  680. package/.next-prod/static/chunks/app/api/skills/content/route-e255a9d1bcc8de59.js +0 -1
  681. package/.next-prod/static/chunks/app/api/skills/route-e255a9d1bcc8de59.js +0 -1
  682. package/.next-prod/static/chunks/app/api/snapshots/diff/route-e255a9d1bcc8de59.js +0 -1
  683. package/.next-prod/static/chunks/app/api/snapshots/route-e255a9d1bcc8de59.js +0 -1
  684. package/.next-prod/static/chunks/app/api/terminal/aliases/route-e255a9d1bcc8de59.js +0 -1
  685. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-e255a9d1bcc8de59.js +0 -1
  686. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-e255a9d1bcc8de59.js +0 -1
  687. package/.next-prod/static/chunks/app/api/terminal/env/route-e255a9d1bcc8de59.js +0 -1
  688. package/.next-prod/static/chunks/app/api/terminal/history/route-e255a9d1bcc8de59.js +0 -1
  689. package/.next-prod/static/chunks/app/api/version/route-e255a9d1bcc8de59.js +0 -1
  690. package/.next-prod/static/chunks/app/m/page-4e8c9751c7ef8397.js +0 -1
  691. package/.next-prod/static/chunks/app/manifest.webmanifest/route-e255a9d1bcc8de59.js +0 -1
  692. package/.next-prod/static/chunks/app/review/[id]/page-0c5d03d65758c7dc.js +0 -1
  693. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-e255a9d1bcc8de59.js +0 -1
  694. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-e255a9d1bcc8de59.js +0 -1
  695. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-e255a9d1bcc8de59.js +0 -1
  696. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-e255a9d1bcc8de59.js +0 -1
  697. package/.next-prod/static/chunks/webpack-01274185cb710e57.js +0 -1
  698. /package/.next-prod/static/{PlTlBBOBl0rKPGTdXqONe → D0hP0hbht20IrPe7xUl96}/_ssgManifest.js +0 -0
@@ -70,7 +70,6 @@
70
70
  "/api/ollama/config/route": "app/api/ollama/config/route.js",
71
71
  "/api/ollama/models/route": "app/api/ollama/models/route.js",
72
72
  "/api/ollama/start/route": "app/api/ollama/start/route.js",
73
- "/api/preview/[...path]/route": "app/api/preview/[...path]/route.js",
74
73
  "/api/projectGraph/affected/route": "app/api/projectGraph/affected/route.js",
75
74
  "/api/projectGraph/callees/route": "app/api/projectGraph/callees/route.js",
76
75
  "/api/projectGraph/callers/route": "app/api/projectGraph/callers/route.js",
@@ -116,22 +115,23 @@
116
115
  "/api/terminal/autocomplete/route": "app/api/terminal/autocomplete/route.js",
117
116
  "/api/terminal/env/route": "app/api/terminal/env/route.js",
118
117
  "/api/terminal/history/route": "app/api/terminal/history/route.js",
118
+ "/apps/[...path]/route": "app/apps/[...path]/route.js",
119
119
  "/favicon.ico/route": "app/favicon.ico/route.js",
120
120
  "/manifest.webmanifest/route": "app/manifest.webmanifest/route.js",
121
121
  "/api/agent/test/route": "app/api/agent/test/route.js",
122
122
  "/api/extension/version/route": "app/api/extension/version/route.js",
123
123
  "/api/dev/spans/route": "app/api/dev/spans/route.js",
124
124
  "/api/health/route": "app/api/health/route.js",
125
- "/api/note/route": "app/api/note/route.js",
126
125
  "/api/open-cursor/route": "app/api/open-cursor/route.js",
126
+ "/api/note/route": "app/api/note/route.js",
127
127
  "/api/open-vscode/route": "app/api/open-vscode/route.js",
128
- "/api/pick-folder/route": "app/api/pick-folder/route.js",
129
128
  "/api/pinned-sessions/route": "app/api/pinned-sessions/route.js",
129
+ "/api/pick-folder/route": "app/api/pick-folder/route.js",
130
130
  "/api/project-settings/route": "app/api/project-settings/route.js",
131
- "/api/project-state/route": "app/api/project-state/route.js",
132
131
  "/api/projects/route": "app/api/projects/route.js",
133
- "/api/services/config/route": "app/api/services/config/route.js",
132
+ "/api/project-state/route": "app/api/project-state/route.js",
134
133
  "/api/services/scripts/route": "app/api/services/scripts/route.js",
134
+ "/api/services/config/route": "app/api/services/config/route.js",
135
135
  "/api/settings/route": "app/api/settings/route.js",
136
136
  "/api/terminal/bubble-order/route": "app/api/terminal/bubble-order/route.js",
137
137
  "/api/version/route": "app/api/version/route.js",
@@ -1 +1 @@
1
- exports.id=1813,exports.ids=[1813],exports.modules={830:(a,b,c)=>{"use strict";var d=c(51703);c.o(d,"NextResponse")&&c.d(b,{NextResponse:function(){return d.NextResponse}})},4782:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"connection",{enumerable:!0,get:function(){return k}});let d=c(29294),e=c(63033),f=c(23445),g=c(15693),h=c(48894),i=c(92305);c(65934);let j=c(72339);function k(){let a=d.workAsyncStorage.getStore(),b=e.workUnitAsyncStorage.getStore();if(a){if(b&&"after"===b.phase&&!(0,i.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside \`after()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but \`after()\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E827",enumerable:!1,configurable:!0});if(a.forceStatic)return Promise.resolve(void 0);if(a.dynamicShouldError)throw Object.defineProperty(new g.StaticGenBailoutError(`Route ${a.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`connection()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E847",enumerable:!1,configurable:!0});if(b)switch(b.type){case"cache":{let b=Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside "use cache". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual request, but caches must be able to be produced before a request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E841",enumerable:!1,configurable:!0});throw Error.captureStackTrace(b,k),a.invalidDynamicUsageError??=b,b}case"private-cache":{let b=Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside "use cache: private". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual navigation request, but caches must be able to be produced before a navigation request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E837",enumerable:!1,configurable:!0});throw Error.captureStackTrace(b,k),a.invalidDynamicUsageError??=b,b}case"unstable-cache":throw Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside a function cached with \`unstable_cache()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but caches must be able to be produced before a Request so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E840",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1125",enumerable:!1,configurable:!0});case"prerender":case"prerender-client":case"prerender-runtime":return(0,h.makeHangingPromise)(b.renderSignal,a.route,"`connection()`");case"validation-client":{let a="`connection`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1063",enumerable:!1,configurable:!0})}case"prerender-ppr":return(0,f.postponeWithTracking)(a.route,"connection",b.dynamicTracking);case"prerender-legacy":return(0,f.throwToInterruptStaticGeneration)("connection",a,b);case"request":if((0,f.trackDynamicDataInDynamicRender)(b),b.asyncApiPromises)return b.asyncApiPromises.connection;return Promise.resolve(void 0)}}(0,e.throwForMissingRequestStore)("connection")}},7909:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"after",{enumerable:!0,get:function(){return e}});let d=c(29294);function e(a){let b=d.workAsyncStorage.getStore();if(!b)throw Object.defineProperty(Error("`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context"),"__NEXT_ERROR_CODE",{value:"E468",enumerable:!1,configurable:!0});let{afterContext:c}=b;return c.after(a)}},19225:(a,b,c)=>{"use strict";a.exports=c(44870)},22688:(a,b)=>{"use strict";function c(){throw Object.defineProperty(Error('ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead'),"__NEXT_ERROR_CODE",{value:"E183",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ImageResponse",{enumerable:!0,get:function(){return c}})},30240:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d,e={isBot:function(){return h},userAgent:function(){return j},userAgentFromString:function(){return i}};for(var f in e)Object.defineProperty(b,f,{enumerable:!0,get:e[f]});let g=(d=c(42399))&&d.__esModule?d:{default:d};function h(a){return/Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(a)}function i(a){return{...(0,g.default)(a),isBot:void 0!==a&&h(a)}}function j({headers:a}){return i(a.get("user-agent")||void 0)}},34327:(a,b,c)=>{"use strict";var d,e;Object.defineProperty(b,"__esModule",{value:!0}),d=c(7909),e=b,Object.keys(d).forEach(function(a){"default"===a||Object.prototype.hasOwnProperty.call(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:function(){return d[a]}})})},38293:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"URLPattern",{enumerable:!0,get:function(){return c}});let c="u"<typeof URLPattern?void 0:URLPattern},42399:(a,b,c)=>{var d,e={226:function(e,f){!function(g){"use strict";var h="function",i="undefined",j="object",k="string",l="major",m="model",n="name",o="type",p="vendor",q="version",r="architecture",s="console",t="mobile",u="tablet",v="smarttv",w="wearable",x="embedded",y="Amazon",z="Apple",A="ASUS",B="BlackBerry",C="Browser",D="Chrome",E="Firefox",F="Google",G="Huawei",H="Microsoft",I="Motorola",J="Opera",K="Samsung",L="Sharp",M="Sony",N="Xiaomi",O="Zebra",P="Facebook",Q="Chromium OS",R="Mac OS",S=function(a,b){var c={};for(var d in a)b[d]&&b[d].length%2==0?c[d]=b[d].concat(a[d]):c[d]=a[d];return c},T=function(a){for(var b={},c=0;c<a.length;c++)b[a[c].toUpperCase()]=a[c];return b},U=function(a,b){return typeof a===k&&-1!==V(b).indexOf(V(a))},V=function(a){return a.toLowerCase()},W=function(a,b){if(typeof a===k)return a=a.replace(/^\s\s*/,""),typeof b===i?a:a.substring(0,350)},X=function(a,b){for(var c,d,e,f,g,i,k=0;k<b.length&&!g;){var l=b[k],m=b[k+1];for(c=d=0;c<l.length&&!g&&l[c];)if(g=l[c++].exec(a))for(e=0;e<m.length;e++)i=g[++d],typeof(f=m[e])===j&&f.length>0?2===f.length?typeof f[1]==h?this[f[0]]=f[1].call(this,i):this[f[0]]=f[1]:3===f.length?typeof f[1]!==h||f[1].exec&&f[1].test?this[f[0]]=i?i.replace(f[1],f[2]):void 0:this[f[0]]=i?f[1].call(this,i,f[2]):void 0:4===f.length&&(this[f[0]]=i?f[3].call(this,i.replace(f[1],f[2])):void 0):this[f]=i||void 0;k+=2}},Y=function(a,b){for(var c in b)if(typeof b[c]===j&&b[c].length>0){for(var d=0;d<b[c].length;d++)if(U(b[c][d],a))return"?"===c?void 0:c}else if(U(b[c],a))return"?"===c?void 0:c;return a},Z={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},$={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[q,[n,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[q,[n,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[n,q],[/opios[\/ ]+([\w\.]+)/i],[q,[n,J+" Mini"]],[/\bopr\/([\w\.]+)/i],[q,[n,J]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[n,q],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[q,[n,"UC"+C]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i],[q,[n,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[q,[n,"WeChat"]],[/konqueror\/([\w\.]+)/i],[q,[n,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[q,[n,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[q,[n,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[n,/(.+)/,"$1 Secure "+C],q],[/\bfocus\/([\w\.]+)/i],[q,[n,E+" Focus"]],[/\bopt\/([\w\.]+)/i],[q,[n,J+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[q,[n,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[q,[n,"Dolphin"]],[/coast\/([\w\.]+)/i],[q,[n,J+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[q,[n,"MIUI "+C]],[/fxios\/([-\w\.]+)/i],[q,[n,E]],[/\bqihu|(qi?ho?o?|360)browser/i],[[n,"360 "+C]],[/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i],[[n,/(.+)/,"$1 "+C],q],[/(comodo_dragon)\/([\w\.]+)/i],[[n,/_/g," "],q],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[n,q],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i,/\[(linkedin)app\]/i],[n],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[n,P],q],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[n,q],[/\bgsa\/([\w\.]+) .*safari\//i],[q,[n,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[q,[n,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[q,[n,D+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[n,D+" WebView"],q],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[q,[n,"Android "+C]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[n,q],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[q,[n,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[q,n],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[n,[q,Y,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[n,q],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[n,"Netscape"],q],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[q,[n,E+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[n,q],[/(cobalt)\/([\w\.]+)/i],[n,[q,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[r,"amd64"]],[/(ia32(?=;))/i],[[r,V]],[/((?:i[346]|x)86)[;\)]/i],[[r,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[r,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[r,"armhf"]],[/windows (ce|mobile); ppc;/i],[[r,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[r,/ower/,"",V]],[/(sun4\w)[;\)]/i],[[r,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[r,V]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[m,[p,K],[o,u]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[m,[p,K],[o,t]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[m,[p,z],[o,t]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[m,[p,z],[o,u]],[/(macintosh);/i],[m,[p,z]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[m,[p,L],[o,t]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[m,[p,G],[o,u]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[m,[p,G],[o,t]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[m,/_/g," "],[p,N],[o,t]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[m,/_/g," "],[p,N],[o,u]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[m,[p,"OPPO"],[o,t]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[m,[p,"Vivo"],[o,t]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[m,[p,"Realme"],[o,t]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[m,[p,I],[o,t]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[m,[p,I],[o,u]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[m,[p,"LG"],[o,u]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[m,[p,"LG"],[o,t]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[m,[p,"Lenovo"],[o,u]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[m,/_/g," "],[p,"Nokia"],[o,t]],[/(pixel c)\b/i],[m,[p,F],[o,u]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[m,[p,F],[o,t]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[m,[p,M],[o,t]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[m,"Xperia Tablet"],[p,M],[o,u]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[m,[p,"OnePlus"],[o,t]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[m,[p,y],[o,u]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[m,/(.+)/g,"Fire Phone $1"],[p,y],[o,t]],[/(playbook);[-\w\),; ]+(rim)/i],[m,p,[o,u]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[m,[p,B],[o,t]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[m,[p,A],[o,u]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[m,[p,A],[o,t]],[/(nexus 9)/i],[m,[p,"HTC"],[o,u]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[p,[m,/_/g," "],[o,t]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[m,[p,"Acer"],[o,u]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[m,[p,"Meizu"],[o,t]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[p,m,[o,t]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[p,m,[o,u]],[/(surface duo)/i],[m,[p,H],[o,u]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[m,[p,"Fairphone"],[o,t]],[/(u304aa)/i],[m,[p,"AT&T"],[o,t]],[/\bsie-(\w*)/i],[m,[p,"Siemens"],[o,t]],[/\b(rct\w+) b/i],[m,[p,"RCA"],[o,u]],[/\b(venue[\d ]{2,7}) b/i],[m,[p,"Dell"],[o,u]],[/\b(q(?:mv|ta)\w+) b/i],[m,[p,"Verizon"],[o,u]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[m,[p,"Barnes & Noble"],[o,u]],[/\b(tm\d{3}\w+) b/i],[m,[p,"NuVision"],[o,u]],[/\b(k88) b/i],[m,[p,"ZTE"],[o,u]],[/\b(nx\d{3}j) b/i],[m,[p,"ZTE"],[o,t]],[/\b(gen\d{3}) b.+49h/i],[m,[p,"Swiss"],[o,t]],[/\b(zur\d{3}) b/i],[m,[p,"Swiss"],[o,u]],[/\b((zeki)?tb.*\b) b/i],[m,[p,"Zeki"],[o,u]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[p,"Dragon Touch"],m,[o,u]],[/\b(ns-?\w{0,9}) b/i],[m,[p,"Insignia"],[o,u]],[/\b((nxa|next)-?\w{0,9}) b/i],[m,[p,"NextBook"],[o,u]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[p,"Voice"],m,[o,t]],[/\b(lvtel\-)?(v1[12]) b/i],[[p,"LvTel"],m,[o,t]],[/\b(ph-1) /i],[m,[p,"Essential"],[o,t]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[m,[p,"Envizen"],[o,u]],[/\b(trio[-\w\. ]+) b/i],[m,[p,"MachSpeed"],[o,u]],[/\btu_(1491) b/i],[m,[p,"Rotor"],[o,u]],[/(shield[\w ]+) b/i],[m,[p,"Nvidia"],[o,u]],[/(sprint) (\w+)/i],[p,m,[o,t]],[/(kin\.[onetw]{3})/i],[[m,/\./g," "],[p,H],[o,t]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[m,[p,O],[o,u]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[m,[p,O],[o,t]],[/smart-tv.+(samsung)/i],[p,[o,v]],[/hbbtv.+maple;(\d+)/i],[[m,/^/,"SmartTV"],[p,K],[o,v]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[p,"LG"],[o,v]],[/(apple) ?tv/i],[p,[m,z+" TV"],[o,v]],[/crkey/i],[[m,D+"cast"],[p,F],[o,v]],[/droid.+aft(\w)( bui|\))/i],[m,[p,y],[o,v]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[m,[p,L],[o,v]],[/(bravia[\w ]+)( bui|\))/i],[m,[p,M],[o,v]],[/(mitv-\w{5}) bui/i],[m,[p,N],[o,v]],[/Hbbtv.*(technisat) (.*);/i],[p,m,[o,v]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[p,W],[m,W],[o,v]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[o,v]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[p,m,[o,s]],[/droid.+; (shield) bui/i],[m,[p,"Nvidia"],[o,s]],[/(playstation [345portablevi]+)/i],[m,[p,M],[o,s]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[m,[p,H],[o,s]],[/((pebble))app/i],[p,m,[o,w]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[m,[p,z],[o,w]],[/droid.+; (glass) \d/i],[m,[p,F],[o,w]],[/droid.+; (wt63?0{2,3})\)/i],[m,[p,O],[o,w]],[/(quest( 2| pro)?)/i],[m,[p,P],[o,w]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[p,[o,x]],[/(aeobc)\b/i],[m,[p,y],[o,x]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[m,[o,t]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[m,[o,u]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[o,u]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[o,t]],[/(android[-\w\. ]{0,9});.+buil/i],[m,[p,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[q,[n,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[q,[n,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[n,q],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[q,n]],os:[[/microsoft (windows) (vista|xp)/i],[n,q],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[n,[q,Y,Z]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[n,"Windows"],[q,Y,Z]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/ios;fbsv\/([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[q,/_/g,"."],[n,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[n,R],[q,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[q,n],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[n,q],[/\(bb(10);/i],[q,[n,B]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[q,[n,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[q,[n,E+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[q,[n,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[q,[n,"watchOS"]],[/crkey\/([\d\.]+)/i],[q,[n,D+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[n,Q],q],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[n,q],[/(sunos) ?([\w\.\d]*)/i],[[n,"Solaris"],q],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[n,q]]},_=function(a,b){if(typeof a===j&&(b=a,a=void 0),!(this instanceof _))return new _(a,b).getResult();var c=typeof g!==i&&g.navigator?g.navigator:void 0,d=a||(c&&c.userAgent?c.userAgent:""),e=c&&c.userAgentData?c.userAgentData:void 0,f=b?S($,b):$,s=c&&c.userAgent==d;return this.getBrowser=function(){var a,b={};return b[n]=void 0,b[q]=void 0,X.call(b,d,f.browser),b[l]=typeof(a=b[q])===k?a.replace(/[^\d\.]/g,"").split(".")[0]:void 0,s&&c&&c.brave&&typeof c.brave.isBrave==h&&(b[n]="Brave"),b},this.getCPU=function(){var a={};return a[r]=void 0,X.call(a,d,f.cpu),a},this.getDevice=function(){var a={};return a[p]=void 0,a[m]=void 0,a[o]=void 0,X.call(a,d,f.device),s&&!a[o]&&e&&e.mobile&&(a[o]=t),s&&"Macintosh"==a[m]&&c&&typeof c.standalone!==i&&c.maxTouchPoints&&c.maxTouchPoints>2&&(a[m]="iPad",a[o]=u),a},this.getEngine=function(){var a={};return a[n]=void 0,a[q]=void 0,X.call(a,d,f.engine),a},this.getOS=function(){var a={};return a[n]=void 0,a[q]=void 0,X.call(a,d,f.os),s&&!a[n]&&e&&"Unknown"!=e.platform&&(a[n]=e.platform.replace(/chrome os/i,Q).replace(/macos/i,R)),a},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return d},this.setUA=function(a){return d=typeof a===k&&a.length>350?W(a,350):a,this},this.setUA(d),this};_.VERSION="1.0.35",_.BROWSER=T([n,q,l]),_.CPU=T([r]),_.DEVICE=T([m,p,o,s,t,v,u,w,x]),_.ENGINE=_.OS=T([n,q]),typeof f!==i?(e.exports&&(f=e.exports=_),f.UAParser=_):c.amdO?void 0===(d=(function(){return _}).call(b,c,b,a))||(a.exports=d):typeof g!==i&&(g.UAParser=_);var aa=typeof g!==i&&(g.jQuery||g.Zepto);if(aa&&!aa.ua){var ab=new _;aa.ua=ab.getResult(),aa.ua.get=function(){return ab.getUA()},aa.ua.set=function(a){ab.setUA(a);var b=ab.getResult();for(var c in b)aa.ua[c]=b[c]}}}("object"==typeof window?window:this)}},f={};function g(a){var b=f[a];if(void 0!==b)return b.exports;var c=f[a]={exports:{}},d=!0;try{e[a].call(c.exports,c,c.exports,g),d=!1}finally{d&&delete f[a]}return c.exports}g.ab=__dirname+"/",a.exports=g(226)},51703:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={ImageResponse:function(){return f.ImageResponse},NextRequest:function(){return g.NextRequest},NextResponse:function(){return h.NextResponse},URLPattern:function(){return j.URLPattern},after:function(){return k.after},connection:function(){return l.connection},userAgent:function(){return i.userAgent},userAgentFromString:function(){return i.userAgentFromString}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(22688),g=c(43690),h=c(70176),i=c(30240),j=c(38293),k=c(34327),l=c(4782)},70176:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"NextResponse",{enumerable:!0,get:function(){return l}});let d=c(91488),e=c(72642),f=c(62018),g=c(20445),h=c(91488),i=Symbol("internal response"),j=new Set([301,302,303,307,308]);function k(a,b){var c;if(null==a||null==(c=a.request)?void 0:c.headers){if(!(a.request.headers instanceof Headers))throw Object.defineProperty(Error("request.headers must be an instance of Headers"),"__NEXT_ERROR_CODE",{value:"E119",enumerable:!1,configurable:!0});let c=[];for(let[d,e]of a.request.headers)b.set("x-middleware-request-"+d,e),c.push(d);b.set("x-middleware-override-headers",c.join(","))}}class l extends Response{constructor(a,b={}){super(a,b);const c=this.headers,j=new Proxy(new h.ResponseCookies(c),{get(a,e,f){switch(e){case"delete":case"set":return(...f)=>{let g=Reflect.apply(a[e],a,f),i=new Headers(c);return g instanceof h.ResponseCookies&&c.set("x-middleware-set-cookie",g.getAll().map(a=>(0,d.stringifyCookie)(a)).join(",")),k(b,i),g};default:return g.ReflectAdapter.get(a,e,f)}}});this[i]={cookies:j,url:b.url?new e.NextURL(b.url,{headers:(0,f.toNodeOutgoingHttpHeaders)(c),nextConfig:b.nextConfig}):void 0}}[Symbol.for("edge-runtime.inspect.custom")](){return{cookies:this.cookies,url:this.url,body:this.body,bodyUsed:this.bodyUsed,headers:Object.fromEntries(this.headers),ok:this.ok,redirected:this.redirected,status:this.status,statusText:this.statusText,type:this.type}}get cookies(){return this[i].cookies}static json(a,b){let c=Response.json(a,b);return new l(c.body,c)}static redirect(a,b){let c="number"==typeof b?b:(null==b?void 0:b.status)??307;if(!j.has(c))throw Object.defineProperty(RangeError('Failed to execute "redirect" on "response": Invalid status code'),"__NEXT_ERROR_CODE",{value:"E529",enumerable:!1,configurable:!0});let d="object"==typeof b?b:{},e=new Headers(null==d?void 0:d.headers);return e.set("Location",(0,f.validateURL)(a)),new l(null,{...d,headers:e,status:c})}static rewrite(a,b){let c=new Headers(null==b?void 0:b.headers);return c.set("x-middleware-rewrite",(0,f.validateURL)(a)),k(b,c),new l(null,{...b,headers:c})}static next(a){let b=new Headers(null==a?void 0:a.headers);return b.set("x-middleware-next","1"),k(a,b),new l(null,{...a,headers:b})}}},92280:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},92305:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(15693),g=c(3295);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}}};
1
+ exports.id=1813,exports.ids=[1813],exports.modules={4782:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"connection",{enumerable:!0,get:function(){return k}});let d=c(29294),e=c(63033),f=c(23445),g=c(15693),h=c(48894),i=c(92305);c(65934);let j=c(72339);function k(){let a=d.workAsyncStorage.getStore(),b=e.workUnitAsyncStorage.getStore();if(a){if(b&&"after"===b.phase&&!(0,i.isRequestAPICallableInsideAfter)())throw Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside \`after()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but \`after()\` executes after the request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/canary/app/api-reference/functions/after`),"__NEXT_ERROR_CODE",{value:"E827",enumerable:!1,configurable:!0});if(a.forceStatic)return Promise.resolve(void 0);if(a.dynamicShouldError)throw Object.defineProperty(new g.StaticGenBailoutError(`Route ${a.route} with \`dynamic = "error"\` couldn't be rendered statically because it used \`connection()\`. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E847",enumerable:!1,configurable:!0});if(b)switch(b.type){case"cache":{let b=Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside "use cache". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual request, but caches must be able to be produced before a request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E841",enumerable:!1,configurable:!0});throw Error.captureStackTrace(b,k),a.invalidDynamicUsageError??=b,b}case"private-cache":{let b=Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside "use cache: private". The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual navigation request, but caches must be able to be produced before a navigation request, so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E837",enumerable:!1,configurable:!0});throw Error.captureStackTrace(b,k),a.invalidDynamicUsageError??=b,b}case"unstable-cache":throw Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside a function cached with \`unstable_cache()\`. The \`connection()\` function is used to indicate the subsequent code must only run when there is an actual Request, but caches must be able to be produced before a Request so this function is not allowed in this scope. See more info here: https://nextjs.org/docs/app/api-reference/functions/unstable_cache`),"__NEXT_ERROR_CODE",{value:"E840",enumerable:!1,configurable:!0});case"generate-static-params":throw Object.defineProperty(Error(`Route ${a.route} used \`connection()\` inside \`generateStaticParams\`. This is not supported because \`generateStaticParams\` runs at build time without an HTTP request. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context`),"__NEXT_ERROR_CODE",{value:"E1125",enumerable:!1,configurable:!0});case"prerender":case"prerender-client":case"prerender-runtime":return(0,h.makeHangingPromise)(b.renderSignal,a.route,"`connection()`");case"validation-client":{let a="`connection`";throw Object.defineProperty(new j.InvariantError(`${a} must not be used within a Client Component. Next.js should be preventing ${a} from being included in Client Components statically, but did not in this case.`),"__NEXT_ERROR_CODE",{value:"E1063",enumerable:!1,configurable:!0})}case"prerender-ppr":return(0,f.postponeWithTracking)(a.route,"connection",b.dynamicTracking);case"prerender-legacy":return(0,f.throwToInterruptStaticGeneration)("connection",a,b);case"request":if((0,f.trackDynamicDataInDynamicRender)(b),b.asyncApiPromises)return b.asyncApiPromises.connection;return Promise.resolve(void 0)}}(0,e.throwForMissingRequestStore)("connection")}},7909:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"after",{enumerable:!0,get:function(){return e}});let d=c(29294);function e(a){let b=d.workAsyncStorage.getStore();if(!b)throw Object.defineProperty(Error("`after` was called outside a request scope. Read more: https://nextjs.org/docs/messages/next-dynamic-api-wrong-context"),"__NEXT_ERROR_CODE",{value:"E468",enumerable:!1,configurable:!0});let{afterContext:c}=b;return c.after(a)}},19225:(a,b,c)=>{"use strict";a.exports=c(44870)},22688:(a,b)=>{"use strict";function c(){throw Object.defineProperty(Error('ImageResponse moved from "next/server" to "next/og" since Next.js 14, please import from "next/og" instead'),"__NEXT_ERROR_CODE",{value:"E183",enumerable:!1,configurable:!0})}Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"ImageResponse",{enumerable:!0,get:function(){return c}})},23211:(a,b,c)=>{"use strict";var d=c(51703);c.o(d,"NextResponse")&&c.d(b,{NextResponse:function(){return d.NextResponse}})},30240:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d,e={isBot:function(){return h},userAgent:function(){return j},userAgentFromString:function(){return i}};for(var f in e)Object.defineProperty(b,f,{enumerable:!0,get:e[f]});let g=(d=c(42399))&&d.__esModule?d:{default:d};function h(a){return/Googlebot|Mediapartners-Google|AdsBot-Google|googleweblight|Storebot-Google|Google-PageRenderer|Google-InspectionTool|Bingbot|BingPreview|Slurp|DuckDuckBot|baiduspider|yandex|sogou|LinkedInBot|bitlybot|tumblr|vkShare|quora link preview|facebookexternalhit|facebookcatalog|Twitterbot|applebot|redditbot|Slackbot|Discordbot|WhatsApp|SkypeUriPreview|ia_archiver|GPTBot/i.test(a)}function i(a){return{...(0,g.default)(a),isBot:void 0!==a&&h(a)}}function j({headers:a}){return i(a.get("user-agent")||void 0)}},34327:(a,b,c)=>{"use strict";var d,e;Object.defineProperty(b,"__esModule",{value:!0}),d=c(7909),e=b,Object.keys(d).forEach(function(a){"default"===a||Object.prototype.hasOwnProperty.call(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:function(){return d[a]}})})},38293:(a,b)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"URLPattern",{enumerable:!0,get:function(){return c}});let c="u"<typeof URLPattern?void 0:URLPattern},42399:(a,b,c)=>{var d,e={226:function(e,f){!function(g){"use strict";var h="function",i="undefined",j="object",k="string",l="major",m="model",n="name",o="type",p="vendor",q="version",r="architecture",s="console",t="mobile",u="tablet",v="smarttv",w="wearable",x="embedded",y="Amazon",z="Apple",A="ASUS",B="BlackBerry",C="Browser",D="Chrome",E="Firefox",F="Google",G="Huawei",H="Microsoft",I="Motorola",J="Opera",K="Samsung",L="Sharp",M="Sony",N="Xiaomi",O="Zebra",P="Facebook",Q="Chromium OS",R="Mac OS",S=function(a,b){var c={};for(var d in a)b[d]&&b[d].length%2==0?c[d]=b[d].concat(a[d]):c[d]=a[d];return c},T=function(a){for(var b={},c=0;c<a.length;c++)b[a[c].toUpperCase()]=a[c];return b},U=function(a,b){return typeof a===k&&-1!==V(b).indexOf(V(a))},V=function(a){return a.toLowerCase()},W=function(a,b){if(typeof a===k)return a=a.replace(/^\s\s*/,""),typeof b===i?a:a.substring(0,350)},X=function(a,b){for(var c,d,e,f,g,i,k=0;k<b.length&&!g;){var l=b[k],m=b[k+1];for(c=d=0;c<l.length&&!g&&l[c];)if(g=l[c++].exec(a))for(e=0;e<m.length;e++)i=g[++d],typeof(f=m[e])===j&&f.length>0?2===f.length?typeof f[1]==h?this[f[0]]=f[1].call(this,i):this[f[0]]=f[1]:3===f.length?typeof f[1]!==h||f[1].exec&&f[1].test?this[f[0]]=i?i.replace(f[1],f[2]):void 0:this[f[0]]=i?f[1].call(this,i,f[2]):void 0:4===f.length&&(this[f[0]]=i?f[3].call(this,i.replace(f[1],f[2])):void 0):this[f]=i||void 0;k+=2}},Y=function(a,b){for(var c in b)if(typeof b[c]===j&&b[c].length>0){for(var d=0;d<b[c].length;d++)if(U(b[c][d],a))return"?"===c?void 0:c}else if(U(b[c],a))return"?"===c?void 0:c;return a},Z={ME:"4.90","NT 3.11":"NT3.51","NT 4.0":"NT4.0",2e3:"NT 5.0",XP:["NT 5.1","NT 5.2"],Vista:"NT 6.0",7:"NT 6.1",8:"NT 6.2",8.1:"NT 6.3",10:["NT 6.4","NT 10.0"],RT:"ARM"},$={browser:[[/\b(?:crmo|crios)\/([\w\.]+)/i],[q,[n,"Chrome"]],[/edg(?:e|ios|a)?\/([\w\.]+)/i],[q,[n,"Edge"]],[/(opera mini)\/([-\w\.]+)/i,/(opera [mobiletab]{3,6})\b.+version\/([-\w\.]+)/i,/(opera)(?:.+version\/|[\/ ]+)([\w\.]+)/i],[n,q],[/opios[\/ ]+([\w\.]+)/i],[q,[n,J+" Mini"]],[/\bopr\/([\w\.]+)/i],[q,[n,J]],[/(kindle)\/([\w\.]+)/i,/(lunascape|maxthon|netfront|jasmine|blazer)[\/ ]?([\w\.]*)/i,/(avant |iemobile|slim)(?:browser)?[\/ ]?([\w\.]*)/i,/(ba?idubrowser)[\/ ]?([\w\.]+)/i,/(?:ms|\()(ie) ([\w\.]+)/i,/(flock|rockmelt|midori|epiphany|silk|skyfire|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale(?!.+naver)|qqbrowserlite|qq|duckduckgo)\/([-\w\.]+)/i,/(heytap|ovi)browser\/([\d\.]+)/i,/(weibo)__([\d\.]+)/i],[n,q],[/(?:\buc? ?browser|(?:juc.+)ucweb)[\/ ]?([\w\.]+)/i],[q,[n,"UC"+C]],[/microm.+\bqbcore\/([\w\.]+)/i,/\bqbcore\/([\w\.]+).+microm/i],[q,[n,"WeChat(Win) Desktop"]],[/micromessenger\/([\w\.]+)/i],[q,[n,"WeChat"]],[/konqueror\/([\w\.]+)/i],[q,[n,"Konqueror"]],[/trident.+rv[: ]([\w\.]{1,9})\b.+like gecko/i],[q,[n,"IE"]],[/ya(?:search)?browser\/([\w\.]+)/i],[q,[n,"Yandex"]],[/(avast|avg)\/([\w\.]+)/i],[[n,/(.+)/,"$1 Secure "+C],q],[/\bfocus\/([\w\.]+)/i],[q,[n,E+" Focus"]],[/\bopt\/([\w\.]+)/i],[q,[n,J+" Touch"]],[/coc_coc\w+\/([\w\.]+)/i],[q,[n,"Coc Coc"]],[/dolfin\/([\w\.]+)/i],[q,[n,"Dolphin"]],[/coast\/([\w\.]+)/i],[q,[n,J+" Coast"]],[/miuibrowser\/([\w\.]+)/i],[q,[n,"MIUI "+C]],[/fxios\/([-\w\.]+)/i],[q,[n,E]],[/\bqihu|(qi?ho?o?|360)browser/i],[[n,"360 "+C]],[/(oculus|samsung|sailfish|huawei)browser\/([\w\.]+)/i],[[n,/(.+)/,"$1 "+C],q],[/(comodo_dragon)\/([\w\.]+)/i],[[n,/_/g," "],q],[/(electron)\/([\w\.]+) safari/i,/(tesla)(?: qtcarbrowser|\/(20\d\d\.[-\w\.]+))/i,/m?(qqbrowser|baiduboxapp|2345Explorer)[\/ ]?([\w\.]+)/i],[n,q],[/(metasr)[\/ ]?([\w\.]+)/i,/(lbbrowser)/i,/\[(linkedin)app\]/i],[n],[/((?:fban\/fbios|fb_iab\/fb4a)(?!.+fbav)|;fbav\/([\w\.]+);)/i],[[n,P],q],[/(kakao(?:talk|story))[\/ ]([\w\.]+)/i,/(naver)\(.*?(\d+\.[\w\.]+).*\)/i,/safari (line)\/([\w\.]+)/i,/\b(line)\/([\w\.]+)\/iab/i,/(chromium|instagram)[\/ ]([-\w\.]+)/i],[n,q],[/\bgsa\/([\w\.]+) .*safari\//i],[q,[n,"GSA"]],[/musical_ly(?:.+app_?version\/|_)([\w\.]+)/i],[q,[n,"TikTok"]],[/headlesschrome(?:\/([\w\.]+)| )/i],[q,[n,D+" Headless"]],[/ wv\).+(chrome)\/([\w\.]+)/i],[[n,D+" WebView"],q],[/droid.+ version\/([\w\.]+)\b.+(?:mobile safari|safari)/i],[q,[n,"Android "+C]],[/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\/v?([\w\.]+)/i],[n,q],[/version\/([\w\.\,]+) .*mobile\/\w+ (safari)/i],[q,[n,"Mobile Safari"]],[/version\/([\w(\.|\,)]+) .*(mobile ?safari|safari)/i],[q,n],[/webkit.+?(mobile ?safari|safari)(\/[\w\.]+)/i],[n,[q,Y,{"1.0":"/8",1.2:"/1",1.3:"/3","2.0":"/412","2.0.2":"/416","2.0.3":"/417","2.0.4":"/419","?":"/"}]],[/(webkit|khtml)\/([\w\.]+)/i],[n,q],[/(navigator|netscape\d?)\/([-\w\.]+)/i],[[n,"Netscape"],q],[/mobile vr; rv:([\w\.]+)\).+firefox/i],[q,[n,E+" Reality"]],[/ekiohf.+(flow)\/([\w\.]+)/i,/(swiftfox)/i,/(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\/ ]?([\w\.\+]+)/i,/(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([-\w\.]+)$/i,/(firefox)\/([\w\.]+)/i,/(mozilla)\/([\w\.]+) .+rv\:.+gecko\/\d+/i,/(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\. ]?browser)[-\/ ]?v?([\w\.]+)/i,/(links) \(([\w\.]+)/i,/panasonic;(viera)/i],[n,q],[/(cobalt)\/([\w\.]+)/i],[n,[q,/master.|lts./,""]]],cpu:[[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\)]/i],[[r,"amd64"]],[/(ia32(?=;))/i],[[r,V]],[/((?:i[346]|x)86)[;\)]/i],[[r,"ia32"]],[/\b(aarch64|arm(v?8e?l?|_?64))\b/i],[[r,"arm64"]],[/\b(arm(?:v[67])?ht?n?[fl]p?)\b/i],[[r,"armhf"]],[/windows (ce|mobile); ppc;/i],[[r,"arm"]],[/((?:ppc|powerpc)(?:64)?)(?: mac|;|\))/i],[[r,/ower/,"",V]],[/(sun4\w)[;\)]/i],[[r,"sparc"]],[/((?:avr32|ia64(?=;))|68k(?=\))|\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i],[[r,V]]],device:[[/\b(sch-i[89]0\d|shw-m380s|sm-[ptx]\w{2,4}|gt-[pn]\d{2,4}|sgh-t8[56]9|nexus 10)/i],[m,[p,K],[o,u]],[/\b((?:s[cgp]h|gt|sm)-\w+|sc[g-]?[\d]+a?|galaxy nexus)/i,/samsung[- ]([-\w]+)/i,/sec-(sgh\w+)/i],[m,[p,K],[o,t]],[/(?:\/|\()(ip(?:hone|od)[\w, ]*)(?:\/|;)/i],[m,[p,z],[o,t]],[/\((ipad);[-\w\),; ]+apple/i,/applecoremedia\/[\w\.]+ \((ipad)/i,/\b(ipad)\d\d?,\d\d?[;\]].+ios/i],[m,[p,z],[o,u]],[/(macintosh);/i],[m,[p,z]],[/\b(sh-?[altvz]?\d\d[a-ekm]?)/i],[m,[p,L],[o,t]],[/\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\d{2})\b(?!.+d\/s)/i],[m,[p,G],[o,u]],[/(?:huawei|honor)([-\w ]+)[;\)]/i,/\b(nexus 6p|\w{2,4}e?-[atu]?[ln][\dx][012359c][adn]?)\b(?!.+d\/s)/i],[m,[p,G],[o,t]],[/\b(poco[\w ]+)(?: bui|\))/i,/\b; (\w+) build\/hm\1/i,/\b(hm[-_ ]?note?[_ ]?(?:\d\w)?) bui/i,/\b(redmi[\-_ ]?(?:note|k)?[\w_ ]+)(?: bui|\))/i,/\b(mi[-_ ]?(?:a\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\d?\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\))/i],[[m,/_/g," "],[p,N],[o,t]],[/\b(mi[-_ ]?(?:pad)(?:[\w_ ]+))(?: bui|\))/i],[[m,/_/g," "],[p,N],[o,u]],[/; (\w+) bui.+ oppo/i,/\b(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007|a101op)\b/i],[m,[p,"OPPO"],[o,t]],[/vivo (\w+)(?: bui|\))/i,/\b(v[12]\d{3}\w?[at])(?: bui|;)/i],[m,[p,"Vivo"],[o,t]],[/\b(rmx[12]\d{3})(?: bui|;|\))/i],[m,[p,"Realme"],[o,t]],[/\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\b[\w ]+build\//i,/\bmot(?:orola)?[- ](\w*)/i,/((?:moto[\w\(\) ]+|xt\d{3,4}|nexus 6)(?= bui|\)))/i],[m,[p,I],[o,t]],[/\b(mz60\d|xoom[2 ]{0,2}) build\//i],[m,[p,I],[o,u]],[/((?=lg)?[vl]k\-?\d{3}) bui| 3\.[-\w; ]{10}lg?-([06cv9]{3,4})/i],[m,[p,"LG"],[o,u]],[/(lm(?:-?f100[nv]?|-[\w\.]+)(?= bui|\))|nexus [45])/i,/\blg[-e;\/ ]+((?!browser|netcast|android tv)\w+)/i,/\blg-?([\d\w]+) bui/i],[m,[p,"LG"],[o,t]],[/(ideatab[-\w ]+)/i,/lenovo ?(s[56]000[-\w]+|tab(?:[\w ]+)|yt[-\d\w]{6}|tb[-\d\w]{6})/i],[m,[p,"Lenovo"],[o,u]],[/(?:maemo|nokia).*(n900|lumia \d+)/i,/nokia[-_ ]?([-\w\.]*)/i],[[m,/_/g," "],[p,"Nokia"],[o,t]],[/(pixel c)\b/i],[m,[p,F],[o,u]],[/droid.+; (pixel[\daxl ]{0,6})(?: bui|\))/i],[m,[p,F],[o,t]],[/droid.+ (a?\d[0-2]{2}so|[c-g]\d{4}|so[-gl]\w+|xq-a\w[4-7][12])(?= bui|\).+chrome\/(?![1-6]{0,1}\d\.))/i],[m,[p,M],[o,t]],[/sony tablet [ps]/i,/\b(?:sony)?sgp\w+(?: bui|\))/i],[[m,"Xperia Tablet"],[p,M],[o,u]],[/ (kb2005|in20[12]5|be20[12][59])\b/i,/(?:one)?(?:plus)? (a\d0\d\d)(?: b|\))/i],[m,[p,"OnePlus"],[o,t]],[/(alexa)webm/i,/(kf[a-z]{2}wi|aeo[c-r]{2})( bui|\))/i,/(kf[a-z]+)( bui|\)).+silk\//i],[m,[p,y],[o,u]],[/((?:sd|kf)[0349hijorstuw]+)( bui|\)).+silk\//i],[[m,/(.+)/g,"Fire Phone $1"],[p,y],[o,t]],[/(playbook);[-\w\),; ]+(rim)/i],[m,p,[o,u]],[/\b((?:bb[a-f]|st[hv])100-\d)/i,/\(bb10; (\w+)/i],[m,[p,B],[o,t]],[/(?:\b|asus_)(transfo[prime ]{4,10} \w+|eeepc|slider \w+|nexus 7|padfone|p00[cj])/i],[m,[p,A],[o,u]],[/ (z[bes]6[027][012][km][ls]|zenfone \d\w?)\b/i],[m,[p,A],[o,t]],[/(nexus 9)/i],[m,[p,"HTC"],[o,u]],[/(htc)[-;_ ]{1,2}([\w ]+(?=\)| bui)|\w+)/i,/(zte)[- ]([\w ]+?)(?: bui|\/|\))/i,/(alcatel|geeksphone|nexian|panasonic(?!(?:;|\.))|sony(?!-bra))[-_ ]?([-\w]*)/i],[p,[m,/_/g," "],[o,t]],[/droid.+; ([ab][1-7]-?[0178a]\d\d?)/i],[m,[p,"Acer"],[o,u]],[/droid.+; (m[1-5] note) bui/i,/\bmz-([-\w]{2,})/i],[m,[p,"Meizu"],[o,t]],[/(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\w]*)/i,/(hp) ([\w ]+\w)/i,/(asus)-?(\w+)/i,/(microsoft); (lumia[\w ]+)/i,/(lenovo)[-_ ]?([-\w]+)/i,/(jolla)/i,/(oppo) ?([\w ]+) bui/i],[p,m,[o,t]],[/(kobo)\s(ereader|touch)/i,/(archos) (gamepad2?)/i,/(hp).+(touchpad(?!.+tablet)|tablet)/i,/(kindle)\/([\w\.]+)/i,/(nook)[\w ]+build\/(\w+)/i,/(dell) (strea[kpr\d ]*[\dko])/i,/(le[- ]+pan)[- ]+(\w{1,9}) bui/i,/(trinity)[- ]*(t\d{3}) bui/i,/(gigaset)[- ]+(q\w{1,9}) bui/i,/(vodafone) ([\w ]+)(?:\)| bui)/i],[p,m,[o,u]],[/(surface duo)/i],[m,[p,H],[o,u]],[/droid [\d\.]+; (fp\du?)(?: b|\))/i],[m,[p,"Fairphone"],[o,t]],[/(u304aa)/i],[m,[p,"AT&T"],[o,t]],[/\bsie-(\w*)/i],[m,[p,"Siemens"],[o,t]],[/\b(rct\w+) b/i],[m,[p,"RCA"],[o,u]],[/\b(venue[\d ]{2,7}) b/i],[m,[p,"Dell"],[o,u]],[/\b(q(?:mv|ta)\w+) b/i],[m,[p,"Verizon"],[o,u]],[/\b(?:barnes[& ]+noble |bn[rt])([\w\+ ]*) b/i],[m,[p,"Barnes & Noble"],[o,u]],[/\b(tm\d{3}\w+) b/i],[m,[p,"NuVision"],[o,u]],[/\b(k88) b/i],[m,[p,"ZTE"],[o,u]],[/\b(nx\d{3}j) b/i],[m,[p,"ZTE"],[o,t]],[/\b(gen\d{3}) b.+49h/i],[m,[p,"Swiss"],[o,t]],[/\b(zur\d{3}) b/i],[m,[p,"Swiss"],[o,u]],[/\b((zeki)?tb.*\b) b/i],[m,[p,"Zeki"],[o,u]],[/\b([yr]\d{2}) b/i,/\b(dragon[- ]+touch |dt)(\w{5}) b/i],[[p,"Dragon Touch"],m,[o,u]],[/\b(ns-?\w{0,9}) b/i],[m,[p,"Insignia"],[o,u]],[/\b((nxa|next)-?\w{0,9}) b/i],[m,[p,"NextBook"],[o,u]],[/\b(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i],[[p,"Voice"],m,[o,t]],[/\b(lvtel\-)?(v1[12]) b/i],[[p,"LvTel"],m,[o,t]],[/\b(ph-1) /i],[m,[p,"Essential"],[o,t]],[/\b(v(100md|700na|7011|917g).*\b) b/i],[m,[p,"Envizen"],[o,u]],[/\b(trio[-\w\. ]+) b/i],[m,[p,"MachSpeed"],[o,u]],[/\btu_(1491) b/i],[m,[p,"Rotor"],[o,u]],[/(shield[\w ]+) b/i],[m,[p,"Nvidia"],[o,u]],[/(sprint) (\w+)/i],[p,m,[o,t]],[/(kin\.[onetw]{3})/i],[[m,/\./g," "],[p,H],[o,t]],[/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i],[m,[p,O],[o,u]],[/droid.+; (ec30|ps20|tc[2-8]\d[kx])\)/i],[m,[p,O],[o,t]],[/smart-tv.+(samsung)/i],[p,[o,v]],[/hbbtv.+maple;(\d+)/i],[[m,/^/,"SmartTV"],[p,K],[o,v]],[/(nux; netcast.+smarttv|lg (netcast\.tv-201\d|android tv))/i],[[p,"LG"],[o,v]],[/(apple) ?tv/i],[p,[m,z+" TV"],[o,v]],[/crkey/i],[[m,D+"cast"],[p,F],[o,v]],[/droid.+aft(\w)( bui|\))/i],[m,[p,y],[o,v]],[/\(dtv[\);].+(aquos)/i,/(aquos-tv[\w ]+)\)/i],[m,[p,L],[o,v]],[/(bravia[\w ]+)( bui|\))/i],[m,[p,M],[o,v]],[/(mitv-\w{5}) bui/i],[m,[p,N],[o,v]],[/Hbbtv.*(technisat) (.*);/i],[p,m,[o,v]],[/\b(roku)[\dx]*[\)\/]((?:dvp-)?[\d\.]*)/i,/hbbtv\/\d+\.\d+\.\d+ +\([\w\+ ]*; *([\w\d][^;]*);([^;]*)/i],[[p,W],[m,W],[o,v]],[/\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\b/i],[[o,v]],[/(ouya)/i,/(nintendo) ([wids3utch]+)/i],[p,m,[o,s]],[/droid.+; (shield) bui/i],[m,[p,"Nvidia"],[o,s]],[/(playstation [345portablevi]+)/i],[m,[p,M],[o,s]],[/\b(xbox(?: one)?(?!; xbox))[\); ]/i],[m,[p,H],[o,s]],[/((pebble))app/i],[p,m,[o,w]],[/(watch)(?: ?os[,\/]|\d,\d\/)[\d\.]+/i],[m,[p,z],[o,w]],[/droid.+; (glass) \d/i],[m,[p,F],[o,w]],[/droid.+; (wt63?0{2,3})\)/i],[m,[p,O],[o,w]],[/(quest( 2| pro)?)/i],[m,[p,P],[o,w]],[/(tesla)(?: qtcarbrowser|\/[-\w\.]+)/i],[p,[o,x]],[/(aeobc)\b/i],[m,[p,y],[o,x]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+? mobile safari/i],[m,[o,t]],[/droid .+?; ([^;]+?)(?: bui|\) applew).+?(?! mobile) safari/i],[m,[o,u]],[/\b((tablet|tab)[;\/]|focus\/\d(?!.+mobile))/i],[[o,u]],[/(phone|mobile(?:[;\/]| [ \w\/\.]*safari)|pda(?=.+windows ce))/i],[[o,t]],[/(android[-\w\. ]{0,9});.+buil/i],[m,[p,"Generic"]]],engine:[[/windows.+ edge\/([\w\.]+)/i],[q,[n,"EdgeHTML"]],[/webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i],[q,[n,"Blink"]],[/(presto)\/([\w\.]+)/i,/(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i,/ekioh(flow)\/([\w\.]+)/i,/(khtml|tasman|links)[\/ ]\(?([\w\.]+)/i,/(icab)[\/ ]([23]\.[\d\.]+)/i,/\b(libweb)/i],[n,q],[/rv\:([\w\.]{1,9})\b.+(gecko)/i],[q,n]],os:[[/microsoft (windows) (vista|xp)/i],[n,q],[/(windows) nt 6\.2; (arm)/i,/(windows (?:phone(?: os)?|mobile))[\/ ]?([\d\.\w ]*)/i,/(windows)[\/ ]?([ntce\d\. ]+\w)(?!.+xbox)/i],[n,[q,Y,Z]],[/(win(?=3|9|n)|win 9x )([nt\d\.]+)/i],[[n,"Windows"],[q,Y,Z]],[/ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i,/ios;fbsv\/([\d\.]+)/i,/cfnetwork\/.+darwin/i],[[q,/_/g,"."],[n,"iOS"]],[/(mac os x) ?([\w\. ]*)/i,/(macintosh|mac_powerpc\b)(?!.+haiku)/i],[[n,R],[q,/_/g,"."]],[/droid ([\w\.]+)\b.+(android[- ]x86|harmonyos)/i],[q,n],[/(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\/ ]?([\w\.]*)/i,/(blackberry)\w*\/([\w\.]*)/i,/(tizen|kaios)[\/ ]([\w\.]+)/i,/\((series40);/i],[n,q],[/\(bb(10);/i],[q,[n,B]],[/(?:symbian ?os|symbos|s60(?=;)|series60)[-\/ ]?([\w\.]*)/i],[q,[n,"Symbian"]],[/mozilla\/[\d\.]+ \((?:mobile|tablet|tv|mobile; [\w ]+); rv:.+ gecko\/([\w\.]+)/i],[q,[n,E+" OS"]],[/web0s;.+rt(tv)/i,/\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i],[q,[n,"webOS"]],[/watch(?: ?os[,\/]|\d,\d\/)([\d\.]+)/i],[q,[n,"watchOS"]],[/crkey\/([\d\.]+)/i],[q,[n,D+"cast"]],[/(cros) [\w]+(?:\)| ([\w\.]+)\b)/i],[[n,Q],q],[/panasonic;(viera)/i,/(netrange)mmh/i,/(nettv)\/(\d+\.[\w\.]+)/i,/(nintendo|playstation) ([wids345portablevuch]+)/i,/(xbox); +xbox ([^\);]+)/i,/\b(joli|palm)\b ?(?:os)?\/?([\w\.]*)/i,/(mint)[\/\(\) ]?(\w*)/i,/(mageia|vectorlinux)[; ]/i,/([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\/ ]?(?!chrom|package)([-\w\.]*)/i,/(hurd|linux) ?([\w\.]*)/i,/(gnu) ?([\w\.]*)/i,/\b([-frentopcghs]{0,5}bsd|dragonfly)[\/ ]?(?!amd|[ix346]{1,2}86)([\w\.]*)/i,/(haiku) (\w+)/i],[n,q],[/(sunos) ?([\w\.\d]*)/i],[[n,"Solaris"],q],[/((?:open)?solaris)[-\/ ]?([\w\.]*)/i,/(aix) ((\d)(?=\.|\)| )[\w\.])*/i,/\b(beos|os\/2|amigaos|morphos|openvms|fuchsia|hp-ux|serenityos)/i,/(unix) ?([\w\.]*)/i],[n,q]]},_=function(a,b){if(typeof a===j&&(b=a,a=void 0),!(this instanceof _))return new _(a,b).getResult();var c=typeof g!==i&&g.navigator?g.navigator:void 0,d=a||(c&&c.userAgent?c.userAgent:""),e=c&&c.userAgentData?c.userAgentData:void 0,f=b?S($,b):$,s=c&&c.userAgent==d;return this.getBrowser=function(){var a,b={};return b[n]=void 0,b[q]=void 0,X.call(b,d,f.browser),b[l]=typeof(a=b[q])===k?a.replace(/[^\d\.]/g,"").split(".")[0]:void 0,s&&c&&c.brave&&typeof c.brave.isBrave==h&&(b[n]="Brave"),b},this.getCPU=function(){var a={};return a[r]=void 0,X.call(a,d,f.cpu),a},this.getDevice=function(){var a={};return a[p]=void 0,a[m]=void 0,a[o]=void 0,X.call(a,d,f.device),s&&!a[o]&&e&&e.mobile&&(a[o]=t),s&&"Macintosh"==a[m]&&c&&typeof c.standalone!==i&&c.maxTouchPoints&&c.maxTouchPoints>2&&(a[m]="iPad",a[o]=u),a},this.getEngine=function(){var a={};return a[n]=void 0,a[q]=void 0,X.call(a,d,f.engine),a},this.getOS=function(){var a={};return a[n]=void 0,a[q]=void 0,X.call(a,d,f.os),s&&!a[n]&&e&&"Unknown"!=e.platform&&(a[n]=e.platform.replace(/chrome os/i,Q).replace(/macos/i,R)),a},this.getResult=function(){return{ua:this.getUA(),browser:this.getBrowser(),engine:this.getEngine(),os:this.getOS(),device:this.getDevice(),cpu:this.getCPU()}},this.getUA=function(){return d},this.setUA=function(a){return d=typeof a===k&&a.length>350?W(a,350):a,this},this.setUA(d),this};_.VERSION="1.0.35",_.BROWSER=T([n,q,l]),_.CPU=T([r]),_.DEVICE=T([m,p,o,s,t,v,u,w,x]),_.ENGINE=_.OS=T([n,q]),typeof f!==i?(e.exports&&(f=e.exports=_),f.UAParser=_):c.amdO?void 0===(d=(function(){return _}).call(b,c,b,a))||(a.exports=d):typeof g!==i&&(g.UAParser=_);var aa=typeof g!==i&&(g.jQuery||g.Zepto);if(aa&&!aa.ua){var ab=new _;aa.ua=ab.getResult(),aa.ua.get=function(){return ab.getUA()},aa.ua.set=function(a){ab.setUA(a);var b=ab.getResult();for(var c in b)aa.ua[c]=b[c]}}}("object"==typeof window?window:this)}},f={};function g(a){var b=f[a];if(void 0!==b)return b.exports;var c=f[a]={exports:{}},d=!0;try{e[a].call(c.exports,c,c.exports,g),d=!1}finally{d&&delete f[a]}return c.exports}g.ab=__dirname+"/",a.exports=g(226)},51703:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={ImageResponse:function(){return f.ImageResponse},NextRequest:function(){return g.NextRequest},NextResponse:function(){return h.NextResponse},URLPattern:function(){return j.URLPattern},after:function(){return k.after},connection:function(){return l.connection},userAgent:function(){return i.userAgent},userAgentFromString:function(){return i.userAgentFromString}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(22688),g=c(43690),h=c(70176),i=c(30240),j=c(38293),k=c(34327),l=c(4782)},70176:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0}),Object.defineProperty(b,"NextResponse",{enumerable:!0,get:function(){return l}});let d=c(91488),e=c(72642),f=c(62018),g=c(20445),h=c(91488),i=Symbol("internal response"),j=new Set([301,302,303,307,308]);function k(a,b){var c;if(null==a||null==(c=a.request)?void 0:c.headers){if(!(a.request.headers instanceof Headers))throw Object.defineProperty(Error("request.headers must be an instance of Headers"),"__NEXT_ERROR_CODE",{value:"E119",enumerable:!1,configurable:!0});let c=[];for(let[d,e]of a.request.headers)b.set("x-middleware-request-"+d,e),c.push(d);b.set("x-middleware-override-headers",c.join(","))}}class l extends Response{constructor(a,b={}){super(a,b);const c=this.headers,j=new Proxy(new h.ResponseCookies(c),{get(a,e,f){switch(e){case"delete":case"set":return(...f)=>{let g=Reflect.apply(a[e],a,f),i=new Headers(c);return g instanceof h.ResponseCookies&&c.set("x-middleware-set-cookie",g.getAll().map(a=>(0,d.stringifyCookie)(a)).join(",")),k(b,i),g};default:return g.ReflectAdapter.get(a,e,f)}}});this[i]={cookies:j,url:b.url?new e.NextURL(b.url,{headers:(0,f.toNodeOutgoingHttpHeaders)(c),nextConfig:b.nextConfig}):void 0}}[Symbol.for("edge-runtime.inspect.custom")](){return{cookies:this.cookies,url:this.url,body:this.body,bodyUsed:this.bodyUsed,headers:Object.fromEntries(this.headers),ok:this.ok,redirected:this.redirected,status:this.status,statusText:this.statusText,type:this.type}}get cookies(){return this[i].cookies}static json(a,b){let c=Response.json(a,b);return new l(c.body,c)}static redirect(a,b){let c="number"==typeof b?b:(null==b?void 0:b.status)??307;if(!j.has(c))throw Object.defineProperty(RangeError('Failed to execute "redirect" on "response": Invalid status code'),"__NEXT_ERROR_CODE",{value:"E529",enumerable:!1,configurable:!0});let d="object"==typeof b?b:{},e=new Headers(null==d?void 0:d.headers);return e.set("Location",(0,f.validateURL)(a)),new l(null,{...d,headers:e,status:c})}static rewrite(a,b){let c=new Headers(null==b?void 0:b.headers);return c.set("x-middleware-rewrite",(0,f.validateURL)(a)),k(b,c),new l(null,{...b,headers:c})}static next(a){let b=new Headers(null==a?void 0:a.headers);return b.set("x-middleware-next","1"),k(a,b),new l(null,{...a,headers:b})}}},92280:(a,b,c)=>{"use strict";Object.defineProperty(b,"I",{enumerable:!0,get:function(){return g}});let d=c(28208),e=c(47617),f=c(62018);async function g(a,b,c,g){if((0,d.isNodeNextResponse)(b)){var h;b.statusCode=c.status,b.statusMessage=c.statusText;let d=["set-cookie","www-authenticate","proxy-authenticate","vary"];null==(h=c.headers)||h.forEach((a,c)=>{if("x-middleware-set-cookie"!==c.toLowerCase())if("set-cookie"===c.toLowerCase())for(let d of(0,f.splitCookiesString)(a))b.appendHeader(c,d);else{let e=void 0!==b.getHeader(c);(d.includes(c.toLowerCase())||!e)&&b.appendHeader(c,a)}});let{originalResponse:i}=b;c.body&&"HEAD"!==a.method?await (0,e.pipeToNodeResponse)(c.body,i,g):i.end()}}},92305:(a,b,c)=>{"use strict";Object.defineProperty(b,"__esModule",{value:!0});var d={isRequestAPICallableInsideAfter:function(){return j},throwForSearchParamsAccessInUseCache:function(){return i},throwWithStaticGenerationBailoutErrorWithDynamicError:function(){return h}};for(var e in d)Object.defineProperty(b,e,{enumerable:!0,get:d[e]});let f=c(15693),g=c(3295);function h(a,b){throw Object.defineProperty(new f.StaticGenBailoutError(`Route ${a} with \`dynamic = "error"\` couldn't be rendered statically because it used ${b}. See more info here: https://nextjs.org/docs/app/building-your-application/rendering/static-and-dynamic#dynamic-rendering`),"__NEXT_ERROR_CODE",{value:"E543",enumerable:!1,configurable:!0})}function i(a,b){let c=Object.defineProperty(Error(`Route ${a.route} used \`searchParams\` inside "use cache". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await \`searchParams\` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache`),"__NEXT_ERROR_CODE",{value:"E842",enumerable:!1,configurable:!0});throw Error.captureStackTrace(c,b),a.invalidDynamicUsageError??=c,c}function j(){let a=g.afterTaskAsyncStorage.getStore();return(null==a?void 0:a.rootTaskSpawnPhase)==="action"}}};
@@ -440,7 +440,7 @@ meta 头(务必写上,供 HTML 面板做卡片、console \`/name\` 打开)
440
440
  <meta name="cockpit-name" content="short-name"> <!-- /name 短名,唯一、只用字母数字-_ -->
441
441
  <meta name="description" content="一句话说明">
442
442
  <meta name="cockpit-icon" content="🔍"> <!-- emoji 或图标 url,可选 -->
443
- <meta name="cockpit-theme" content="auto"> <!-- 启用右上角亮/暗切换;auto=首次跟随系统,可填 light/dark -->
443
+ <meta name="cockpit-theme" content="auto"> <!-- 启用可拖动的亮/暗切换按钮;auto=首次跟随系统,可填 light/dark -->
444
444
  \`\`\`
445
445
 
446
446
  ## 默认:React(本地零构建栈)
@@ -468,8 +468,10 @@ meta 头(务必写上,供 HTML 面板做卡片、console \`/name\` 打开)
468
468
  \`ReactDOM.createRoot(document.getElementById('root')).render(<App/>)\`。
469
469
  - 样式默认套 **Cockpit 主题**:\`<link rel="stylesheet" href="/html-lib/theme.css">\`,直接用
470
470
  语义变量(\`var(--background)\` / \`--foreground\` / \`--card\` / \`--brand\` / \`--muted-foreground\` /
471
- \`--border\` / \`--destructive\`;半透明用 \`hsl(var(--green-9) / .12)\`)。**默认浅色**;上面 meta 头里的
472
- \`cockpit-theme\` 让预览带上右上角亮/暗切换按钮,**并按 app 记住选择(跨刷新,不跟随外部)**,也可调
471
+ \`--border\` / \`--destructive\`;半透明用 \`hsl(var(--green-9) / .12)\`)。上面 meta 头里的
472
+ \`cockpit-theme\` 让预览带上一个浮动亮/暗切换按钮(默认右上角,用户可拖动吸附到任意一角,
473
+ 所以不必为它在右上角留空位);**默认跟随 Cockpit 宿主主题**(Cockpit 外打开时按
474
+ meta 的 auto/light/dark),手动切换后**按 app 记住选择(跨刷新,优先于跟随)**,也可调
473
475
  \`cockpit.toggleTheme()\`。**别自拍调色板、别上 Tailwind**;app 特有细节再补一小段 \`<style>\`。
474
476
 
475
477
  React 里取数同样走 \`cockpit.bash\`:
@@ -581,7 +583,7 @@ Meta head (always include — the HTML panel renders cards from it, the console
581
583
  <meta name="cockpit-name" content="short-name"> <!-- unique short name for /name; letters/digits/-_ only -->
582
584
  <meta name="description" content="one line about the page">
583
585
  <meta name="cockpit-icon" content="🔍"> <!-- emoji or icon url, optional -->
584
- <meta name="cockpit-theme" content="auto"> <!-- enable the top-right light/dark toggle; auto = first load follows the OS, or light/dark -->
586
+ <meta name="cockpit-theme" content="auto"> <!-- enable the draggable light/dark toggle; auto = first load follows the OS, or light/dark -->
585
587
  \`\`\`
586
588
 
587
589
  ## Default: React (local zero-build stack)
@@ -611,8 +613,10 @@ Use this fixed shell, with the logic in a sibling \`./app.jsx\`:
611
613
  - Style with the **Cockpit theme** by default: \`<link rel="stylesheet" href="/html-lib/theme.css">\`,
612
614
  then use the semantic vars (\`var(--background)\` / \`--foreground\` / \`--card\` / \`--brand\` /
613
615
  \`--muted-foreground\` / \`--border\` / \`--destructive\`; translucency via \`hsl(var(--green-9) / .12)\`).
614
- **Defaults to light**; the \`cockpit-theme\` meta above gives the preview a top-right light/dark toggle,
615
- **remembered per app across reloads** (does not follow the host), or call \`cockpit.toggleTheme()\`
616
+ The \`cockpit-theme\` meta above gives the preview a floating light/dark toggle (top-right by
617
+ default, draggable to any corner so don't reserve top-right space for it); it **follows the
618
+ Cockpit host theme by default** (outside Cockpit, the meta's auto/light/dark decides), and a manual
619
+ toggle is **remembered per app across reloads and overrides the host**, or call \`cockpit.toggleTheme()\`
616
620
  from your own UI. Don't invent a palette or add Tailwind; add a small \`<style>\` for app-specific bits.
617
621
 
618
622
  Fetch data from React the same way, via \`cockpit.bash\`:
@@ -1,7 +1,33 @@
1
- "use strict";exports.id=4916,exports.ids=[4916],exports.modules={66106:(a,b,c)=>{c.d(b,{Gi:()=>g,J4:()=>f,OP:()=>h,Z1:()=>e});let d=`
1
+ "use strict";exports.id=4916,exports.ids=[4916],exports.modules={66106:(a,b,c)=>{c.d(b,{J4:()=>f,OP:()=>i,Z1:()=>e,qI:()=>h});let d=`
2
2
  (function () {
3
3
  if (window.cockpit) return;
4
4
 
5
+ // Language — parked on <html data-cockpit-lang>, NOT delivered by listener
6
+ // alone. The host pushes cockpit:language-change once, on the iframe's load
7
+ // event. Anything registering a listener later misses it forever, and the
8
+ // widget bundles (/html-lib markdown / json / pdf) are lazily fetched — they
9
+ // always register after load, so they used to fall back to navigator.language
10
+ // and disagree with the Cockpit setting until the user toggled it. This script
11
+ // is injected at the very start of <head>, so it is guaranteed to be listening
12
+ // first; parking the value turns a one-shot message into order-independent
13
+ // state any later reader can just read.
14
+ //
15
+ // A DEDICATED attribute, not <html lang>: pages ship their own lang="en" (the
16
+ // built-in file-viewer does), so <html lang> cannot distinguish "the host told
17
+ // us" from "the document's own default" — reading it would pin every reader to
18
+ // the page's hardcoded value and silently kill the navigator fallback.
19
+ var applyLang = function (lang) {
20
+ if (!lang) return;
21
+ try {
22
+ document.documentElement.setAttribute('data-cockpit-lang', lang);
23
+ document.documentElement.lang = lang; // keep the document honest for a11y
24
+ } catch (e) {}
25
+ };
26
+ window.addEventListener('message', function (ev) {
27
+ var d = ev && ev.data;
28
+ if (d && d.type === 'cockpit:language-change') applyLang(d.lang);
29
+ });
30
+
5
31
  // Theme — OPT-IN. The floating top-right toggle + any .dark class management
6
32
  // happen ONLY when the page declares <meta name="cockpit-theme" content="...">.
7
33
  // Rationale: injection is by file type, not by SDK usage, so plain one-off pages
@@ -50,17 +76,117 @@
50
76
  else if (themeSetting === 'auto') initDark = !!(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches);
51
77
  else initDark = false; // light / unknown
52
78
  setDark(initDark, false);
79
+ // Follow the Cockpit host theme by default: the console bubble pushes a
80
+ // THEME_CHANGE on iframe load and ThemeProvider broadcasts it on toggle.
81
+ // An explicit per-app user choice (stored) always wins over the host.
82
+ window.addEventListener('message', function (ev) {
83
+ var d = ev && ev.data;
84
+ if (!d || d.type !== 'THEME_CHANGE') return;
85
+ var userChoice = null;
86
+ try { userChoice = localStorage.getItem(themeKey); } catch (e) {}
87
+ if (userChoice === 'dark' || userChoice === 'light') return;
88
+ var hostDark = d.theme === 'dark' || (d.theme === 'system' &&
89
+ !!(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches));
90
+ setDark(hostDark, false);
91
+ });
92
+ // The button is DRAGGABLE and snaps to whichever of the 4 viewport corners
93
+ // it was released nearest to. A fixed corner is unworkable: the host picks
94
+ // the spot, the app owns the content, and any app with its own top-right
95
+ // affordance (close button, toolbar, TOC) had it permanently covered with
96
+ // no escape. The chosen corner is remembered GLOBALLY (not per app) — one
97
+ // gesture then holds for every HTML app, which is the common case since
98
+ // apps tend to crowd the same corner.
99
+ var CORNER_KEY = 'htmlapp-theme-corner'; // 'tl' | 'tr' | 'bl' | 'br'
100
+ var CORNER_MARGIN = 10;
101
+ var corner = 'tr'; // default = the historic position
102
+ try {
103
+ var storedCorner = localStorage.getItem(CORNER_KEY);
104
+ if (storedCorner === 'tl' || storedCorner === 'tr' ||
105
+ storedCorner === 'bl' || storedCorner === 'br') corner = storedCorner;
106
+ } catch (e) {}
107
+ // Only the CORNER is persisted, never pixels: on resize/rotate a remembered
108
+ // coordinate can land off-screen, while a corner is always re-derivable.
109
+ var applyCorner = function () {
110
+ if (!themeBtn) return;
111
+ var s = themeBtn.style;
112
+ var atTop = corner.charAt(0) === 't';
113
+ var atLeft = corner.charAt(1) === 'l';
114
+ s.top = atTop ? CORNER_MARGIN + 'px' : 'auto';
115
+ s.bottom = atTop ? 'auto' : CORNER_MARGIN + 'px';
116
+ s.left = atLeft ? CORNER_MARGIN + 'px' : 'auto';
117
+ s.right = atLeft ? 'auto' : CORNER_MARGIN + 'px';
118
+ };
53
119
  var mountThemeBtn = function () {
54
120
  if (themeBtn || !document.body) return;
55
121
  themeBtn = document.createElement('button');
56
122
  themeBtn.type = 'button';
57
123
  themeBtn.setAttribute('aria-label', 'Toggle theme');
58
124
  themeBtn.textContent = document.documentElement.classList.contains('dark') ? '☀️' : '\u{1F319}';
59
- themeBtn.style.cssText = 'position:fixed;top:10px;right:10px;z-index:2147483647;width:30px;height:30px;' +
125
+ // touch-action:none — the drag is pointer-driven, so the browser must not
126
+ // also treat the gesture as a scroll. Without it a touch-drag inside an
127
+ // iframe can scroll-chain to the Cockpit shell behind it.
128
+ themeBtn.style.cssText = 'position:fixed;z-index:2147483647;width:36px;height:36px;' +
60
129
  'border-radius:8px;border:1px solid rgba(128,128,128,.3);background:rgba(128,128,128,.14);' +
61
130
  'color:inherit;cursor:pointer;font-size:14px;line-height:1;display:flex;align-items:center;' +
62
- 'justify-content:center;padding:0';
63
- themeBtn.onclick = toggleTheme;
131
+ 'justify-content:center;padding:0;touch-action:none';
132
+ applyCorner();
133
+
134
+ var dragging = false; // past the slop threshold for THIS gesture
135
+ var didDrag = false; // a drag happened -> swallow the trailing click
136
+ var startX = 0, startY = 0, grabX = 0, grabY = 0;
137
+
138
+ themeBtn.addEventListener('pointerdown', function (ev) {
139
+ if (ev.button) return; // primary button / touch / pen only
140
+ dragging = false;
141
+ didDrag = false; // reset here, so a swallowed click
142
+ // can never leak into the next press
143
+ startX = ev.clientX; startY = ev.clientY;
144
+ var r = themeBtn.getBoundingClientRect();
145
+ grabX = ev.clientX - r.left; grabY = ev.clientY - r.top;
146
+ try { themeBtn.setPointerCapture(ev.pointerId); } catch (e) {}
147
+ });
148
+
149
+ themeBtn.addEventListener('pointermove', function (ev) {
150
+ if (!themeBtn.hasPointerCapture || !themeBtn.hasPointerCapture(ev.pointerId)) return;
151
+ if (!dragging) {
152
+ // Slop before a press becomes a drag: a finger never holds as still as
153
+ // a mouse, so touch needs the looser threshold or taps turn into drags.
154
+ var slop = ev.pointerType === 'touch' ? 8 : 5;
155
+ if (Math.abs(ev.clientX - startX) < slop &&
156
+ Math.abs(ev.clientY - startY) < slop) return;
157
+ dragging = true; didDrag = true;
158
+ }
159
+ ev.preventDefault();
160
+ var s = themeBtn.style;
161
+ s.right = 'auto'; s.bottom = 'auto'; // free-float while held
162
+ s.left = (ev.clientX - grabX) + 'px';
163
+ s.top = (ev.clientY - grabY) + 'px';
164
+ });
165
+
166
+ var endDrag = function (ev) {
167
+ try { themeBtn.releasePointerCapture(ev.pointerId); } catch (e) {}
168
+ if (!dragging) return;
169
+ dragging = false;
170
+ var r = themeBtn.getBoundingClientRect();
171
+ corner = ((r.top + r.height / 2) < window.innerHeight / 2 ? 't' : 'b') +
172
+ ((r.left + r.width / 2) < window.innerWidth / 2 ? 'l' : 'r');
173
+ try { localStorage.setItem(CORNER_KEY, corner); } catch (e) {}
174
+ applyCorner();
175
+ };
176
+ themeBtn.addEventListener('pointerup', endDrag);
177
+ themeBtn.addEventListener('pointercancel', function (ev) {
178
+ dragging = false;
179
+ try { themeBtn.releasePointerCapture(ev.pointerId); } catch (e) {}
180
+ applyCorner(); // snap back rather than strand it
181
+ });
182
+
183
+ // Kept as a click handler rather than firing on pointerup so keyboard
184
+ // activation (Enter/Space on the focused button) still toggles.
185
+ themeBtn.onclick = function () {
186
+ if (didDrag) { didDrag = false; return; }
187
+ toggleTheme();
188
+ };
189
+ window.addEventListener('resize', applyCorner);
64
190
  document.body.appendChild(themeBtn);
65
191
  };
66
192
  if (document.body) mountThemeBtn();
@@ -79,9 +205,10 @@
79
205
 
80
206
  var ws = null;
81
207
  var ready = false;
82
- var queue = [];
83
- var handlers = {};
208
+ var queue = []; // [{ id, s }] — pending frames, drained on open
209
+ var handlers = {}; // id -> { onStdout, onStderr, onExit, onError, gen }
84
210
  var seq = 0;
211
+ var gen = 0; // connection generation; see ensureWs
85
212
 
86
213
  function resolveWsUrl() {
87
214
  if (WS_URL) return WS_URL;
@@ -98,17 +225,50 @@
98
225
  }
99
226
  }
100
227
 
228
+ /**
229
+ * Fail only the commands carried by ONE connection. Handlers are tagged with
230
+ * the generation of the socket that actually wrote them, so a socket that has
231
+ * been replaced can report its own losses without touching its successor's
232
+ * in-flight work.
233
+ */
234
+ function failGen(g, reason) {
235
+ var ids = Object.keys(handlers);
236
+ for (var i = 0; i < ids.length; i++) {
237
+ var h = handlers[ids[i]];
238
+ if (!h || h.gen !== g) continue;
239
+ delete handlers[ids[i]];
240
+ if (h.onError) h.onError(reason);
241
+ }
242
+ }
243
+
101
244
  function ensureWs() {
102
245
  if (ws && (ws.readyState === 0 || ws.readyState === 1)) return;
103
- try { ws = new WebSocket(resolveWsUrl()); }
246
+ // A socket in CLOSING(2) is replaced here rather than waited on, so two
247
+ // sockets can briefly coexist. Shared state (\`ready\`, \`queue\`) may only
248
+ // be touched by the CURRENT socket — otherwise a replaced socket's late
249
+ // onclose flips \`ready\` to false while its successor is already open, and
250
+ // since the successor's onopen has long since fired nothing ever sets it
251
+ // back: every later bash() then queues forever with no error at all.
252
+ var myGen = ++gen;
253
+ var sock;
254
+ try { sock = new WebSocket(resolveWsUrl()); }
104
255
  catch (e) { failAll(String(e)); return; }
256
+ ws = sock;
105
257
  ready = false;
106
- ws.onopen = function () {
258
+ sock.onopen = function () {
259
+ if (ws !== sock) return;
107
260
  ready = true;
108
261
  var q = queue; queue = [];
109
- for (var i = 0; i < q.length; i++) ws.send(q[i]);
262
+ for (var i = 0; i < q.length; i++) {
263
+ // Re-tag: this socket, not the one queued them, is the carrier.
264
+ if (handlers[q[i].id]) handlers[q[i].id].gen = myGen;
265
+ sock.send(q[i].s);
266
+ }
110
267
  };
111
- ws.onmessage = function (ev) {
268
+ // NOT generation-guarded: ids are globally unique, so a late frame can only
269
+ // belong to the command this very socket carried. Dropping it would leave
270
+ // that command's promise unsettled forever.
271
+ sock.onmessage = function (ev) {
112
272
  var msg;
113
273
  try { msg = JSON.parse(ev.data); } catch (e) { return; }
114
274
  if (msg.type === 'ping') return;
@@ -119,15 +279,36 @@
119
279
  else if (msg.type === 'exit') { delete handlers[msg.id]; if (h.onExit) h.onExit(msg.code); }
120
280
  else if (msg.type === 'error') { delete handlers[msg.id]; if (h.onError) h.onError(msg.message); }
121
281
  };
122
- ws.onclose = function () { ready = false; failAll('connection closed'); };
123
- ws.onerror = function () { /* onclose follows */ };
282
+ sock.onclose = function () {
283
+ if (ws === sock) {
284
+ ready = false;
285
+ // Drop anything still queued and fail it here. These are shell commands
286
+ // with side effects: letting a later reconnect drain this queue would
287
+ // re-run them with their handlers already gone, so the output would go
288
+ // nowhere and the caller would never learn it ran twice.
289
+ var q = queue; queue = [];
290
+ for (var i = 0; i < q.length; i++) {
291
+ var qh = handlers[q[i].id];
292
+ if (!qh) continue;
293
+ delete handlers[q[i].id];
294
+ if (qh.onError) qh.onError('connection closed');
295
+ }
296
+ }
297
+ // Always report THIS connection's own losses, current or replaced — a
298
+ // replaced socket still owes an answer to whatever it was carrying.
299
+ failGen(myGen, 'connection closed');
300
+ };
301
+ sock.onerror = function () { /* onclose follows */ };
124
302
  }
125
303
 
126
304
  function send(obj) {
127
305
  var s = JSON.stringify(obj);
128
306
  ensureWs();
307
+ // Tag AFTER ensureWs — it may have opened a new connection, and what
308
+ // matters is which socket ends up carrying this command.
309
+ if (obj.id && handlers[obj.id]) handlers[obj.id].gen = gen;
129
310
  if (ready && ws && ws.readyState === 1) ws.send(s);
130
- else queue.push(s);
311
+ else queue.push({ id: obj.id, s: s });
131
312
  }
132
313
 
133
314
  function run(command, opts) {
@@ -169,9 +350,19 @@
169
350
 
170
351
  // toggleTheme is reassigned by the deferred initTheme — forward lazily so the
171
352
  // exported function always calls the current implementation, not the no-op.
172
- window.cockpit = { cwd: CWD, bash: bash, toggleTheme: function () { toggleTheme(); } };
353
+ window.cockpit = {
354
+ cwd: CWD,
355
+ bash: bash,
356
+ toggleTheme: function () { toggleTheme(); },
357
+ // Current host language ('' until the host's first push, so apps can fall
358
+ // back to navigator themselves). Apps PERCEIVE the language and own their
359
+ // own strings — this is not an i18n runtime.
360
+ get lang() {
361
+ return document.documentElement.getAttribute('data-cockpit-lang') || '';
362
+ }
363
+ };
173
364
  window.addEventListener('beforeunload', function () {
174
365
  try { if (ws) ws.close(); } catch (e) {}
175
366
  });
176
367
  })();
177
- `;function e(a){return/^([/\\]|[A-Za-z]:)/.test(a)}function f(a,b){let c,d,f=(c=Math.max(a.lastIndexOf("/"),a.lastIndexOf("\\")))<0?"":0===c?"/":a.slice(0,c);return e(a)?f:b?(d=b.replace(/[/\\]+$/,""),f?`${d}/${f}`:d):f}function g(a){let b="/api/preview/",c="/"+decodeURIComponent(a.startsWith(b)?a.slice(b.length):a.replace(/^\/+/,""));return(c=c.replace(/^\/([A-Za-z]:)/,"$1")).includes("\0")||c.split(/[/\\]/).includes("..")?null:c}function h(a,b){let c=a=>JSON.stringify(a).replace(/</g,"\\u003c"),e="<script>"+d.replaceAll("__CWD__",c(b.cwd)).replaceAll("__WS_URL__",c(b.wsUrl??""))+"<\/script>",f=a.match(/<head[^>]*>/i);if(f&&void 0!==f.index){let b=f.index+f[0].length;return a.slice(0,b)+e+a.slice(b)}let g=a.match(/<html[^>]*>/i);if(g&&void 0!==g.index){let b=g.index+g[0].length;return a.slice(0,b)+e+a.slice(b)}return e+a}},72891:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{OZ:()=>o,RL:()=>n,k9:()=>p,ok:()=>l});var e=c(37625),f=c(52693),g=c(18412),h=c(89705),i=c(94506),j=c(770),k=a([i]);i=(k.then?(await k)():k)[0];let l=(a,b=200)=>new Response(JSON.stringify(a),{status:b,headers:{"content-type":"application/json"}}),m=a=>{let b=e.od(a);if(f.Ru(b)){let a=b.value,c=(0,j.Sh)(a);return new Response(JSON.stringify({error:(a=>{let b=a.message;if("string"==typeof b&&b.length>0)return b;let c=a.cause;if(c instanceof Error&&c.message.length>0)return c.message;switch(a._tag){case"ValidationError":return`Invalid ${a.field}: ${a.reason}`;case"NotFoundError":return`${a.resource} not found: ${a.id}`;case"PermissionError":return`Permission denied: ${a.action} on ${a.resource}`;case"DBError":return`${a.db} ${a.op} failed`;case"FSError":return`${a.op} ${a.path} failed`;case"WSError":return`${a.proto} ${a.kind} failed`;case"AgentError":return`${a.provider} ${a.kind} failed`;default:return a._tag}})(a),tag:a._tag}),{status:c,headers:{"content-type":"application/json"}})}return console.error("[handler] uncaught defect:\n"+e.j9(a)),new Response(JSON.stringify({error:"Internal Server Error",tag:"InternalError"}),{status:500,headers:{"content-type":"application/json"}})},n=a=>async b=>{let c=await i.s9.runPromiseExit(a(b));return g.YW(c,{onFailure:a=>m(a),onSuccess:a=>a})},o=a=>async(b,c)=>{let d=await c.params,e=await i.s9.runPromiseExit(a(b,d));return g.YW(e,{onFailure:a=>m(a),onSuccess:a=>a})},p=a=>h.$mh({try:()=>a.json(),catch:()=>new j.yI({field:"body",reason:"invalid JSON"})});d()}catch(a){d(a)}})}};
368
+ `;function e(a){return/^([/\\]|[A-Za-z]:)/.test(a)}function f(a,b){let c,d,f=(c=Math.max(a.lastIndexOf("/"),a.lastIndexOf("\\")))<0?"":0===c?"/":a.slice(0,c);return e(a)?f:b?(d=b.replace(/[/\\]+$/,""),f?`${d}/${f}`:d):f}let g="/apps/local/";function h(a){let b,c=a.startsWith(g)?a.slice(g.length):a.replace(/^\/+/,"");try{b=decodeURIComponent(c)}catch{return null}let d="/"+b;return(d=d.replace(/^\/([A-Za-z]:)/,"$1")).includes("\0")||d.split(/[/\\]/).includes("..")?null:d}function i(a,b){let c=a=>JSON.stringify(a).replace(/</g,"\\u003c"),e="<script>"+d.replaceAll("__CWD__",c(b.cwd)).replaceAll("__WS_URL__",c(b.wsUrl??""))+"<\/script>",f=a.match(/<head[^>]*>/i);if(f&&void 0!==f.index){let b=f.index+f[0].length;return a.slice(0,b)+e+a.slice(b)}let g=a.match(/<html[^>]*>/i);if(g&&void 0!==g.index){let b=g.index+g[0].length;return a.slice(0,b)+e+a.slice(b)}return e+a}},72891:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.d(b,{OZ:()=>o,RL:()=>n,k9:()=>p,ok:()=>l});var e=c(37625),f=c(52693),g=c(18412),h=c(89705),i=c(94506),j=c(770),k=a([i]);i=(k.then?(await k)():k)[0];let l=(a,b=200)=>new Response(JSON.stringify(a),{status:b,headers:{"content-type":"application/json"}}),m=a=>{let b=e.od(a);if(f.Ru(b)){let a=b.value,c=(0,j.Sh)(a);return new Response(JSON.stringify({error:(a=>{let b=a.message;if("string"==typeof b&&b.length>0)return b;let c=a.cause;if(c instanceof Error&&c.message.length>0)return c.message;switch(a._tag){case"ValidationError":return`Invalid ${a.field}: ${a.reason}`;case"NotFoundError":return`${a.resource} not found: ${a.id}`;case"PermissionError":return`Permission denied: ${a.action} on ${a.resource}`;case"DBError":return`${a.db} ${a.op} failed`;case"FSError":return`${a.op} ${a.path} failed`;case"WSError":return`${a.proto} ${a.kind} failed`;case"AgentError":return`${a.provider} ${a.kind} failed`;default:return a._tag}})(a),tag:a._tag}),{status:c,headers:{"content-type":"application/json"}})}return console.error("[handler] uncaught defect:\n"+e.j9(a)),new Response(JSON.stringify({error:"Internal Server Error",tag:"InternalError"}),{status:500,headers:{"content-type":"application/json"}})},n=a=>async b=>{let c=await i.s9.runPromiseExit(a(b));return g.YW(c,{onFailure:a=>m(a),onSuccess:a=>a})},o=a=>async(b,c)=>{let d=await c.params,e=await i.s9.runPromiseExit(a(b,d));return g.YW(e,{onFailure:a=>m(a),onSuccess:a=>a})},p=a=>h.$mh({try:()=>a.json(),catch:()=>new j.yI({field:"body",reason:"invalid JSON"})});d()}catch(a){d(a)}})}};