@37chengshan/ompweb 0.3.6 → 4.0.1

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 (273) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +4 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/react-loadable-manifest.json +5 -5
  5. package/.next/required-server-files.js +4 -3
  6. package/.next/required-server-files.json +4 -3
  7. package/.next/routes-manifest.json +24 -0
  8. package/.next/server/app/_global-error/page.js +1 -1
  9. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/_global-error.html +1 -1
  11. package/.next/server/app/_global-error.rsc +2 -2
  12. package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  13. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
  14. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next/server/app/_not-found/page.js +1 -1
  16. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/.next/server/app/_not-found.html +1 -1
  18. package/.next/server/app/_not-found.rsc +3 -3
  19. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  20. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  21. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  22. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  23. package/.next/server/app/api/agent/[id]/events/route.js +2 -2
  24. package/.next/server/app/api/agent/[id]/route.js +1 -1
  25. package/.next/server/app/api/agent/new/route.js +1 -1
  26. package/.next/server/app/api/agent/running/events/route.js +2 -2
  27. package/.next/server/app/api/agents/route.js +1 -1
  28. package/.next/server/app/api/app-update/route.js +1 -1
  29. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  30. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  31. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  32. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  33. package/.next/server/app/api/auth/providers/route.js +1 -1
  34. package/.next/server/app/api/cwd/browse/route.js +1 -1
  35. package/.next/server/app/api/cwd/validate/route.js +1 -1
  36. package/.next/server/app/api/default-cwd/route.js +1 -1
  37. package/.next/server/app/api/file-index/route.js +1 -1
  38. package/.next/server/app/api/files/[...path]/route.js +2 -2
  39. package/.next/server/app/api/git/diff/route.js +2 -2
  40. package/.next/server/app/api/git/status/route.js +2 -2
  41. package/.next/server/app/api/github/status/route.js +1 -0
  42. package/.next/server/app/api/github/status/route.js.nft.json +1 -0
  43. package/.next/server/app/api/github/status/route_client-reference-manifest.js +1 -0
  44. package/.next/server/app/api/home/route.js +1 -1
  45. package/.next/server/app/api/mcp/route.js +2 -2
  46. package/.next/server/app/api/model-roles/route.js +1 -1
  47. package/.next/server/app/api/models/fetch/route.js +1 -1
  48. package/.next/server/app/api/models/route.js +1 -1
  49. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  50. package/.next/server/app/api/models-config/route.js +1 -1
  51. package/.next/server/app/api/models-config/test/route.js +1 -1
  52. package/.next/server/app/api/omp-settings/route.js +1 -1
  53. package/.next/server/app/api/omp-update/route.js +2 -2
  54. package/.next/server/app/api/omp-version/route.js +1 -1
  55. package/.next/server/app/api/plugins/route.js +1 -1
  56. package/.next/server/app/api/projects/route.js +2 -2
  57. package/.next/server/app/api/providers/enable/route.js +1 -1
  58. package/.next/server/app/api/reveal/route.js +1 -1
  59. package/.next/server/app/api/scripts/route.js +1 -0
  60. package/.next/server/app/api/scripts/route.js.nft.json +1 -0
  61. package/.next/server/app/api/scripts/route_client-reference-manifest.js +1 -0
  62. package/.next/server/app/api/scripts/run/route.js +1 -0
  63. package/.next/server/app/api/scripts/run/route.js.nft.json +1 -0
  64. package/.next/server/app/api/scripts/run/route_client-reference-manifest.js +1 -0
  65. package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
  66. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  67. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  68. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  69. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  70. package/.next/server/app/api/sessions/[id]/plan/route.js +1 -1
  71. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  72. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  73. package/.next/server/app/api/sessions/[id]/subagents/[subagentId]/route.js +1 -1
  74. package/.next/server/app/api/sessions/[id]/subagents/route.js +1 -1
  75. package/.next/server/app/api/sessions/archive/route.js +1 -1
  76. package/.next/server/app/api/sessions/import/route.js +1 -1
  77. package/.next/server/app/api/sessions/route.js +1 -1
  78. package/.next/server/app/api/skills/check/route.js +1 -1
  79. package/.next/server/app/api/skills/install/route.js +1 -1
  80. package/.next/server/app/api/skills/route.js +2 -2
  81. package/.next/server/app/api/skills/search/route.js +1 -1
  82. package/.next/server/app/api/skills/update/route.js +1 -1
  83. package/.next/server/app/api/terminal/input/route.js +4 -6
  84. package/.next/server/app/api/terminal/input/route.js.nft.json +1 -1
  85. package/.next/server/app/api/terminal/open/route.js +1 -1
  86. package/.next/server/app/api/terminal/resize/route.js +6 -0
  87. package/.next/server/app/api/terminal/resize/route.js.nft.json +1 -0
  88. package/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -0
  89. package/.next/server/app/api/terminal/session/route.js +4 -6
  90. package/.next/server/app/api/terminal/session/route.js.nft.json +1 -1
  91. package/.next/server/app/api/terminal/stream/route.js +7 -9
  92. package/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
  93. package/.next/server/app/api/web-auth/session/route.js +1 -1
  94. package/.next/server/app/api/worktrees/route.js +1 -1
  95. package/.next/server/app/favicon.ico/route.js +1 -1
  96. package/.next/server/app/index.html +1 -1
  97. package/.next/server/app/index.rsc +4 -4
  98. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  99. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  100. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  101. package/.next/server/app/login/page.js +1 -1
  102. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  103. package/.next/server/app/login.html +1 -1
  104. package/.next/server/app/login.rsc +3 -3
  105. package/.next/server/app/login.segments/_full.segment.rsc +3 -3
  106. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  107. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +3 -3
  108. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  109. package/.next/server/app/page.js +1 -1
  110. package/.next/server/app/page_client-reference-manifest.js +1 -1
  111. package/.next/server/app-paths-manifest.json +4 -0
  112. package/.next/server/chunks/4509.js +1 -1
  113. package/.next/server/chunks/5309.js +1 -1
  114. package/.next/server/middleware-build-manifest.js +1 -1
  115. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  116. package/.next/server/pages/404.html +1 -1
  117. package/.next/server/pages/500.html +1 -1
  118. package/.next/static/KmgSpHtt3ScXfRBhfF13-/_buildManifest.js +1 -0
  119. package/.next/static/chunks/2584-f6cc0dc1511c8e00.js +1 -0
  120. package/.next/static/chunks/303.9661abdb4e0093ec.js +126 -0
  121. package/.next/static/chunks/3550.d3f97c806e3623e2.js +1 -0
  122. package/.next/static/chunks/5658.aab0a7c617597ba5.js +1 -0
  123. package/.next/static/chunks/app/_global-error/page-b0b6e7e566c944c1.js +1 -0
  124. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-b0b6e7e566c944c1.js +1 -0
  125. package/.next/static/chunks/app/api/agent/[id]/events/route-b0b6e7e566c944c1.js +1 -0
  126. package/.next/static/chunks/app/api/agent/[id]/route-b0b6e7e566c944c1.js +1 -0
  127. package/.next/static/chunks/app/api/agent/new/route-b0b6e7e566c944c1.js +1 -0
  128. package/.next/static/chunks/app/api/agent/running/events/route-b0b6e7e566c944c1.js +1 -0
  129. package/.next/static/chunks/app/api/agents/route-b0b6e7e566c944c1.js +1 -0
  130. package/.next/static/chunks/app/api/app-update/route-b0b6e7e566c944c1.js +1 -0
  131. package/.next/static/chunks/app/api/auth/all-providers/route-b0b6e7e566c944c1.js +1 -0
  132. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-b0b6e7e566c944c1.js +1 -0
  133. package/.next/static/chunks/app/api/auth/login/[provider]/route-b0b6e7e566c944c1.js +1 -0
  134. package/.next/static/chunks/app/api/auth/logout/[provider]/route-b0b6e7e566c944c1.js +1 -0
  135. package/.next/static/chunks/app/api/auth/providers/route-b0b6e7e566c944c1.js +1 -0
  136. package/.next/static/chunks/app/api/cwd/browse/route-b0b6e7e566c944c1.js +1 -0
  137. package/.next/static/chunks/app/api/cwd/validate/route-b0b6e7e566c944c1.js +1 -0
  138. package/.next/static/chunks/app/api/default-cwd/route-b0b6e7e566c944c1.js +1 -0
  139. package/.next/static/chunks/app/api/file-index/route-b0b6e7e566c944c1.js +1 -0
  140. package/.next/static/chunks/app/api/files/[...path]/route-b0b6e7e566c944c1.js +1 -0
  141. package/.next/static/chunks/app/api/git/diff/route-b0b6e7e566c944c1.js +1 -0
  142. package/.next/static/chunks/app/api/git/status/route-b0b6e7e566c944c1.js +1 -0
  143. package/.next/static/chunks/app/api/github/status/route-b0b6e7e566c944c1.js +1 -0
  144. package/.next/static/chunks/app/api/home/route-b0b6e7e566c944c1.js +1 -0
  145. package/.next/static/chunks/app/api/mcp/route-b0b6e7e566c944c1.js +1 -0
  146. package/.next/static/chunks/app/api/model-roles/route-b0b6e7e566c944c1.js +1 -0
  147. package/.next/static/chunks/app/api/models/fetch/route-b0b6e7e566c944c1.js +1 -0
  148. package/.next/static/chunks/app/api/models/route-b0b6e7e566c944c1.js +1 -0
  149. package/.next/static/chunks/app/api/models-config/catalog/route-b0b6e7e566c944c1.js +1 -0
  150. package/.next/static/chunks/app/api/models-config/route-b0b6e7e566c944c1.js +1 -0
  151. package/.next/static/chunks/app/api/models-config/test/route-b0b6e7e566c944c1.js +1 -0
  152. package/.next/static/chunks/app/api/omp-settings/route-b0b6e7e566c944c1.js +1 -0
  153. package/.next/static/chunks/app/api/omp-update/route-b0b6e7e566c944c1.js +1 -0
  154. package/.next/static/chunks/app/api/omp-version/route-b0b6e7e566c944c1.js +1 -0
  155. package/.next/static/chunks/app/api/plugins/route-b0b6e7e566c944c1.js +1 -0
  156. package/.next/static/chunks/app/api/projects/route-b0b6e7e566c944c1.js +1 -0
  157. package/.next/static/chunks/app/api/providers/enable/route-b0b6e7e566c944c1.js +1 -0
  158. package/.next/static/chunks/app/api/reveal/route-b0b6e7e566c944c1.js +1 -0
  159. package/.next/static/chunks/app/api/scripts/route-b0b6e7e566c944c1.js +1 -0
  160. package/.next/static/chunks/app/api/scripts/run/route-b0b6e7e566c944c1.js +1 -0
  161. package/.next/static/chunks/app/api/sessions/[id]/archive/route-b0b6e7e566c944c1.js +1 -0
  162. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-b0b6e7e566c944c1.js +1 -0
  163. package/.next/static/chunks/app/api/sessions/[id]/context/route-b0b6e7e566c944c1.js +1 -0
  164. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-b0b6e7e566c944c1.js +1 -0
  165. package/.next/static/chunks/app/api/sessions/[id]/export/route-b0b6e7e566c944c1.js +1 -0
  166. package/.next/static/chunks/app/api/sessions/[id]/plan/route-b0b6e7e566c944c1.js +1 -0
  167. package/.next/static/chunks/app/api/sessions/[id]/route-b0b6e7e566c944c1.js +1 -0
  168. package/.next/static/chunks/app/api/sessions/[id]/state/route-b0b6e7e566c944c1.js +1 -0
  169. package/.next/static/chunks/app/api/sessions/[id]/subagents/[subagentId]/route-b0b6e7e566c944c1.js +1 -0
  170. package/.next/static/chunks/app/api/sessions/[id]/subagents/route-b0b6e7e566c944c1.js +1 -0
  171. package/.next/static/chunks/app/api/sessions/archive/route-b0b6e7e566c944c1.js +1 -0
  172. package/.next/static/chunks/app/api/sessions/import/route-b0b6e7e566c944c1.js +1 -0
  173. package/.next/static/chunks/app/api/sessions/route-b0b6e7e566c944c1.js +1 -0
  174. package/.next/static/chunks/app/api/skills/check/route-b0b6e7e566c944c1.js +1 -0
  175. package/.next/static/chunks/app/api/skills/install/route-b0b6e7e566c944c1.js +1 -0
  176. package/.next/static/chunks/app/api/skills/route-b0b6e7e566c944c1.js +1 -0
  177. package/.next/static/chunks/app/api/skills/search/route-b0b6e7e566c944c1.js +1 -0
  178. package/.next/static/chunks/app/api/skills/update/route-b0b6e7e566c944c1.js +1 -0
  179. package/.next/static/chunks/app/api/terminal/input/route-b0b6e7e566c944c1.js +1 -0
  180. package/.next/static/chunks/app/api/terminal/open/route-b0b6e7e566c944c1.js +1 -0
  181. package/.next/static/chunks/app/api/terminal/resize/route-b0b6e7e566c944c1.js +1 -0
  182. package/.next/static/chunks/app/api/terminal/session/route-b0b6e7e566c944c1.js +1 -0
  183. package/.next/static/chunks/app/api/terminal/stream/route-b0b6e7e566c944c1.js +1 -0
  184. package/.next/static/chunks/app/api/web-auth/session/route-b0b6e7e566c944c1.js +1 -0
  185. package/.next/static/chunks/app/api/worktrees/route-b0b6e7e566c944c1.js +1 -0
  186. package/.next/static/chunks/app/manifest.webmanifest/route-b0b6e7e566c944c1.js +1 -0
  187. package/.next/static/chunks/app/{page-833698058d71b603.js → page-122708b0165e41be.js} +1 -1
  188. package/.next/static/chunks/next/dist/client/components/builtin/app-error-b0b6e7e566c944c1.js +1 -0
  189. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-b0b6e7e566c944c1.js +1 -0
  190. package/.next/static/chunks/next/dist/client/components/builtin/not-found-b0b6e7e566c944c1.js +1 -0
  191. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b0b6e7e566c944c1.js +1 -0
  192. package/.next/static/chunks/webpack-63dfdf9f94b72b35.js +1 -0
  193. package/.next/static/css/7bbf54d710e156ee.css +1 -0
  194. package/bin/omp-web-desktop.js +159 -0
  195. package/next.config.ts +3 -1
  196. package/package.json +6 -4
  197. package/templates/desktop/OmpWeb.app/Contents/Info.plist +26 -0
  198. package/templates/desktop/OmpWeb.app/Contents/MacOS/ompweb-launcher +7 -0
  199. package/templates/desktop/OmpWeb.app/Contents/Resources/OmpWeb.icns +0 -0
  200. package/templates/desktop/mac-start.command +16 -0
  201. package/templates/desktop/win-start.vbs +9 -0
  202. package/.next/static/RW6Yu4DRfKI1mQ_EqoVNo/_buildManifest.js +0 -1
  203. package/.next/static/chunks/202.10de6e38a49a6c80.js +0 -131
  204. package/.next/static/chunks/2584-20a03146e1e2db70.js +0 -1
  205. package/.next/static/chunks/5658.600b820420422057.js +0 -1
  206. package/.next/static/chunks/8673.8f38e67890334c5a.js +0 -1
  207. package/.next/static/chunks/app/_global-error/page-48788bcdc79e1c9e.js +0 -1
  208. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-48788bcdc79e1c9e.js +0 -1
  209. package/.next/static/chunks/app/api/agent/[id]/events/route-48788bcdc79e1c9e.js +0 -1
  210. package/.next/static/chunks/app/api/agent/[id]/route-48788bcdc79e1c9e.js +0 -1
  211. package/.next/static/chunks/app/api/agent/new/route-48788bcdc79e1c9e.js +0 -1
  212. package/.next/static/chunks/app/api/agent/running/events/route-48788bcdc79e1c9e.js +0 -1
  213. package/.next/static/chunks/app/api/agents/route-48788bcdc79e1c9e.js +0 -1
  214. package/.next/static/chunks/app/api/app-update/route-48788bcdc79e1c9e.js +0 -1
  215. package/.next/static/chunks/app/api/auth/all-providers/route-48788bcdc79e1c9e.js +0 -1
  216. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-48788bcdc79e1c9e.js +0 -1
  217. package/.next/static/chunks/app/api/auth/login/[provider]/route-48788bcdc79e1c9e.js +0 -1
  218. package/.next/static/chunks/app/api/auth/logout/[provider]/route-48788bcdc79e1c9e.js +0 -1
  219. package/.next/static/chunks/app/api/auth/providers/route-48788bcdc79e1c9e.js +0 -1
  220. package/.next/static/chunks/app/api/cwd/browse/route-48788bcdc79e1c9e.js +0 -1
  221. package/.next/static/chunks/app/api/cwd/validate/route-48788bcdc79e1c9e.js +0 -1
  222. package/.next/static/chunks/app/api/default-cwd/route-48788bcdc79e1c9e.js +0 -1
  223. package/.next/static/chunks/app/api/file-index/route-48788bcdc79e1c9e.js +0 -1
  224. package/.next/static/chunks/app/api/files/[...path]/route-48788bcdc79e1c9e.js +0 -1
  225. package/.next/static/chunks/app/api/git/diff/route-48788bcdc79e1c9e.js +0 -1
  226. package/.next/static/chunks/app/api/git/status/route-48788bcdc79e1c9e.js +0 -1
  227. package/.next/static/chunks/app/api/home/route-48788bcdc79e1c9e.js +0 -1
  228. package/.next/static/chunks/app/api/mcp/route-48788bcdc79e1c9e.js +0 -1
  229. package/.next/static/chunks/app/api/model-roles/route-48788bcdc79e1c9e.js +0 -1
  230. package/.next/static/chunks/app/api/models/fetch/route-48788bcdc79e1c9e.js +0 -1
  231. package/.next/static/chunks/app/api/models/route-48788bcdc79e1c9e.js +0 -1
  232. package/.next/static/chunks/app/api/models-config/catalog/route-48788bcdc79e1c9e.js +0 -1
  233. package/.next/static/chunks/app/api/models-config/route-48788bcdc79e1c9e.js +0 -1
  234. package/.next/static/chunks/app/api/models-config/test/route-48788bcdc79e1c9e.js +0 -1
  235. package/.next/static/chunks/app/api/omp-settings/route-48788bcdc79e1c9e.js +0 -1
  236. package/.next/static/chunks/app/api/omp-update/route-48788bcdc79e1c9e.js +0 -1
  237. package/.next/static/chunks/app/api/omp-version/route-48788bcdc79e1c9e.js +0 -1
  238. package/.next/static/chunks/app/api/plugins/route-48788bcdc79e1c9e.js +0 -1
  239. package/.next/static/chunks/app/api/projects/route-48788bcdc79e1c9e.js +0 -1
  240. package/.next/static/chunks/app/api/providers/enable/route-48788bcdc79e1c9e.js +0 -1
  241. package/.next/static/chunks/app/api/reveal/route-48788bcdc79e1c9e.js +0 -1
  242. package/.next/static/chunks/app/api/sessions/[id]/archive/route-48788bcdc79e1c9e.js +0 -1
  243. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-48788bcdc79e1c9e.js +0 -1
  244. package/.next/static/chunks/app/api/sessions/[id]/context/route-48788bcdc79e1c9e.js +0 -1
  245. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-48788bcdc79e1c9e.js +0 -1
  246. package/.next/static/chunks/app/api/sessions/[id]/export/route-48788bcdc79e1c9e.js +0 -1
  247. package/.next/static/chunks/app/api/sessions/[id]/plan/route-48788bcdc79e1c9e.js +0 -1
  248. package/.next/static/chunks/app/api/sessions/[id]/route-48788bcdc79e1c9e.js +0 -1
  249. package/.next/static/chunks/app/api/sessions/[id]/state/route-48788bcdc79e1c9e.js +0 -1
  250. package/.next/static/chunks/app/api/sessions/[id]/subagents/[subagentId]/route-48788bcdc79e1c9e.js +0 -1
  251. package/.next/static/chunks/app/api/sessions/[id]/subagents/route-48788bcdc79e1c9e.js +0 -1
  252. package/.next/static/chunks/app/api/sessions/archive/route-48788bcdc79e1c9e.js +0 -1
  253. package/.next/static/chunks/app/api/sessions/import/route-48788bcdc79e1c9e.js +0 -1
  254. package/.next/static/chunks/app/api/sessions/route-48788bcdc79e1c9e.js +0 -1
  255. package/.next/static/chunks/app/api/skills/check/route-48788bcdc79e1c9e.js +0 -1
  256. package/.next/static/chunks/app/api/skills/install/route-48788bcdc79e1c9e.js +0 -1
  257. package/.next/static/chunks/app/api/skills/route-48788bcdc79e1c9e.js +0 -1
  258. package/.next/static/chunks/app/api/skills/search/route-48788bcdc79e1c9e.js +0 -1
  259. package/.next/static/chunks/app/api/skills/update/route-48788bcdc79e1c9e.js +0 -1
  260. package/.next/static/chunks/app/api/terminal/input/route-48788bcdc79e1c9e.js +0 -1
  261. package/.next/static/chunks/app/api/terminal/open/route-48788bcdc79e1c9e.js +0 -1
  262. package/.next/static/chunks/app/api/terminal/session/route-48788bcdc79e1c9e.js +0 -1
  263. package/.next/static/chunks/app/api/terminal/stream/route-48788bcdc79e1c9e.js +0 -1
  264. package/.next/static/chunks/app/api/web-auth/session/route-48788bcdc79e1c9e.js +0 -1
  265. package/.next/static/chunks/app/api/worktrees/route-48788bcdc79e1c9e.js +0 -1
  266. package/.next/static/chunks/app/manifest.webmanifest/route-48788bcdc79e1c9e.js +0 -1
  267. package/.next/static/chunks/next/dist/client/components/builtin/app-error-48788bcdc79e1c9e.js +0 -1
  268. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-48788bcdc79e1c9e.js +0 -1
  269. package/.next/static/chunks/next/dist/client/components/builtin/not-found-48788bcdc79e1c9e.js +0 -1
  270. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-48788bcdc79e1c9e.js +0 -1
  271. package/.next/static/chunks/webpack-32eae552598b6ade.js +0 -1
  272. package/.next/static/css/dda9acc8fa0835d6.css +0 -1
  273. /package/.next/static/{RW6Yu4DRfKI1mQ_EqoVNo → KmgSpHtt3ScXfRBhfF13-}/_ssgManifest.js +0 -0
@@ -0,0 +1 @@
1
+ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,::backdrop,:after,:before{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-font-weight:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-ease:initial}}}@layer theme{:host,:root{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-serif:ui-serif,Georgia,Cambria,"Times New Roman",Times,serif;--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--font-weight-medium:500;--ease-in:cubic-bezier(.4,0,1,1);--ease-out:cubic-bezier(0,0,.2,1);--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-border:var(--border);--color-text:var(--text);--color-text-muted:var(--text-muted);--color-text-dim:var(--text-dim);--color-accent:var(--accent);--color-accent-hover:var(--accent-hover);--color-bg-subtle:var(--bg-subtle)}}@layer base{*,::backdrop,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}:host,html{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}menu,ol,ul{list-style:none}audio,canvas,embed,iframe,img,object,svg,video{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,optgroup,select,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit,::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-\[720px\]{height:720px}.h-full{height:100%}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-\[720px\]{width:720px}.w-full{width:100%}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.border-collapse{border-collapse:collapse}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-center{justify-content:center}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.truncate{text-overflow:ellipsis;white-space:nowrap}.overflow-hidden,.truncate{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e+38px}.border{border-style:var(--tw-border-style);border-width:1px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-solid{--tw-border-style:solid;border-style:solid}.border-border{border-color:var(--color-border)}.bg-accent{background-color:var(--color-accent)}.bg-bg-subtle{background-color:var(--color-bg-subtle)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.text-\[13px\]{font-size:13px}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.break-all{word-break:break-all}.text-accent{color:var(--color-accent)}.text-text{color:var(--color-text)}.text-text-dim{color:var(--color-text-dim)}.text-text-muted{color:var(--color-text-muted)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px)}.blur,.sepia{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.sepia{--tw-sepia:sepia(100%)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[scrollbar-width\:none\]{scrollbar-width:none}@media (hover:hover){.hover\:text-accent-hover:hover{color:var(--color-accent-hover)}.hover\:text-text:hover{color:var(--color-text)}}}.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm .xterm-cursor-pointer,.xterm.xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}:root{--bg:#faf9f6;--bg-panel:#f2f0ea;--bg-hover:#eae7df;--bg-selected:#e5e0d4;--border:#e2ddd2;--text:#2b2823;--text-muted:#69635a;--text-dim:#6a6458;--accent:#b03e22;--accent-strong:#b03e22;--accent-hover:#96331b;--user-bg:#f5ede1;--tool-bg:#f6f3ed;--bg-subtle:#3c32230a;--status-error:#b42318;--status-success:#18794e;--status-warning:#8a5a00;--status-modified:#a87b1f;--status-renamed:#2563eb;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){:root{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}:root{--omp-o:#b03e22;--omp-m:#d97706;--omp-p:#2d6a4f}:root,html.theme-light,html[data-theme=light]{--bg:#faf9f6;--bg-panel:#f2f0ea;--bg-hover:#eae7df;--bg-selected:#e5e0d4;--border:#e2ddd2;--text:#2b2823;--text-muted:#69635a;--text-dim:#6a6458;--accent:#b03e22;--accent-strong:#b03e22;--accent-hover:#96331b;--user-bg:#f5ede1;--tool-bg:#f6f3ed;--bg-subtle:#3c32230a;--status-error:#b42318;--status-success:#18794e;--status-warning:#8a5a00;--status-modified:#a87b1f;--status-renamed:#2563eb;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){:root,html.theme-light,html[data-theme=light]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}:root,html.theme-light,html[data-theme=light]{--omp-o:#b03e22;--omp-m:#d97706;--omp-p:#2d6a4f}html.theme-nord,html[data-theme=nord]{--bg:#2e3440;--bg-panel:#3b4252;--bg-hover:#434c5e;--bg-selected:#4c566a;--border:#434c5e;--text:#eceff4;--text-muted:#d8dee9;--text-dim:#e5e9f0;--accent:#88c0d0;--accent-strong:#81a1c1;--accent-hover:#8fbcbb;--user-bg:#3b4252;--tool-bg:#353c4a;--bg-subtle:#eceff40a;--status-error:#bf616a;--status-success:#a3be8c;--status-warning:#ebcb8b;--status-modified:#d08770;--status-renamed:#b48ead;--on-accent:#2e3440;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-nord,html[data-theme=nord]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-nord,html[data-theme=nord]{--shadow-card:0 1px 3px #0006,0 0 0 1px #eceff40a;--shadow-pop:0 4px 16px #00000080,0 0 0 1px #eceff40f;--shadow-modal:0 12px 48px #0009,0 0 0 1px #eceff414;--omp-o:#88c0d0;--omp-m:#a3be8c;--omp-p:#b48ead}html.theme-oatmeal,html[data-theme=oatmeal]{--bg:#f7f4ee;--bg-panel:#efece4;--bg-hover:#e6e2d8;--bg-selected:#ddd8cb;--border:#d8d2c4;--text:#342c24;--text-muted:#72675c;--text-dim:#60564c;--accent:#965a38;--accent-strong:#7c4526;--accent-hover:#af6e47;--user-bg:#eae4d8;--tool-bg:#f2eee5;--bg-subtle:#46321e0a;--status-error:#b42318;--status-success:#28724f;--status-warning:#946000;--status-modified:#b37d14;--status-renamed:#2e5a88;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-oatmeal,html[data-theme=oatmeal]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-oatmeal,html[data-theme=oatmeal]{--omp-o:#965a38;--omp-m:#d97706;--omp-p:#3b7a57}html.theme-matcha,html[data-theme=matcha]{--bg:#f3f6f3;--bg-panel:#e8ede7;--bg-hover:#dde4dc;--bg-selected:#d0dcd0;--border:#cad6c8;--text:#1c2b1e;--text-muted:#4f6652;--text-dim:#3e5441;--accent:#2d6a4f;--accent-strong:#20533c;--accent-hover:#3e8565;--user-bg:#e3ece2;--tool-bg:#ecf2eb;--bg-subtle:#2d6a4f0a;--status-error:#b92e2e;--status-success:#2d6a4f;--status-warning:#996b00;--status-modified:#b8860b;--status-renamed:#2e5a88;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-matcha,html[data-theme=matcha]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-matcha,html[data-theme=matcha]{--omp-o:#2d6a4f;--omp-m:#65a30d;--omp-p:#d97706}html.theme-oled,html[data-theme=oled]{--bg:#000;--bg-panel:#0a0a0a;--bg-hover:#141414;--bg-selected:#1e1e1e;--border:#242424;--text:#f8fafc;--text-muted:#94a3b8;--text-dim:#64748b;--accent:#38bdf8;--accent-strong:#0284c7;--accent-hover:#7dd3fc;--user-bg:#0f172a;--tool-bg:#0b0f19;--bg-subtle:#ffffff08;--status-error:#f87171;--status-success:#4ade80;--status-warning:#fbbf24;--status-modified:#fcd34d;--status-renamed:#60a5fa;--on-accent:#000;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-oled,html[data-theme=oled]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-oled,html[data-theme=oled]{--shadow-card:0 1px 3px #000c,0 0 0 1px #ffffff0f;--shadow-pop:0 4px 16px #000000e6,0 0 0 1px #ffffff14;--shadow-modal:0 12px 48px #000000f2,0 0 0 1px #ffffff1a;--omp-o:#38bdf8;--omp-m:#a855f7;--omp-p:#34d399}html.dark:not([data-theme]),html.theme-dark,html[data-theme=dark]{--bg:#1b1916;--bg-panel:#231f1b;--bg-hover:#2b2721;--bg-selected:#332e26;--border:#38322b;--text:#ebe6dc;--text-muted:#a39b8e;--text-dim:#938c81;--accent:#e07b54;--accent-strong:#c2542e;--accent-hover:#e89371;--user-bg:#2c2721;--tool-bg:#26221d;--bg-subtle:#ebe1d20d;--status-error:#ff8a80;--status-success:#69d5a5;--status-warning:#f0c36a;--status-modified:#e0b24d;--status-renamed:#7ca8ff;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.dark:not([data-theme]),html.theme-dark,html[data-theme=dark]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.dark:not([data-theme]),html.theme-dark,html[data-theme=dark]{--omp-o:#e07b54;--omp-m:#f59e0b;--omp-p:#38bdf8}html.theme-sepia,html[data-theme=sepia]{--bg:#f5eedc;--bg-panel:#ebddc3;--bg-hover:#e2cfb0;--bg-selected:#d9c3a0;--border:#d5be99;--text:#3d2b1f;--text-muted:#785e4a;--text-dim:#644e3c;--accent:#8c4820;--accent-strong:#703817;--accent-hover:#a65727;--user-bg:#e8d8bc;--tool-bg:#efe4cd;--bg-subtle:#3d2b1f0a;--status-error:#b3261e;--status-success:#2e6b38;--status-warning:#946000;--status-modified:#b37d14;--status-renamed:#2e5a88;--on-accent:#fff;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-sepia,html[data-theme=sepia]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-sepia,html[data-theme=sepia]{--omp-o:#8c4820;--omp-m:#c2410c;--omp-p:#2e6b38}html.theme-dracula,html[data-theme=dracula]{--bg:#282a36;--bg-panel:#21222c;--bg-hover:#343746;--bg-selected:#44475a;--border:#44475a;--text:#f8f8f2;--text-muted:#b8bfd6;--text-dim:#9da5b4;--accent:#bd93f9;--accent-strong:#9867e8;--accent-hover:#d1b3ff;--user-bg:#323544;--tool-bg:#2b2d3a;--bg-subtle:#f8f8f20a;--status-error:#f55;--status-success:#50fa7b;--status-warning:#f1fa8c;--status-modified:#ffb86c;--status-renamed:#8be9fd;--on-accent:#282a36;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-dracula,html[data-theme=dracula]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-dracula,html[data-theme=dracula]{--shadow-card:0 1px 3px #0006,0 0 0 1px #bd93f90f;--shadow-pop:0 4px 16px #00000080,0 0 0 1px #bd93f914;--shadow-modal:0 12px 48px #000000a6,0 0 0 1px #bd93f91a;--omp-o:#bd93f9;--omp-m:#8be9fd;--omp-p:#50fa7b}html.theme-pine,html[data-theme=pine]{--bg:#121b17;--bg-panel:#1a2621;--bg-hover:#22322c;--bg-selected:#2b3f37;--border:#2c4037;--text:#e8f5ee;--text-muted:#9bb8a9;--text-dim:#799c8b;--accent:#52b788;--accent-strong:#40916c;--accent-hover:#74c69d;--user-bg:#1e2e27;--tool-bg:#16221d;--bg-subtle:#52b7880d;--status-error:#e63946;--status-success:#52b788;--status-warning:#ffb703;--status-modified:#fb8500;--status-renamed:#8ecae6;--on-accent:#081c15;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-pine,html[data-theme=pine]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-pine,html[data-theme=pine]{--omp-o:#52b788;--omp-m:#fbbf24;--omp-p:#38bdf8}html.theme-navy,html[data-theme=navy]{--bg:#0f172a;--bg-panel:#1e293b;--bg-hover:#293548;--bg-selected:#334155;--border:#334155;--text:#f1f5f9;--text-muted:#94a3b8;--text-dim:#64748b;--accent:#60a5fa;--accent-strong:#3b82f6;--accent-hover:#93c5fd;--user-bg:#1e293b;--tool-bg:#172033;--bg-subtle:#60a5fa0d;--status-error:#f87171;--status-success:#4ade80;--status-warning:#fbbf24;--status-modified:#fcd34d;--status-renamed:#60a5fa;--on-accent:#0f172a;--overlay-backdrop:var(--text)}@supports (color:color-mix(in lab,red,red)){html.theme-navy,html[data-theme=navy]{--overlay-backdrop:color-mix(in srgb,var(--text) 24%,transparent)}}html.theme-navy,html[data-theme=navy]{--omp-o:#60a5fa;--omp-m:#38bdf8;--omp-p:#818cf8}html.theme-aurora-flow,html[data-theme=aurora-flow]{--bg:#0c1417;--bg-panel:#121c20c7;--bg-hover:#1c2c32d1;--bg-selected:#263c44e0;--border:#4eedb22e;--text:#e8fdf5;--text-muted:#9adbc5;--text-dim:#70b39e;--accent:#34d399;--accent-strong:#10b981;--accent-hover:#6ee7b7;--user-bg:#142428b8;--tool-bg:#0e181cb8;--bg-subtle:#34d3990f;--status-error:#f87171;--status-success:#34d399;--status-warning:#fbbf24;--status-modified:#fbbf24;--status-renamed:#60a5fa;--on-accent:#064e3b;--overlay-backdrop:#06141680;--omp-o:#34d399;--omp-m:#38bdf8;--omp-p:#a78bfa}html.theme-dawn-flow,html[data-theme=dawn-flow]{--bg:#16101a;--bg-panel:#201626c7;--bg-hover:#302038d1;--bg-selected:#402a4ae0;--border:#f472b62e;--text:#fdf4ff;--text-muted:#f0abfc;--text-dim:#d946ef;--accent:#f472b6;--accent-strong:#db2777;--accent-hover:#fbcfe8;--user-bg:#281a30b8;--tool-bg:#18101eb8;--bg-subtle:#f472b60f;--status-error:#f43f5e;--status-success:#34d399;--status-warning:#fbbf24;--status-modified:#fbbf24;--status-renamed:#c084fc;--on-accent:#4a044e;--overlay-backdrop:#160a1a80;--omp-o:#f472b6;--omp-m:#fb923c;--omp-p:#c084fc}html.theme-cosmic-flow,html[data-theme=cosmic-flow]{--bg:#090b16;--bg-panel:#101426c7;--bg-hover:#1a203cd1;--bg-selected:#262e54e0;--border:#818cf82e;--text:#eef2ff;--text-muted:#a5b4fc;--text-dim:#818cf8;--accent:#818cf8;--accent-strong:#6366f1;--accent-hover:#c7d2fe;--user-bg:#161a34b8;--tool-bg:#0c0f1eb8;--bg-subtle:#818cf80f;--status-error:#f87171;--status-success:#34d399;--status-warning:#fbbf24;--status-modified:#fbbf24;--status-renamed:#38bdf8;--on-accent:#1e1b4b;--overlay-backdrop:#080a1480;--omp-o:#818cf8;--omp-m:#c084fc;--omp-p:#38bdf8}html.theme-ocean-flow,html[data-theme=ocean-flow]{--bg:#071318;--bg-panel:#0c1c24c7;--bg-hover:#142c38d1;--bg-selected:#1c3c4ce0;--border:#38bdf82e;--text:#f0f9ff;--text-muted:#7dd3fc;--text-dim:#38bdf8;--accent:#38bdf8;--accent-strong:#0284c7;--accent-hover:#bae6fd;--user-bg:#102430b8;--tool-bg:#0a161eb8;--bg-subtle:#38bdf80f;--status-error:#f87171;--status-success:#34d399;--status-warning:#fbbf24;--status-modified:#fbbf24;--status-renamed:#38bdf8;--on-accent:#082f49;--overlay-backdrop:#06101680;--omp-o:#38bdf8;--omp-m:#2dd4bf;--omp-p:#818cf8}html.theme-sakura-flow,html[data-theme=sakura-flow]{--bg:#171114;--bg-panel:#22161cc7;--bg-hover:#34202ad1;--bg-selected:#462a38e0;--border:#fb71852e;--text:#fff1f2;--text-muted:#fda4af;--text-dim:#fb7185;--accent:#fb7185;--accent-strong:#e11d48;--accent-hover:#fecdd3;--user-bg:#2a1a22b8;--tool-bg:#181014b8;--bg-subtle:#fb71850f;--status-error:#f43f5e;--status-success:#34d399;--status-warning:#fbbf24;--status-modified:#fbbf24;--status-renamed:#c084fc;--on-accent:#4c0519;--overlay-backdrop:#180a1080;--omp-o:#fb7185;--omp-m:#f43f5e;--omp-p:#fda4af}html.theme-bamboo-flow,html[data-theme=bamboo-flow]{--bg:#0c1612;--bg-panel:#12201ac7;--bg-hover:#1c3026d1;--bg-selected:#264034e0;--border:#34d3992e;--text:#ecfdf5;--text-muted:#a7f3d0;--text-dim:#6ee7b7;--accent:#10b981;--accent-strong:#059669;--accent-hover:#6ee7b7;--user-bg:#162820b8;--tool-bg:#0e1a14b8;--bg-subtle:#10b9810f;--status-error:#f87171;--status-success:#34d399;--status-warning:#fbbf24;--status-modified:#fbbf24;--status-renamed:#38bdf8;--on-accent:#022c22;--overlay-backdrop:#08141080;--omp-o:#10b981;--omp-m:#34d399;--omp-p:#6ee7b7}html[data-theme$=-flow] .chat-input-wrapper,html[data-theme$=-flow] .right-panel-container,html[data-theme$=-flow] .shell-topbar,html[data-theme$=-flow] .sidebar-container,html[data-theme=custom][data-custom-mode=flow] .chat-input-wrapper,html[data-theme=custom][data-custom-mode=flow] .right-panel-container,html[data-theme=custom][data-custom-mode=flow] .shell-topbar,html[data-theme=custom][data-custom-mode=flow] .sidebar-container{-webkit-backdrop-filter:blur(20px)saturate(180%)}html[data-theme$=-flow] .aurora-flow-bg:before,html[data-theme=custom][data-custom-mode=flow] .aurora-flow-bg:before{content:"";z-index:0;pointer-events:none;filter:blur(48px);opacity:.9;background-color:#0000;background-image:radial-gradient(80% 50% at 20% 30%,#00ff8852 0,#0000 65%),radial-gradient(65% 65% at 80% 25%,#00e6ff4d 0,#0000 60%),radial-gradient(70% 70% at 50% 80%,#a855f74d 0,#0000 65%),radial-gradient(55% 55% at 85% 75%,#ff2a8547 0,#0000 60%),radial-gradient(60% 45% at 15% 85%,#fbbf2440 0,#0000 60%);background-position:0 0,0 0,0 0,0 0,0 0;background-repeat:repeat,repeat,repeat,repeat,repeat;background-size:200% 200%;background-attachment:scroll,scroll,scroll,scroll,scroll;background-origin:padding-box,padding-box,padding-box,padding-box,padding-box;background-clip:border-box,border-box,border-box,border-box,border-box;animation:omp-aurora-glow 15s ease-in-out infinite alternate;position:absolute;inset:0}@keyframes omp-aurora-glow{0%{filter:blur(40px)hue-rotate();transform:scale(1)translate(0)}50%{filter:blur(52px)hue-rotate(45deg);transform:scale(1.08)translate(-4%,3%)}to{filter:blur(38px)hue-rotate(90deg);transform:scale(.96)translate(4%,-3%)}}:root{--radius-control:8px;--radius-card:12px;--radius-modal:16px;--control-height-sm:28px;--control-height:32px;--control-height-lg:36px;--control-padding-inline:10px;--focus-ring:0 0 0 2px var(--accent)}@supports (color:color-mix(in lab,red,red)){:root{--focus-ring:0 0 0 2px color-mix(in srgb,var(--accent) 22%,transparent)}}:root{--shadow-card:0 1px 2px #3c32230d,0 2px 8px #3c32230f;--shadow-pop:0 2px 6px #3c322312,0 8px 24px #3c32231a;--shadow-modal:0 4px 12px #3c322314,0 16px 48px #3c322324;--ease-out-warm:cubic-bezier(.22,1,.36,1);--dur-fast:.15s;--dur-med:.22s;--dur-slow:.32s;--dur-theme:.45s}html.dark{--shadow-card:0 1px 2px #00000059,0 0 0 1px #ebe1d208;--shadow-pop:0 2px 8px #00000073,0 0 0 1px #ebe1d20a;--shadow-modal:0 8px 32px #0000008c,0 0 0 1px #ebe1d20d}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box}html{scroll-behavior:smooth}body,html{background:var(--bg);height:100%;color:var(--text);font-family:var(--app-font-family,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif);overscroll-behavior:none;margin:0;padding:0;font-size:14px}body{height:100dvh}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--text-dim)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--text-dim) 45%,transparent)}}::-webkit-scrollbar-thumb{background-clip:content-box;border:2px solid #0000;border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--text-dim) 75%,transparent)}}::-webkit-scrollbar-thumb:hover{background-clip:content-box}*{scrollbar-width:thin;scrollbar-color:var(--text-dim) transparent}@supports (color:color-mix(in lab,red,red)){*{scrollbar-color:color-mix(in srgb,var(--text-dim) 45%,transparent) transparent}}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}:focus:not(:focus-visible){outline:none}:root{--font-mono:var(--font-noto-mono),"JetBrains Mono","Fira Code","Consolas",ui-monospace,"PingFang SC","Microsoft YaHei",monospace;--font-serif:var(--font-source-serif),var(--font-noto-serif),Georgia,"Songti SC","SimSun",serif}code,pre{font-family:var(--font-mono)}.display-serif{font-family:var(--font-serif);letter-spacing:.005em;font-weight:600}.markdown-body{font-size:var(--chat-font-size,14px);line-height:var(--chat-line-height,1.7);color:var(--text);word-break:break-word}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-family:var(--font-serif);color:var(--text);letter-spacing:.005em;font-weight:600;line-height:1.35}.markdown-body h1{margin:14px 0 8px;font-size:1.2em}.markdown-body h2{margin:12px 0 6px;font-size:1.1em}.markdown-body h3{color:var(--text);margin:10px 0 5px;font-size:1em}@supports (color:color-mix(in lab,red,red)){.markdown-body h3{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body ol,.markdown-body ul{margin:6px 0 10px;padding-left:22px;list-style-position:outside}.markdown-body li{margin:2px 0;padding-left:2px}.markdown-body li>ol,.markdown-body li>ul{margin:2px 0 4px}.markdown-body ul>li{list-style-type:disc}.markdown-body ol>li{list-style-type:decimal}.markdown-body li>p{margin:0}.markdown-body li::marker{color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body li::marker{color:color-mix(in srgb,var(--accent) 72%,var(--text-muted))}}.markdown-body li::marker{font-weight:600}.markdown-body strong{color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body strong{color:color-mix(in srgb,var(--text) 88%,var(--accent))}}.markdown-body strong{font-weight:700}.markdown-body em{color:var(--text-muted)}.markdown-body a{color:var(--accent);text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body a{-webkit-text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent);text-decoration-color:color-mix(in srgb,var(--accent) 45%,transparent)}}.markdown-body a:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.markdown-body img{border-radius:6px;max-width:100%;height:auto;margin:8px 0;display:block}.markdown-body .markdown-inline-code{background:var(--bg-panel)}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{background:color-mix(in srgb,var(--bg-panel) 62%,var(--bg))}}.markdown-body .markdown-inline-code{color:var(--text);font-family:var(--font-mono);box-shadow:inset 0 0 0 1px var(--border);border-radius:5px;padding:1px 5px;font-size:.92em}@supports (color:color-mix(in lab,red,red)){.markdown-body .markdown-inline-code{box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--border) 60%,transparent)}}.markdown-body .contains-task-list{padding-left:0;list-style:none}.markdown-body .task-list-item{padding-left:25px;display:block;position:relative}.markdown-body .task-list-item::marker{content:""}.markdown-body .task-list-item>input[type=checkbox],.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child{appearance:none;border:1px solid var(--border);background:var(--bg);border-radius:4px;place-content:center;width:14px;height:14px;margin:0;display:inline-grid;position:absolute;top:.35em;left:0}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{border-color:color-mix(in srgb,var(--accent) 55%,var(--border))}}.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.markdown-body .task-list-item>input[type=checkbox]:checked,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked{background:color-mix(in srgb,var(--accent) 10%,var(--bg))}}.markdown-body .task-list-item>input[type=checkbox]:checked:before,.markdown-body .task-list-item>p:first-child>input[type=checkbox]:first-child:checked:before{content:"";border:solid var(--accent);border-width:0 1.5px 1.5px 0;width:4px;height:8px;transform:rotate(45deg)translateY(-1px)}.markdown-body blockquote{border-left:3px solid var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-body blockquote{border-left:3px solid color-mix(in srgb,var(--border) 75%,var(--text-muted))}}.markdown-body blockquote{background:var(--bg-subtle);color:var(--text-muted);border-radius:0 6px 6px 0;margin:6px 0;padding:6px 11px}.markdown-table-wrap{border:1px solid var(--border);border-radius:7px;width:100%;margin:8px 0;overflow:auto hidden}.markdown-body table{border-collapse:separate;border-spacing:0;min-width:100%;font-size:13px}.markdown-body td,.markdown-body th{border:0;border-bottom:1px solid var(--border);text-align:left;vertical-align:top;padding:6px 10px}.markdown-body tr:last-child td{border-bottom:0}.markdown-body th{background:var(--bg-panel);color:var(--text)}@supports (color:color-mix(in lab,red,red)){.markdown-body th{color:color-mix(in srgb,var(--text) 88%,var(--text-muted))}}.markdown-body th{font-weight:650}.markdown-body tbody tr:nth-child(2n) td{background:var(--bg-subtle)}.markdown-body hr{background:linear-gradient(90deg,transparent,var(--border),transparent);border:none;height:1px;margin:12px 0}.markdown-body .katex-display{margin:.6em 0;padding:2px 0;overflow:auto hidden}.markdown-body .katex{font-size:1.05em}.markdown-user-message p{white-space:pre-wrap}.markdown-custom-message{line-height:1.32}.markdown-custom-message p{margin:0}.markdown-custom-message h1,.markdown-custom-message h2,.markdown-custom-message h3,.markdown-custom-message h4,.markdown-custom-message h5,.markdown-custom-message h6{margin:4px 0 2px;line-height:1.18}.markdown-custom-message ol,.markdown-custom-message ul{margin:2px 0 3px}.markdown-custom-message li{margin:0}.markdown-custom-message blockquote{margin:3px 0;padding:4px 8px}.markdown-custom-message .markdown-code-block,.markdown-custom-message .markdown-table-wrap{margin:4px 0}.markdown-compaction-message{line-height:1.5}.markdown-compaction-message p{margin:0 0 7px}.markdown-compaction-message h1,.markdown-compaction-message h2,.markdown-compaction-message h3,.markdown-compaction-message h4,.markdown-compaction-message h5,.markdown-compaction-message h6{margin:8px 0 3px;line-height:1.25}.markdown-compaction-message ol,.markdown-compaction-message ul{margin:4px 0 8px}.markdown-compaction-message li{margin:2px 0}.markdown-compaction-message .markdown-code-block,.markdown-compaction-message .markdown-table-wrap{margin:6px 0}.markdown-subagent-text{font-size:13px;line-height:1.55}.markdown-subagent-text p{margin:0 0 6px}.markdown-subagent-text p:last-child{margin-bottom:0}.markdown-subagent-text h1,.markdown-subagent-text h2,.markdown-subagent-text h3,.markdown-subagent-text h4,.markdown-subagent-text h5,.markdown-subagent-text h6{margin:7px 0 3px;line-height:1.25}.markdown-subagent-text ol,.markdown-subagent-text ul{margin:3px 0 6px}.markdown-subagent-text li{margin:1px 0}.markdown-subagent-text blockquote{margin:4px 0;padding:4px 8px}.markdown-subagent-text .markdown-code-block,.markdown-subagent-text .markdown-table-wrap{margin:5px 0}.compaction-file-details{border-top:1px solid var(--border);color:var(--text-muted);margin-top:10px;padding-top:8px;font-size:12px}.compaction-file-details summary{cursor:pointer;font-weight:600;line-height:1.4}.compaction-file-section{margin-top:8px}.compaction-file-title{color:var(--text);margin-bottom:4px;font-size:11px;font-weight:650}.compaction-file-list{border:1px solid var(--border);background:var(--bg-panel);max-height:180px;font-family:var(--font-mono);border-radius:6px;margin:0;padding:7px 8px;font-size:11px;line-height:1.45;list-style:none;overflow:auto}.compaction-file-list li{overflow-wrap:anywhere}.compaction-file-list li+li{margin-top:3px}.markdown-code-block{border:1px solid var(--border);background:var(--bg);box-shadow:0 1px 0 var(--border);border-radius:6px;margin:6px 0;position:relative;overflow:hidden}@supports (color:color-mix(in lab,red,red)){.markdown-code-block{box-shadow:0 1px 0 color-mix(in srgb,var(--border) 42%,transparent)}}.markdown-code-header{background:var(--bg-panel);border-bottom:1px solid var(--border);color:var(--text-dim);justify-content:space-between;align-items:center;gap:8px;padding:5px 10px;font-size:11px;display:flex}.markdown-code-lang{color:var(--text-muted);font-family:var(--font-mono);font-weight:650}.markdown-code-actions{align-items:center;gap:6px;display:flex}.markdown-code-action{border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;font:inherit;border-radius:5px;padding:2px 7px;font-size:11px;line-height:1.25}.markdown-code-action:hover:not(:disabled){color:var(--text);border-color:var(--border)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action:hover:not(:disabled){border-color:color-mix(in srgb,var(--border) 70%,var(--text-muted))}}.markdown-code-action:hover:not(:disabled){background:var(--bg-hover)}.markdown-code-action.is-copied{color:var(--status-success);border-color:var(--status-success)}@supports (color:color-mix(in lab,red,red)){.markdown-code-action.is-copied{border-color:color-mix(in srgb,var(--status-success) 45%,var(--border))}}.markdown-code-action.is-copied{background:var(--bg-panel)}.markdown-code-action:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.75}.markdown-code-action.is-active{background:var(--bg-selected);color:var(--text)}.mermaid-block{background:var(--bg);padding:12px;overflow-x:auto}@supports (color:color-mix(in lab,red,red)){.mermaid-block{background:color-mix(in srgb,var(--bg) 92%,var(--bg-panel))}}.mermaid-block svg{max-width:none;display:block}.mermaid-block-loading{min-height:120px;color:var(--text-muted);justify-content:center;align-items:center;gap:8px;font-size:12px;animation:pulse 1.4s ease-in-out infinite;display:flex}.mermaid-block-loading:after{content:"";border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;width:14px;height:14px;animation:spin .8s linear infinite}.mermaid-block-error{color:var(--text-muted);font-family:var(--font-mono);align-items:center;gap:10px;padding:12px;font-size:12px;display:flex}.mermaid-preview-button{width:100%;color:inherit;cursor:zoom-in;text-align:left;border:0}.mermaid-preview-button:hover{opacity:.85}.mermaid-preview-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.mermaid-zoom-dialog{background:var(--bg);width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--text);border:0;margin:0;padding:0}.mermaid-zoom-dialog::backdrop{background:var(--overlay-backdrop)}.mermaid-zoom-layout{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid}.mermaid-zoom-toolbar{background:var(--bg-panel);border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:40px;padding:7px 10px;display:flex}.mermaid-zoom-title{min-width:0;color:var(--text-muted);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.mermaid-zoom-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.mermaid-zoom-stepper{border:1px solid var(--border);background:var(--bg);border-radius:5px;align-items:center;height:24px;display:flex;overflow:hidden}.mermaid-zoom-icon-button,.mermaid-zoom-stepper button{width:24px;height:24px;color:var(--text-muted);cursor:pointer;touch-action:manipulation;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.mermaid-zoom-stepper button{height:22px}.mermaid-zoom-stepper button+.mermaid-zoom-value,.mermaid-zoom-value+button{border-left:1px solid var(--border)}.mermaid-zoom-icon-button{border:1px solid var(--border);border-radius:5px;flex:0 0 24px}.mermaid-zoom-icon-button:hover,.mermaid-zoom-stepper button:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.mermaid-zoom-stepper button:disabled{opacity:.35;cursor:default}.mermaid-zoom-icon-button:focus-visible,.mermaid-zoom-stepper button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.mermaid-zoom-value{min-width:48px;height:22px;color:var(--text-muted);font-family:var(--font-mono);text-align:center;-webkit-user-select:none;user-select:none;font-size:12px;line-height:22px}.mermaid-zoom-viewport{background:var(--bg);-webkit-overflow-scrolling:touch;min-width:0;min-height:0;padding:24px;overflow:auto}.mermaid-zoom-canvas{border:1px solid var(--border);background:var(--bg-panel);transition:transform var(--dur-fast) var(--ease-out-warm);border-radius:7px;margin:0 auto;padding:12px}.mermaid-zoom-canvas svg{height:auto;display:block;width:100%!important;max-width:none!important}@media (max-width:480px){.mermaid-zoom-toolbar{padding-inline:8px}.mermaid-zoom-title{font-size:10px}.mermaid-zoom-viewport{padding:12px}}.image-clickable{cursor:zoom-in;background:0 0;border:none;max-width:100%;padding:0;line-height:0;display:inline-block}.markdown-body .image-clickable{width:fit-content;display:block}.image-clickable:hover img{opacity:.85}.image-clickable:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}.image-lightbox-dialog{background:var(--bg);width:100vw;max-width:none;height:100dvh;max-height:none;color:var(--text);border:0;margin:0;padding:0}.image-lightbox-dialog::backdrop{background:var(--overlay-backdrop)}.image-lightbox-layout{grid-template-rows:auto minmax(0,1fr);height:100%;display:grid}.image-lightbox-toolbar{background:var(--bg-panel);border-bottom:1px solid var(--border);align-items:center;gap:10px;min-height:40px;padding:7px 10px;display:flex}.image-lightbox-title{min-width:0;color:var(--text-muted);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:600;overflow:hidden}.image-lightbox-actions{align-items:center;gap:6px;margin-left:auto;display:flex}.image-lightbox-stepper{border:1px solid var(--border);background:var(--bg);border-radius:5px;align-items:center;height:24px;display:flex;overflow:hidden}.image-lightbox-icon-button,.image-lightbox-stepper button{width:24px;height:24px;color:var(--text-muted);cursor:pointer;touch-action:manipulation;background:0 0;border:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.image-lightbox-stepper button{height:22px}.image-lightbox-stepper button+.image-lightbox-zoom-value,.image-lightbox-zoom-value+button{border-left:1px solid var(--border)}.image-lightbox-icon-button{border:1px solid var(--border);border-radius:5px;flex:0 0 24px}.image-lightbox-icon-button:hover,.image-lightbox-stepper button:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.image-lightbox-stepper button:disabled{opacity:.35;cursor:default}.image-lightbox-icon-button:focus-visible,.image-lightbox-stepper button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.image-lightbox-zoom-value{min-width:48px;height:22px;color:var(--text-muted);font-family:var(--font-mono);text-align:center;-webkit-user-select:none;user-select:none;font-size:12px;line-height:22px}.image-lightbox-viewport{background:var(--bg);-webkit-overflow-scrolling:touch;min-width:0;min-height:0;padding:24px;display:flex;overflow:auto}.image-lightbox-dialog .image-lightbox-img{max-width:none;height:auto;transition:transform var(--dur-fast) var(--ease-out-warm);margin:auto;display:block}@media (max-width:480px){.image-lightbox-toolbar{padding-inline:8px}.image-lightbox-title{font-size:10px}.image-lightbox-viewport{padding:12px}}.file-viewer-toolbar{min-width:0;min-height:35px}.file-viewer-path{flex:auto;min-width:48px}.file-viewer-meta,.file-viewer-path{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.file-viewer-meta{flex:0 auto;min-width:0}.file-viewer-live-indicator{border-radius:50%;flex:0 0 7px;width:7px;height:7px}.file-viewer-controls{gap:6px}.file-viewer-actions,.file-viewer-controls{flex-shrink:0;align-items:center;display:flex}.file-viewer-actions{order:-1;gap:4px;height:24px}.file-viewer-mode-switch{border:1px solid var(--border);border-radius:5px;height:24px;display:flex;overflow:hidden}.file-viewer-mode-button{border:0;border-left:1px solid var(--border);height:22px;font:inherit;letter-spacing:0;cursor:pointer;white-space:nowrap;padding:0 8px;font-size:11px;font-weight:500}.file-viewer-mode-button:first-child{border-left:0}.file-viewer-mode-button:hover{filter:brightness(1.08)}.file-viewer-icon-button{box-sizing:border-box;border:1px solid var(--border);width:24px;height:24px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:5px;flex:0 0 24px;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex}.file-viewer-icon-button:hover{color:var(--text);background:var(--bg-hover)!important}.file-viewer-icon-button:disabled{color:var(--text-dim);cursor:not-allowed;opacity:.55}.file-viewer-icon-button:disabled:hover{color:var(--text-dim);background:0 0!important}.file-viewer-icon-button:focus-visible,.file-viewer-mode-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.directory-picker-path:focus-visible{box-shadow:0 0 0 3px var(--accent);border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.directory-picker-path:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}}.directory-picker-action:focus-visible,.directory-picker-back:focus-visible,.directory-picker-entry:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.session-item-button{font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:none;padding:0}.session-item-button:focus-visible,.session-item-icon-button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:4px}.sidebar-new-session:focus-visible,.sidebar-project-action:focus-visible,.sidebar-project-header>button:focus-visible,.sidebar-project-identity:focus-visible,.sidebar-settings-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.sidebar-menu-item{text-align:left;cursor:pointer;width:100%;transition:background var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;display:block}.sidebar-menu-item:hover:not(:disabled){background:var(--bg-hover)}.sidebar-menu-item:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:6px}.sidebar-project{isolation:isolate;transition:margin var(--dur-med) var(--ease-out-warm);position:relative}.sidebar-project-header{z-index:1;position:relative}.sidebar-project-worktree{animation:sidebar-worktree-in var(--dur-fast) var(--ease-out-warm) both;margin:0 0 0 32px;padding:0 0 2px 6px}.sidebar-project-worktree>div{width:auto!important;margin:0!important}.sidebar-project-worktree button{width:100%!important;max-width:none!important}@keyframes sidebar-worktree-in{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}.sidebar-project-sessions{animation:sidebar-sessions-in var(--dur-med) var(--ease-out-warm) both;transform-origin:top}@keyframes sidebar-sessions-in{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.sidebar-project-activity{transition:transform var(--dur-fast) var(--ease-out-warm),opacity var(--dur-fast) var(--ease-out-warm)}.sidebar-project:hover .sidebar-project-activity{transform:translate(-1px)}.sidebar-project-activity[data-running=true] .sidebar-project-activity-dot{isolation:isolate;animation:sidebar-activity-breathe 2.2s var(--ease-out-warm) infinite;will-change:transform,opacity;position:relative}.sidebar-project-activity[data-running=true] .sidebar-project-activity-dot:before{content:"";border:1px solid var(--accent);position:absolute;inset:-1px}@supports (color:color-mix(in lab,red,red)){.sidebar-project-activity[data-running=true] .sidebar-project-activity-dot:before{border:1px solid color-mix(in srgb,var(--accent) 48%,transparent)}}.sidebar-project-activity[data-running=true] .sidebar-project-activity-dot:before{animation:sidebar-activity-ring 2.2s var(--ease-out-warm) infinite;pointer-events:none;border-radius:50%}@keyframes sidebar-activity-breathe{0%,to{opacity:.82;transform:scale(.92)}45%{opacity:1;transform:scale(1)}}@keyframes sidebar-activity-ring{0%{opacity:.7;transform:scale(.9)}70%,to{opacity:0;transform:scale(2.15)}}.sidebar-running-spinner{box-sizing:border-box;border:1.7px solid;display:block}@supports (color:color-mix(in lab,red,red)){.sidebar-running-spinner{border:1.7px solid color-mix(in srgb,currentColor 30%,transparent)}}.sidebar-running-spinner{will-change:transform;border-top-color:currentColor;border-right-color:currentColor;border-radius:50%;animation:sidebar-running-spin 1.05s linear infinite}@keyframes sidebar-running-spin{to{transform:rotate(1turn)}}.sidebar-running-spinner[data-reduced-motion=true]{animation:none}.chat-input-shell{transition:border-color var(--dur-med) var(--ease-out-warm),box-shadow var(--dur-med) var(--ease-out-warm),transform var(--dur-med) var(--ease-out-warm)}.chat-input-shell:focus-within{transform:none}.composer-control-shelf{animation:ui-slide-up var(--dur-fast) var(--ease-out-warm) both}.composer-control-shelf>button{transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),transform var(--dur-fast) var(--ease-out-warm)}.composer-control-shelf>button:hover:not(:disabled){transform:none;background:var(--bg-hover)!important;color:var(--text)!important}@media (min-width:641px){.composer-control-shelf{border-top:1px solid var(--border);justify-content:flex-end;max-width:min(100%,760px);padding-top:4px;gap:4px!important}@supports (color:color-mix(in lab,red,red)){.composer-control-shelf{border-top:1px solid color-mix(in srgb,var(--border) 72%,transparent)}}.composer-control-shelf>button{border-radius:6px!important;height:28px!important;padding-inline:8px!important;font-size:11px!important}}@media (prefers-reduced-motion:reduce){.composer-control-shelf,.sidebar-project-sessions,.sidebar-project-worktree{animation:none}}@media (max-width:640px){.file-viewer-meta{display:none}}@media (max-width:380px){.file-viewer-toolbar{gap:6px!important;padding-inline:8px!important}.file-viewer-mode-button{padding-inline:6px}}.markdown-file-preview h1{font-size:1.8em}.markdown-file-preview h2{font-size:1.4em}.markdown-file-preview h3{font-size:1.15em}.markdown-file-preview p{margin:0 0 12px}.markdown-file-preview pre{border:1px solid var(--border);border-radius:6px;margin:12px 0;padding:12px 16px;font-size:13px;overflow-x:auto}.markdown-file-preview code,.markdown-file-preview pre{background:var(--bg-panel);font-family:var(--font-mono)}.markdown-file-preview code{border-radius:3px;padding:1px 5px;font-size:.9em}.markdown-file-preview pre code{background:0 0;padding:0}.markdown-body span.linenumber,span.linenumber{color:var(--text-dim)!important;font-style:normal!important}span.token.table{display:inline}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@keyframes drop-ripple{0%{opacity:.6;transform:scale(0)}to{opacity:0;transform:scale(1)}}.drop-zone-overlay{background:var(--accent)}@supports (color:color-mix(in lab,red,red)){.drop-zone-overlay{background:color-mix(in srgb,var(--accent) 6%,transparent)}}.drop-zone-overlay{animation:drop-zone-in var(--dur-fast) var(--ease-out-warm) both}.drop-ripple-ring{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.drop-ripple-ring{border-color:color-mix(in srgb,var(--accent) 50%,transparent)}}.drop-ripple-ring{animation:drop-ripple 2.4s var(--ease-out-warm) infinite backwards}.drop-zone-illustration{filter:drop-shadow(0 6px 18px var(--accent))}@supports (color:color-mix(in lab,red,red)){.drop-zone-illustration{filter:drop-shadow(0 6px 18px color-mix(in srgb,var(--accent) 18%,transparent))}}@keyframes spin{to{transform:rotate(1turn)}}.icon-spin{animation:spin .8s linear infinite}@keyframes pulse{50%{opacity:.5}}@keyframes skeleton-shimmer{0%{background-position:-150% 0}to{background-position:150% 0}}.skeleton{background:linear-gradient(90deg,var(--bg-subtle) 0,var(--text-dim) 50%,var(--bg-subtle) 100%)}@supports (color:color-mix(in lab,red,red)){.skeleton{background:linear-gradient(90deg,var(--bg-subtle) 0,color-mix(in srgb,var(--text-dim) 10%,var(--bg-subtle)) 50%,var(--bg-subtle) 100%)}}.skeleton{background-size:200% 100%;border-radius:6px;animation:skeleton-shimmer 1.6s ease-in-out infinite}.chat-input-shell:focus-within{border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{border-color:color-mix(in srgb,var(--accent) 45%,transparent)!important}}.chat-input-shell:focus-within{box-shadow:var(--shadow-card),0 0 0 3px var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell:focus-within{box-shadow:var(--shadow-card),0 0 0 3px color-mix(in srgb,var(--accent) 14%,transparent)!important}}@keyframes ui-fade-in{0%{opacity:0}to{opacity:1}}@keyframes ui-scale-in{0%{opacity:0;transform:scale(.96)translateY(-4px)}to{opacity:1;transform:scale(1)translateY(0)}}@keyframes ui-slide-down{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@keyframes ui-slide-up{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.animate-fade-in{animation:ui-fade-in var(--dur-fast) var(--ease-out-warm) both}.animate-scale-in{animation:ui-scale-in var(--dur-med) var(--ease-out-warm) both}.animate-slide-down{animation:ui-slide-down var(--dur-med) var(--ease-out-warm) both}.animate-slide-up{animation:ui-slide-up var(--dur-med) var(--ease-out-warm) both}@keyframes dialog-backdrop-in{0%{opacity:0}to{opacity:1}}.dialog-backdrop-animate{animation:dialog-backdrop-in var(--dur-med) var(--ease-out-warm) both;transition:opacity var(--dur-med) var(--ease-out-warm)}.dialog-popup-animate{animation:dialog-pop-in var(--dur-med) var(--ease-out-warm) both;transition:width var(--dur-med) var(--ease-out-warm),height var(--dur-med) var(--ease-out-warm),max-width var(--dur-med) var(--ease-out-warm),max-height var(--dur-med) var(--ease-out-warm),border-radius var(--dur-med) var(--ease-out-warm),box-shadow var(--dur-med) var(--ease-out-warm);will-change:transform,opacity}.accordion-flow{transition:grid-template-rows var(--dur-med) var(--ease-out-warm),opacity var(--dur-med) var(--ease-out-warm);opacity:0;grid-template-rows:0fr;display:grid}.accordion-flow.is-open{opacity:1;grid-template-rows:1fr}.accordion-flow-inner{min-height:0;overflow:hidden}.chevron-smooth{transition:transform var(--dur-med) var(--ease-out-warm)}@keyframes dialog-pop-in{0%{opacity:0;transform:translate(-50%,-46%)scale(.97)}to{opacity:1;transform:translate(-50%,-50%)scale(1)}}.dropdown-surface{border:1px solid var(--border);border-radius:var(--radius-control)}.dropdown-surface,.picker-panel{background:var(--bg-panel);box-shadow:var(--shadow-pop);color:var(--text);animation:ui-scale-in var(--dur-fast) var(--ease-out-warm) both;overflow:hidden}.picker-panel{border:1px solid var(--border);border-radius:12px}.picker-panel-header{border-bottom:1px solid var(--border);align-items:center;gap:8px;min-height:29px;padding:0 10px;display:flex}.picker-panel-title{color:var(--text);letter-spacing:.01em;font-size:11px;font-weight:650}.picker-panel-count{color:var(--text-dim);font-family:var(--font-mono);font-variant-numeric:tabular-nums;margin-left:auto;font-size:10px}.picker-search{background:var(--bg);border:1px solid var(--border);height:32px;transition:border-color var(--dur-fast) var(--ease-out-warm),box-shadow var(--dur-fast) var(--ease-out-warm);border-radius:8px;align-items:center;gap:7px;margin:8px 8px 6px;padding:0 9px;display:flex}.picker-search:focus-within{border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.picker-search:focus-within{border-color:color-mix(in srgb,var(--accent) 52%,var(--border))}}.picker-search:focus-within{box-shadow:var(--focus-ring)}.picker-search input{min-width:0;color:var(--text);background:0 0;border:0;outline:0;flex:1;padding:0;font-size:12px}.picker-list{min-height:0;padding:0 4px 5px;overflow-y:auto}.picker-group-label{min-height:25px;color:var(--text-dim);letter-spacing:.055em;text-transform:uppercase;align-items:center;padding:3px 8px 2px;font-size:10px;font-weight:650;display:flex}.picker-group-label+.picker-row{margin-top:0}.picker-row{width:100%;min-height:32px;color:var(--text-muted);text-align:left;cursor:pointer;transition:background-color var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;margin:2px 0;padding:6px 8px;font-size:12px;display:flex}.picker-row:focus-visible,.picker-row:hover{color:var(--text);background:var(--bg-hover);outline:none}.picker-row[data-active=true]{color:var(--text);background:var(--bg-selected);font-weight:600}.picker-check{width:14px;height:14px;color:var(--accent);flex:0 0 14px;justify-content:center;align-items:center;display:inline-flex}.picker-row-meta{min-width:0;color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;margin-left:auto;font-size:11px;font-weight:400;overflow:hidden}.picker-thinking-cards{flex-direction:column;gap:3px;max-height:280px;padding:4px;display:flex;overflow-y:auto}.picker-thinking-card{width:100%;min-height:27px;color:var(--text-muted);text-align:left;cursor:pointer;background:var(--bg);border:1px solid var(--border);transition:background-color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);border-radius:7px;align-items:center;gap:6px;padding:4px 7px;font-size:12px;display:flex}.picker-thinking-card:focus-visible,.picker-thinking-card:hover{color:var(--text);background:var(--bg-hover);outline:none}.picker-thinking-card[data-active=true]{color:var(--text);background:var(--bg-selected);border-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.picker-thinking-card[data-active=true]{border-color:color-mix(in srgb,var(--accent) 35%,var(--border))}}.picker-thinking-card[data-active=true]{font-weight:600}.picker-panel-footer{min-height:25px;color:var(--text-dim);border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:3px 9px;font-size:10px;display:flex}@media (max-width:640px){.picker-thinking-cards{flex-flow:wrap;gap:5px;max-height:min(340px,40vh);padding:5px}.picker-thinking-card{gap:5px;width:auto;min-height:28px;padding:4px 9px;font-size:11.5px}.picker-panel-header{min-height:30px}.picker-panel-footer{min-height:26px;padding:5px 9px}}.dropdown-item{color:var(--text-muted);transition:background-color var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm)}.dropdown-item:focus-visible,.dropdown-item:hover{background:var(--bg-hover);color:var(--text);outline:none}.dropdown-item[aria-current=true],.dropdown-item[aria-selected=true],.dropdown-item[data-active=true]{background:var(--bg-selected);color:var(--text)}[cmdk-item=""][data-selected=true]{background:var(--bg-hover);color:var(--text)}.dropdown-surface :is(select,option){color-scheme:light}html.dark .dropdown-surface :is(select,option){color-scheme:dark}@keyframes chat-message-in{0%{opacity:0;transform:translateY(7px)scale(.995)}to{opacity:1;transform:translateY(0)scale(1)}}.chat-message-card{animation:chat-message-in var(--dur-med) var(--ease-out-warm) both;transition:border-color var(--dur-fast) var(--ease-out-warm),box-shadow var(--dur-fast) var(--ease-out-warm),transform var(--dur-fast) var(--ease-out-warm)}.chat-message-card:hover{border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.chat-message-card:hover{border-color:color-mix(in srgb,var(--accent) 22%,var(--border))!important}}.chat-message-card:hover{transform:none;box-shadow:var(--shadow-card)!important}.chat-message{animation:chat-message-in var(--dur-med) var(--ease-out-warm) both}@keyframes toast-in{0%{opacity:0;transform:translate(18px,8px)scale(.97)}to{opacity:1;transform:translate(0)scale(1)}}.toast-card{animation:toast-in var(--dur-med) var(--ease-out-warm) both;transition:transform var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),box-shadow var(--dur-fast) var(--ease-out-warm)}.toast-card:hover{border-color:var(--accent)!important}@supports (color:color-mix(in lab,red,red)){.toast-card:hover{border-color:color-mix(in srgb,var(--accent) 30%,var(--border))!important}}.toast-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-modal)!important}.live-status-dot{isolation:isolate;box-shadow:0 0 0 3px var(--accent);position:relative}@supports (color:color-mix(in lab,red,red)){.live-status-dot{box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 10%,transparent)}}.live-pulse:after{content:"";border:1.5px solid var(--accent);border-radius:9999px;position:absolute;inset:0}@supports (color:color-mix(in lab,red,red)){.live-pulse:after{border:1.5px solid color-mix(in srgb,var(--accent) 55%,transparent)}}.live-pulse:after{animation:live-dot-pulse 1.5s var(--ease-out-warm) infinite;pointer-events:none;will-change:transform,opacity}@keyframes live-dot-pulse{0%{opacity:.9;transform:scale(1)}70%{opacity:0;transform:scale(2.6)}to{opacity:0;transform:scale(2.6)}}.mcp-editor-grid>:first-child{min-width:0}@media (max-width:640px){.mcp-editor-grid{grid-template-columns:1fr!important}.mcp-editor-grid>:first-child{border-bottom:1px solid var(--border);border-right:0!important}.empty-chat-brand{margin-left:0!important;margin-right:0!important}.model-role-row{gap:6px!important}.model-detail-grid-2,.model-role-row{grid-template-columns:1fr!important}.model-detail-grid-4{grid-template-columns:1fr 1fr!important}}.ui-smooth{transition:background-color var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm),border-color var(--dur-fast) var(--ease-out-warm),opacity var(--dur-fast) var(--ease-out-warm),transform var(--dur-fast) var(--ease-out-warm)}.ui-focus-ring:focus-visible{outline-offset:-2px;outline:2px solid var(--accent)!important}.ui-control{min-height:var(--control-height);padding-inline:var(--control-padding-inline);font:inherit}.ui-control,.ui-icon-button{border-radius:var(--radius-control)}.ui-icon-button{width:var(--control-height);height:var(--control-height);flex:0 0 var(--control-height);justify-content:center;align-items:center;padding:0;display:inline-flex}.ui-compact-surface{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg-panel);color:var(--text-muted)}.shell-toolbar-btn{width:28px;height:28px;color:var(--text);cursor:pointer;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;border-radius:6px;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.shell-toolbar-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.shell-toolbar-btn:disabled{color:var(--text-dim);cursor:default;opacity:.5}.shell-toolbar-btn[aria-pressed=true]{background:var(--bg-selected);color:var(--text)}.shell-toolbar-btn:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}.shell-toolbar-divider{background:var(--border);flex-shrink:0;width:1px;height:18px;margin:0 8px}@media (max-width:640px){.shell-toolbar-btn{width:40px;height:40px}.shell-toolbar-divider{margin:0 4px}}.process-details-toggle{width:auto;min-height:24px;color:var(--text-muted);cursor:pointer;font:inherit;text-align:left;transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm);background:0 0;border:none;border-radius:6px;align-items:center;gap:6px;margin-left:-8px;padding:2px 8px;font-size:12px;display:flex}.process-details-toggle:hover{background:var(--bg-hover);color:var(--text)}.process-details-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:0}.process-details-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.activity-row{min-width:0;color:var(--text-muted);font-family:var(--font-mono);margin:0}.activity-row-trigger{width:100%;min-width:0;min-height:22px;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;align-items:center;gap:7px;padding:2px 0;font-size:11.5px;line-height:1.35;display:flex}.activity-row-trigger:hover{color:var(--text)}.activity-row-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}.activity-row-indicator{width:14px;color:var(--status-success);flex:0 0 14px;justify-content:center;align-items:center;display:inline-flex}.activity-row-indicator-error,.activity-row-tool-error{color:var(--status-error)}.activity-row-spinner{animation:activity-row-spin .9s linear infinite}.activity-row-tool{color:var(--accent);flex:none;font-weight:650}.activity-row-preview{min-width:0;color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.activity-row-duration{text-align:right;min-width:42px;color:var(--text-dim);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;margin-left:auto;font-size:10.5px}.activity-row-secondary{min-width:0;color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;margin:0 0 1px 21px;font-size:10px;line-height:1.3;overflow:hidden}@keyframes activity-row-spin{to{transform:rotate(1turn)}}@media (prefers-reduced-motion:reduce){.activity-row-spinner{animation:none}}.omp-letters-inline{-webkit-user-select:none;user-select:none;line-height:1;font-family:var(--font-mono);flex-shrink:0;align-items:baseline;gap:1px;font-size:13.5px;font-weight:800;display:inline-flex}.omp-solo-o{color:var(--omp-o,var(--accent));animation:omp-solo-jump-o 1.5s cubic-bezier(.34,1.35,.64,1) infinite!important}.omp-solo-m,.omp-solo-o{transform-origin:bottom;display:inline-block}.omp-solo-m{color:var(--omp-m,#f59e0b);animation:omp-solo-jump-m 1.5s cubic-bezier(.34,1.35,.64,1) infinite!important}.omp-solo-p{transform-origin:bottom;color:var(--omp-p,#38bdf8);display:inline-block;animation:omp-solo-jump-p 1.5s cubic-bezier(.34,1.35,.64,1) infinite!important}@keyframes omp-solo-jump-o{0%{transform:translateY(0)scale(1)}5%{transform:translateY(1.5px)scale(1.18,.82)}15%{transform:translateY(-7px)scale(.88,1.2)}25%{transform:translateY(.8px)scale(1.08,.92)}30%,to{transform:translateY(0)scale(1)}}@keyframes omp-solo-jump-m{0%,33.3%{transform:translateY(0)scale(1)}38.3%{transform:translateY(1.5px)scale(1.18,.82)}48.3%{transform:translateY(-7px)scale(.88,1.2)}58.3%{transform:translateY(.8px)scale(1.08,.92)}63.3%,to{transform:translateY(0)scale(1)}}@keyframes omp-solo-jump-p{0%,66.6%{transform:translateY(0)scale(1)}71.6%{transform:translateY(1.5px)scale(1.18,.82)}81.6%{transform:translateY(-7px)scale(.88,1.2)}91.6%{transform:translateY(.8px)scale(1.08,.92)}96.6%,to{transform:translateY(0)scale(1)}}.thinking-icon-active{color:var(--accent);justify-content:center;align-items:center;animation:thinking-brain-pulse 1.5s ease-in-out infinite;display:inline-flex}@keyframes thinking-brain-pulse{0%,to{filter:drop-shadow(0 0 #0000);opacity:.85;transform:scale(1)}50%{filter:drop-shadow(0 0 5px color-mix(in srgb,var(--accent) 65%,transparent));opacity:1;color:var(--accent);transform:scale(1.22)}}.activity-collapsible-wrapper{opacity:0;grid-template-rows:0fr;transition:grid-template-rows .24s cubic-bezier(.22,1,.36,1),opacity .18s;display:grid}.activity-collapsible-wrapper[data-open=true]{opacity:1;grid-template-rows:1fr}.activity-collapsible-inner{min-height:0;overflow:hidden}@media (prefers-reduced-motion:reduce){.omp-bouncing-letter,.thinking-icon-active{animation:none}.activity-collapsible-wrapper{transition:none}}.tool-call-details{border:1px solid var(--border);border-radius:var(--radius-control);background:var(--bg-subtle);width:min(100% - 21px,760px);max-width:760px;margin:3px 0 4px 21px;overflow:hidden}.tool-call-command{border-bottom:1px solid var(--border);background:var(--bg-panel);min-width:0;color:var(--text-muted);align-items:flex-start;gap:7px;padding:5px 8px;font-size:10.5px;line-height:1.35;display:flex}.tool-call-command-prompt{color:var(--accent);flex:none}.tool-call-command code{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tool-call-output{background:var(--bg);max-height:260px;overflow:auto}.tool-call-output-text{color:var(--text-muted);font-family:var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:7px 8px;font-size:10.5px;line-height:1.4}.tool-call-output-error .tool-call-output-text{color:var(--status-error)}.tabbar-scroll{border-bottom:1px solid var(--border);scrollbar-width:thin;scrollbar-color:var(--border) transparent}.tabbar-tab{transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm)}.tabbar-tab[aria-selected=true]{box-shadow:inset 0 1px 0 var(--accent);background:var(--bg-selected)!important;color:var(--text)!important}@supports (color:color-mix(in lab,red,red)){.tabbar-tab[aria-selected=true]{box-shadow:inset 0 1px 0 color-mix(in srgb,var(--accent) 14%,transparent)}}.tabbar-tab:hover:not([aria-selected=true]){background:var(--bg-hover)!important;color:var(--text)!important}.tabbar-close{transition:background var(--dur-fast) var(--ease-out-warm),color var(--dur-fast) var(--ease-out-warm)}@keyframes notice-shelf-in{0%{opacity:0;transform:translateY(-6px)scale(.995)}to{opacity:1;transform:translateY(0)}}@keyframes notice-shelf-out{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-5px)}}@media (prefers-reduced-motion:reduce){.notice-shelf-item{animation-duration:.001ms!important}html{scroll-behavior:auto}*,:after,:before{scroll-behavior:auto!important;transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.skeleton{background:var(--bg-subtle);animation:none}}@keyframes saved-pop{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 55%,transparent);transform:scale(1)}40%{box-shadow:0 0 0 6px color-mix(in srgb,var(--status-success) 25%,transparent);transform:scale(1.08)}to{box-shadow:0 0 0 0 color-mix(in srgb,var(--status-success) 0%,transparent);transform:scale(1)}}@keyframes saved-check-draw{0%{stroke-dashoffset:18px;opacity:0}to{stroke-dashoffset:0;opacity:1}}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{--sidebar-width:260px;transition:width var(--dur-med) var(--ease-out-warm),min-width var(--dur-med) var(--ease-out-warm);position:relative;overflow:hidden}.sidebar-container.sidebar-open{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-closed{width:0;min-width:0;border-right:none!important}.sidebar-container>*{width:var(--sidebar-width,260px);min-width:var(--sidebar-width,260px)}.sidebar-container.sidebar-resizing{transition:none}.right-panel-container{transition:width var(--dur-med) var(--ease-out-warm),min-width var(--dur-med) var(--ease-out-warm);flex-shrink:0;overflow:hidden}.right-panel-container.right-panel-open{width:42%;min-width:300px}.right-panel-container.right-panel-closed{width:0;min-width:0;border-left:none!important}.right-panel-container>*{width:100%;min-width:0}}@media (max-width:640px){.chat-stats-center{display:none!important}.sidebar-container{width:280px;max-width:85vw;transition:transform var(--dur-slow) var(--ease-out-warm),box-shadow var(--dur-slow) var(--ease-out-warm);top:0;bottom:0;left:0;position:fixed!important}.sidebar-container.sidebar-open{box-shadow:var(--shadow-modal);transform:translate(0)}.sidebar-container.sidebar-closed{box-shadow:none;transform:translate(-100%)}.right-panel-container{transition:width var(--dur-med) var(--ease-out-warm),min-width var(--dur-med) var(--ease-out-warm);flex-shrink:0;overflow:hidden}.right-panel-container.right-panel-open{width:100%;min-width:0}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}.directory-picker-action,.directory-picker-back,.directory-picker-entry{min-height:44px!important}.directory-picker-back{min-width:44px!important}.directory-picker-footer{flex-wrap:wrap;padding-bottom:max(10px,env(safe-area-inset-bottom))!important}}:root{--omp-beam-speed:5.5s}.chat-input-shell{position:relative}.chat-input-shell-streaming{box-shadow:0 0 14px -2px var(--accent),var(--shadow-card)!important}@supports (color:color-mix(in lab,red,red)){.chat-input-shell-streaming{box-shadow:0 0 14px -2px color-mix(in srgb,var(--accent) 18%,transparent),var(--shadow-card)!important}}.chat-input-beam-svg{pointer-events:none;border-radius:var(--radius-card);z-index:5;width:calc(100% + 2px);height:calc(100% + 2px);position:absolute;inset:-1px;overflow:visible}.chat-input-beam-rect{animation:omp-beam-clockwise var(--omp-beam-speed,5.5s) linear infinite;filter:drop-shadow(0 0 2.5px var(--accent))}@supports (color:color-mix(in lab,red,red)){.chat-input-beam-rect{filter:drop-shadow(0 0 2.5px color-mix(in srgb,var(--accent) 70%,transparent))}}.chat-input-beam-rect{opacity:.85}@keyframes omp-beam-clockwise{0%{stroke-dashoffset:100px}to{stroke-dashoffset:0}}html[data-animations=false] *,html[data-animations=false] :after,html[data-animations=false] :before{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}html[data-animation-beam=false] .chat-input-beam-svg{display:none!important}html[data-animation-omp=false] .omp-solo-m,html[data-animation-omp=false] .omp-solo-o,html[data-animation-omp=false] .omp-solo-p,html[data-animation-thinking=false] .thinking-icon-active{animation:none!important;transform:none!important}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ /**
5
+ * Desktop launcher for omp-web: starts the Next server with a hidden console
6
+ * (Windows: windowsHide on the child; macOS: no Terminal banner, designed to
7
+ * be launched from a double-clickable .command that hides its terminal) and
8
+ * opens the browser. The plain `ompweb` CLI remains the primary entry point;
9
+ * this is an additive convenience for app-style launches.
10
+ */
11
+
12
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
13
+ const { getUnsupportedNodeVersionMessage, isNodeVersionSupported } = require("./node-version");
14
+
15
+ if (!isNodeVersionSupported(process.versions.node)) {
16
+ console.error(getUnsupportedNodeVersionMessage(process.versions.node));
17
+ process.exit(1);
18
+ }
19
+
20
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
21
+ const { spawn, execFileSync } = require("child_process");
22
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
23
+ const path = require("path");
24
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
25
+ const fs = require("fs");
26
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
27
+ const { parseLaunchOptions } = require("./omp-web-options");
28
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
29
+ const { isPortAvailable } = require("./port-availability");
30
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
31
+ const { wireChildProcessLifecycle } = require("./process-lifecycle");
32
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
33
+ const { getBrowserUrl, isLoopbackHost } = require("./network-addresses");
34
+
35
+ const pkgDir = path.join(__dirname, "..");
36
+ const nextDir = path.join(pkgDir, ".next");
37
+
38
+ let nextBin;
39
+ try {
40
+ nextBin = require.resolve("next/dist/bin/next", { paths: [pkgDir] });
41
+ } catch {
42
+ console.error("Could not resolve next. Is ompweb installed correctly?");
43
+ process.exit(1);
44
+ }
45
+
46
+ const launchOptions = parseLaunchOptions();
47
+ if (launchOptions.help || launchOptions.version) {
48
+ process.exit(0);
49
+ }
50
+
51
+ // `ompweb-desktop --install`: copy the packaged OmpWeb.app template to
52
+ // ~/Applications (macOS) so the app has a real double-clickable entry.
53
+ if (process.argv.includes("--install")) {
54
+ installDesktopApp();
55
+ process.exit(0);
56
+ }
57
+ const port = launchOptions.port;
58
+ const hostname = launchOptions.hostname;
59
+ const password = launchOptions.password;
60
+ if (password) process.env.OMP_WEB_PASSWORD = password;
61
+ const passwordEnabled = typeof password === "string" && password.length > 0;
62
+
63
+ if (!fs.existsSync(nextDir)) {
64
+ console.error("Build artifacts not found. Run `npm run build` once, or use `ompweb` for the dev flow.");
65
+ process.exit(1);
66
+ }
67
+
68
+ if (!isLoopbackHost(hostname) && !passwordEnabled) {
69
+ console.error(`Refusing to listen on ${hostname} without OMP_WEB_PASSWORD (or --password).`);
70
+ process.exit(1);
71
+ }
72
+
73
+ const browserUrl = getBrowserUrl(hostname, port);
74
+
75
+ async function main() {
76
+ if (!await isPortAvailable(port, hostname)) {
77
+ // Already running: just surface it (a second desktop launch is a no-op).
78
+ console.error(`Port ${port} already in use — opening ${browserUrl}.`);
79
+ openBrowser();
80
+ process.exit(0);
81
+ }
82
+
83
+ const nextArgs = ["start", "-p", port, "-H", hostname];
84
+ // windowsHide keeps the console window off the screen on Windows; detached +
85
+ // stdio ignore turns the launcher into a fire-and-forget app start on macOS.
86
+ const child = spawn(process.execPath, [nextBin, ...nextArgs], {
87
+ cwd: pkgDir,
88
+ detached: process.platform !== "win32",
89
+ windowsHide: true,
90
+ stdio: process.platform === "win32" ? "ignore" : ["ignore", "pipe", "pipe"],
91
+ env: {
92
+ ...process.env,
93
+ OMP_WEB_PACKAGE_DIR: pkgDir,
94
+ OMP_WEB_LAUNCHER_PID: String(process.pid),
95
+ OMP_WEB_PORT: port,
96
+ OMP_WEB_HOSTNAME: hostname,
97
+ },
98
+ });
99
+ wireChildProcessLifecycle(child);
100
+
101
+ if (process.platform !== "win32") {
102
+ // Keep the child's output out of the way; only relay fatal startup errors.
103
+ child.stdout?.on("data", (chunk) => {
104
+ if (chunk.toString().includes("Error")) process.stdout.write(chunk);
105
+ });
106
+ child.stderr?.on("data", (chunk) => process.stderr.write(chunk));
107
+ }
108
+
109
+ let opened = false;
110
+ child.stdout?.on("data", (chunk) => {
111
+ if (!opened && chunk.toString().includes("Ready")) {
112
+ opened = true;
113
+ openBrowser();
114
+ }
115
+ });
116
+
117
+ // Fallback: open the browser shortly after spawn even if the ready banner
118
+ // is not detected (custom ports, log buffering).
119
+ setTimeout(() => {
120
+ if (!opened) {
121
+ opened = true;
122
+ openBrowser();
123
+ }
124
+ }, 4000);
125
+ }
126
+
127
+ function openBrowser() {
128
+ const isWindows = process.platform === "win32";
129
+ const isMac = process.platform === "darwin";
130
+ const openCmd = isWindows ? "explorer.exe" : isMac ? "open" : "xdg-open";
131
+ const opener = spawn(openCmd, [browserUrl], { stdio: "ignore", detached: true });
132
+ opener.on("error", () => { /* best effort */ });
133
+ opener.unref();
134
+ }
135
+
136
+ /** Copy the bundled OmpWeb.app to ~/Applications (macOS only). */
137
+ function installDesktopApp() {
138
+ if (process.platform !== "darwin") {
139
+ console.error("--install creates a macOS .app; on Windows use the win-start.vbs template instead.");
140
+ process.exit(1);
141
+ }
142
+ const template = path.join(pkgDir, "templates", "desktop", "OmpWeb.app");
143
+ if (!fs.existsSync(path.join(template, "Contents", "MacOS", "ompweb-launcher"))) {
144
+ console.error("OmpWeb.app template not found in this package.");
145
+ process.exit(1);
146
+ }
147
+ const target = path.join(process.env.HOME || "", "Applications", "OmpWeb.app");
148
+ fs.rmSync(target, { recursive: true, force: true });
149
+ fs.cpSync(template, target, { recursive: true });
150
+ // Ad-hoc sign so macOS Gatekeeper does not quarantine the launcher.
151
+ try { execFileSync("codesign", ["--force", "--sign", "-", target], { stdio: "ignore" }); } catch { /* best effort */ }
152
+ console.log(`Installed OmpWeb.app → ${target}`);
153
+ console.log("Double-click it to start omp-web (or run: open " + target + ")");
154
+ }
155
+
156
+ main().catch((error) => {
157
+ console.error(error instanceof Error ? error.message : String(error));
158
+ process.exitCode = 1;
159
+ });
package/next.config.ts CHANGED
@@ -21,7 +21,9 @@ const nextConfig = (phase: string): NextConfig => {
21
21
  // undici is loaded from a runtime dependency (lib/http-dispatcher.ts) to
22
22
  // honor HTTP(S)_PROXY for server-side fetch; keep it external so the
23
23
  // bundler does not inline a second copy next to the global dispatcher.
24
- serverExternalPackages: ["undici"],
24
+ // node-pty is a native addon (prebuilds per platform) and must never be
25
+ // bundled by the server compiler.
26
+ serverExternalPackages: ["undici", "node-pty"],
25
27
  webpack(config: Parameters<NonNullable<NextConfig["webpack"]>>[0]) {
26
28
  // Next's entrypoint tracer does not automatically reject dynamic paths
27
29
  // outside the project root. Add parent/profile patterns to its ignore list
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@37chengshan/ompweb",
3
- "version": "0.3.6",
3
+ "version": "4.0.1",
4
4
  "description": "Web UI for the oh-my-pi (omp) coding agent",
5
5
  "homepage": "https://github.com/kahme247/ompweb#readme",
6
6
  "repository": {
@@ -15,7 +15,8 @@
15
15
  "node": ">=22.19.0"
16
16
  },
17
17
  "bin": {
18
- "ompweb": "bin/omp-web.js"
18
+ "ompweb": "bin/omp-web.js",
19
+ "ompweb-desktop": "bin/omp-web-desktop.js"
19
20
  },
20
21
  "files": [
21
22
  "bin",
@@ -29,7 +30,8 @@
29
30
  "!.next/**/*.map",
30
31
  "public",
31
32
  "next.config.ts",
32
- "package.json"
33
+ "package.json",
34
+ "templates"
33
35
  ],
34
36
  "scripts": {
35
37
  "dev": "next dev -H 127.0.0.1 -p 30178",
@@ -51,7 +53,7 @@
51
53
  "cmdk": "^1.1.1",
52
54
  "lucide-react": "^1.27.0",
53
55
  "next": "16.3.0",
54
- "node-pty": "^1.1.0",
56
+ "node-pty": "^1.2.0-beta.15",
55
57
  "react": "^19.2.4",
56
58
  "react-dom": "^19.2.4",
57
59
  "react-syntax-highlighter": "^16.1.1",
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDisplayName</key>
6
+ <string>OmpWeb</string>
7
+ <key>CFBundleExecutable</key>
8
+ <string>ompweb-launcher</string>
9
+ <key>CFBundleIconFile</key>
10
+ <string>OmpWeb</string>
11
+ <key>CFBundleIdentifier</key>
12
+ <string>io.github.37chengshan.ompweb</string>
13
+ <key>CFBundleName</key>
14
+ <string>OmpWeb</string>
15
+ <key>CFBundlePackageType</key>
16
+ <string>APPL</string>
17
+ <key>CFBundleShortVersionString</key>
18
+ <string>4.0.0</string>
19
+ <key>CFBundleVersion</key>
20
+ <string>4.0.0</string>
21
+ <key>LSMinimumSystemVersion</key>
22
+ <string>12.0</string>
23
+ <key>NSHighResolutionCapable</key>
24
+ <true/>
25
+ </dict>
26
+ </plist>
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ # OmpWeb desktop launcher — starts the omp-web server (hidden) and opens the browser.
3
+ set -e
4
+ # Hide this terminal-less launch context's window (when launched via Terminal).
5
+ osascript -e 'tell application "Terminal" to set visible of front window to false' >/dev/null 2>&1 || true
6
+ nohup ompweb-desktop --port 30177 >/dev/null 2>&1 &
7
+ disown 2>/dev/null || true
@@ -0,0 +1,16 @@
1
+ #!/bin/bash
2
+ # macOS desktop launcher for omp-web: double-click to start without a
3
+ # terminal window. Requires the ompweb package installed globally
4
+ # (npm install -g @37chengshan/ompweb). The plain `ompweb` CLI is unchanged.
5
+ set -e
6
+ cd "$(dirname "$0")/../.."
7
+
8
+ # Hide this Terminal window immediately (no black box).
9
+ osascript -e 'tell application "Terminal" to set visible of front window to false' >/dev/null 2>&1 || true
10
+
11
+ # Start the desktop launcher detached; it opens the browser itself.
12
+ nohup ompweb-desktop --port 30177 >/dev/null 2>&1 &
13
+ disown 2>/dev/null || true
14
+
15
+ # Show a notification so the user knows the app started.
16
+ osascript -e 'display notification "omp-web started — opening your browser" with title "omp-web"' >/dev/null 2>&1 || true
@@ -0,0 +1,9 @@
1
+ ' Windows desktop launcher for omp-web: double-click to start without a
2
+ ' console window (WScript runs this with no visible window).
3
+ ' Requires the ompweb package installed globally (npm install -g @37chengshan/ompweb).
4
+ ' The plain `ompweb` CLI is unchanged.
5
+ Option Explicit
6
+ Dim shell
7
+ Set shell = CreateObject("WScript.Shell")
8
+ ' 0 = hidden window; the desktop launcher opens the browser itself.
9
+ shell.Run "ompweb-desktop --port 30177", 0, False
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:47,errorRate:1e-4,numBits:901,numHashes:14,bitArray:[1,0,0,1,0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,1,0,1,1,1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,1,0,1,1,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,1,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,1,0,0,0,1,0,1,1,0,1,1,1,0,0,1,0,0,1,1,0,1,1,0,1,0,1,1,1,0,1,1,1,0,0,0,1,0,0,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,0,1,0,0,0,0,1,0,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,1,0,1,1,1,1,0,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,1,1,0,1,1,0,1,1,1,0,0,1,0,1,0,0,1,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,1,1,1,0,1,0,0,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,1,1,1,0,0,0,0,0,1,0,1,1,0,0,1,0,1,0,0,1,1,0,0,1,0,1,1,1,0,1,0,0,1,1,1,0,1,1,0,1,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,1,0,0,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,1,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,1,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0,1,0,1,0,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,0,0,0,1,1,1,0,1,0,0,1,1,0,1,0,1,0,1,1,1,1,1,0,1,1,1,0,1,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,0,0,1,0,1,0,1,1,0,0,1,1,0,1,0,1,1,1,0,0,0,1,1,0,1,1,1,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,0,0,1,0,1,0,0,1,1,1,1,1,1,0,0,0,1,0,1,0,1,1,1,0,0,0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0,1,1,0,1,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,0,1,0,1,0,1,1,0]},__routerFilterDynamic:{numItems:6,errorRate:1e-4,numBits:116,numHashes:14,bitArray:[1,1,0,0,0,1,0,1,1,1,1,0,1,0,1,0,0,1,1,1,0,1,1,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,1,0,0,0,1,1,1,0,1,0,0,1,0,1,0,0,0,1,0,0,1,0,0,0,1,1,1,1,1,1,0,0,1,0,1,0,0,1,1,0,0,0]},sortedPages:["/_app"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();