ompgui 0.7.1 → 0.7.3

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 (287) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +9 -8
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +4 -4
  5. package/.next/react-loadable-manifest.json +14 -7
  6. package/.next/required-server-files.js +2 -2
  7. package/.next/required-server-files.json +2 -2
  8. package/.next/routes-manifest.json +6 -0
  9. package/.next/server/app/_global-error/page.js +2 -2
  10. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  11. package/.next/server/app/_global-error.html +1 -1
  12. package/.next/server/app/_global-error.rsc +2 -2
  13. package/.next/server/app/_global-error.segments/_full.segment.rsc +2 -2
  14. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +2 -2
  15. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  16. package/.next/server/app/_not-found/page.js +1 -1
  17. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next/server/app/_not-found.html +1 -1
  19. package/.next/server/app/_not-found.rsc +3 -3
  20. package/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
  21. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +3 -3
  22. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  23. package/.next/server/app/api/agent/[id]/bash-output/route.js +1 -1
  24. package/.next/server/app/api/agent/[id]/events/route.js +1 -1
  25. package/.next/server/app/api/agent/[id]/route.js +1 -1
  26. package/.next/server/app/api/agent/new/route.js +1 -1
  27. package/.next/server/app/api/agent/running/events/route.js +2 -2
  28. package/.next/server/app/api/agents/[name]/route.js +1 -1
  29. package/.next/server/app/api/agents/route.js +1 -1
  30. package/.next/server/app/api/agents/unpack/route.js +1 -1
  31. package/.next/server/app/api/app-update/route.js +1 -1
  32. package/.next/server/app/api/auth/all-providers/route.js +1 -1
  33. package/.next/server/app/api/auth/api-key/[provider]/route.js +1 -1
  34. package/.next/server/app/api/auth/login/[provider]/route.js +1 -1
  35. package/.next/server/app/api/auth/logout/[provider]/route.js +1 -1
  36. package/.next/server/app/api/auth/providers/route.js +1 -1
  37. package/.next/server/app/api/cwd/browse/route.js +1 -1
  38. package/.next/server/app/api/cwd/validate/route.js +2 -2
  39. package/.next/server/app/api/daemon/route.js +1 -0
  40. package/.next/server/app/api/daemon/route.js.nft.json +1 -0
  41. package/.next/server/app/api/daemon/route_client-reference-manifest.js +1 -0
  42. package/.next/server/app/api/default-cwd/route.js +1 -1
  43. package/.next/server/app/api/file-index/route.js +1 -1
  44. package/.next/server/app/api/files/[...path]/route.js +1 -1
  45. package/.next/server/app/api/git/diff/route.js +2 -2
  46. package/.next/server/app/api/git/status/route.js +2 -2
  47. package/.next/server/app/api/home/route.js +1 -1
  48. package/.next/server/app/api/mcp/route.js +2 -2
  49. package/.next/server/app/api/model-roles/route.js +1 -1
  50. package/.next/server/app/api/models/route.js +1 -1
  51. package/.next/server/app/api/models-config/catalog/route.js +1 -1
  52. package/.next/server/app/api/models-config/route.js +1 -1
  53. package/.next/server/app/api/models-config/test/route.js +1 -1
  54. package/.next/server/app/api/omp-settings/route.js +1 -1
  55. package/.next/server/app/api/omp-update/route.js +2 -2
  56. package/.next/server/app/api/omp-version/route.js +1 -1
  57. package/.next/server/app/api/plugins/route.js +1 -1
  58. package/.next/server/app/api/projects/route.js +1 -1
  59. package/.next/server/app/api/providers/enable/route.js +1 -1
  60. package/.next/server/app/api/relay/devices/[id]/route.js +1 -1
  61. package/.next/server/app/api/relay/devices/route.js +1 -1
  62. package/.next/server/app/api/relay/pair/route.js +1 -1
  63. package/.next/server/app/api/sessions/[id]/archive/route.js +1 -1
  64. package/.next/server/app/api/sessions/[id]/auto-name/route.js +1 -1
  65. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  66. package/.next/server/app/api/sessions/[id]/entries/[entryId]/media/route.js +1 -1
  67. package/.next/server/app/api/sessions/[id]/entries/[entryId]/thinking/route.js +1 -1
  68. package/.next/server/app/api/sessions/[id]/export/route.js +1 -1
  69. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  70. package/.next/server/app/api/sessions/[id]/state/route.js +1 -1
  71. package/.next/server/app/api/sessions/[id]/subagents/[subagentId]/route.js +1 -1
  72. package/.next/server/app/api/sessions/[id]/subagents/route.js +1 -1
  73. package/.next/server/app/api/sessions/archive/route.js +1 -1
  74. package/.next/server/app/api/sessions/import/route.js +1 -1
  75. package/.next/server/app/api/sessions/route.js +1 -1
  76. package/.next/server/app/api/skills/check/route.js +1 -1
  77. package/.next/server/app/api/skills/install/route.js +1 -1
  78. package/.next/server/app/api/skills/route.js +1 -1
  79. package/.next/server/app/api/skills/search/route.js +1 -1
  80. package/.next/server/app/api/skills/update/route.js +1 -1
  81. package/.next/server/app/api/usage/route.js +1 -1
  82. package/.next/server/app/api/web-auth/session/route.js +1 -1
  83. package/.next/server/app/api/worktrees/route.js +1 -1
  84. package/.next/server/app/apple-icon.png/route.js +1 -1
  85. package/.next/server/app/favicon.ico/route.js +1 -1
  86. package/.next/server/app/icon.svg/route.js +1 -1
  87. package/.next/server/app/index.html +1 -1
  88. package/.next/server/app/index.rsc +4 -4
  89. package/.next/server/app/index.segments/__PAGE__.segment.rsc +4 -4
  90. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  91. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  92. package/.next/server/app/login/page.js +1 -1
  93. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  94. package/.next/server/app/login.html +1 -1
  95. package/.next/server/app/login.rsc +4 -4
  96. package/.next/server/app/login.segments/_full.segment.rsc +4 -4
  97. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  98. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +4 -4
  99. package/.next/server/app/manifest.webmanifest/route.js +2 -2
  100. package/.next/server/app/page.js +2 -2
  101. package/.next/server/app/page_client-reference-manifest.js +1 -1
  102. package/.next/server/app/pair/page.js +1 -1
  103. package/.next/server/app/pair/page_client-reference-manifest.js +1 -1
  104. package/.next/server/app/pair.html +1 -1
  105. package/.next/server/app/pair.rsc +4 -4
  106. package/.next/server/app/pair.segments/_full.segment.rsc +4 -4
  107. package/.next/server/app/pair.segments/_tree.segment.rsc +2 -2
  108. package/.next/server/app/pair.segments/pair/__PAGE__.segment.rsc +4 -4
  109. package/.next/server/app/relay/route.js +1 -1
  110. package/.next/server/app-paths-manifest.json +9 -8
  111. package/.next/server/chunks/5318.js +1 -1
  112. package/.next/server/chunks/714.js +1 -1
  113. package/.next/server/chunks/795.js +9 -9
  114. package/.next/server/chunks/8834.js +1 -1
  115. package/.next/server/chunks/933.js +1 -1
  116. package/.next/server/functions-config-manifest.json +1 -0
  117. package/.next/server/middleware-build-manifest.js +1 -1
  118. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  119. package/.next/server/middleware.js +3 -3
  120. package/.next/server/pages/404.html +1 -1
  121. package/.next/server/pages/500.html +1 -1
  122. package/.next/server/server-reference-manifest.json +1 -1
  123. package/.next/static/-e2ns-fZZm-4SQeI3H4-N/_buildManifest.js +1 -0
  124. package/.next/static/chunks/{1012.2a9e89fd82a08863.js → 1012.1393cfb59d12bb81.js} +1 -1
  125. package/.next/static/chunks/1941.66c3a0942c0c3e5d.js +1 -0
  126. package/.next/static/chunks/{2201.e6bbfc26ce87920c.js → 2201.46326eb058826eb2.js} +1 -1
  127. package/.next/static/chunks/{3274.4cdcf3a52b884856.js → 3274.2a04ea2716225057.js} +1 -1
  128. package/.next/static/chunks/3944.6215b78f025077b3.js +1 -0
  129. package/.next/static/chunks/4315-142781649334beb2.js +1 -0
  130. package/.next/static/chunks/4906-7dff29185f63f908.js +1 -0
  131. package/.next/static/chunks/587-c973123b3c9a5b80.js +1 -0
  132. package/.next/static/chunks/{7488.42415d6f1b86c86b.js → 7488.1403755f69bda581.js} +1 -1
  133. package/.next/static/chunks/app/_global-error/page-710453b8adcf7d31.js +1 -0
  134. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-710453b8adcf7d31.js +1 -0
  135. package/.next/static/chunks/app/api/agent/[id]/events/route-710453b8adcf7d31.js +1 -0
  136. package/.next/static/chunks/app/api/agent/[id]/route-710453b8adcf7d31.js +1 -0
  137. package/.next/static/chunks/app/api/agent/new/route-710453b8adcf7d31.js +1 -0
  138. package/.next/static/chunks/app/api/agent/running/events/route-710453b8adcf7d31.js +1 -0
  139. package/.next/static/chunks/app/api/agents/[name]/route-710453b8adcf7d31.js +1 -0
  140. package/.next/static/chunks/app/api/agents/route-710453b8adcf7d31.js +1 -0
  141. package/.next/static/chunks/app/api/agents/unpack/route-710453b8adcf7d31.js +1 -0
  142. package/.next/static/chunks/app/api/app-update/route-710453b8adcf7d31.js +1 -0
  143. package/.next/static/chunks/app/api/auth/all-providers/route-710453b8adcf7d31.js +1 -0
  144. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-710453b8adcf7d31.js +1 -0
  145. package/.next/static/chunks/app/api/auth/login/[provider]/route-710453b8adcf7d31.js +1 -0
  146. package/.next/static/chunks/app/api/auth/logout/[provider]/route-710453b8adcf7d31.js +1 -0
  147. package/.next/static/chunks/app/api/auth/providers/route-710453b8adcf7d31.js +1 -0
  148. package/.next/static/chunks/app/api/cwd/browse/route-710453b8adcf7d31.js +1 -0
  149. package/.next/static/chunks/app/api/cwd/validate/route-710453b8adcf7d31.js +1 -0
  150. package/.next/static/chunks/app/api/daemon/route-710453b8adcf7d31.js +1 -0
  151. package/.next/static/chunks/app/api/default-cwd/route-710453b8adcf7d31.js +1 -0
  152. package/.next/static/chunks/app/api/file-index/route-710453b8adcf7d31.js +1 -0
  153. package/.next/static/chunks/app/api/files/[...path]/route-710453b8adcf7d31.js +1 -0
  154. package/.next/static/chunks/app/api/git/diff/route-710453b8adcf7d31.js +1 -0
  155. package/.next/static/chunks/app/api/git/status/route-710453b8adcf7d31.js +1 -0
  156. package/.next/static/chunks/app/api/home/route-710453b8adcf7d31.js +1 -0
  157. package/.next/static/chunks/app/api/mcp/route-710453b8adcf7d31.js +1 -0
  158. package/.next/static/chunks/app/api/model-roles/route-710453b8adcf7d31.js +1 -0
  159. package/.next/static/chunks/app/api/models/route-710453b8adcf7d31.js +1 -0
  160. package/.next/static/chunks/app/api/models-config/catalog/route-710453b8adcf7d31.js +1 -0
  161. package/.next/static/chunks/app/api/models-config/route-710453b8adcf7d31.js +1 -0
  162. package/.next/static/chunks/app/api/models-config/test/route-710453b8adcf7d31.js +1 -0
  163. package/.next/static/chunks/app/api/omp-settings/route-710453b8adcf7d31.js +1 -0
  164. package/.next/static/chunks/app/api/omp-update/route-710453b8adcf7d31.js +1 -0
  165. package/.next/static/chunks/app/api/omp-version/route-710453b8adcf7d31.js +1 -0
  166. package/.next/static/chunks/app/api/plugins/route-710453b8adcf7d31.js +1 -0
  167. package/.next/static/chunks/app/api/projects/route-710453b8adcf7d31.js +1 -0
  168. package/.next/static/chunks/app/api/providers/enable/route-710453b8adcf7d31.js +1 -0
  169. package/.next/static/chunks/app/api/relay/devices/[id]/route-710453b8adcf7d31.js +1 -0
  170. package/.next/static/chunks/app/api/relay/devices/route-710453b8adcf7d31.js +1 -0
  171. package/.next/static/chunks/app/api/relay/pair/route-710453b8adcf7d31.js +1 -0
  172. package/.next/static/chunks/app/api/sessions/[id]/archive/route-710453b8adcf7d31.js +1 -0
  173. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-710453b8adcf7d31.js +1 -0
  174. package/.next/static/chunks/app/api/sessions/[id]/context/route-710453b8adcf7d31.js +1 -0
  175. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/media/route-710453b8adcf7d31.js +1 -0
  176. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-710453b8adcf7d31.js +1 -0
  177. package/.next/static/chunks/app/api/sessions/[id]/export/route-710453b8adcf7d31.js +1 -0
  178. package/.next/static/chunks/app/api/sessions/[id]/route-710453b8adcf7d31.js +1 -0
  179. package/.next/static/chunks/app/api/sessions/[id]/state/route-710453b8adcf7d31.js +1 -0
  180. package/.next/static/chunks/app/api/sessions/[id]/subagents/[subagentId]/route-710453b8adcf7d31.js +1 -0
  181. package/.next/static/chunks/app/api/sessions/[id]/subagents/route-710453b8adcf7d31.js +1 -0
  182. package/.next/static/chunks/app/api/sessions/archive/route-710453b8adcf7d31.js +1 -0
  183. package/.next/static/chunks/app/api/sessions/import/route-710453b8adcf7d31.js +1 -0
  184. package/.next/static/chunks/app/api/sessions/route-710453b8adcf7d31.js +1 -0
  185. package/.next/static/chunks/app/api/skills/check/route-710453b8adcf7d31.js +1 -0
  186. package/.next/static/chunks/app/api/skills/install/route-710453b8adcf7d31.js +1 -0
  187. package/.next/static/chunks/app/api/skills/route-710453b8adcf7d31.js +1 -0
  188. package/.next/static/chunks/app/api/skills/search/route-710453b8adcf7d31.js +1 -0
  189. package/.next/static/chunks/app/api/skills/update/route-710453b8adcf7d31.js +1 -0
  190. package/.next/static/chunks/app/api/usage/route-710453b8adcf7d31.js +1 -0
  191. package/.next/static/chunks/app/api/web-auth/session/route-710453b8adcf7d31.js +1 -0
  192. package/.next/static/chunks/app/api/worktrees/route-710453b8adcf7d31.js +1 -0
  193. package/.next/static/chunks/app/login/page-a54174ed920300f7.js +1 -0
  194. package/.next/static/chunks/app/manifest.webmanifest/route-710453b8adcf7d31.js +1 -0
  195. package/.next/static/chunks/app/{page-dcb62803f94d0c1c.js → page-fe40fe42b5ca1207.js} +1 -1
  196. package/.next/static/chunks/app/pair/page-d72423ffc5654e29.js +1 -0
  197. package/.next/static/chunks/app/relay/route-710453b8adcf7d31.js +1 -0
  198. package/.next/static/chunks/next/dist/client/components/builtin/app-error-710453b8adcf7d31.js +1 -0
  199. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-710453b8adcf7d31.js +1 -0
  200. package/.next/static/chunks/next/dist/client/components/builtin/not-found-710453b8adcf7d31.js +1 -0
  201. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-710453b8adcf7d31.js +1 -0
  202. package/.next/static/chunks/webpack-d6e3c46873419a16.js +1 -0
  203. package/.next/static/css/63b622301ba107de.css +3 -0
  204. package/README.ja.md +28 -3
  205. package/README.ko.md +28 -3
  206. package/README.md +28 -3
  207. package/README.zh-CN.md +28 -3
  208. package/bin/ompgui-options.js +9 -2
  209. package/bin/ompgui-service.js +223 -0
  210. package/bin/ompgui-update.js +85 -22
  211. package/bin/ompgui.js +7 -0
  212. package/package.json +2 -1
  213. package/.next/static/QFUZ5E_wgec_DUeAoDxrb/_buildManifest.js +0 -1
  214. package/.next/static/chunks/1108.1f1e4661b6e402fb.js +0 -1
  215. package/.next/static/chunks/3065-24b6f2111fc740ea.js +0 -1
  216. package/.next/static/chunks/4315-bd1069a88334f3a3.js +0 -1
  217. package/.next/static/chunks/9090-6ce028ffeafe2aee.js +0 -1
  218. package/.next/static/chunks/app/_global-error/page-2900441d61e06609.js +0 -1
  219. package/.next/static/chunks/app/api/agent/[id]/bash-output/route-2900441d61e06609.js +0 -1
  220. package/.next/static/chunks/app/api/agent/[id]/events/route-2900441d61e06609.js +0 -1
  221. package/.next/static/chunks/app/api/agent/[id]/route-2900441d61e06609.js +0 -1
  222. package/.next/static/chunks/app/api/agent/new/route-2900441d61e06609.js +0 -1
  223. package/.next/static/chunks/app/api/agent/running/events/route-2900441d61e06609.js +0 -1
  224. package/.next/static/chunks/app/api/agents/[name]/route-2900441d61e06609.js +0 -1
  225. package/.next/static/chunks/app/api/agents/route-2900441d61e06609.js +0 -1
  226. package/.next/static/chunks/app/api/agents/unpack/route-2900441d61e06609.js +0 -1
  227. package/.next/static/chunks/app/api/app-update/route-2900441d61e06609.js +0 -1
  228. package/.next/static/chunks/app/api/auth/all-providers/route-2900441d61e06609.js +0 -1
  229. package/.next/static/chunks/app/api/auth/api-key/[provider]/route-2900441d61e06609.js +0 -1
  230. package/.next/static/chunks/app/api/auth/login/[provider]/route-2900441d61e06609.js +0 -1
  231. package/.next/static/chunks/app/api/auth/logout/[provider]/route-2900441d61e06609.js +0 -1
  232. package/.next/static/chunks/app/api/auth/providers/route-2900441d61e06609.js +0 -1
  233. package/.next/static/chunks/app/api/cwd/browse/route-2900441d61e06609.js +0 -1
  234. package/.next/static/chunks/app/api/cwd/validate/route-2900441d61e06609.js +0 -1
  235. package/.next/static/chunks/app/api/default-cwd/route-2900441d61e06609.js +0 -1
  236. package/.next/static/chunks/app/api/file-index/route-2900441d61e06609.js +0 -1
  237. package/.next/static/chunks/app/api/files/[...path]/route-2900441d61e06609.js +0 -1
  238. package/.next/static/chunks/app/api/git/diff/route-2900441d61e06609.js +0 -1
  239. package/.next/static/chunks/app/api/git/status/route-2900441d61e06609.js +0 -1
  240. package/.next/static/chunks/app/api/home/route-2900441d61e06609.js +0 -1
  241. package/.next/static/chunks/app/api/mcp/route-2900441d61e06609.js +0 -1
  242. package/.next/static/chunks/app/api/model-roles/route-2900441d61e06609.js +0 -1
  243. package/.next/static/chunks/app/api/models/route-2900441d61e06609.js +0 -1
  244. package/.next/static/chunks/app/api/models-config/catalog/route-2900441d61e06609.js +0 -1
  245. package/.next/static/chunks/app/api/models-config/route-2900441d61e06609.js +0 -1
  246. package/.next/static/chunks/app/api/models-config/test/route-2900441d61e06609.js +0 -1
  247. package/.next/static/chunks/app/api/omp-settings/route-2900441d61e06609.js +0 -1
  248. package/.next/static/chunks/app/api/omp-update/route-2900441d61e06609.js +0 -1
  249. package/.next/static/chunks/app/api/omp-version/route-2900441d61e06609.js +0 -1
  250. package/.next/static/chunks/app/api/plugins/route-2900441d61e06609.js +0 -1
  251. package/.next/static/chunks/app/api/projects/route-2900441d61e06609.js +0 -1
  252. package/.next/static/chunks/app/api/providers/enable/route-2900441d61e06609.js +0 -1
  253. package/.next/static/chunks/app/api/relay/devices/[id]/route-2900441d61e06609.js +0 -1
  254. package/.next/static/chunks/app/api/relay/devices/route-2900441d61e06609.js +0 -1
  255. package/.next/static/chunks/app/api/relay/pair/route-2900441d61e06609.js +0 -1
  256. package/.next/static/chunks/app/api/sessions/[id]/archive/route-2900441d61e06609.js +0 -1
  257. package/.next/static/chunks/app/api/sessions/[id]/auto-name/route-2900441d61e06609.js +0 -1
  258. package/.next/static/chunks/app/api/sessions/[id]/context/route-2900441d61e06609.js +0 -1
  259. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/media/route-2900441d61e06609.js +0 -1
  260. package/.next/static/chunks/app/api/sessions/[id]/entries/[entryId]/thinking/route-2900441d61e06609.js +0 -1
  261. package/.next/static/chunks/app/api/sessions/[id]/export/route-2900441d61e06609.js +0 -1
  262. package/.next/static/chunks/app/api/sessions/[id]/route-2900441d61e06609.js +0 -1
  263. package/.next/static/chunks/app/api/sessions/[id]/state/route-2900441d61e06609.js +0 -1
  264. package/.next/static/chunks/app/api/sessions/[id]/subagents/[subagentId]/route-2900441d61e06609.js +0 -1
  265. package/.next/static/chunks/app/api/sessions/[id]/subagents/route-2900441d61e06609.js +0 -1
  266. package/.next/static/chunks/app/api/sessions/archive/route-2900441d61e06609.js +0 -1
  267. package/.next/static/chunks/app/api/sessions/import/route-2900441d61e06609.js +0 -1
  268. package/.next/static/chunks/app/api/sessions/route-2900441d61e06609.js +0 -1
  269. package/.next/static/chunks/app/api/skills/check/route-2900441d61e06609.js +0 -1
  270. package/.next/static/chunks/app/api/skills/install/route-2900441d61e06609.js +0 -1
  271. package/.next/static/chunks/app/api/skills/route-2900441d61e06609.js +0 -1
  272. package/.next/static/chunks/app/api/skills/search/route-2900441d61e06609.js +0 -1
  273. package/.next/static/chunks/app/api/skills/update/route-2900441d61e06609.js +0 -1
  274. package/.next/static/chunks/app/api/usage/route-2900441d61e06609.js +0 -1
  275. package/.next/static/chunks/app/api/web-auth/session/route-2900441d61e06609.js +0 -1
  276. package/.next/static/chunks/app/api/worktrees/route-2900441d61e06609.js +0 -1
  277. package/.next/static/chunks/app/login/page-76b98ef41947c31b.js +0 -1
  278. package/.next/static/chunks/app/manifest.webmanifest/route-2900441d61e06609.js +0 -1
  279. package/.next/static/chunks/app/pair/page-e1ad2578491903a8.js +0 -1
  280. package/.next/static/chunks/app/relay/route-2900441d61e06609.js +0 -1
  281. package/.next/static/chunks/next/dist/client/components/builtin/app-error-2900441d61e06609.js +0 -1
  282. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-2900441d61e06609.js +0 -1
  283. package/.next/static/chunks/next/dist/client/components/builtin/not-found-2900441d61e06609.js +0 -1
  284. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-2900441d61e06609.js +0 -1
  285. package/.next/static/chunks/webpack-789dbb5c37af2dc8.js +0 -1
  286. package/.next/static/css/d4456801cd2ff0da.css +0 -3
  287. /package/.next/static/{QFUZ5E_wgec_DUeAoDxrb → -e2ns-fZZm-4SQeI3H4-N}/_ssgManifest.js +0 -0
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+
3
+ const fs = require("node:fs");
4
+ const os = require("node:os");
5
+ const path = require("node:path");
6
+ const { spawn, spawnSync } = require("node:child_process");
7
+ const LABEL = "com.hanbinnoh.ompgui";
8
+ const POLL_WAIT = new Int32Array(new SharedArrayBuffer(4));
9
+ const ACTIONS = new Set(["install", "repair", "start", "stop", "restart", "status", "uninstall", "remove", "enable", "disable"]);
10
+ const escapeXml = (value) => String(value).replace(/[<>&"']/g, (char) => ({ "<": "&lt;", ">": "&gt;", "&": "&amp;", '"': "&quot;", "'": "&apos;" })[char]);
11
+ function plistValue(value) {
12
+ if (typeof value === "boolean") return value ? "<true/>" : "<false/>";
13
+ if (Array.isArray(value)) return `<array>${value.map(plistValue).join("")}</array>`;
14
+ if (value && typeof value === "object") return `<dict>${Object.entries(value).map(([key, entry]) => `<key>${escapeXml(key)}</key>${plistValue(entry)}`).join("")}</dict>`;
15
+ return `<string>${escapeXml(value)}</string>`;
16
+ }
17
+ function createServiceManager({ processAlive = (pid) => {
18
+ try { process.kill(pid, 0); return true; } catch (error) { if (error.code === "ESRCH") return false; throw error; }
19
+ }, now = Date.now, pause = (milliseconds) => Atomics.wait(POLL_WAIT, 0, 0, milliseconds), label = LABEL, platform = process.platform, home = os.homedir(), uid = process.getuid?.(), env = process.env, execPath = process.execPath, cliPath = path.join(__dirname, "ompgui.js"), portAvailable = (port, hostname) => {
20
+ const probe = spawnSync(process.execPath, [__filename, "--check-port", String(port), hostname], { encoding: "utf8", timeout: 5000 });
21
+ if (probe.status === 0) return true;
22
+ if (probe.status === 2) return false;
23
+ throw new Error("Could not check service port availability");
24
+ }, run = (command, args) => spawnSync(command, args, { encoding: "utf8", timeout: 10000 }) } = {}) {
25
+ // Internal dependency-injection seam only; CLI and HTTP never accept a label override.
26
+ if (typeof label !== "string" || !/^com\.hanbinnoh\.ompgui(?:\.verify[A-Za-z0-9-]+)?$/.test(label)) throw new Error("Invalid ompgui service label");
27
+ const plistPath = path.join(home, "Library", "LaunchAgents", `${label}.plist`);
28
+ const logPath = path.join(home, "Library", "Logs", "ompgui", "service.log");
29
+ const domain = `gui/${uid}`;
30
+ const target = `${domain}/${label}`;
31
+ function command(args, allowMissing = false) {
32
+ const result = run("/bin/launchctl", args);
33
+ if (result.error || result.status !== 0) {
34
+ // launchctl's missing-service exit status is 113; never hide permission/domain errors.
35
+ if (allowMissing && result.status === 113) return null;
36
+ throw new Error(`launchctl ${args[0]} failed${result.error ? `: ${result.error.code || "execution error"}` : ` (exit ${result.status})`}`);
37
+ }
38
+ return result.stdout || "";
39
+ }
40
+ function ownedExecutable(args) {
41
+ if (!Array.isArray(args) || args.length < 2 || typeof args[0] !== "string" || typeof args[1] !== "string" || !path.isAbsolute(args[0]) || !path.isAbsolute(args[1]) || path.basename(args[0]) !== "node") return false;
42
+ try {
43
+ const resolved = fs.realpathSync(args[1]);
44
+ if (path.basename(resolved) !== "ompgui.js" || path.basename(path.dirname(resolved)) !== "bin") return false;
45
+ return JSON.parse(fs.readFileSync(path.join(path.dirname(resolved), "..", "package.json"), "utf8")).name === "ompgui";
46
+ } catch { return false; }
47
+ }
48
+ function readInstalled() {
49
+ let stat;
50
+ try { stat = fs.lstatSync(plistPath); } catch (error) { if (error.code === "ENOENT") return null; throw error; }
51
+ if (!stat.isFile() || stat.isSymbolicLink() || stat.uid !== uid || (stat.mode & 0o022) !== 0) throw new Error("Refusing unmanaged or foreign-owned LaunchAgent");
52
+ const result = run("/usr/bin/plutil", ["-convert", "json", "-o", "-", plistPath]);
53
+ if (result.error || result.status !== 0) throw new Error("Cannot read LaunchAgent configuration");
54
+ let config;
55
+ try { config = JSON.parse(result.stdout); } catch { throw new Error("Invalid LaunchAgent configuration"); }
56
+ if (config.Label !== label || !ownedExecutable(config.ProgramArguments) || config.Program) throw new Error("Refusing LaunchAgent not owned by ompgui");
57
+ return config;
58
+ }
59
+ function inspect() {
60
+ const state = { supported: platform === "darwin", installed: false, running: false, autoStart: false, label, pid: null, logPath: null };
61
+ if (!state.supported) return { ...state, error: "Service management is supported only on macOS." };
62
+ const config = readInstalled();
63
+ state.installed = Boolean(config);
64
+ state.logPath = typeof config?.StandardOutPath === "string" ? config.StandardOutPath : null;
65
+ const printed = command(["print", target], true);
66
+ if (printed !== null) {
67
+ const source = printed.match(/^\s*path = (.+)$/m)?.[1]?.trim();
68
+ if (!config || source !== plistPath) throw new Error("Refusing loaded service with unverified ownership");
69
+ const pid = printed.match(/^\s*pid = (\d+)\s*$/m);
70
+ state.pid = pid ? Number(pid[1]) : null;
71
+ state.running = /\bstate = running\b/.test(printed) && state.pid !== null;
72
+ if (!state.running) state.pid = null;
73
+ }
74
+ const disabled = command(["print-disabled", domain]);
75
+ const explicitlyDisabled = new RegExp(`"${label.replaceAll(".", "\\.")}"\\s*=>\\s*(?:true|disabled)\\b`).test(disabled);
76
+ state.autoStart = Boolean(config && config.RunAtLoad !== false && !explicitlyDisabled);
77
+ return { ...state, loaded: printed !== null, explicitlyDisabled };
78
+ }
79
+ function status() {
80
+ try { const state = inspect(); delete state.loaded; delete state.explicitlyDisabled; return state; }
81
+ catch (error) { return { supported: platform === "darwin", installed: fs.existsSync(plistPath), running: false, autoStart: false, label, pid: null, logPath: null, error: error.message }; }
82
+ }
83
+ function validate(action) {
84
+ if (!ACTIONS.has(action)) throw new Error(`Unknown service action: ${action}`);
85
+ if (platform !== "darwin") throw new Error("Service management is supported only on macOS.");
86
+ const state = inspect();
87
+ if (["start", "restart", "enable", "disable"].includes(action) && !state.installed) throw new Error("Service is not installed. Run ompgui service install first.");
88
+ return state;
89
+ }
90
+ function execute(action, options = {}) {
91
+ if (action === "status") return status();
92
+ const before = validate(action);
93
+ if (action === "remove") action = "uninstall";
94
+ if (action === "repair") action = before.installed ? "restart" : "install";
95
+ if (["install", "start", "restart"].includes(action) && !before.running) {
96
+ const installed = before.installed ? readInstalled() : null;
97
+ const launch = installed ? require("./ompgui-options").parseLaunchOptions(installed.ProgramArguments.slice(2), installed.EnvironmentVariables || {}) : options;
98
+ const port = launch.port || "30177";
99
+ const hostname = launch.hostname || "127.0.0.1";
100
+ if (!portAvailable(port, hostname)) throw new Error(`Port ${port} on ${hostname} is already in use. Stop the foreground server or other listener, then run ompgui service ${before.installed ? "start" : "install"}. No service configuration was changed.`);
101
+ }
102
+ if (action === "install" && !before.installed) {
103
+ const realCli = fs.realpathSync(cliPath);
104
+ const packageDir = path.resolve(path.dirname(realCli), "..");
105
+ if (!ownedExecutable([execPath, realCli]) || fs.existsSync(path.join(packageDir, ".git")) || !fs.existsSync(path.join(packageDir, ".next", "BUILD_ID"))) throw new Error("Install the published ompgui package before installing its service; development checkouts are not supported.");
106
+ const persistentEnv = {};
107
+ for (const [key, value] of Object.entries(env)) {
108
+ if ((/^(OMP_|OMPGUI_|OMP_WEB_)/.test(key) || ["PATH", "HOME", "SHELL", "LANG", "LC_ALL", "PI_CODING_AGENT_DIR", "PI_PROFILE"].includes(key)) && typeof value === "string" && !/(?:PACKAGE_DIR|LAUNCHER_PID)$/.test(key)) persistentEnv[key] = value;
109
+ }
110
+ persistentEnv.OMPGUI_NO_OPEN = "1";
111
+ if (options.password) { persistentEnv.OMPGUI_PASSWORD = options.password; persistentEnv.OMP_WEB_PASSWORD = options.password; }
112
+ if (options.relayUrl) persistentEnv.OMPGUI_RELAY_URL = options.relayUrl;
113
+ const config = { Label: label, ProgramArguments: [execPath, realCli, "--port", String(options.port || "30177"), "--hostname", options.hostname || "127.0.0.1", "--no-open"], WorkingDirectory: home, EnvironmentVariables: persistentEnv, RunAtLoad: true, KeepAlive: true, StandardOutPath: logPath, StandardErrorPath: logPath };
114
+ fs.mkdirSync(path.dirname(plistPath), { recursive: true, mode: 0o700 });
115
+ fs.mkdirSync(path.dirname(logPath), { recursive: true, mode: 0o700 });
116
+ const temporary = `${plistPath}.${process.pid}.${require("node:crypto").randomUUID()}.tmp`;
117
+ try {
118
+ fs.writeFileSync(temporary, `<?xml version="1.0" encoding="UTF-8"?>\n<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">\n<plist version="1.0">${plistValue(config)}</plist>\n`, { mode: 0o600, flag: "wx" });
119
+ fs.renameSync(temporary, plistPath);
120
+ } finally { fs.rmSync(temporary, { force: true }); }
121
+ }
122
+ if (["enable", "disable"].includes(action)) {
123
+ if (!before.installed) throw new Error("Service is not installed. Run ompgui service install first.");
124
+ command([action, target]);
125
+ return status();
126
+ }
127
+ if (["stop", "uninstall"].includes(action)) {
128
+ if (before.loaded) {
129
+ command(["bootout", target]);
130
+ // The launcher allows 5 seconds before forcing its Next child to exit.
131
+ const deadline = now() + 10000;
132
+ while (command(["print", target], true) !== null) {
133
+ if (now() >= deadline) throw new Error("Service is still stopping. Configuration was preserved; wait, check ompgui status, and retry the action.");
134
+ pause(100);
135
+ }
136
+ while (before.pid !== null && processAlive(before.pid)) {
137
+ if (now() >= deadline) throw new Error("Service process is still exiting. Configuration was preserved; wait, check ompgui status, and retry the action.");
138
+ pause(100);
139
+ }
140
+ }
141
+ if (action === "uninstall" && before.installed) fs.unlinkSync(plistPath);
142
+ } else {
143
+ if (!before.installed && action !== "install") throw new Error("Service is not installed. Run ompgui service install first.");
144
+ if (action === "install") command(["enable", target]);
145
+ if (!before.loaded) {
146
+ const restoreDisabled = action !== "install" && before.explicitlyDisabled;
147
+ if (restoreDisabled) command(["enable", target]);
148
+ try {
149
+ command(["bootstrap", domain, plistPath]);
150
+ command(["kickstart", target]);
151
+ }
152
+ finally { if (restoreDisabled) command(["disable", target]); }
153
+ } else if (action === "restart") command(["kickstart", "-k", target]);
154
+ else if (!before.running) command(["kickstart", target]);
155
+ }
156
+ return status();
157
+ }
158
+ function updateSnapshot(packageDir) {
159
+ if (platform !== "darwin") return null;
160
+ const before = inspect();
161
+ if (!before.installed || !before.running) return null;
162
+ const config = readInstalled();
163
+ const packagePath = path.resolve(path.dirname(fs.realpathSync(config.ProgramArguments[1])), "..");
164
+ if (packagePath !== fs.realpathSync(packageDir)) throw new Error("Running ompgui service belongs to another installation; update that installation instead.");
165
+ const contents = fs.readFileSync(plistPath);
166
+ const launch = require("./ompgui-options").parseLaunchOptions(config.ProgramArguments.slice(2), config.EnvironmentVariables || {});
167
+ return {
168
+ packagePath, port: launch.port, hostname: launch.hostname,
169
+ verify() {
170
+ const current = inspect();
171
+ if (!current.installed || !fs.readFileSync(plistPath).equals(contents) || current.explicitlyDisabled !== before.explicitlyDisabled) throw new Error("Service configuration changed during update; refusing automatic restart.");
172
+ },
173
+ };
174
+ }
175
+ return { status, execute, validate, updateSnapshot, plistPath };
176
+ }
177
+ async function runServiceCli(options) {
178
+ const action = options.command === "service" ? options.extraPositionals[0] || "repair" : options.command;
179
+ if (options.extraPositionals.length > (options.command === "service" ? 1 : 0)) throw new Error("Unexpected service arguments");
180
+ const manager = createServiceManager();
181
+ let result;
182
+ try {
183
+ if (options.defer) {
184
+ if (!["stop", "restart", "uninstall"].includes(action)) throw new Error("Only stop, restart, and uninstall can be deferred");
185
+ manager.validate(action);
186
+ const child = spawn(process.execPath, [__filename, action], { detached: true, stdio: "ignore", env: process.env });
187
+ const spawned = Promise.withResolvers();
188
+ child.once("spawn", spawned.resolve);
189
+ child.once("error", spawned.reject);
190
+ await spawned.promise;
191
+ child.unref();
192
+ result = { ...manager.status(), accepted: true };
193
+ } else result = manager.execute(action, options);
194
+ } catch (error) { result = { ...manager.status(), error: error.message }; }
195
+ if (options.json) console.log(JSON.stringify(result));
196
+ else {
197
+ console.log(`ompgui service: ${result.running ? `running (PID ${result.pid})` : "stopped"}; ${result.installed ? "installed" : "not installed"}; login auto-start ${result.autoStart ? "enabled" : "disabled"}`);
198
+ if (result.logPath) console.log(`Logs: ${result.logPath}`);
199
+ if (result.error) console.error(result.error);
200
+ }
201
+ if (result.error) process.exitCode = 1;
202
+ return result;
203
+ }
204
+ if (require.main === module) {
205
+ const action = process.argv[2];
206
+ if (["stop", "restart", "uninstall"].includes(action) && process.argv.length === 3) setTimeout(() => {
207
+ const manager = createServiceManager();
208
+ const before = manager.status();
209
+ try {
210
+ const result = manager.execute(action);
211
+ if (result.error) throw new Error(result.error);
212
+ } catch (error) {
213
+ process.exitCode = 1;
214
+ if (before.logPath) {
215
+ try { fs.appendFileSync(before.logPath, `${new Date().toISOString()} Deferred service ${action} failed: ${error.message}\n`, { mode: 0o600 }); } catch { /* No alternate secret-bearing output destination. */ }
216
+ }
217
+ }
218
+ }, 1200);
219
+ else if (action === "--check-port" && process.argv.length === 5) {
220
+ require("./port-availability").isPortAvailable(process.argv[3], process.argv[4]).then((available) => { process.exitCode = available ? 0 : 2; }).catch(() => { process.exitCode = 1; });
221
+ } else process.exitCode = 1;
222
+ }
223
+ module.exports = { LABEL, createServiceManager, runServiceCli };
@@ -4,6 +4,18 @@ const { spawn } = require("child_process");
4
4
  const fs = require("fs");
5
5
  const os = require("os");
6
6
  const path = require("path");
7
+ const { createServiceManager } = require("./ompgui-service");
8
+ const { setTimeout: sleep } = require("node:timers/promises");
9
+
10
+ async function checkReady({ hostname, port }) {
11
+ const host = hostname === "0.0.0.0" ? "127.0.0.1" : hostname === "::" ? "::1" : hostname;
12
+ const authority = host.includes(":") ? `[${host}]` : host;
13
+ try {
14
+ const response = await fetch(`http://${authority}:${port}/`, { signal: AbortSignal.timeout(1000), redirect: "manual" });
15
+ await response.body?.cancel();
16
+ return response.ok || response.status === 307 || response.status === 308;
17
+ } catch { return false; }
18
+ }
7
19
 
8
20
  function normalizePath(value, platform) {
9
21
  const normalized = path.normalize(value).replaceAll("\\", path.sep);
@@ -35,39 +47,46 @@ function findNpmCli(nodePath = process.execPath, exists = fs.existsSync) {
35
47
  }) ?? null;
36
48
  }
37
49
 
38
- function getInstallCommand(method, platform = process.platform, nodePath = process.execPath, resolveNpmCli = findNpmCli) {
50
+ function getInstallCommand(method, platform = process.platform, nodePath = process.execPath, resolveNpmCli = findNpmCli, packageDir) {
51
+ const paths = platform === "win32" ? path.win32 : path;
52
+ const modules = packageDir && paths.dirname(packageDir);
53
+ if (packageDir && (paths.basename(packageDir) !== "ompgui" || paths.basename(modules) !== "node_modules")) {
54
+ throw new Error("Cannot safely update this installation layout. Reinstall ompgui with npm or Bun first.");
55
+ }
39
56
  if (method === "bun") {
40
- return { command: platform === "win32" ? "bun.exe" : "bun", args: ["add", "--global", "ompgui@latest"] };
57
+ const target = packageDir ? ["--global-dir", paths.dirname(modules), "--global-bin-dir", platform === "win32" ? paths.join(paths.dirname(modules), ".bin") : paths.resolve(modules, "../../../bin")] : [];
58
+ return { command: platform === "win32" ? "bun.exe" : "bun", args: ["add", "--global", ...target, "ompgui@latest"] };
41
59
  }
60
+ const parent = packageDir && paths.dirname(modules);
61
+ const global = !packageDir || platform === "win32" || paths.basename(parent) === "lib";
62
+ const target = packageDir ? ["--prefix", global && platform !== "win32" ? paths.dirname(parent) : parent] : [];
63
+ const args = ["install", ...(global ? ["--global"] : ["--no-save"]), ...target, "ompgui@latest"];
42
64
  if (platform === "win32") {
43
65
  const npmCli = resolveNpmCli(nodePath);
44
66
  if (!npmCli) throw new Error("Could not locate npm-cli.js beside the active Node.js installation.");
45
- return { command: nodePath, args: [npmCli, "install", "--global", "ompgui@latest"] };
67
+ return { command: nodePath, args: [npmCli, ...args] };
46
68
  }
47
- return { command: "npm", args: ["install", "--global", "ompgui@latest"] };
69
+ return { command: "npm", args };
48
70
  }
49
71
 
50
72
  function readInstalledVersion(packageDir) {
51
73
  try {
52
74
  const packageJson = JSON.parse(fs.readFileSync(path.join(packageDir, "package.json"), "utf8"));
53
- return typeof packageJson.version === "string" ? packageJson.version : null;
75
+ return packageJson.name === "ompgui" && typeof packageJson.version === "string" && /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/.test(packageJson.version) ? packageJson.version : null;
54
76
  } catch {
55
77
  return null;
56
78
  }
57
79
  }
58
80
 
59
81
  function runInstaller(command, args, env = process.env) {
60
- return new Promise((resolve, reject) => {
61
- const child = spawn(command, args, { env, stdio: "inherit", windowsHide: true });
62
- child.once("error", reject);
63
- child.once("exit", (code, signal) => {
64
- if (code === 0) {
65
- resolve();
66
- return;
67
- }
68
- reject(new Error(signal ? `${command} was terminated by ${signal}` : `${command} exited with code ${code ?? "unknown"}`));
69
- });
82
+ const { promise, resolve, reject } = Promise.withResolvers();
83
+ const child = spawn(command, args, { env, stdio: "inherit", windowsHide: true });
84
+ child.once("error", reject);
85
+ child.once("exit", (code, signal) => {
86
+ if (code === 0) resolve();
87
+ else reject(new Error(signal ? `${command} was terminated by ${signal}` : `${command} exited with code ${code ?? "unknown"}`));
70
88
  });
89
+ return promise;
71
90
  }
72
91
 
73
92
  async function updateOmpGui({
@@ -77,18 +96,62 @@ async function updateOmpGui({
77
96
  homeDir = os.homedir(),
78
97
  install = runInstaller,
79
98
  stdout = process.stdout,
99
+ serviceManager = createServiceManager({ platform, home: homeDir, env }),
100
+ ready = checkReady,
101
+ pause = sleep,
102
+ now = Date.now,
103
+ readinessTimeout = 30000,
80
104
  } = {}) {
81
105
  if (!packageDir) throw new Error("The ompgui package directory is unavailable.");
82
106
 
83
107
  const beforeVersion = readInstalledVersion(packageDir);
84
108
  const method = detectInstallMethod(packageDir, env, homeDir, platform);
85
- const { command, args } = getInstallCommand(method, platform);
86
- stdout.write(`Updating ompgui${beforeVersion ? ` v${beforeVersion}` : ""} with ${method}...\n`);
87
- await install(command, args, env);
88
-
89
- const afterVersion = readInstalledVersion(packageDir);
90
- if (!afterVersion) {
91
- throw new Error("The package manager finished, but the installed ompgui version could not be verified.");
109
+ const { command, args } = getInstallCommand(method, platform, process.execPath, findNpmCli, packageDir);
110
+ const snapshot = platform === "darwin" ? serviceManager.updateSnapshot(packageDir) : null;
111
+ async function startAndWait() {
112
+ snapshot.verify();
113
+ const started = await serviceManager.execute("start");
114
+ if (started.error) throw new Error(started.error);
115
+ const deadline = now() + readinessTimeout;
116
+ while (now() < deadline) {
117
+ const state = serviceManager.status();
118
+ if (state.error) throw new Error(state.error);
119
+ if (state.running && await ready(snapshot)) {
120
+ snapshot.verify();
121
+ return;
122
+ }
123
+ await pause(Math.min(100, Math.max(0, deadline - now())));
124
+ }
125
+ throw new Error("Service did not become ready before the deadline. Check ompgui status and service logs.");
126
+ }
127
+ if (snapshot) {
128
+ stdout.write("Stopping the running ompgui service before updating...\n");
129
+ const stopped = await serviceManager.execute("stop");
130
+ if (stopped.error) throw new Error(stopped.error);
131
+ snapshot.verify();
132
+ }
133
+ let afterVersion;
134
+ try {
135
+ stdout.write(`Updating ompgui${beforeVersion ? ` v${beforeVersion}` : ""} with ${method}...\n`);
136
+ await install(command, args, env);
137
+ afterVersion = readInstalledVersion(packageDir);
138
+ if (!afterVersion) throw new Error("The package manager finished, but the installed ompgui version could not be verified.");
139
+ } catch (error) {
140
+ if (snapshot) {
141
+ stdout.write("Update failed; attempting to start the available ompgui installation (no rollback was performed)...\n");
142
+ try {
143
+ await startAndWait();
144
+ stdout.write("The available ompgui service is running again.\n");
145
+ } catch (recoveryError) {
146
+ throw new AggregateError([error, recoveryError], `${error.message} Recovery start also failed: ${recoveryError.message}`);
147
+ }
148
+ }
149
+ throw error;
150
+ }
151
+ if (snapshot) {
152
+ stdout.write("Starting the updated ompgui service...\n");
153
+ await startAndWait();
154
+ stdout.write("The ompgui service is ready.\n");
92
155
  }
93
156
  if (beforeVersion && afterVersion && beforeVersion === afterVersion) {
94
157
  stdout.write(`ompgui v${afterVersion} is already up to date.\n`);
package/bin/ompgui.js CHANGED
@@ -10,6 +10,13 @@ const pkgDir = path.join(__dirname, "..");
10
10
  const options = parseLaunchOptions();
11
11
  if (options.help || options.version) process.exit(0);
12
12
  if (options.command) {
13
+ if (["service", "start", "stop", "restart", "status"].includes(options.command)) {
14
+ require("./ompgui-service").runServiceCli(options).catch((error) => {
15
+ console.error(error.message);
16
+ process.exitCode = 1;
17
+ });
18
+ return;
19
+ }
13
20
  if (options.command === "update") {
14
21
  if (options.extraPositionals.length) {
15
22
  console.error(`Unknown ompgui command: ${[options.command, ...options.extraPositionals].join(" ")}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ompgui",
3
- "version": "0.7.1",
3
+ "version": "0.7.3",
4
4
  "description": "Web UI & Browser GUI for the oh-my-pi (omp) coding agent",
5
5
  "homepage": "https://github.com/dbc-hbin/ompgui#readme",
6
6
  "repository": {
@@ -22,6 +22,7 @@
22
22
  "files": [
23
23
  "bin/ompgui.js",
24
24
  "bin/ompgui-update.js",
25
+ "bin/ompgui-service.js",
25
26
  "bin/ompgui-pair.js",
26
27
  "bin/omp-web.js",
27
28
  "bin/ompgui-options.js",
@@ -1 +0,0 @@
1
- self.__BUILD_MANIFEST={__rewrites:{afterFiles:[],beforeFiles:[],fallback:[]},__routerFilterStatic:{numItems:49,errorRate:1e-4,numBits:940,numHashes:14,bitArray:[1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,1,1,1,1,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,0,1,1,1,0,1,1,0,1,1,0,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,0,1,1,0,1,0,0,1,0,0,1,1,1,0,1,0,1,1,1,0,1,1,0,1,1,1,0,0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,1,1,1,0,1,1,1,1,1,0,1,1,0,0,1,0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,1,0,0,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,1,0,0,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,0,1,0,0,0,0,1,0,0,1,0,0,1,1,1,0,1,0,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,0,1,1,1,1,1,1,0,1,0,0,1,0,1,0,0,1,0,1,0,0,1,1,0,0,1,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,1,0,1,1,0,0,1,1,1,0,0,0,1,0,1,1,0,0,1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0,0,1,0,0,1,0,0,1,0,1,1,1,1,0,0,1,0,1,0,1,0,1,1,1,0,1,1,0,0,0,1,1,0,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,1,1,0,1,0,1,1,0,1,0,0,1,0,0,0,1,1,0,1,0,1,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,1,0,1,1,1,0,0,1,0,0,1,0,0,0,1,0,1,1,0,1,0,1,1,1,1,1,0,1,0,1,1,1,0,1,1,1,1,0,1,1,1,0,1,1,1,1,0,0,0,1,0,1,1,0,0,1,0,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,0,1,1,1,0,1,1,1,0,1,1,0,0,0,1,0,0,0,1,0,1,0,0,0,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,1,1,0,1,1,0,1,1,0,1,1,0,0,0,0,1,1,0,1,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,1,1,1,0,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,1,1,0,0,1,0,1,0,1,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,1,0,1,1,0,1,1,0,1,0,1,0,0,1,0,0,1,1,1,1,1,0,0,1,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,0,1,0,0,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,1,0,1,0,0,0,0,1,1,0,0,1,1,0,0,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,0,1,0,0,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,1,0]},__routerFilterDynamic:{numItems:8,errorRate:1e-4,numBits:154,numHashes:14,bitArray:[1,0,0,0,0,1,0,0,1,0,0,1,1,1,1,1,1,1,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,1,0,1,0,0,0,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,1,1,0,0,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0,1,1,0,0,1,1,0,1,0,1,1,0,0,0,1,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,0,0,0,1,0,1,1,0,0,1,1,0,1,0,1,1,0,1,0,1,1,0,1,0,0,0,1,1,0,0,0,1,0]},sortedPages:["/_app"]},self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB();
@@ -1 +0,0 @@
1
- "use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1108],{12651:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("cpu",[["path",{d:"M12 20v2",key:"1lh1kg"}],["path",{d:"M12 2v2",key:"tus03m"}],["path",{d:"M17 20v2",key:"1rnc9c"}],["path",{d:"M17 2v2",key:"11trls"}],["path",{d:"M2 12h2",key:"1t8f8n"}],["path",{d:"M2 17h2",key:"7oei6x"}],["path",{d:"M2 7h2",key:"asdhe0"}],["path",{d:"M20 12h2",key:"1q8mjw"}],["path",{d:"M20 17h2",key:"1fpfkl"}],["path",{d:"M20 7h2",key:"1o8tra"}],["path",{d:"M7 20v2",key:"4gnj0m"}],["path",{d:"M7 2v2",key:"1i4yhu"}],["rect",{x:"4",y:"4",width:"16",height:"16",rx:"2",key:"1vbyd7"}],["rect",{x:"8",y:"8",width:"8",height:"8",rx:"1",key:"z9xiuo"}]])},25182:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]])},34140:(e,t,i)=>{i.d(t,{NN:()=>a,RJ:()=>o});let n="ompgui-sound-enabled",s="omp-sound-enabled";function a(){try{let e=function(){let e=window.localStorage,t=e.getItem(n);if(null!==t)return t;let i=e.getItem(s);if(null===i)return null;if("true"===i||"false"===i)try{return e.setItem(n,i),e.removeItem(s),i}catch{return null}try{e.removeItem(s)}catch{}return null}();return null===e||"true"===e}catch{return!0}}function o(e){try{window.localStorage.setItem(n,String(e))}catch{}}},35893:(e,t,i)=>{i.d(t,{t_:()=>o,vR:()=>r,vz:()=>a});let n="omp-web:submit-during-run",s="ompgui:submit-during-run-change";function a(){try{let e=window.localStorage.getItem(n);if("steer"===e||"queue"===e)return e}catch{}return"steer"}function o(e){try{window.localStorage.setItem(n,e),window.dispatchEvent(new Event(s))}catch{}}function r(e){let t=t=>{t.key===n&&e()};return window.addEventListener(s,e),window.addEventListener("storage",t),()=>{window.removeEventListener(s,e),window.removeEventListener("storage",t)}}},50981:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("shield-check",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]])},70299:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("monitor",[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]])},77194:(e,t,i)=>{i.r(t),i.d(t,{SettingsConfig:()=>ee});var n=i(95155),s=i(12115),a=i(35893),o=i(37206),r=i(65377),l=i(70299),d=i(47603),c=i(78890),p=i(86272),g=i(82749),u=i(99314),f=i(92298),b=i(99537);let x=(0,b.A)("external-link",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);var h=i(31590),m=i(30808),v=i(69090),y=i(66763),C=i(50981),k=i(12651);let w=(0,b.A)("key-round",[["path",{d:"M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z",key:"1s6t7t"}],["circle",{cx:"16.5",cy:"7.5",r:".5",fill:"currentColor",key:"w0ekpg"}]]);var j=i(90710);let S=(0,b.A)("cable",[["path",{d:"M17 19a1 1 0 0 1-1-1v-2a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v2a1 1 0 0 1-1 1z",key:"trhst0"}],["path",{d:"M17 21v-2",key:"ds4u3f"}],["path",{d:"M19 14V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V10",key:"1mo9zo"}],["path",{d:"M21 21v-2",key:"eo0ou"}],["path",{d:"M3 5V3",key:"1k5hjh"}],["path",{d:"M4 10a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2a2 2 0 0 1-2 2z",key:"1dd30t"}],["path",{d:"M7 5V3",key:"1t1388"}]]);var A=i(4315);let M=[{id:"general",label:"Interface & Behavior",description:"UI preferences, completion sound, submission mode",Icon:y.A},{id:"safety",label:"Safety & Approvals",description:"Tool safety rules, YOLO mode, terminal permissions",Icon:C.A},{id:"models",label:"AI Model Defaults",description:"Reasoning budget, verbosity, personality, scratchpad",Icon:k.A},{id:"providers",label:"API Keys & Providers",description:"Connected OAuth accounts, API keys, and model registry",Icon:w},{id:"intelligence",label:"Agent & Intelligence",description:"Advisor, memory, autolearn, compaction and retry",Icon:p.A},{id:"agents",label:"Agents & Subagents",description:"Configured subagents, model routing, prewalk, and advisor",Icon:j.A},{id:"extensions",label:"Extensions & Tools",description:"Optional tools, MCP servers, managed skills, and OMP plugins",Icon:S},{id:"system",label:"System & Updates",description:"App updates, runtime version, and active session restart",Icon:g.A}],R=[{id:"tools",label:"Optional Tools",description:"Toggle optional built-in tool capabilities"},{id:"mcp",label:"MCP Servers",description:"Configure global and project MCP servers"},{id:"skills",label:"Skills",description:"Manage reusable workspace skills"},{id:"plugins",label:"Plugins",description:"Manage OMP plugins for this workspace"}],D=e=>"tools"===e||"mcp"===e||"skills"===e||"plugins"===e||"extensions"===e?"extensions":e;function T({active:e,onSelect:t,layout:i="vertical"}){let{t:s}=(0,A.s9)(),a=D(e),o=(e,i)=>{let n=M.findIndex(e=>e.id===i);if(n<0||0===M.length)return;let s=null;("ArrowRight"===e.key||"ArrowDown"===e.key)&&(s=(n+1)%M.length),("ArrowLeft"===e.key||"ArrowUp"===e.key)&&(s=(n-1+M.length)%M.length),"Home"===e.key&&(s=0),"End"===e.key&&(s=M.length-1),null!==s&&(e.preventDefault(),t(M[s].id))};return"vertical"===i?(0,n.jsx)("nav",{"aria-label":"Settings sections",role:"tablist","aria-orientation":"vertical",style:{display:"flex",flexDirection:"column",gap:4,padding:"12px 8px",width:230,flexShrink:0,borderRight:"1px solid var(--border)",background:"var(--bg-panel)",overflowY:"auto"},children:M.map(({id:e,label:i,description:r,Icon:l})=>{let d=e===a,c=s(`settingsTabs.${e}`)||i,p=s(`settingsTabs.${e}Desc`)||r;return(0,n.jsxs)("button",{type:"button",role:"tab",id:`settings-tab-${e}`,"aria-selected":d,"aria-controls":`settings-panel-${e}`,tabIndex:d?0:-1,onClick:()=>t(e),onKeyDown:t=>o(t,e),style:{display:"flex",alignItems:"flex-start",gap:10,minHeight:"var(--control-touch, 44px)",padding:"8px 10px",border:d?"1px solid var(--accent)":"1px solid transparent",borderRadius:"var(--radius-control)",background:d?"var(--bg-selected)":"transparent",color:d?"var(--text)":"var(--text-muted)",cursor:"pointer",textAlign:"left",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)",width:"100%",boxSizing:"border-box",touchAction:"manipulation"},children:[(0,n.jsx)(l,{size:16,"aria-hidden":"true",style:{marginTop:2,flexShrink:0,color:d?"var(--accent)":"currentColor"}}),(0,n.jsxs)("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:2},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-base)",fontWeight:d?600:500,lineHeight:1.3,color:d?"var(--text)":"inherit"},children:c}),(0,n.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.3,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:p})]})]},e)})}):(0,n.jsx)("nav",{"aria-label":"Settings sections",role:"tablist",style:{display:"flex",gap:6,padding:"8px 12px",borderBottom:"1px solid var(--border)",background:"var(--bg-panel)",flexShrink:0,overflowX:"auto",WebkitOverflowScrolling:"touch"},children:M.map(({id:e,label:i,description:r,Icon:l})=>{let d=e===a,c=s(`settingsTabs.${e}`)||i,p=s(`settingsTabs.${e}Desc`)||r;return(0,n.jsxs)("button",{type:"button",role:"tab",id:`settings-tab-${e}`,"aria-selected":d,"aria-controls":`settings-panel-${e}`,"aria-label":`${c}: ${p}`,title:p,tabIndex:d?0:-1,onClick:()=>t(e),onKeyDown:t=>o(t,e),style:{display:"inline-flex",alignItems:"flex-start",gap:7,minHeight:"var(--control-touch, 44px)",padding:"6px 10px",border:d?"1px solid var(--accent)":"1px solid var(--border)",borderRadius:"var(--radius-control)",background:d?"var(--bg-selected)":"var(--bg)",color:d?"var(--text)":"var(--text-muted)",fontWeight:d?600:500,cursor:"pointer",fontSize:"var(--text-sm)",whiteSpace:"nowrap",textAlign:"left",flexShrink:0,boxSizing:"border-box",touchAction:"manipulation",transition:"all var(--dur-fast) var(--ease-out-warm)"},children:[(0,n.jsx)(l,{size:14,"aria-hidden":"true",style:{marginTop:2,flexShrink:0,color:d?"var(--accent)":"currentColor"}}),(0,n.jsxs)("span",{style:{display:"flex",flexDirection:"column",gap:1,minWidth:0},children:[(0,n.jsx)("span",{style:{fontWeight:d?600:500,fontSize:"var(--text-base)",color:d?"var(--text)":"inherit"},children:c}),(0,n.jsx)("span",{style:{fontSize:"var(--text-sm)",color:"var(--text-dim)",lineHeight:1.25,maxWidth:180,overflow:"hidden",textOverflow:"ellipsis"},children:p})]})]},e)})})}function z({active:e,onSelect:t}){let{t:i}=(0,A.s9)(),s=Math.max(0,R.findIndex(t=>t.id===e)),a=e=>{let i=null;("ArrowRight"===e.key||"ArrowDown"===e.key)&&(i=(s+1)%R.length),("ArrowLeft"===e.key||"ArrowUp"===e.key)&&(i=(s-1+R.length)%R.length),"Home"===e.key&&(i=0),"End"===e.key&&(i=R.length-1),null!==i&&(e.preventDefault(),t(R[i].id))};return(0,n.jsx)("div",{role:"tablist","aria-label":i("settingsConfig.extensionsTabsAria"),"aria-orientation":"horizontal",style:{display:"flex",gap:4,padding:4,border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-panel)",alignSelf:"flex-start",maxWidth:"100%",overflowX:"auto"},children:R.map(s=>{let o=s.id===e,r=i(`settingsConfig.extensionsTab.${s.id}`)||s.label,l=i(`settingsConfig.extensionsTab.${s.id}Desc`)||s.description;return(0,n.jsx)("button",{type:"button",role:"tab",id:`settings-extension-tab-${s.id}`,"aria-selected":o,"aria-controls":`settings-extension-panel-${s.id}`,"aria-label":`${r}: ${l}`,tabIndex:o?0:-1,onClick:()=>t(s.id),onKeyDown:a,style:{display:"inline-flex",alignItems:"center",justifyContent:"center",minHeight:"var(--control-touch, 44px)",padding:"6px 12px",border:o?"1px solid var(--accent)":"1px solid transparent",borderRadius:"calc(var(--radius-control) - var(--space-1))",background:o?"var(--bg-selected)":"transparent",color:o?"var(--text)":"var(--text-muted)",fontSize:"var(--text-sm)",fontWeight:o?600:500,cursor:"pointer",whiteSpace:"nowrap",boxSizing:"border-box",touchAction:"manipulation",transition:"all var(--dur-fast) var(--ease-out-warm)"},children:r},s.id)})})}var I=i(7834),N=i(96793),P=i(34140),O=i(90071);function L(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)}function W(e){return Object.assign({},e)}function F(e){return e.mounted&&e.requestGeneration===e.latestGeneration}let E=()=>(0,n.jsx)("div",{role:"status",style:{flex:1,display:"flex",alignItems:"center",justifyContent:"center",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:"Loading settings…"}),U=(0,o.default)(()=>i.e(7488).then(i.bind(i,47488)).then(e=>e.BuiltInToolsConfig),{loadableGenerated:{webpack:()=>[47488]},loading:E}),$=(0,o.default)(()=>Promise.all([i.e(1441),i.e(3274)]).then(i.bind(i,33274)).then(e=>e.ModelsConfig),{loadableGenerated:{webpack:()=>[33274]},loading:E}),H=(0,o.default)(()=>i.e(9981).then(i.bind(i,99981)).then(e=>e.SkillsConfig),{loadableGenerated:{webpack:()=>[99981]},loading:E}),q=(0,o.default)(()=>i.e(2201).then(i.bind(i,42201)).then(e=>e.PluginsConfig),{loadableGenerated:{webpack:()=>[42201]},loading:E}),B=(0,o.default)(()=>i.e(4473).then(i.bind(i,24473)).then(e=>e.McpConfig),{loadableGenerated:{webpack:()=>[24473]},loading:E}),V=(0,o.default)(()=>i.e(9668).then(i.bind(i,79668)).then(e=>e.AgentsConfig),{loadableGenerated:{webpack:()=>[79668]},ssr:!1}),G=["default","smol","slow","vision","plan","designer","commit","tiny","task","advisor"],K=Array.from({length:21},(e,t)=>t),_={fontSize:"var(--text-xs)",padding:"1px 6px",borderRadius:"calc(var(--radius-control) / 2)",background:"var(--bg-subtle)",color:"var(--text-muted)",fontWeight:500};function Y(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")}let J=(0,s.createContext)(null),Q=[{tab:"general",section:"Appearance",label:"Color mode",description:"Choose between light, dark, or system color mode.",scope:"UI"},{tab:"general",section:"Appearance",label:"Theme palette",description:"Select warm paper/ember or canonical OMP birch/graphite palette.",scope:"UI"},{tab:"general",section:"Interface & Behavior",label:"Keep tool calls collapsed",description:"Show only compact headers while tools execute.",scope:"UI"},{tab:"general",section:"Interface & Behavior",label:"Completion sound",description:"Play a tone when the agent completes a run.",scope:"UI"},{tab:"general",section:"Interface & Behavior",label:"Message during active run",description:"What composer does on submit while agent runs. Steer interrupts; Queue follow-up delivers after finish.",scope:"UI"},{tab:"safety",section:"Tool Safety & Approvals",label:"Approval Mode",description:"Choose when OMP asks before tool calls.",scope:"New sessions"},{tab:"safety",section:"Tool Safety & Approvals",label:"Bash Override",description:"Override default approval policy specifically for terminal commands.",scope:"New sessions"},{tab:"safety",section:"Tool Safety & Approvals",label:"Extension Tool Requests",description:"Automatically approve extension tool authorization requests.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Reasoning",description:"Default effort level for thinking-capable models.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Verbosity",description:"Response detail level for supporting providers.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Personality",description:"Style included in OMP's system prompt.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"Thinking Blocks",description:"Hide model reasoning from output view.",scope:"New sessions"},{tab:"models",section:"AI Model Defaults",label:"External Thinking",description:"Private scratchpad reasoning via think tool.",scope:"New sessions"},{tab:"intelligence",section:"Advisor Review",label:"Enable Advisor",description:"Enable Advisor for new sessions with the advisor role.",scope:"New sessions"},{tab:"intelligence",section:"Advisor Review",label:"Advisor Backlog",description:"Wait briefly when advisor falls behind.",scope:"New sessions"},{tab:"intelligence",section:"Advisor Review",label:"Review Subagents",description:"Apply Advisor passive review to subagent tasks.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Automatic Compaction",description:"Compact context before model context limit is hit.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Continue After Compaction",description:"Resume task execution after compaction completes.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Maintenance Strategy",description:"Select algorithm used to reduce context pressure.",scope:"New sessions"},{tab:"intelligence",section:"Context Compaction",label:"Compact Mid-Turn",description:"Check context limits between tool execution steps.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Memory Backend",description:"Where durable knowledge is stored across sessions.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Enable Auto-Learn",description:"Capture reusable lessons after completed runs.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Private Capture Turn",description:"Run private lesson-capture turn at completion.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Memory Scope",description:"Scoping for Mnemopi knowledge storage.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Recall on Session Start",description:"Load relevant memories into first turn.",scope:"New sessions"},{tab:"intelligence",section:"Memory & Auto-Learn",label:"Retain Completed Turns",description:"Store completed conversation turns in memory.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Automatic Retry",description:"Retry failed turns automatically.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Max Attempts",description:"Retry limit before giving up.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Model Fallback",description:"Fall back to alternative model when retries exhaust.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Return to primary",description:"Choose when OMP should leave a fallback model after its cooldown.",scope:"New sessions"},{tab:"intelligence",section:"Automatic Retry",label:"Fallback chain",description:"Choose ordered fallback models for each native model role.",scope:"New sessions"},{tab:"mcp",section:"Extensions & Tools",label:"Load Project MCP Servers",description:"Allow project-root MCP configuration to be discovered.",scope:"New sessions"},{tab:"mcp",section:"Extensions & Tools",label:"Render MCP Markdown",description:"Render non-JSON MCP results as Markdown in transcript.",scope:"New sessions"},{tab:"mcp",section:"Extensions & Tools",label:"MCP Resource Updates",description:"Inject server resource updates into conversation.",scope:"New sessions"},{tab:"system",section:"System & Updates",label:"Active session system prompt",description:"Inspect the system prompt used by the active session.",labelKey:"settingsConfig.sessionSystemPrompt",descriptionKey:"settingsConfig.sessionSystemPromptDescription",sectionKey:"settingsConfig.systemUpdates"}];function X({results:e,query:t,onSelect:i}){return(0,n.jsxs)("div",{style:{flex:1,minHeight:0,overflowY:"auto",background:"var(--bg)",padding:16,display:"flex",flexDirection:"column",gap:10},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-base)",color:"var(--text-muted)"},children:0===e.length?`No settings match “${t}”.`:`${e.length} result${1===e.length?"":"s"} for “${t}”.`}),e.map(e=>(0,n.jsxs)("button",{type:"button",onClick:()=>i(e),style:{textAlign:"left",display:"flex",flexDirection:"column",gap:4,padding:"10px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",color:"var(--text)",cursor:"pointer",transition:"border-color var(--dur-fast) var(--ease-out-warm), background var(--dur-fast) var(--ease-out-warm)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("span",{style:{fontSize:"var(--text-base)",fontWeight:600},children:e.label}),"category"===e.kind&&(0,n.jsx)("span",{style:_,children:"Section"}),e.scope&&(0,n.jsx)("span",{style:_,children:e.scope})]}),(0,n.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)",lineHeight:1.45},children:e.description}),e.section&&(0,n.jsx)("div",{style:{fontSize:"var(--text-xs)",color:"var(--text-dim)"},children:e.section})]},e.id))]})}function Z({label:e,description:t,scope:i,compact:a=!1,hideDescription:o=!1,children:r}){let{t:l}=(0,A.s9)(),d=(0,s.useRef)(null),c=(0,s.useContext)(J),p=null!==c&&c===Y(e);return(0,s.useEffect)(()=>{p&&d.current&&d.current.scrollIntoView({behavior:"smooth",block:"center"})},[p]),(0,n.jsxs)("div",{ref:d,"data-search-id":Y(e),style:{minWidth:0,padding:a?"8px 10px":"12px 14px",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:a?4:8,transition:"box-shadow var(--dur-fast) var(--ease-out-warm), border-color var(--dur-fast) var(--ease-out-warm)",...p?{borderColor:"var(--accent)",boxShadow:"0 0 0 2px var(--accent)"}:{}},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:10,flexWrap:"wrap"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("span",{style:{fontSize:"var(--text-base)",fontWeight:600,color:"var(--text)"},children:e}),i&&(0,n.jsx)("span",{style:_,children:"New sessions"===i?l("settingsConfig.newSessions"):i})]}),(0,n.jsx)("span",{style:{flexShrink:0},children:r})]}),!o&&(0,n.jsx)("span",{style:{color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:a?1.3:1.45},children:t})]})}function ee({activeTab:e,advisorEnabled:t,onAdvisorChange:i,toolCallsDefaultCollapsed:o,onToolCallsDefaultCollapsedChange:b,cwd:y,sessionId:C,systemPrompt:k,systemPromptLoading:w,onLoadSystemPrompt:j,onModelsSaved:S,onPluginsReloaded:R,onOmpSessionsRestarted:E,onOmpUpdateAvailabilityChange:et,onAppUpdateAvailabilityChange:ei,onSelectTab:en,onClose:es,runtimeReady:ea}){let{t:eo}=(0,A.s9)(),er=(0,h.a)(),[el,ed]=(0,s.useState)(D(e)),[ec,ep]=(0,s.useState)(()=>"mcp"===e||"skills"===e||"plugins"===e?e:"tools"),[eg,eu]=(0,s.useState)(()=>new Set([D(e)])),[ef,eb]=(0,s.useState)(!1),[ex,eh]=(0,s.useState)(null),[em,ev]=(0,s.useState)(!1),[ey,eC]=(0,s.useState)(0),[ek,ew]=(0,s.useState)(null),[ej,eS]=(0,s.useState)(!1),[eA,eM]=(0,s.useState)(null),[eR,eD]=(0,s.useState)(!1),[eT,ez]=(0,s.useState)(!1),[eI,eN]=(0,s.useState)(null),[eP,eO]=(0,s.useState)(!1),eL=(0,s.useRef)(0),eW=(0,s.useRef)(0),eF=(0,s.useRef)(!1),eE=(0,s.useRef)(!1),[eU,e$]=(0,s.useState)(null),[eH,eq]=(0,s.useState)(!1),[eB,eV]=(0,s.useState)("steer"),[eG,eK]=(0,s.useState)(""),[e_,eY]=(0,s.useState)(null),[eJ,eQ]=(0,s.useState)([]),[eX,eZ]=(0,s.useState)("default"),[e0,e1]=(0,s.useState)(""),{preference:e2,setTheme:e4,palette:e6,setPalette:e5}=(0,N.DP)(),e9=(0,s.useRef)({}),e8=(0,s.useRef)(0),e7=(0,s.useRef)(!0),e3=(0,s.useRef)(Promise.resolve()),te=(0,s.useRef)(null),tt=(0,s.useCallback)(async()=>{let e=e8.current;try{let t=await fetch("/api/omp-settings");if(!t.ok)return;let i=await t.json();if(!F({mounted:e7.current,requestGeneration:e,latestGeneration:e8.current}))return;let n=i.settings??{};e9.current=n,e$(n)}catch{}},[]);(0,s.useEffect)(()=>(e7.current=!0,()=>{e7.current=!1,te.current&&(clearTimeout(te.current),te.current=null)}),[]),(0,s.useEffect)(()=>{tt()},[tt]),(0,s.useEffect)(()=>{eq((0,P.NN)()),eV((0,a.vz)())},[]),(0,s.useEffect)(()=>{let e=!1;return(async()=>{try{let t=await (0,O.aQ)();if(e)return;let i=t.modelList.map(e=>({id:e.id,provider:e.provider,name:e.name}));eQ(i)}catch{}})(),()=>{e=!0}},[]);let ti=(0,s.useCallback)(async e=>{let t=function(e,t){let i=W(e);for(let[e,n]of Object.entries(t))if(void 0!==n)if(L(n)){let t=i[e],s=L(t)?W(t):{},a={...s,...n};if("tools"===e&&L(n.approval)){let e=L(s.approval)?s.approval:{};a.approval=0===Object.keys(n.approval).length?{}:{...e,...n.approval}}i[e]=a}else i[e]=n;return i}(e9.current,e);e9.current=t,e$(t);let i=++e8.current,n=!1;return e3.current=e3.current.then(async()=>{if(e7.current)try{let e=await fetch("/api/omp-settings",{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e9.current})});if(!e.ok)return;let t=await e.json();if(n=!0,!F({mounted:e7.current,requestGeneration:i,latestGeneration:e8.current}))return;t.settings&&(e9.current=t.settings,e$(t.settings)),t.application?.restartRequired&&eN(eo("settingsConfig.restartPrompt"))}catch{n=!1}}),await e3.current,n},[eo]),tn=(0,s.useCallback)((e,t)=>ti({[e]:t}),[ti]),ts=(0,s.useCallback)(e=>ti({tools:{approval:e}}),[ti]),ta=(0,s.useMemo)(()=>eU?.retry??{},[eU?.retry]),to=(0,s.useMemo)(()=>ta.fallbackChains??{},[ta.fallbackChains]),tr=(0,s.useMemo)(()=>to[eX]??[],[to,eX]),tl=(0,s.useMemo)(()=>{let e=new Set;for(let t of eJ)t.id&&e.add(t.id),t.provider&&t.id&&e.add(`${t.provider}/${t.id}`);return Array.from(e).sort((e,t)=>e.localeCompare(t))},[eJ]),td=(0,s.useCallback)(e=>{let t={...e9.current.retry?.fallbackChains??{}};return 0===e.length?delete t[eX]:t[eX]=e,tn("retry",{fallbackChains:t})},[eX,tn]),tc=(0,s.useCallback)(e=>{if(ef){eh(()=>e),ev(!0);return}e()},[ef]),tp=(0,s.useCallback)(()=>{tc(()=>{es()})},[es,tc]),tg=(0,s.useCallback)(e=>{"tools"===e||"mcp"===e||"skills"===e||"plugins"===e?tc(()=>{ed("extensions"),ep(e),eu(e=>new Set([...e,"extensions"])),en(e)}):tc(()=>{let t=D(e);ed(t),eu(e=>new Set([...e,t])),en(t)})},[en,tc]),tu=(0,s.useCallback)(()=>{eb(!1),eC(e=>e+1),ev(!1),eh(null),ex&&ex()},[ex]);(0,s.useEffect)(()=>{let t=D(e);ed(t),("tools"===e||"mcp"===e||"skills"===e||"plugins"===e)&&ep(e),eu(e=>new Set([...e,t]))},[e]);let tf=(0,s.useCallback)(async(e=!1)=>{if(!e&&eF.current)return;let t=++eL.current;eF.current=!0,eS(!0),e&&eN(null);try{let e=await fetch("/api/omp-update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"check"})});if(!e.ok)throw Error("Failed to check OMP updates");let i=await e.json();if(t!==eL.current||!e7.current)return;ew(i),et&&"boolean"==typeof i.updateAvailable&&et(i.updateAvailable),i.updateAvailable||eN(eo("settingsConfig.upToDate",{version:i.currentVersion??"current"}))}catch{if(t!==eL.current||!e7.current)return;eN(eo("settingsConfig.updateCheckFailed"))}finally{t===eL.current&&(eF.current=!1,e7.current&&eS(!1))}},[et,eo]),tb=(0,s.useCallback)(async(e=!1)=>{if(!e&&eE.current)return;let t=++eW.current;eE.current=!0,eD(!0),e&&(eN(null),eO(!1));try{let i=await fetch(e?"/api/app-update?force=1":"/api/app-update");if(!i.ok)throw Error("Failed to check ompgui updates");let n=await i.json();if(t!==eW.current||!e7.current)return;if(eM(n),n.lookupFailed){e&&(eO(!0),eN(eo("settingsConfig.appUpdateCheckFailed")));return}ei&&"boolean"==typeof n.updateAvailable&&ei(n.updateAvailable),eO(!1),e&&(n.updateAvailable?eN(null):eN(eo("settingsConfig.upToDate",{version:n.currentVersion??"current"})))}catch{if(t!==eW.current||!e7.current)return;e&&(eO(!0),eN(eo("settingsConfig.appUpdateCheckFailed")))}finally{t===eW.current&&(eE.current=!1,e7.current&&eD(!1))}},[ei,eo]);(0,s.useEffect)(()=>{"system"===el&&(tf(),tb(!1))},[el,tf,tb]);let tx=(0,s.useCallback)(async()=>{ez(!0),eN(null);try{if(!(await fetch("/api/omp-update",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({action:"restart"})})).ok)throw Error("Failed to restart sessions");eN(eo("settingsConfig.sessionsRestarted")),E()}catch{eN(eo("settingsConfig.restartFailed"))}finally{ez(!1)}},[E,eo]),th=(0,s.useMemo)(()=>{let e=eG.trim().toLowerCase();if(!e)return[];let t=[];for(let i of M){let n=eo(`settingsTabs.${i.id}`)||i.label,s=eo(`settingsTabs.${i.id}Desc`)||i.description;(n.toLowerCase().includes(e)||s.toLowerCase().includes(e)||i.id.toLowerCase().includes(e))&&t.push({id:`cat-${i.id}`,kind:"category",tab:i.id,label:n,description:s})}for(let i of Q){let n=(i.labelKey?eo(i.labelKey):null)||i.label,s=(i.descriptionKey?eo(i.descriptionKey):null)||i.description,a=(i.sectionKey?eo(i.sectionKey):null)||i.section;(n.toLowerCase().includes(e)||s.toLowerCase().includes(e)||a.toLowerCase().includes(e))&&t.push({id:`setting-${i.tab}-${Y(i.label)}`,kind:"setting",tab:i.tab,label:n,description:s,scope:i.scope,section:a})}return t},[eG,eo]),tm=(0,s.useCallback)(e=>{eK(""),tg(e.tab),"setting"===e.kind&&(eY(Y(e.label)),te.current&&clearTimeout(te.current),te.current=setTimeout(()=>{te.current=null,eY(null)},2500))},[tg]);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(m.lG,{open:!0,onOpenChange:e=>{e||tp()},children:(0,n.jsxs)(m.Cf,{ariaLabel:eo("settingsConfig.title"),style:{width:860,maxWidth:"96vw",height:er?"92dvh":"80vh",maxHeight:"92dvh",display:"flex",flexDirection:"column",overflow:"hidden",padding:0,borderRadius:"var(--radius-modal)",boxShadow:"var(--shadow-modal)",background:"var(--bg)"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:er?"12px 14px":"16px 20px",borderBottom:"1px solid var(--border)",background:"var(--bg-panel)",gap:12},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[(0,n.jsx)(m.L3,{style:{margin:0,fontSize:"var(--text-lg)",fontWeight:650,whiteSpace:"nowrap"},children:eo("settingsConfig.title")}),ef&&(0,n.jsx)("span",{style:{fontSize:"var(--text-xs)",padding:"2px 6px",borderRadius:"calc(var(--radius-control) / 2)",background:"var(--status-warning-bg)",color:"var(--status-warning)",border:"1px solid var(--status-warning-border)"},children:eo("settingsConfig.unsavedChanges")})]}),(0,n.jsxs)("div",{style:{position:"relative",flex:1,maxWidth:280,minWidth:120},children:[(0,n.jsx)(r.A,{size:13,"aria-hidden":"true",style:{position:"absolute",left:9,top:"50%",transform:"translateY(-50%)",color:"var(--text-dim)",pointerEvents:"none"}}),(0,n.jsx)("input",{type:"search",value:eG,onChange:e=>eK(e.target.value),placeholder:eo("settingsConfig.searchPlaceholder"),"aria-label":eo("settingsConfig.searchPlaceholder"),style:{width:"100%",height:28,padding:"0 8px 0 28px",borderRadius:"var(--radius-control)",border:"1px solid var(--border)",background:"var(--bg)",color:"var(--text)",fontSize:"var(--text-sm)",outline:"none",boxSizing:"border-box"}})]})]}),(0,n.jsx)("div",{style:{display:"flex",flex:1,minHeight:0,flexDirection:er?"column":"row"},children:eG.trim()?(0,n.jsx)(X,{results:th,query:eG.trim(),onSelect:tm}):(0,n.jsxs)(J.Provider,{value:e_,children:[(0,n.jsx)(T,{active:el,onSelect:tg,layout:er?"horizontal":"vertical"}),(0,n.jsxs)("div",{style:{flex:1,minWidth:0,overflowY:"auto",display:"flex",flexDirection:"column"},children:["general"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-general","aria-labelledby":"settings-tab-general",style:{padding:er?"12px 14px":20,display:"flex",flexDirection:"column",gap:16},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:eo("settingsConfig.generalTitle")}),(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsConfig.generalDescription")})]}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.themeMode"),description:eo("settingsConfig.themeModeDesc"),scope:"UI",children:(0,n.jsx)("div",{style:{display:"inline-flex",padding:2,background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",gap:2},children:["system","light","dark"].map(e=>{let t=e2===e,i="system"===e?l.A:"light"===e?d.A:c.A,s="system"===e?eo("settingsConfig.themeModeSystem"):"light"===e?eo("settingsConfig.themeModeLight"):eo("settingsConfig.themeModeDark");return(0,n.jsxs)("button",{type:"button","aria-label":s,"aria-pressed":t,onClick:()=>e4(e),title:s,className:"ui-focus-ring",style:{display:"inline-flex",alignItems:"center",gap:4,height:24,padding:"0 8px",border:"none",borderRadius:"calc(var(--radius-control) - var(--space-1))",background:t?"var(--bg-selected)":"transparent",color:t?"var(--text)":"var(--text-muted)",fontWeight:t?600:500,fontSize:"var(--text-sm)",cursor:"pointer",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)"},children:[(0,n.jsx)(i,{size:12,"aria-hidden":"true"}),(0,n.jsx)("span",{children:s})]},e)})})}),(0,n.jsx)(Z,{label:eo("settingsConfig.themePalette"),description:eo("settingsConfig.themePaletteDesc"),scope:"UI",children:(0,n.jsx)("div",{style:{display:"inline-flex",padding:2,background:"var(--bg)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",gap:2},children:["warm","omp"].map(e=>{let t=e6===e,i="warm"===e?eo("settingsConfig.paletteWarm"):eo("settingsConfig.paletteOmp");return(0,n.jsxs)("button",{type:"button","aria-label":i,"aria-pressed":t,onClick:()=>e5(e),title:i,className:"ui-focus-ring",style:{display:"inline-flex",alignItems:"center",gap:5,height:24,padding:"0 8px",border:"none",borderRadius:"calc(var(--radius-control) - var(--space-1))",background:t?"var(--bg-selected)":"transparent",color:t?"var(--text)":"var(--text-muted)",fontWeight:t?600:500,fontSize:"var(--text-sm)",cursor:"pointer",transition:"background var(--dur-fast) var(--ease-out-warm), color var(--dur-fast) var(--ease-out-warm)"},children:[(0,n.jsxs)("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",gap:2.5,padding:"2px 3px",borderRadius:"calc(var(--radius-control) / 2)",background:"var(--bg-subtle)",flexShrink:0},children:[(0,n.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:`var(--palette-${e}-preview-bg)`,border:"1px solid var(--border)",flexShrink:0}}),(0,n.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:`var(--palette-${e}-preview-panel)`,border:"1px solid var(--border)",flexShrink:0}}),(0,n.jsx)("span",{style:{width:6,height:6,borderRadius:"50%",background:`var(--palette-${e}-preview-accent)`,flexShrink:0}})]}),(0,n.jsx)("span",{children:i})]},e)})})})]}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.toolCallsCollapsed"),description:eo("settingsConfig.toolCallsCollapsedDesc"),scope:"UI",children:(0,n.jsx)(v.dO,{checked:o,onChange:e=>b(e),"aria-label":eo("settingsConfig.toolCallsCollapsed")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.completionSound"),description:eo("settingsConfig.completionSoundDesc"),scope:"UI",children:(0,n.jsx)(v.dO,{checked:eH,onChange:e=>{eq(e),(0,P.RJ)(e),window.dispatchEvent(new CustomEvent("omp-sound-pref-change",{detail:e}))},"aria-label":eo("settingsConfig.completionSound")})})]}),(0,n.jsx)(Z,{label:eo("settingsConfig.submitBehavior"),description:eo("settingsConfig.submitBehaviorDesc"),scope:"UI",children:(0,n.jsx)(v.l6,{value:eB,onChange:e=>{(0,a.t_)(e),eV(e)},required:!0,options:[{value:"steer",label:eo("settingsConfig.steerCurrent")},{value:"queue",label:eo("settingsConfig.queueFollowUp")}],"aria-label":eo("settingsConfig.submitBehavior")})})]}),"agents"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-agents","aria-labelledby":"settings-tab-agents",style:{padding:er?"12px 14px":20,display:"flex",flexDirection:"column",gap:16,minHeight:0},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.preferTaskDelegation"),description:eo("settingsConfig.preferTaskDelegationDesc"),scope:"New sessions",compact:!0,hideDescription:er,children:(0,n.jsx)(v.l6,{value:eU?.task?.eager??"default",onChange:e=>tn("task",{eager:e}),required:!0,options:[{value:"default",label:eo("settingsConfig.delegationDefault")},{value:"preferred",label:eo("settingsConfig.delegationPreferred")},{value:"always",label:eo("settingsConfig.delegationAlways")}],"aria-label":eo("settingsConfig.preferTaskDelegation")})}),(0,n.jsx)(V,{cwd:y??void 0,onSaved:S})]}),"safety"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-safety","aria-labelledby":"settings-tab-safety",style:{padding:er?"12px 14px":20,display:"flex",flexDirection:"column",gap:16},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:eo("settingsConfig.safetyTitle")}),(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsConfig.safetyDescription")})]}),(0,n.jsx)(Z,{label:eo("settingsConfig.approvalMode"),description:eo("settingsConfig.approvalModeDesc"),scope:"New sessions",compact:!0,hideDescription:er,children:(0,n.jsx)(v.l6,{value:eU?.tools?.approvalMode??"yolo",onChange:e=>tn("tools",{approvalMode:e}),required:!0,options:[{value:"always-ask",label:eo("settingsConfig.approvalAlwaysAsk")},{value:"write",label:eo("settingsConfig.approvalWrite")},{value:"yolo",label:eo("settingsConfig.approvalYolo")}],"aria-label":eo("settingsConfig.approvalMode")})}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.bashApproval"),description:eo("settingsConfig.bashApprovalDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.tools?.approval?.bash??"prompt",onChange:e=>ts({bash:e}),required:!0,options:[{value:"allow",label:eo("settingsConfig.allow")},{value:"prompt",label:eo("settingsConfig.alwaysAsk")},{value:"deny",label:eo("settingsConfig.deny")}],"aria-label":eo("settingsConfig.bashApproval")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.extensionApproval"),description:eo("settingsConfig.extensionApprovalDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.tools?.approval?.extension??"prompt",onChange:e=>ts({extension:e}),required:!0,options:[{value:"prompt",label:eo("settingsConfig.askEveryTime")},{value:"allow",label:eo("settingsConfig.autoApprove")}],"aria-label":eo("settingsConfig.extensionApproval")})})]})]}),"models"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-models","aria-labelledby":"settings-tab-models",style:{padding:20,display:"flex",flexDirection:"column",gap:16},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:eo("settingsConfig.modelsTitle")}),(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsConfig.modelsDescription")})]}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.reasoning"),description:eo("settingsConfig.reasoningDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.defaultThinkingLevel??"high",onChange:e=>ti({defaultThinkingLevel:e}),required:!0,options:["auto","minimal","low","medium","high","xhigh","max"],"aria-label":eo("settingsConfig.reasoning")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.verbosity"),description:eo("settingsConfig.verbosityDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.textVerbosity??"medium",onChange:e=>ti({textVerbosity:e}),required:!0,options:["low","medium","high"],"aria-label":eo("settingsConfig.verbosity")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.personality"),description:eo("settingsConfig.personalityDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.personality??"default",onChange:e=>ti({personality:e}),required:!0,options:["default","friendly","pragmatic","none"],"aria-label":eo("settingsConfig.personality")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.hideThinking"),description:eo("settingsConfig.hideThinkingDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.hideThinkingBlock??!1,onChange:e=>ti({hideThinkingBlock:e}),"aria-label":eo("settingsConfig.hideThinking")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.externalThinking"),description:eo("settingsConfig.externalThinkingDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.externalThinking??!1,onChange:e=>ti({externalThinking:e}),"aria-label":eo("settingsConfig.externalThinking")})})]})]}),(eg.has("providers")||eg.has("models"))&&(0,n.jsx)("div",{role:"tabpanel",id:"settings-panel-providers","aria-labelledby":"settings-tab-providers",style:{display:"providers"===el?"flex":"none",height:"100%",minHeight:0,flexDirection:"column"},children:(0,n.jsx)($,{onSaved:()=>{eb(!1),S()},onDirtyChange:eb},ey)}),"intelligence"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-intelligence","aria-labelledby":"settings-tab-intelligence",style:{padding:20,display:"flex",flexDirection:"column",gap:18},children:[(0,n.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:6,fontSize:"var(--text-md)",fontWeight:600},children:[(0,n.jsx)(p.A,{size:14,"aria-hidden":"true",style:{color:"var(--accent)"}})," ",eo("settingsConfig.advisorReview")]}),(0,n.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.advisorReviewDesc")}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.enableAdvisor"),description:eo("settingsConfig.enableAdvisorDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.advisor?.enabled??t,onChange:e=>{i(e),tn("advisor",{enabled:e})},"aria-label":eo("settingsConfig.enableAdvisor")})}),(eU?.advisor?.enabled??t)&&(0,n.jsx)(Z,{label:eo("settingsConfig.advisorBacklog"),description:eo("settingsConfig.advisorBacklogDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.advisor?.syncBacklog??"off",onChange:e=>tn("advisor",{syncBacklog:e}),required:!0,options:[{value:"off",label:eo("settingsConfig.backlogOff")},{value:"1",label:eo("settingsConfig.backlog1")},{value:"3",label:eo("settingsConfig.backlog3")},{value:"5",label:eo("settingsConfig.backlog5")}],"aria-label":eo("settingsConfig.advisorBacklog")})})]}),(eU?.advisor?.enabled??t)&&(0,n.jsx)(Z,{label:eo("settingsConfig.reviewSubagents"),description:eo("settingsConfig.reviewSubagentsDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.advisor?.subagents??!1,onChange:e=>tn("advisor",{subagents:e}),"aria-label":eo("settingsConfig.reviewSubagents")})})]}),(0,n.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10,borderTop:"1px solid var(--border)",paddingTop:16},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:eo("settingsConfig.contextCompaction")}),(0,n.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.contextCompactionDesc")}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.autoCompaction"),description:eo("settingsConfig.autoCompactionDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.compaction?.enabled??!0,onChange:e=>tn("compaction",{enabled:e}),"aria-label":eo("settingsConfig.autoCompaction")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.autoContinueCompaction"),description:eo("settingsConfig.autoContinueCompactionDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.compaction?.autoContinue??!0,onChange:e=>tn("compaction",{autoContinue:e}),"aria-label":eo("settingsConfig.autoContinueCompaction")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.compactionStrategy"),description:eo("settingsConfig.compactionStrategyDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.compaction?.strategy??"snapcompact",onChange:e=>tn("compaction",{strategy:e}),required:!0,options:[{value:"snapcompact",label:"Snapcompact"},{value:"handoff",label:"Handoff"},{value:"context-full",label:"Context full"},{value:"shake",label:"Shake"},{value:"off",label:"Off"}],"aria-label":eo("settingsConfig.compactionStrategy")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.compactMidTurn"),description:eo("settingsConfig.compactMidTurnDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.compaction?.midTurnEnabled??!0,onChange:e=>tn("compaction",{midTurnEnabled:e}),"aria-label":eo("settingsConfig.compactMidTurn")})})]})]}),(0,n.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10,borderTop:"1px solid var(--border)",paddingTop:16},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:eo("settingsConfig.memoryAndAutoLearn")}),(0,n.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.memoryAndAutoLearnDesc")}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.memoryBackend"),description:eo("settingsConfig.memoryBackendDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.memory?.backend??"mnemopi",onChange:e=>tn("memory",{backend:e}),required:!0,options:[{value:"off",label:eo("settingsConfig.backlogOff")},{value:"local",label:eo("settingsConfig.memoryLocal")},{value:"mnemopi",label:eo("settingsConfig.memoryMnemopi")},{value:"hindsight",label:eo("settingsConfig.memoryHindsight")}],"aria-label":eo("settingsConfig.memoryBackend")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.enableAutolearn"),description:eo("settingsConfig.enableAutolearnDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.autolearn?.enabled??!0,onChange:e=>tn("autolearn",{enabled:e}),"aria-label":eo("settingsConfig.enableAutolearn")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.privateCaptureTurn"),description:eo("settingsConfig.privateCaptureTurnDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.autolearn?.autoContinue??!0,onChange:e=>tn("autolearn",{autoContinue:e}),"aria-label":eo("settingsConfig.privateCaptureTurn")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.memoryScope"),description:eo("settingsConfig.memoryScopeDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:eU?.mnemopi?.scoping??"per-project",onChange:e=>tn("mnemopi",{scoping:e}),required:!0,options:[{value:"per-project",label:eo("settingsConfig.scopePerProject")},{value:"per-project-tagged",label:eo("settingsConfig.scopePerProjectTagged")},{value:"global",label:eo("settingsConfig.scopeGlobal")}],"aria-label":eo("settingsConfig.memoryScope")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.autoRecall"),description:eo("settingsConfig.autoRecallDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.mnemopi?.autoRecall??!0,onChange:e=>tn("mnemopi",{autoRecall:e}),"aria-label":eo("settingsConfig.autoRecall")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.autoRetain"),description:eo("settingsConfig.autoRetainDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.mnemopi?.autoRetain??!0,onChange:e=>tn("mnemopi",{autoRetain:e}),"aria-label":eo("settingsConfig.autoRetain")})})]})]}),(0,n.jsxs)("section",{style:{display:"flex",flexDirection:"column",gap:10,borderTop:"1px solid var(--border)",paddingTop:16},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:eo("settingsConfig.autoRetry")}),(0,n.jsx)("p",{style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.autoRetryDesc")}),(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.enableRetry"),description:eo("settingsConfig.enableRetryDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:ta.enabled??!0,onChange:e=>tn("retry",{enabled:e}),"aria-label":eo("settingsConfig.enableRetry")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.maxAttempts"),description:eo("settingsConfig.maxAttemptsDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:String(ta.maxRetries??10),onChange:e=>tn("retry",{maxRetries:Number(e)}),required:!0,options:K.map(String),"aria-label":eo("settingsConfig.maxAttempts")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.modelFallback"),description:eo("settingsConfig.modelFallbackDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:ta.modelFallback??!0,onChange:e=>tn("retry",{modelFallback:e}),"aria-label":eo("settingsConfig.modelFallback")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.fallbackRevertPolicy"),description:eo("settingsConfig.fallbackRevertPolicyDesc"),scope:"New sessions",children:(0,n.jsx)(v.l6,{value:ta.fallbackRevertPolicy??"cooldown-expiry",onChange:e=>tn("retry",{fallbackRevertPolicy:e}),required:!0,options:[{value:"cooldown-expiry",label:eo("settingsConfig.fallbackRevertCooldown")},{value:"never",label:eo("settingsConfig.fallbackRevertNever")}],"aria-label":eo("settingsConfig.fallbackRevertPolicy")})})]}),(0,n.jsxs)("section",{"data-search-id":Y("Fallback chain"),style:{display:"flex",flexDirection:"column",gap:10,marginTop:4,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",overflow:"hidden"},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap",padding:"10px 12px",background:"var(--bg-panel)",borderBottom:"1px solid var(--border)"},children:[(0,n.jsxs)("span",{style:{display:"inline-flex",alignItems:"center",gap:8,color:"var(--text)",fontSize:"var(--text-base)",fontWeight:600},children:[eo("settingsConfig.fallbackChainFor"),(0,n.jsx)("span",{style:_,children:eo("settingsConfig.newSessions")})]}),(0,n.jsx)(v.l6,{"aria-label":eo("settingsConfig.fallbackChainRole"),value:eX,onChange:e=>{eZ(e),e1("")},required:!0,options:G,style:{width:"auto",minWidth:120}})]}),(0,n.jsxs)("div",{style:{display:"flex",gap:8,padding:"10px 12px"},children:[(0,n.jsx)(v.l6,{"aria-label":eo("settingsConfig.selectFallbackModel"),value:e0,onChange:e=>e1(e),placeholder:eo("settingsConfig.selectFallbackModel"),options:tl.filter(e=>!tr.includes(e)),style:{flex:1,minWidth:0}}),(0,n.jsx)("button",{type:"button",disabled:!e0,onClick:()=>{td([...tr,e0]),e1("")},style:{padding:"6px 10px",border:"none",borderRadius:"var(--radius-control)",background:"var(--accent)",color:"var(--on-accent)",cursor:e0?"pointer":"not-allowed",opacity:e0?1:.5,fontSize:"var(--text-sm)",whiteSpace:"nowrap"},children:eo("settingsConfig.addFallback")})]}),0===tr.length?(0,n.jsx)("div",{style:{padding:"0 12px 12px",color:"var(--text-dim)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.noFallbackChain")}):(0,n.jsx)("div",{style:{borderTop:"1px solid var(--border)"},children:tr.map((e,t)=>(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8,padding:"7px 12px",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:[(0,n.jsx)("span",{style:{width:18,color:"var(--text-dim)",fontFamily:"var(--font-mono)"},children:t+1}),(0,n.jsx)("code",{style:{flex:1},children:e}),(0,n.jsx)("button",{type:"button","aria-label":eo("settingsConfig.moveFallbackUp",{model:e}),title:eo("settingsConfig.moveFallbackUp",{model:e}),disabled:0===t,onClick:()=>{let e=[...tr],i=e[t-1];e[t-1]=e[t],e[t]=i,td(e)},className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:"calc(var(--radius-control) / 2)",background:"transparent",color:"var(--text-muted)",cursor:0===t?"default":"pointer"},children:(0,n.jsx)("span",{"aria-hidden":"true",children:"↑"})}),(0,n.jsx)("button",{type:"button","aria-label":eo("settingsConfig.moveFallbackDown",{model:e}),title:eo("settingsConfig.moveFallbackDown",{model:e}),disabled:t===tr.length-1,onClick:()=>{let e=[...tr],i=e[t+1];e[t+1]=e[t],e[t]=i,td(e)},className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:"calc(var(--radius-control) / 2)",background:"transparent",color:"var(--text-muted)",cursor:t===tr.length-1?"default":"pointer"},children:(0,n.jsx)("span",{"aria-hidden":"true",children:"↓"})}),(0,n.jsx)("button",{type:"button","aria-label":eo("settingsConfig.removeFallback",{model:e}),title:eo("settingsConfig.removeFallback",{model:e}),onClick:()=>td(tr.filter((e,i)=>i!==t)),className:"ui-focus-ring",style:{width:24,height:24,padding:0,display:"inline-flex",alignItems:"center",justifyContent:"center",border:"none",borderRadius:"calc(var(--radius-control) / 2)",background:"transparent",color:"var(--text-muted)",cursor:"pointer"},children:(0,n.jsx)("span",{"aria-hidden":"true",children:"\xd7"})})]},`${e}-${t}`))})]})]})]}),"extensions"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-extensions","aria-labelledby":"settings-tab-extensions",style:{display:"flex",height:"100%",minHeight:0,flexDirection:"column",overflowY:"hidden",padding:20,gap:16},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:eo("settingsTabs.extensions")}),(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsTabs.extensionsDesc")})]}),(0,n.jsx)(z,{active:ec,onSelect:tg}),"tools"===ec&&(0,n.jsx)("div",{role:"tabpanel",id:"settings-extension-panel-tools","aria-labelledby":"settings-extension-tab-tools",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto"},children:(0,n.jsx)(U,{settings:eU,onPatch:ti})}),"mcp"===ec&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-extension-panel-mcp","aria-labelledby":"settings-extension-tab-mcp",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto",gap:12},children:[(0,n.jsxs)("div",{style:{display:"grid",gridTemplateColumns:er?"1fr":"repeat(2, minmax(0, 1fr))",gap:10},children:[(0,n.jsx)(Z,{label:eo("settingsConfig.loadProjectMcp"),description:eo("settingsConfig.loadProjectMcpDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.mcp?.enableProjectConfig??!0,onChange:e=>tn("mcp",{enableProjectConfig:e}),"aria-label":eo("settingsConfig.loadProjectMcp")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.renderMcpMarkdown"),description:eo("settingsConfig.renderMcpMarkdownDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.mcp?.renderMarkdownResults??!0,onChange:e=>tn("mcp",{renderMarkdownResults:e}),"aria-label":eo("settingsConfig.renderMcpMarkdown")})}),(0,n.jsx)(Z,{label:eo("settingsConfig.mcpResourceUpdates"),description:eo("settingsConfig.mcpResourceUpdatesDesc"),scope:"New sessions",children:(0,n.jsx)(v.dO,{checked:eU?.mcp?.notifications??!1,onChange:e=>tn("mcp",{notifications:e}),"aria-label":eo("settingsConfig.mcpResourceUpdates")})})]}),(0,n.jsx)(B,{cwd:y??null,sessionId:C??void 0}),!y&&(0,n.jsx)("p",{role:"status",style:{margin:0,color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.noWorkspaceMcpHint")})]}),"skills"===ec&&(0,n.jsx)("div",{role:"tabpanel",id:"settings-extension-panel-skills","aria-labelledby":"settings-extension-tab-skills",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto"},children:y?(0,n.jsx)(H,{cwd:y}):(0,n.jsx)("div",{role:"status",style:{padding:16,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.workspaceRequired")})}),"plugins"===ec&&(0,n.jsx)("div",{role:"tabpanel",id:"settings-extension-panel-plugins","aria-labelledby":"settings-extension-tab-plugins",style:{display:"flex",flex:1,minHeight:0,flexDirection:"column",overflowY:"auto"},children:y?(0,n.jsx)(q,{cwd:y,sessionId:C??null,onReloaded:R,runtimeReady:ea}):(0,n.jsx)("div",{role:"status",style:{padding:16,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",color:"var(--text-muted)",fontSize:"var(--text-sm)"},children:eo("settingsConfig.workspaceRequired")})})]}),"system"===el&&(0,n.jsxs)("div",{role:"tabpanel",id:"settings-panel-system","aria-labelledby":"settings-tab-system",style:{padding:20,display:"flex",flexDirection:"column",gap:18},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("h3",{style:{fontSize:"var(--text-base)",fontWeight:600,margin:0},children:eo("settingsConfig.systemUpdates")}),(0,n.jsx)("p",{style:{margin:"4px 0 0",fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsConfig.systemUpdatesDescription")})]}),(0,n.jsxs)("section",{"data-search-id":Y("Active session system prompt"),style:{padding:"var(--space-5)",border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:"var(--space-4)",...e_===Y("Active session system prompt")?{borderColor:"var(--accent)",boxShadow:"0 0 0 2px var(--accent)"}:{}},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"var(--space-4)",flexWrap:"wrap"},children:[(0,n.jsxs)("div",{style:{minWidth:0,flex:1},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:650},children:eo("settingsConfig.sessionSystemPrompt")}),(0,n.jsx)("div",{style:{marginTop:"var(--space-1)",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.45},children:eo("settingsConfig.sessionSystemPromptDescription")})]}),(0,n.jsxs)("button",{type:"button",onClick:j,disabled:!C||w,"aria-label":eo("settingsConfig.systemPromptActionAria"),style:{display:"inline-flex",alignItems:"center",gap:"var(--space-2)",flexShrink:0,padding:"var(--space-3) var(--space-4)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text)",cursor:!C||w?"not-allowed":"pointer",opacity:!C||w?.65:1,fontSize:"var(--text-sm)"},children:[(0,n.jsx)(g.A,{size:13,"aria-hidden":"true",className:w?"icon-spin":void 0}),w?eo("settingsConfig.systemPromptLoading"):null===k?eo("settingsConfig.loadSystemPrompt"):eo("settingsConfig.reloadSystemPrompt")]})]}),(0,n.jsx)("div",{"aria-live":"polite","aria-busy":w,style:{minHeight:"var(--control-height-lg)",maxHeight:"45dvh",overflowY:"auto",padding:"var(--space-4)",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.5},children:w?(0,n.jsx)("div",{role:"status",children:eo("settingsConfig.systemPromptLoading")}):C?null===k?(0,n.jsx)("div",{style:{fontStyle:"italic"},children:eo("settingsConfig.systemPromptUnavailable")}):0===k.length?(0,n.jsx)("div",{style:{fontStyle:"italic"},children:eo("settingsConfig.systemPromptEmpty")}):(0,n.jsx)("pre",{"aria-label":eo("settingsConfig.sessionSystemPrompt"),style:{margin:0,color:"var(--text)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",lineHeight:1.5,whiteSpace:"pre-wrap",overflowWrap:"anywhere"},children:k}):(0,n.jsx)("div",{style:{fontStyle:"italic"},children:eo("settingsConfig.systemPromptNoSession")})})]}),(0,n.jsxs)("section",{style:{padding:14,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:10},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:eo("settingsConfig.appLabel")}),(0,n.jsx)("div",{style:{marginTop:4,color:eA?.updateAvailable?"var(--accent)":"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)"},children:eR?eo("settingsConfig.checkingUpdates"):eA?.updateAvailable?eo("appShell.updateVersion",{current:eA.currentVersion??"?",available:eA.availableVersion??"?"}):eP||eA?.lookupFailed?eo("settingsConfig.appUpdateCheckFailed"):eA?.currentVersion&&eA?.availableVersion?eo("settingsConfig.upToDate",{version:eA.currentVersion}):eo("settingsConfig.versionUnavailable")})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>void tb(!0),disabled:eR,"aria-label":eo("settingsConfig.checkAppUpdates"),style:{padding:"6px 10px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",cursor:eR?"wait":"pointer",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:5},children:[(0,n.jsx)(g.A,{size:13,"aria-hidden":"true"})," ",eo("settingsConfig.refresh")]})]}),eA?.updateAvailable&&(0,n.jsxs)("div",{style:{marginTop:6,padding:"10px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",display:"flex",flexDirection:"column",gap:6},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsConfig.runAppUpdateCommand")}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("code",{style:{flex:1,fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",color:"var(--accent)",wordBreak:"break-all"},children:eA.updateCommand||"ompgui update"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,I.D)(eA.updateCommand||"ompgui update").then(()=>eN(eo("appShell.commandCopied"))).catch(()=>eN(eo("appShell.commandCopyFailed")))},style:{display:"inline-flex",alignItems:"center",gap:5,padding:"4px 8px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-xs)"},children:[(0,n.jsx)(u.A,{size:12,"aria-hidden":"true"})," ",eo("appShell.copyCommand")]})]})]})]}),(0,n.jsxs)("section",{style:{padding:14,border:"1px solid var(--border)",borderRadius:"var(--radius-card)",background:"var(--bg-panel)",display:"flex",flexDirection:"column",gap:10},children:[(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:12},children:[(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-md)",fontWeight:600},children:eo("settingsConfig.ompLabel")}),(0,n.jsx)("div",{style:{marginTop:4,color:ek?.updateAvailable?"var(--accent)":"var(--text-muted)",fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)"},children:ej?eo("settingsConfig.checkingUpdates"):ek?.updateAvailable?eo("appShell.updateVersion",{current:ek.currentVersion??"?",available:ek.availableVersion??"?"}):ek?.currentVersion?eo("settingsConfig.upToDate",{version:ek.currentVersion}):eo("settingsConfig.versionUnavailable")})]}),(0,n.jsxs)("button",{type:"button",onClick:()=>void tf(!0),disabled:ej,"aria-label":eo("settingsConfig.checkOmpUpdates"),style:{padding:"6px 10px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"transparent",color:"var(--text)",cursor:ej?"wait":"pointer",fontSize:"var(--text-sm)",display:"inline-flex",alignItems:"center",gap:5},children:[(0,n.jsx)(g.A,{size:13,"aria-hidden":"true"})," ",eo("settingsConfig.refresh")]})]}),ek?.updateAvailable&&(0,n.jsxs)("div",{style:{marginTop:6,padding:"10px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg)",display:"flex",flexDirection:"column",gap:6},children:[(0,n.jsx)("div",{style:{fontSize:"var(--text-sm)",color:"var(--text-muted)"},children:eo("settingsConfig.runOmpUpdateCommand")}),(0,n.jsxs)("div",{style:{display:"flex",alignItems:"center",gap:8},children:[(0,n.jsx)("code",{style:{flex:1,fontFamily:"var(--font-mono)",fontSize:"var(--text-sm)",color:"var(--accent)",wordBreak:"break-all"},children:ek.updateCommand||"omp update"}),(0,n.jsxs)("button",{type:"button",onClick:()=>{(0,I.D)(ek.updateCommand||"omp update").then(()=>eN(eo("appShell.commandCopied"))).catch(()=>eN(eo("appShell.commandCopyFailed")))},style:{display:"inline-flex",alignItems:"center",gap:5,padding:"4px 8px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",color:"var(--text)",cursor:"pointer",fontSize:"var(--text-xs)"},children:[(0,n.jsx)(u.A,{size:12,"aria-hidden":"true"})," ",eo("appShell.copyCommand")]})]})]}),(0,n.jsxs)("div",{style:{display:"flex",flexWrap:"wrap",gap:8,marginTop:6},children:[(0,n.jsxs)("button",{type:"button",onClick:()=>void tx(),disabled:eT,style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",background:"var(--bg-subtle)",color:"var(--text)",cursor:eT?"wait":"pointer",fontSize:"var(--text-sm)"},children:[(0,n.jsx)(f.A,{size:13,"aria-hidden":"true"})," ",eT?eo("settingsConfig.restarting"):eo("settingsConfig.restartSessions")]}),(0,n.jsxs)("a",{href:"https://github.com/can1357/oh-my-pi/releases",target:"_blank",rel:"noreferrer",style:{display:"inline-flex",alignItems:"center",gap:6,padding:"7px 12px",border:"1px solid var(--border)",borderRadius:"var(--radius-control)",color:"var(--text-muted)",textDecoration:"none",fontSize:"var(--text-sm)"},children:[(0,n.jsx)(x,{size:13,"aria-hidden":"true"})," ",eo("settingsConfig.changelog")]})]}),eI&&(0,n.jsx)("p",{role:"status",style:{margin:"4px 0 0",color:"var(--text-muted)",fontSize:"var(--text-sm)",lineHeight:1.5},children:eI})]})]})]})]})})]})}),(0,n.jsx)(v.TM,{open:em,onOpenChange:e=>{ev(e),e||eh(null)},title:eo("settingsConfig.unsavedChangesTitle"),description:eo("settingsConfig.unsavedChangesDescription"),confirmLabel:eo("settingsConfig.discardChanges"),cancelLabel:eo("settingsConfig.cancel"),danger:!0,onConfirm:tu})]})}},86272:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("sparkles",[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]])},89034:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("eye-off",[["path",{d:"M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49",key:"ct8e1f"}],["path",{d:"M14.084 14.158a3 3 0 0 1-4.242-4.242",key:"151rxh"}],["path",{d:"M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143",key:"13bj9a"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]])},90071:(e,t,i)=>{function n(){return globalThis.__ompClientModelStore||(globalThis.__ompClientModelStore={globalGeneration:0,entries:new Map,inFlight:new Map,listeners:new Map}),globalThis.__ompClientModelStore}i.d(t,{aQ:()=>r,dU:()=>o});function s(e,t){t.snapshot={status:t.status,data:t.data,error:t.error,cwd:e,expiresAt:t.expiresAt};let i=n().listeners.get(e);if(i)for(let e of[...i])try{e(t.snapshot)}catch{}return t.snapshot}function a(e,t){let i=e.entries.get(t);if(i)return i;let n={data:null,error:null,status:"idle",expiresAt:null,generation:0,snapshot:{status:"idle",data:null,error:null,cwd:t,expiresAt:null}};return e.entries.set(t,n),n}function o(e){let t=n();if(void 0===e){for(let[e,i]of(t.globalGeneration+=1,t.entries))i.generation+=1,i.data=null,i.error=null,i.status="idle",i.expiresAt=null,s(e,i);t.inFlight.clear();return}let i=e??"",o=a(t,i);o.generation+=1,o.data=null,o.error=null,o.status="idle",o.expiresAt=null,t.inFlight.delete(i),s(i,o)}function r(e,t){let i=e??"";t?.force&&o(i);let r=n(),l=a(r,i),d=Date.now();if(l.data&&null!==l.expiresAt&&l.expiresAt>d&&!t?.force)return Promise.resolve(l.data);let c=r.inFlight.get(i);if(c)return c;let p=l.generation,g=r.globalGeneration;"ready"!==l.status&&(l.status="loading",l.error=null,s(i,l));let u=(async()=>{let e=await fetch(i?`/api/models?cwd=${encodeURIComponent(i)}`:"/api/models",{cache:"no-store"});if(!e.ok)throw Error(`HTTP ${e.status}`);var t=await e.json();if(!t||"object"!=typeof t)throw Error("invalid models response");return{models:t.models&&"object"==typeof t.models?t.models:{},modelList:Array.isArray(t.modelList)?t.modelList:[],defaultModel:t.defaultModel??null,thinkingLevels:t.thinkingLevels&&"object"==typeof t.thinkingLevels?t.thinkingLevels:{},...t.thinkingLevelMaps?{thinkingLevelMaps:t.thinkingLevelMaps}:{},...t.connectedProviders?{connectedProviders:t.connectedProviders}:{},..."string"==typeof t.modelError?{modelError:t.modelError}:{}}})().then(e=>{let t=n(),a=t.entries.get(i);return a&&a.generation===p&&t.globalGeneration===g&&(a.data=e,a.error=null,a.status="ready",a.expiresAt=Date.now()+3e4,s(i,a)),e}).catch(e=>{let t=n(),a=t.entries.get(i);throw a&&a.generation===p&&t.globalGeneration===g&&(a.status="error",a.error=e instanceof Error?e.message:String(e),a.expiresAt=null,s(i,a)),e}).finally(()=>{let e=n();e.inFlight.get(i)===u&&e.inFlight.delete(i)});return r.inFlight.set(i,u),u}},90710:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]])},99314:(e,t,i)=>{i.d(t,{A:()=>n});let n=(0,i(99537).A)("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]])}}]);