@xopcai/xopc 0.0.29 → 0.0.31

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 (632) hide show
  1. package/dist/extensions/telegram/src/adapters/config-surface.js +3 -1
  2. package/dist/extensions/telegram/src/adapters/config-surface.js.map +1 -1
  3. package/dist/extensions/telegram/src/adapters/onboard-cli.js +23 -21
  4. package/dist/extensions/telegram/src/adapters/onboard-cli.js.map +1 -1
  5. package/dist/extensions/telegram/src/adapters/setup-wizard.js +3 -4
  6. package/dist/extensions/telegram/src/adapters/setup-wizard.js.map +1 -1
  7. package/dist/extensions/telegram/src/config-schema.d.ts +0 -1
  8. package/dist/extensions/telegram/src/config-schema.js +17 -4
  9. package/dist/extensions/telegram/src/config-schema.js.map +1 -1
  10. package/dist/extensions/telegram/src/plugin.js +4 -17
  11. package/dist/extensions/telegram/src/plugin.js.map +1 -1
  12. package/dist/extensions/telegram/xopc.extension.json +1 -1
  13. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  14. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  15. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  16. package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js +216 -0
  17. package/dist/gateway/static/root/assets/agents-3u63Fw2Y.js.map +1 -0
  18. package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js → apps-page-CWegY6Kp.js} +2 -2
  19. package/dist/gateway/static/root/assets/{apps-page-Bmq19MS-.js.map → apps-page-CWegY6Kp.js.map} +1 -1
  20. package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js +9 -0
  21. package/dist/gateway/static/root/assets/channels-settings-CiyeXcTK.js.map +1 -0
  22. package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js +3 -0
  23. package/dist/gateway/static/root/assets/cron-api-_j_79Zf5.js.map +1 -0
  24. package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js +2 -0
  25. package/dist/gateway/static/root/assets/cron-page-S86YNTtI.js.map +1 -0
  26. package/dist/gateway/static/root/assets/dist-D0jxbvuz.js +2 -0
  27. package/dist/gateway/static/root/assets/{dist--p2HQ2QF.js.map → dist-D0jxbvuz.js.map} +1 -1
  28. package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js → extension-debug-page-DB630cW8.js} +2 -2
  29. package/dist/gateway/static/root/assets/{extension-debug-page-DwHCB_6T.js.map → extension-debug-page-DB630cW8.js.map} +1 -1
  30. package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js → extension-page-CnoPUBul.js} +2 -2
  31. package/dist/gateway/static/root/assets/{extension-page-BsYwQIex.js.map → extension-page-CnoPUBul.js.map} +1 -1
  32. package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js → extension-settings-page-BsiOkvBe.js} +2 -2
  33. package/dist/gateway/static/root/assets/{extension-settings-page-nsisEgjB.js.map → extension-settings-page-BsiOkvBe.js.map} +1 -1
  34. package/dist/gateway/static/root/assets/{index-CR8zUHGR.js → index-DHLmAIQl.js} +63 -63
  35. package/dist/gateway/static/root/assets/{index-CR8zUHGR.js.map → index-DHLmAIQl.js.map} +1 -1
  36. package/dist/gateway/static/root/assets/index-DoPwy4aU.css +1 -0
  37. package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js +2 -0
  38. package/dist/gateway/static/root/assets/logs-page-Bndhenn2.js.map +1 -0
  39. package/dist/gateway/static/root/assets/sessions-page-Q201-_lP.js +2 -0
  40. package/dist/gateway/static/root/assets/{sessions-page-Be5kIGl_.js.map → sessions-page-Q201-_lP.js.map} +1 -1
  41. package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js +2 -0
  42. package/dist/gateway/static/root/assets/settings-page-Cw75fpc6.js.map +1 -0
  43. package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js +3 -0
  44. package/dist/gateway/static/root/assets/skills-page-CVwEzD_J.js.map +1 -0
  45. package/dist/gateway/static/root/index.html +2 -2
  46. package/dist/package.js +1 -1
  47. package/dist/src/agent/agent-manager.d.ts +5 -7
  48. package/dist/src/agent/agent-manager.js +21 -19
  49. package/dist/src/agent/agent-manager.js.map +1 -1
  50. package/dist/src/agent/ipc/inbox.js +4 -2
  51. package/dist/src/agent/ipc/inbox.js.map +1 -1
  52. package/dist/src/agent/memory/dreaming/short-term-store.js +1 -1
  53. package/dist/src/agent/memory/dreaming/utils.js +1 -1
  54. package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
  55. package/dist/src/agent/prompt/service-prompt-builder.js +0 -2
  56. package/dist/src/agent/prompt/service-prompt-builder.js.map +1 -1
  57. package/dist/src/agent/prompt/system-prompt.d.ts +0 -2
  58. package/dist/src/agent/prompt/system-prompt.js +3 -17
  59. package/dist/src/agent/prompt/system-prompt.js.map +1 -1
  60. package/dist/src/agent/service/btw-query.d.ts +16 -0
  61. package/dist/src/agent/service/btw-query.js +88 -0
  62. package/dist/src/agent/service/btw-query.js.map +1 -0
  63. package/dist/src/agent/service/build-direct-message-content.d.ts +30 -0
  64. package/dist/src/agent/service/build-direct-message-content.js +75 -0
  65. package/dist/src/agent/service/build-direct-message-content.js.map +1 -0
  66. package/dist/src/agent/service/parse-outbound-session-key.d.ts +8 -0
  67. package/dist/src/agent/service/parse-outbound-session-key.js +41 -0
  68. package/dist/src/agent/service/parse-outbound-session-key.js.map +1 -0
  69. package/dist/src/agent/service/process-direct-one-shot.d.ts +34 -0
  70. package/dist/src/agent/service/process-direct-one-shot.js +67 -0
  71. package/dist/src/agent/service/process-direct-one-shot.js.map +1 -0
  72. package/dist/src/agent/service/process-direct-streaming.js +12 -1
  73. package/dist/src/agent/service/process-direct-streaming.js.map +1 -1
  74. package/dist/src/agent/service/reconcile-dreaming-cron.d.ts +6 -0
  75. package/dist/src/agent/service/reconcile-dreaming-cron.js +70 -0
  76. package/dist/src/agent/service/reconcile-dreaming-cron.js.map +1 -0
  77. package/dist/src/agent/service/session-context-report.d.ts +19 -0
  78. package/dist/src/agent/service/session-context-report.js +47 -0
  79. package/dist/src/agent/service/session-context-report.js.map +1 -0
  80. package/dist/src/agent/service/webchat-tts.d.ts +28 -0
  81. package/dist/src/agent/service/webchat-tts.js +73 -0
  82. package/dist/src/agent/service/webchat-tts.js.map +1 -0
  83. package/dist/src/agent/service.d.ts +8 -12
  84. package/dist/src/agent/service.js +74 -379
  85. package/dist/src/agent/service.js.map +1 -1
  86. package/dist/src/agent/skills/config.js +4 -3
  87. package/dist/src/agent/skills/config.js.map +1 -1
  88. package/dist/src/agent/skills/format-skills-prompt.d.ts +0 -2
  89. package/dist/src/agent/skills/format-skills-prompt.js +3 -24
  90. package/dist/src/agent/skills/format-skills-prompt.js.map +1 -1
  91. package/dist/src/agent/skills/hub-lock.js +4 -5
  92. package/dist/src/agent/skills/hub-lock.js.map +1 -1
  93. package/dist/src/agent/skills/index.js +9 -21
  94. package/dist/src/agent/skills/index.js.map +1 -1
  95. package/dist/src/agent/skills/marketplace/adapter.types.d.ts +17 -0
  96. package/dist/src/agent/skills/marketplace/adapter.types.js +1 -0
  97. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.d.ts +2 -0
  98. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js +292 -0
  99. package/dist/src/agent/skills/marketplace/adapters/skillhub/adapter.js.map +1 -0
  100. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.d.ts +73 -0
  101. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js +200 -0
  102. package/dist/src/agent/skills/marketplace/adapters/skillhub/ecosystem-client.js.map +1 -0
  103. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.d.ts +137 -0
  104. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js +217 -0
  105. package/dist/src/agent/skills/marketplace/adapters/skillhub/registry-client.js.map +1 -0
  106. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.d.ts +12 -0
  107. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js +90 -0
  108. package/dist/src/agent/skills/marketplace/adapters/skillhub/skillhub-fetch-cache.js.map +1 -0
  109. package/dist/src/agent/skills/marketplace/adapters/store/adapter.d.ts +2 -0
  110. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js +35 -0
  111. package/dist/src/agent/skills/marketplace/adapters/store/adapter.js.map +1 -0
  112. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.d.ts +124 -0
  113. package/dist/src/agent/skills/{skills-store-client.js → marketplace/adapters/store/store-api-client.js} +4 -3
  114. package/dist/src/agent/skills/marketplace/adapters/store/store-api-client.js.map +1 -0
  115. package/dist/src/agent/skills/marketplace/resolve-adapter.d.ts +6 -0
  116. package/dist/src/agent/skills/marketplace/resolve-adapter.js +26 -0
  117. package/dist/src/agent/skills/marketplace/resolve-adapter.js.map +1 -0
  118. package/dist/src/agent/skills/parse-skill-metadata.d.ts +5 -0
  119. package/dist/src/agent/skills/parse-skill-metadata.js +27 -0
  120. package/dist/src/agent/skills/parse-skill-metadata.js.map +1 -0
  121. package/dist/src/agent/skills/skill-markdown-preview-from-raw.d.ts +6 -0
  122. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js +64 -0
  123. package/dist/src/agent/skills/skill-markdown-preview-from-raw.js.map +1 -0
  124. package/dist/src/agent/skills/skill-view-path.d.ts +17 -1
  125. package/dist/src/agent/skills/skill-view-path.js +66 -3
  126. package/dist/src/agent/skills/skill-view-path.js.map +1 -1
  127. package/dist/src/agent/skills/skills-marketplace.d.ts +21 -0
  128. package/dist/src/agent/skills/skills-marketplace.js +18 -0
  129. package/dist/src/agent/skills/skills-marketplace.js.map +1 -0
  130. package/dist/src/agent/skills/test-framework.d.ts +0 -1
  131. package/dist/src/agent/skills/test-framework.js +2 -20
  132. package/dist/src/agent/skills/test-framework.js.map +1 -1
  133. package/dist/src/agent/skills/types.d.ts +12 -6
  134. package/dist/src/agent/tools/dreaming-tool.js +1 -1
  135. package/dist/src/agent/tools/image-generate-tool.js +2 -2
  136. package/dist/src/auth/credentials.js +8 -6
  137. package/dist/src/auth/credentials.js.map +1 -1
  138. package/dist/src/auth/profiles/store.js +5 -3
  139. package/dist/src/auth/profiles/store.js.map +1 -1
  140. package/dist/src/channels/manager.js +1 -1
  141. package/dist/src/channels/outbound/persist-store.js +4 -4
  142. package/dist/src/channels/outbound/persist-store.js.map +1 -1
  143. package/dist/src/cli/commands/config.js +8 -6
  144. package/dist/src/cli/commands/config.js.map +1 -1
  145. package/dist/src/cli/commands/doctor/checks/channel-config.js +3 -4
  146. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -1
  147. package/dist/src/cli/commands/init.js +4 -2
  148. package/dist/src/cli/commands/init.js.map +1 -1
  149. package/dist/src/config/loader.js +3 -1
  150. package/dist/src/config/loader.js.map +1 -1
  151. package/dist/src/config/models-json.js +4 -5
  152. package/dist/src/config/models-json.js.map +1 -1
  153. package/dist/src/config/schema.d.ts +12 -4
  154. package/dist/src/config/schema.js +31 -5
  155. package/dist/src/config/schema.js.map +1 -1
  156. package/dist/src/cron/persistence.d.ts +1 -3
  157. package/dist/src/cron/persistence.js +6 -17
  158. package/dist/src/cron/persistence.js.map +1 -1
  159. package/dist/src/cron/validation.js +1 -1
  160. package/dist/src/cron/validation.js.map +1 -1
  161. package/dist/src/extensions/activation-context.js +0 -1
  162. package/dist/src/extensions/activation-context.js.map +1 -1
  163. package/dist/src/extensions/lockfile.js +4 -2
  164. package/dist/src/extensions/lockfile.js.map +1 -1
  165. package/dist/src/gateway/auth.d.ts +0 -9
  166. package/dist/src/gateway/auth.js +1 -12
  167. package/dist/src/gateway/auth.js.map +1 -1
  168. package/dist/src/gateway/hono/lib/config-payload.d.ts +1 -1
  169. package/dist/src/gateway/hono/lib/extension-store.js +4 -4
  170. package/dist/src/gateway/hono/lib/extension-store.js.map +1 -1
  171. package/dist/src/gateway/hono/routes/channels.js +5 -3
  172. package/dist/src/gateway/hono/routes/channels.js.map +1 -1
  173. package/dist/src/gateway/hono/routes/commands-skills.js +28 -3
  174. package/dist/src/gateway/hono/routes/commands-skills.js.map +1 -1
  175. package/dist/src/gateway/hono/routes/config.js +23 -2
  176. package/dist/src/gateway/hono/routes/config.js.map +1 -1
  177. package/dist/src/gateway/hono/routes/sessions.js +124 -2
  178. package/dist/src/gateway/hono/routes/sessions.js.map +1 -1
  179. package/dist/src/gateway/hono/sse.js +9 -2
  180. package/dist/src/gateway/hono/sse.js.map +1 -1
  181. package/dist/src/gateway/index.js +2 -2
  182. package/dist/src/gateway/lock.js +1 -1
  183. package/dist/src/gateway/service/run-gateway-agent.d.ts +37 -0
  184. package/dist/src/gateway/service/run-gateway-agent.js +163 -0
  185. package/dist/src/gateway/service/run-gateway-agent.js.map +1 -0
  186. package/dist/src/gateway/service/save-webchat-user-message.d.ts +9 -0
  187. package/dist/src/gateway/service/save-webchat-user-message.js +34 -0
  188. package/dist/src/gateway/service/save-webchat-user-message.js.map +1 -0
  189. package/dist/src/gateway/service/session-chat-ids.d.ts +9 -0
  190. package/dist/src/gateway/service/session-chat-ids.js +33 -0
  191. package/dist/src/gateway/service/session-chat-ids.js.map +1 -0
  192. package/dist/src/gateway/service/sse-hub.d.ts +10 -0
  193. package/dist/src/gateway/service/sse-hub.js +55 -0
  194. package/dist/src/gateway/service/sse-hub.js.map +1 -0
  195. package/dist/src/gateway/service/types.d.ts +9 -0
  196. package/dist/src/gateway/service/types.js +1 -0
  197. package/dist/src/gateway/service.d.ts +42 -33
  198. package/dist/src/gateway/service.js +92 -246
  199. package/dist/src/gateway/service.js.map +1 -1
  200. package/dist/src/infra/update-lock.js +4 -2
  201. package/dist/src/infra/update-lock.js.map +1 -1
  202. package/dist/src/infra/update-startup.js +5 -14
  203. package/dist/src/infra/update-startup.js.map +1 -1
  204. package/dist/src/infra/write-file-atomic.d.ts +18 -0
  205. package/dist/src/infra/write-file-atomic.js +115 -0
  206. package/dist/src/infra/write-file-atomic.js.map +1 -0
  207. package/dist/src/session/abort-cutoff.d.ts +6 -0
  208. package/dist/src/session/abort-cutoff.js +10 -0
  209. package/dist/src/session/abort-cutoff.js.map +1 -0
  210. package/dist/src/session/compaction-checkpoints.d.ts +8 -0
  211. package/dist/src/session/compaction-checkpoints.js +21 -0
  212. package/dist/src/session/compaction-checkpoints.js.map +1 -0
  213. package/dist/src/session/config-store.js +4 -2
  214. package/dist/src/session/config-store.js.map +1 -1
  215. package/dist/src/session/index.d.ts +8 -1
  216. package/dist/src/session/index.js +7 -1
  217. package/dist/src/session/manager.d.ts +26 -1
  218. package/dist/src/session/manager.js +39 -2
  219. package/dist/src/session/manager.js.map +1 -1
  220. package/dist/src/session/patch-metadata.d.ts +12 -0
  221. package/dist/src/session/patch-metadata.js +23 -0
  222. package/dist/src/session/patch-metadata.js.map +1 -0
  223. package/dist/src/session/search-index.d.ts +2 -0
  224. package/dist/src/session/search-index.js +30 -2
  225. package/dist/src/session/search-index.js.map +1 -1
  226. package/dist/src/session/session-context-for-llm.d.ts +32 -0
  227. package/dist/src/session/session-context-for-llm.js +60 -0
  228. package/dist/src/session/session-context-for-llm.js.map +1 -0
  229. package/dist/src/session/store.d.ts +53 -2
  230. package/dist/src/session/store.js +427 -145
  231. package/dist/src/session/store.js.map +1 -1
  232. package/dist/src/session/strip-webchat-early-save.d.ts +5 -0
  233. package/dist/src/session/strip-webchat-early-save.js +17 -0
  234. package/dist/src/session/strip-webchat-early-save.js.map +1 -0
  235. package/dist/src/session/transcript-format.d.ts +46 -0
  236. package/dist/src/session/transcript-format.js +88 -0
  237. package/dist/src/session/transcript-format.js.map +1 -0
  238. package/dist/src/session/types.d.ts +37 -0
  239. package/dist/src/session/types.js.map +1 -1
  240. package/dist/src/utils/logger/log-store.js +4 -3
  241. package/dist/src/utils/logger/log-store.js.map +1 -1
  242. package/dist/src/voice/tts/merge-config.js +0 -1
  243. package/dist/src/voice/tts/merge-config.js.map +1 -1
  244. package/dist/src/voice/tts/service.js +1 -2
  245. package/dist/src/voice/tts/service.js.map +1 -1
  246. package/package.json +1 -1
  247. package/skills/business/company-values/SKILL-zh.md +80 -0
  248. package/skills/business/company-values/SKILL.md +80 -0
  249. package/skills/business/find-community/SKILL-zh.md +50 -0
  250. package/skills/business/find-community/SKILL.md +50 -0
  251. package/skills/business/first-customers/SKILL-zh.md +76 -0
  252. package/skills/business/first-customers/SKILL.md +76 -0
  253. package/skills/business/grow-sustainably/SKILL-zh.md +92 -0
  254. package/skills/business/grow-sustainably/SKILL.md +92 -0
  255. package/skills/business/marketing-plan/SKILL-zh.md +100 -0
  256. package/skills/business/marketing-plan/SKILL.md +100 -0
  257. package/skills/business/minimalist-review/SKILL-zh.md +82 -0
  258. package/skills/business/minimalist-review/SKILL.md +82 -0
  259. package/skills/business/mvp/SKILL-zh.md +81 -0
  260. package/skills/business/mvp/SKILL.md +81 -0
  261. package/skills/business/pricing/SKILL-zh.md +64 -0
  262. package/skills/business/pricing/SKILL.md +64 -0
  263. package/skills/business/processize/SKILL-zh.md +91 -0
  264. package/skills/business/processize/SKILL.md +91 -0
  265. package/skills/business/validate-idea/SKILL-zh.md +68 -0
  266. package/skills/business/validate-idea/SKILL.md +68 -0
  267. package/skills/{skill-creator → creative/algorithmic-art}/LICENSE.txt +1 -1
  268. package/skills/creative/algorithmic-art/SKILL-zh.md +405 -0
  269. package/skills/creative/algorithmic-art/SKILL.md +405 -0
  270. package/skills/creative/algorithmic-art/templates/generator_template.js +223 -0
  271. package/skills/creative/algorithmic-art/templates/viewer.html +599 -0
  272. package/skills/creative/canvas-design/LICENSE.txt +202 -0
  273. package/skills/creative/canvas-design/SKILL-zh.md +130 -0
  274. package/skills/creative/canvas-design/SKILL.md +130 -0
  275. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-OFL.txt +93 -0
  276. package/skills/creative/canvas-design/canvas-fonts/ArsenalSC-Regular.ttf +0 -0
  277. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Bold.ttf +0 -0
  278. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-OFL.txt +93 -0
  279. package/skills/creative/canvas-design/canvas-fonts/BigShoulders-Regular.ttf +0 -0
  280. package/skills/creative/canvas-design/canvas-fonts/Boldonse-OFL.txt +93 -0
  281. package/skills/creative/canvas-design/canvas-fonts/Boldonse-Regular.ttf +0 -0
  282. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Bold.ttf +0 -0
  283. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-OFL.txt +93 -0
  284. package/skills/creative/canvas-design/canvas-fonts/BricolageGrotesque-Regular.ttf +0 -0
  285. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Bold.ttf +0 -0
  286. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Italic.ttf +0 -0
  287. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-OFL.txt +93 -0
  288. package/skills/creative/canvas-design/canvas-fonts/CrimsonPro-Regular.ttf +0 -0
  289. package/skills/creative/canvas-design/canvas-fonts/DMMono-OFL.txt +93 -0
  290. package/skills/creative/canvas-design/canvas-fonts/DMMono-Regular.ttf +0 -0
  291. package/skills/creative/canvas-design/canvas-fonts/EricaOne-OFL.txt +94 -0
  292. package/skills/creative/canvas-design/canvas-fonts/EricaOne-Regular.ttf +0 -0
  293. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Bold.ttf +0 -0
  294. package/skills/creative/canvas-design/canvas-fonts/GeistMono-OFL.txt +93 -0
  295. package/skills/creative/canvas-design/canvas-fonts/GeistMono-Regular.ttf +0 -0
  296. package/skills/creative/canvas-design/canvas-fonts/Gloock-OFL.txt +93 -0
  297. package/skills/creative/canvas-design/canvas-fonts/Gloock-Regular.ttf +0 -0
  298. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Bold.ttf +0 -0
  299. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-OFL.txt +93 -0
  300. package/skills/creative/canvas-design/canvas-fonts/IBMPlexMono-Regular.ttf +0 -0
  301. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Bold.ttf +0 -0
  302. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-BoldItalic.ttf +0 -0
  303. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Italic.ttf +0 -0
  304. package/skills/creative/canvas-design/canvas-fonts/IBMPlexSerif-Regular.ttf +0 -0
  305. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Bold.ttf +0 -0
  306. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-BoldItalic.ttf +0 -0
  307. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Italic.ttf +0 -0
  308. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-OFL.txt +93 -0
  309. package/skills/creative/canvas-design/canvas-fonts/InstrumentSans-Regular.ttf +0 -0
  310. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Italic.ttf +0 -0
  311. package/skills/creative/canvas-design/canvas-fonts/InstrumentSerif-Regular.ttf +0 -0
  312. package/skills/creative/canvas-design/canvas-fonts/Italiana-OFL.txt +93 -0
  313. package/skills/creative/canvas-design/canvas-fonts/Italiana-Regular.ttf +0 -0
  314. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Bold.ttf +0 -0
  315. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-OFL.txt +93 -0
  316. package/skills/creative/canvas-design/canvas-fonts/JetBrainsMono-Regular.ttf +0 -0
  317. package/skills/creative/canvas-design/canvas-fonts/Jura-Light.ttf +0 -0
  318. package/skills/creative/canvas-design/canvas-fonts/Jura-Medium.ttf +0 -0
  319. package/skills/creative/canvas-design/canvas-fonts/Jura-OFL.txt +93 -0
  320. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-OFL.txt +93 -0
  321. package/skills/creative/canvas-design/canvas-fonts/LibreBaskerville-Regular.ttf +0 -0
  322. package/skills/creative/canvas-design/canvas-fonts/Lora-Bold.ttf +0 -0
  323. package/skills/creative/canvas-design/canvas-fonts/Lora-BoldItalic.ttf +0 -0
  324. package/skills/creative/canvas-design/canvas-fonts/Lora-Italic.ttf +0 -0
  325. package/skills/creative/canvas-design/canvas-fonts/Lora-OFL.txt +93 -0
  326. package/skills/creative/canvas-design/canvas-fonts/Lora-Regular.ttf +0 -0
  327. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Bold.ttf +0 -0
  328. package/skills/creative/canvas-design/canvas-fonts/NationalPark-OFL.txt +93 -0
  329. package/skills/creative/canvas-design/canvas-fonts/NationalPark-Regular.ttf +0 -0
  330. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-OFL.txt +93 -0
  331. package/skills/creative/canvas-design/canvas-fonts/NothingYouCouldDo-Regular.ttf +0 -0
  332. package/skills/creative/canvas-design/canvas-fonts/Outfit-Bold.ttf +0 -0
  333. package/skills/creative/canvas-design/canvas-fonts/Outfit-OFL.txt +93 -0
  334. package/skills/creative/canvas-design/canvas-fonts/Outfit-Regular.ttf +0 -0
  335. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-Medium.ttf +0 -0
  336. package/skills/creative/canvas-design/canvas-fonts/PixelifySans-OFL.txt +93 -0
  337. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-OFL.txt +93 -0
  338. package/skills/creative/canvas-design/canvas-fonts/PoiretOne-Regular.ttf +0 -0
  339. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Bold.ttf +0 -0
  340. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-OFL.txt +93 -0
  341. package/skills/creative/canvas-design/canvas-fonts/RedHatMono-Regular.ttf +0 -0
  342. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-OFL.txt +93 -0
  343. package/skills/creative/canvas-design/canvas-fonts/Silkscreen-Regular.ttf +0 -0
  344. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-Medium.ttf +0 -0
  345. package/skills/creative/canvas-design/canvas-fonts/SmoochSans-OFL.txt +93 -0
  346. package/skills/creative/canvas-design/canvas-fonts/Tektur-Medium.ttf +0 -0
  347. package/skills/creative/canvas-design/canvas-fonts/Tektur-OFL.txt +93 -0
  348. package/skills/creative/canvas-design/canvas-fonts/Tektur-Regular.ttf +0 -0
  349. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Bold.ttf +0 -0
  350. package/skills/creative/canvas-design/canvas-fonts/WorkSans-BoldItalic.ttf +0 -0
  351. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Italic.ttf +0 -0
  352. package/skills/creative/canvas-design/canvas-fonts/WorkSans-OFL.txt +93 -0
  353. package/skills/creative/canvas-design/canvas-fonts/WorkSans-Regular.ttf +0 -0
  354. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-OFL.txt +93 -0
  355. package/skills/creative/canvas-design/canvas-fonts/YoungSerif-Regular.ttf +0 -0
  356. package/skills/creative/frontend-design/LICENSE.txt +177 -0
  357. package/skills/creative/frontend-design/SKILL-zh.md +42 -0
  358. package/skills/creative/frontend-design/SKILL.md +42 -0
  359. package/skills/creative/theme-factory/LICENSE.txt +202 -0
  360. package/skills/creative/theme-factory/SKILL-zh.md +59 -0
  361. package/skills/creative/theme-factory/SKILL.md +59 -0
  362. package/skills/creative/theme-factory/theme-showcase.pdf +0 -0
  363. package/skills/creative/theme-factory/themes/arctic-frost.md +19 -0
  364. package/skills/creative/theme-factory/themes/botanical-garden.md +19 -0
  365. package/skills/creative/theme-factory/themes/desert-rose.md +19 -0
  366. package/skills/creative/theme-factory/themes/forest-canopy.md +19 -0
  367. package/skills/creative/theme-factory/themes/golden-hour.md +19 -0
  368. package/skills/creative/theme-factory/themes/midnight-galaxy.md +19 -0
  369. package/skills/creative/theme-factory/themes/modern-minimalist.md +19 -0
  370. package/skills/creative/theme-factory/themes/ocean-depths.md +19 -0
  371. package/skills/creative/theme-factory/themes/sunset-boulevard.md +19 -0
  372. package/skills/creative/theme-factory/themes/tech-innovation.md +19 -0
  373. package/skills/creative/web-artifacts-builder/LICENSE.txt +202 -0
  374. package/skills/creative/web-artifacts-builder/SKILL-zh.md +74 -0
  375. package/skills/creative/web-artifacts-builder/SKILL.md +74 -0
  376. package/skills/creative/web-artifacts-builder/scripts/bundle-artifact.sh +54 -0
  377. package/skills/creative/web-artifacts-builder/scripts/init-artifact.sh +322 -0
  378. package/skills/creative/web-artifacts-builder/scripts/shadcn-components.tar.gz +0 -0
  379. package/skills/documents/doc-coauthoring/SKILL-zh.md +375 -0
  380. package/skills/documents/doc-coauthoring/SKILL.md +375 -0
  381. package/skills/documents/docx/SKILL-zh.md +590 -0
  382. package/skills/{docx → documents/docx}/SKILL.md +11 -11
  383. package/skills/{docx → documents/docx}/scripts/comment.py +2 -2
  384. package/skills/{docx → documents/docx}/scripts/office/helpers/simplify_redlines.py +1 -1
  385. package/skills/{docx → documents/docx}/scripts/office/pack.py +2 -2
  386. package/skills/{xlsx → documents/docx}/scripts/office/validate.py +2 -2
  387. package/skills/{xlsx → documents/docx}/scripts/office/validators/redlining.py +1 -1
  388. package/skills/documents/pdf/SKILL-zh.md +314 -0
  389. package/skills/documents/pptx/SKILL-zh.md +232 -0
  390. package/skills/{pptx → documents/pptx}/editing.md +3 -3
  391. package/skills/{pptx → documents/pptx}/scripts/office/helpers/simplify_redlines.py +1 -1
  392. package/skills/{xlsx → documents/pptx}/scripts/office/pack.py +2 -2
  393. package/skills/{pptx → documents/pptx}/scripts/office/validate.py +2 -2
  394. package/skills/{docx → documents/pptx}/scripts/office/validators/redlining.py +1 -1
  395. package/skills/documents/xlsx/SKILL-zh.md +292 -0
  396. package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/simplify_redlines.py +1 -1
  397. package/skills/{pptx → documents/xlsx}/scripts/office/pack.py +2 -2
  398. package/skills/{docx → documents/xlsx}/scripts/office/validate.py +2 -2
  399. package/skills/{pptx → documents/xlsx}/scripts/office/validators/redlining.py +1 -1
  400. package/skills/meta/skill-creator/LICENSE.txt +202 -0
  401. package/skills/meta/skill-creator/SKILL-zh.md +483 -0
  402. package/skills/{skill-creator → meta/skill-creator}/SKILL.md +0 -1
  403. package/skills/tools/find-skills/SKILL-zh.md +440 -0
  404. package/skills/tools/github/SKILL-zh.md +48 -0
  405. package/skills/tools/internal-comms/LICENSE.txt +202 -0
  406. package/skills/tools/internal-comms/SKILL-zh.md +32 -0
  407. package/skills/tools/internal-comms/SKILL.md +32 -0
  408. package/skills/tools/internal-comms/examples/3p-updates.md +47 -0
  409. package/skills/tools/internal-comms/examples/company-newsletter.md +65 -0
  410. package/skills/tools/internal-comms/examples/faq-answers.md +30 -0
  411. package/skills/tools/internal-comms/examples/general-comms.md +16 -0
  412. package/skills/tools/summarize/SKILL-zh.md +47 -0
  413. package/skills/tools/weather/SKILL-zh.md +46 -0
  414. package/skills/tools/webapp-testing/LICENSE.txt +202 -0
  415. package/skills/tools/webapp-testing/SKILL-zh.md +96 -0
  416. package/skills/tools/webapp-testing/SKILL.md +96 -0
  417. package/skills/tools/webapp-testing/examples/console_logging.py +35 -0
  418. package/skills/tools/webapp-testing/examples/element_discovery.py +40 -0
  419. package/skills/tools/webapp-testing/examples/static_html_automation.py +33 -0
  420. package/skills/tools/webapp-testing/scripts/with_server.py +106 -0
  421. package/dist/gateway/static/root/assets/agents-CkgFSiCY.js +0 -216
  422. package/dist/gateway/static/root/assets/agents-CkgFSiCY.js.map +0 -1
  423. package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js +0 -9
  424. package/dist/gateway/static/root/assets/channels-settings-CE7jrdkO.js.map +0 -1
  425. package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js +0 -2
  426. package/dist/gateway/static/root/assets/cron-page-BpPPcykJ.js.map +0 -1
  427. package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js +0 -3
  428. package/dist/gateway/static/root/assets/cron-utils-N1PqD2DB.js.map +0 -1
  429. package/dist/gateway/static/root/assets/dist--p2HQ2QF.js +0 -2
  430. package/dist/gateway/static/root/assets/index-Dnfha4O2.css +0 -1
  431. package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js +0 -2
  432. package/dist/gateway/static/root/assets/logs-page-CQwdV_Xw.js.map +0 -1
  433. package/dist/gateway/static/root/assets/sessions-page-Be5kIGl_.js +0 -2
  434. package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js +0 -2
  435. package/dist/gateway/static/root/assets/settings-page-PodSlNwr.js.map +0 -1
  436. package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js +0 -3
  437. package/dist/gateway/static/root/assets/skills-page-Clg8deH0.js.map +0 -1
  438. package/dist/src/agent/skills/skills-store-client.d.ts +0 -66
  439. package/dist/src/agent/skills/skills-store-client.js.map +0 -1
  440. package/dist/src/stt/index.d.ts +0 -1
  441. package/dist/src/stt/index.js +0 -8
  442. /package/skills/{docx → documents/docx}/LICENSE.txt +0 -0
  443. /package/skills/{docx → documents/docx}/scripts/__init__.py +0 -0
  444. /package/skills/{docx → documents/docx}/scripts/accept_changes.py +0 -0
  445. /package/skills/{docx → documents/docx}/scripts/office/helpers/__init__.py +0 -0
  446. /package/skills/{docx → documents/docx}/scripts/office/helpers/merge_runs.py +0 -0
  447. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  448. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  449. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  450. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  451. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  452. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  453. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  454. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  455. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  456. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  457. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  458. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  459. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  460. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  461. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  462. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  463. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  464. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  465. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  466. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  467. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  468. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  469. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  470. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  471. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  472. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  473. /package/skills/{docx → documents/docx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  474. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  475. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  476. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  477. /package/skills/{docx → documents/docx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  478. /package/skills/{docx → documents/docx}/scripts/office/schemas/mce/mc.xsd +0 -0
  479. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  480. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  481. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  482. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  483. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  484. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  485. /package/skills/{docx → documents/docx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  486. /package/skills/{docx → documents/docx}/scripts/office/soffice.py +0 -0
  487. /package/skills/{docx → documents/docx}/scripts/office/unpack.py +0 -0
  488. /package/skills/{docx → documents/docx}/scripts/office/validators/__init__.py +0 -0
  489. /package/skills/{docx → documents/docx}/scripts/office/validators/base.py +0 -0
  490. /package/skills/{docx → documents/docx}/scripts/office/validators/docx.py +0 -0
  491. /package/skills/{docx → documents/docx}/scripts/office/validators/pptx.py +0 -0
  492. /package/skills/{docx → documents/docx}/scripts/templates/comments.xml +0 -0
  493. /package/skills/{docx → documents/docx}/scripts/templates/commentsExtended.xml +0 -0
  494. /package/skills/{docx → documents/docx}/scripts/templates/commentsExtensible.xml +0 -0
  495. /package/skills/{docx → documents/docx}/scripts/templates/commentsIds.xml +0 -0
  496. /package/skills/{docx → documents/docx}/scripts/templates/people.xml +0 -0
  497. /package/skills/{pdf → documents/pdf}/LICENSE.txt +0 -0
  498. /package/skills/{pdf → documents/pdf}/SKILL.md +0 -0
  499. /package/skills/{pdf → documents/pdf}/forms.md +0 -0
  500. /package/skills/{pdf → documents/pdf}/reference.md +0 -0
  501. /package/skills/{pdf → documents/pdf}/scripts/check_bounding_boxes.py +0 -0
  502. /package/skills/{pdf → documents/pdf}/scripts/check_fillable_fields.py +0 -0
  503. /package/skills/{pdf → documents/pdf}/scripts/convert_pdf_to_images.py +0 -0
  504. /package/skills/{pdf → documents/pdf}/scripts/create_validation_image.py +0 -0
  505. /package/skills/{pdf → documents/pdf}/scripts/extract_form_field_info.py +0 -0
  506. /package/skills/{pdf → documents/pdf}/scripts/extract_form_structure.py +0 -0
  507. /package/skills/{pdf → documents/pdf}/scripts/fill_fillable_fields.py +0 -0
  508. /package/skills/{pdf → documents/pdf}/scripts/fill_pdf_form_with_annotations.py +0 -0
  509. /package/skills/{pptx → documents/pptx}/LICENSE.txt +0 -0
  510. /package/skills/{pptx → documents/pptx}/SKILL.md +0 -0
  511. /package/skills/{pptx → documents/pptx}/pptxgenjs.md +0 -0
  512. /package/skills/{pptx → documents/pptx}/scripts/__init__.py +0 -0
  513. /package/skills/{pptx → documents/pptx}/scripts/add_slide.py +0 -0
  514. /package/skills/{pptx → documents/pptx}/scripts/clean.py +0 -0
  515. /package/skills/{pptx → documents/pptx}/scripts/office/helpers/__init__.py +0 -0
  516. /package/skills/{pptx → documents/pptx}/scripts/office/helpers/merge_runs.py +0 -0
  517. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  518. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  519. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  520. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  521. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  522. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  523. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  524. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  525. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  526. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  527. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  528. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  529. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  530. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  531. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  532. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  533. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  534. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  535. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  536. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  537. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  538. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  539. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  540. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  541. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  542. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  543. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  544. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  545. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  546. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  547. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  548. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/mce/mc.xsd +0 -0
  549. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  550. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  551. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  552. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  553. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  554. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  555. /package/skills/{pptx → documents/pptx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  556. /package/skills/{pptx → documents/pptx}/scripts/office/soffice.py +0 -0
  557. /package/skills/{pptx → documents/pptx}/scripts/office/unpack.py +0 -0
  558. /package/skills/{pptx → documents/pptx}/scripts/office/validators/__init__.py +0 -0
  559. /package/skills/{pptx → documents/pptx}/scripts/office/validators/base.py +0 -0
  560. /package/skills/{pptx → documents/pptx}/scripts/office/validators/docx.py +0 -0
  561. /package/skills/{pptx → documents/pptx}/scripts/office/validators/pptx.py +0 -0
  562. /package/skills/{pptx → documents/pptx}/scripts/thumbnail.py +0 -0
  563. /package/skills/{xlsx → documents/xlsx}/LICENSE.txt +0 -0
  564. /package/skills/{xlsx → documents/xlsx}/SKILL.md +0 -0
  565. /package/skills/{skill-creator/scripts → documents/xlsx/scripts/office/helpers}/__init__.py +0 -0
  566. /package/skills/{xlsx → documents/xlsx}/scripts/office/helpers/merge_runs.py +0 -0
  567. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chart.xsd +0 -0
  568. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-chartDrawing.xsd +0 -0
  569. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-diagram.xsd +0 -0
  570. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-lockedCanvas.xsd +0 -0
  571. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-main.xsd +0 -0
  572. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-picture.xsd +0 -0
  573. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-spreadsheetDrawing.xsd +0 -0
  574. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/dml-wordprocessingDrawing.xsd +0 -0
  575. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/pml.xsd +0 -0
  576. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-additionalCharacteristics.xsd +0 -0
  577. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-bibliography.xsd +0 -0
  578. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-commonSimpleTypes.xsd +0 -0
  579. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlDataProperties.xsd +0 -0
  580. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-customXmlSchemaProperties.xsd +0 -0
  581. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesCustom.xsd +0 -0
  582. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesExtended.xsd +0 -0
  583. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-documentPropertiesVariantTypes.xsd +0 -0
  584. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-math.xsd +0 -0
  585. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/shared-relationshipReference.xsd +0 -0
  586. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/sml.xsd +0 -0
  587. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-main.xsd +0 -0
  588. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-officeDrawing.xsd +0 -0
  589. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-presentationDrawing.xsd +0 -0
  590. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-spreadsheetDrawing.xsd +0 -0
  591. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/vml-wordprocessingDrawing.xsd +0 -0
  592. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/wml.xsd +0 -0
  593. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ISO-IEC29500-4_2016/xml.xsd +0 -0
  594. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-contentTypes.xsd +0 -0
  595. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-coreProperties.xsd +0 -0
  596. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-digSig.xsd +0 -0
  597. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/ecma/fouth-edition/opc-relationships.xsd +0 -0
  598. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/mce/mc.xsd +0 -0
  599. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2010.xsd +0 -0
  600. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2012.xsd +0 -0
  601. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-2018.xsd +0 -0
  602. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cex-2018.xsd +0 -0
  603. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-cid-2016.xsd +0 -0
  604. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-sdtdatahash-2020.xsd +0 -0
  605. /package/skills/{xlsx → documents/xlsx}/scripts/office/schemas/microsoft/wml-symex-2015.xsd +0 -0
  606. /package/skills/{xlsx → documents/xlsx}/scripts/office/soffice.py +0 -0
  607. /package/skills/{xlsx → documents/xlsx}/scripts/office/unpack.py +0 -0
  608. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/__init__.py +0 -0
  609. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/base.py +0 -0
  610. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/docx.py +0 -0
  611. /package/skills/{xlsx → documents/xlsx}/scripts/office/validators/pptx.py +0 -0
  612. /package/skills/{xlsx → documents/xlsx}/scripts/recalc.py +0 -0
  613. /package/skills/{skill-creator → meta/skill-creator}/agents/analyzer.md +0 -0
  614. /package/skills/{skill-creator → meta/skill-creator}/agents/comparator.md +0 -0
  615. /package/skills/{skill-creator → meta/skill-creator}/agents/grader.md +0 -0
  616. /package/skills/{skill-creator → meta/skill-creator}/assets/eval_review.html +0 -0
  617. /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/generate_review.py +0 -0
  618. /package/skills/{skill-creator → meta/skill-creator}/eval-viewer/viewer.html +0 -0
  619. /package/skills/{skill-creator → meta/skill-creator}/references/schemas.md +0 -0
  620. /package/skills/{xlsx/scripts/office/helpers → meta/skill-creator/scripts}/__init__.py +0 -0
  621. /package/skills/{skill-creator → meta/skill-creator}/scripts/aggregate_benchmark.py +0 -0
  622. /package/skills/{skill-creator → meta/skill-creator}/scripts/generate_report.py +0 -0
  623. /package/skills/{skill-creator → meta/skill-creator}/scripts/improve_description.py +0 -0
  624. /package/skills/{skill-creator → meta/skill-creator}/scripts/package_skill.py +0 -0
  625. /package/skills/{skill-creator → meta/skill-creator}/scripts/quick_validate.py +0 -0
  626. /package/skills/{skill-creator → meta/skill-creator}/scripts/run_eval.py +0 -0
  627. /package/skills/{skill-creator → meta/skill-creator}/scripts/run_loop.py +0 -0
  628. /package/skills/{skill-creator → meta/skill-creator}/scripts/utils.py +0 -0
  629. /package/skills/{find-skills → tools/find-skills}/SKILL.md +0 -0
  630. /package/skills/{github → tools/github}/SKILL.md +0 -0
  631. /package/skills/{summarize → tools/summarize}/SKILL.md +0 -0
  632. /package/skills/{weather → tools/weather}/SKILL.md +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"logs-page-CQwdV_Xw.js","names":[],"sources":["../../../../../web/src/features/logs/log-api.ts","../../../../../web/src/features/logs/log.types.ts","../../../../../web/src/features/logs/logs-page.tsx"],"sourcesContent":["import { fetchJson } from '@/lib/fetch';\nimport { apiUrl } from '@/lib/url';\n\nimport type { LogEntry, LogFile, LogQuery, LogStats } from '@/features/logs/log.types';\n\nfunction buildQueryString(query?: LogQuery): string {\n const params = new URLSearchParams();\n if (!query) return '';\n if (query.level?.length) params.set('level', query.level.join(','));\n if (query.from) params.set('from', query.from);\n if (query.to) params.set('to', query.to);\n if (query.q) params.set('q', query.q);\n if (query.module) params.set('module', query.module);\n if (query.limit != null) params.set('limit', String(query.limit));\n if (query.offset != null) params.set('offset', String(query.offset));\n const qs = params.toString();\n return qs ? `?${qs}` : '';\n}\n\nexport async function queryLogs(query?: LogQuery): Promise<{ logs: LogEntry[]; count: number }> {\n return fetchJson<{ logs: LogEntry[]; count: number }>(apiUrl(`/api/logs${buildQueryString(query)}`));\n}\n\nexport async function getLogFiles(): Promise<LogFile[]> {\n const result = await fetchJson<{ files: LogFile[] }>(apiUrl('/api/logs/files'));\n return result.files ?? [];\n}\n\nexport async function getLogModules(): Promise<string[]> {\n const result = await fetchJson<{ modules: string[] }>(apiUrl('/api/logs/modules'));\n return result.modules ?? [];\n}\n\nexport async function getLogStats(): Promise<LogStats> {\n const raw = await fetchJson<Partial<LogStats>>(apiUrl('/api/logs/stats'));\n return { byLevel: raw.byLevel ?? {} };\n}\n\nexport async function getLogDir(): Promise<string> {\n const result = await fetchJson<{ dir: string }>(apiUrl('/api/logs/dir'));\n return result.dir ?? '';\n}\n","export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nexport const LOG_LEVELS: LogLevel[] = ['trace', 'debug', 'info', 'warn', 'error', 'fatal'];\n\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n message: string;\n module?: string;\n prefix?: string;\n service?: string;\n extension?: string;\n requestId?: string;\n sessionId?: string;\n userId?: string;\n meta?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface LogQuery {\n level?: string[];\n from?: string;\n to?: string;\n q?: string;\n module?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface LogFile {\n name: string;\n size: number;\n modified: string;\n}\n\nexport interface LogStats {\n byLevel: Partial<Record<LogLevel | 'silent', number>>;\n}\n","import * as Dialog from '@radix-ui/react-dialog';\nimport * as Popover from '@radix-ui/react-popover';\nimport {\n ChevronDown,\n ClipboardCopy,\n FileText,\n Folder,\n ListFilter,\n RefreshCw,\n Search,\n Terminal,\n X,\n} from 'lucide-react';\nimport { useEffect, useMemo, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\n\nimport { SlidingSegmented } from '@/components/ui/sliding-segmented';\nimport { Button } from '@/components/ui/button';\nimport { bareInputFocusClass, selectControlBaseClass } from '@/lib/form-field-width';\nimport { cn } from '@/lib/cn';\nimport {\n getLogDir,\n getLogFiles,\n getLogModules,\n getLogStats,\n queryLogs,\n} from '@/features/logs/log-api';\nimport type { LogEntry, LogFile, LogLevel } from '@/features/logs/log.types';\nimport { LOG_LEVELS } from '@/features/logs/log.types';\nimport { messages } from '@/i18n/messages';\nimport { useGatewayStore } from '@/stores/gateway-store';\nimport { useLocaleStore } from '@/stores/locale-store';\n\nconst PAGE_LIMIT = 50;\nconst REFRESH_MS = 5000;\nconst LOG_LEVEL_SET = new Set<LogLevel>(LOG_LEVELS);\n\ntype LevelPreset = 'all' | 'errors' | 'warnPlus' | 'infoPlus' | 'verbose' | 'custom';\ntype LevelSegmentValue = Exclude<LevelPreset, 'custom'> | 'other';\n\nconst PRESET_ERRORS: LogLevel[] = ['error', 'fatal'];\nconst PRESET_WARN_PLUS: LogLevel[] = ['warn', 'error', 'fatal'];\nconst PRESET_INFO_PLUS: LogLevel[] = ['info', 'warn', 'error', 'fatal'];\n\nfunction parseLogLevelsParam(raw: string | null): Set<LogLevel> {\n if (!raw) return new Set<LogLevel>();\n const out = new Set<LogLevel>();\n for (const part of raw.split(',')) {\n const level = part.trim() as LogLevel;\n if (LOG_LEVEL_SET.has(level)) out.add(level);\n }\n return out;\n}\n\nfunction isSameLogLevelSet(a: Set<LogLevel>, b: Set<LogLevel>): boolean {\n if (a.size !== b.size) return false;\n for (const level of a) {\n if (!b.has(level)) return false;\n }\n return true;\n}\n\nfunction setMatchesLevels(s: Set<LogLevel>, levels: readonly LogLevel[]): boolean {\n if (s.size !== levels.length) return false;\n return levels.every((l) => s.has(l));\n}\n\nfunction derivePreset(levels: Set<LogLevel>): LevelPreset {\n if (levels.size === 0) return 'all';\n if (setMatchesLevels(levels, PRESET_ERRORS)) return 'errors';\n if (setMatchesLevels(levels, PRESET_WARN_PLUS)) return 'warnPlus';\n if (setMatchesLevels(levels, PRESET_INFO_PLUS)) return 'infoPlus';\n if (levels.size === LOG_LEVELS.length && LOG_LEVELS.every((l) => levels.has(l))) return 'verbose';\n return 'custom';\n}\n\nfunction segmentValueFromLevels(levels: Set<LogLevel>): LevelSegmentValue {\n const p = derivePreset(levels);\n return p === 'custom' ? 'other' : p;\n}\n\nfunction levelsForPreset(preset: Exclude<LevelPreset, 'custom'>): Set<LogLevel> {\n switch (preset) {\n case 'all':\n return new Set();\n case 'errors':\n return new Set(PRESET_ERRORS);\n case 'warnPlus':\n return new Set(PRESET_WARN_PLUS);\n case 'infoPlus':\n return new Set(PRESET_INFO_PLUS);\n case 'verbose':\n return new Set(LOG_LEVELS);\n }\n}\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (_, key) => String(params[key] ?? ''));\n}\n\nfunction moduleLabel(log: LogEntry): string {\n return String(log.module || log.prefix || log.service || log.extension || '—');\n}\n\nfunction messagePreview(log: LogEntry): string {\n if (typeof log.message === 'string' && log.message) return log.message;\n try {\n return JSON.stringify(log);\n } catch {\n return '';\n }\n}\n\nfunction formatTimeCompact(timestamp: string): string {\n try {\n const date = new Date(timestamp);\n return date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false,\n });\n } catch {\n return timestamp;\n }\n}\n\nfunction formatTimestampFull(timestamp: string): string {\n try {\n return new Date(timestamp).toLocaleString();\n } catch {\n return timestamp;\n }\n}\n\nfunction formatFileSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`;\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;\n}\n\nfunction requestIdPreview(id: string): string {\n const t = id.trim();\n if (t.length <= 10) return t;\n return `${t.slice(0, 8)}…`;\n}\n\nfunction levelLabel(level: string): string {\n return String(level).toLowerCase();\n}\n\nfunction formatStatsLine(\n byLevel: Partial<Record<LogLevel | 'silent', number>>,\n labels: Record<LogLevel, string>,\n): string {\n const parts: string[] = [];\n for (const lv of LOG_LEVELS) {\n const n = byLevel[lv] ?? 0;\n if (n > 0) parts.push(`${labels[lv]} ${n}`);\n }\n return parts.join(' · ');\n}\n\nexport function LogsPage() {\n const language = useLocaleStore((s) => s.language);\n const m = messages(language);\n const L = m.logs;\n const token = useGatewayStore((st) => st.token);\n const hasToken = Boolean(token);\n const [searchParams, setSearchParams] = useSearchParams();\n\n const initialSearch = searchParams.get('q') ?? '';\n const initialLevels = parseLogLevelsParam(searchParams.get('level'));\n const initialModule = searchParams.get('module') ?? '';\n const initialFrom = searchParams.get('from') ?? '';\n const initialTo = searchParams.get('to') ?? '';\n const initialAutoRefresh = searchParams.get('live') === '1';\n\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [hasMore, setHasMore] = useState(false);\n\n const [searchInput, setSearchInput] = useState(initialSearch);\n const [debouncedSearch, setDebouncedSearch] = useState(initialSearch.trim());\n const [selectedLevels, setSelectedLevels] = useState<Set<LogLevel>>(initialLevels);\n const [moduleFilter, setModuleFilter] = useState(initialModule);\n const [dateFrom, setDateFrom] = useState(initialFrom);\n const [dateTo, setDateTo] = useState(initialTo);\n\n const [modules, setModules] = useState<string[]>([]);\n const [files, setFiles] = useState<LogFile[]>([]);\n const [stats, setStats] = useState<Awaited<ReturnType<typeof getLogStats>> | null>(null);\n\n const [selectedLog, setSelectedLog] = useState<LogEntry | null>(null);\n const [filesOpen, setFilesOpen] = useState(false);\n const [filtersOpen, setFiltersOpen] = useState(false);\n const [logDir, setLogDir] = useState<string | null>(null);\n const [autoRefresh, setAutoRefresh] = useState(initialAutoRefresh);\n const [copiedDetail, setCopiedDetail] = useState<'json' | 'message' | null>(null);\n\n const levelSegment = useMemo(() => segmentValueFromLevels(selectedLevels), [selectedLevels]);\n\n const hasActiveFilters =\n debouncedSearch.length > 0 ||\n selectedLevels.size > 0 ||\n Boolean(moduleFilter) ||\n Boolean(dateFrom) ||\n Boolean(dateTo);\n\n const activeFilterCount =\n (debouncedSearch.length > 0 ? 1 : 0) +\n (selectedLevels.size > 0 ? 1 : 0) +\n (moduleFilter ? 1 : 0) +\n (dateFrom || dateTo ? 1 : 0);\n\n useEffect(() => {\n const t = setTimeout(() => setDebouncedSearch(searchInput.trim()), 300);\n return () => clearTimeout(t);\n }, [searchInput]);\n\n useEffect(() => {\n const nextQ = searchParams.get('q') ?? '';\n const nextModule = searchParams.get('module') ?? '';\n const nextFrom = searchParams.get('from') ?? '';\n const nextTo = searchParams.get('to') ?? '';\n const nextAutoRefresh = searchParams.get('live') === '1';\n const nextLevels = parseLogLevelsParam(searchParams.get('level'));\n const nextDebouncedQ = nextQ.trim();\n\n setSearchInput((prev) => (prev === nextQ ? prev : nextQ));\n setDebouncedSearch((prev) => (prev === nextDebouncedQ ? prev : nextDebouncedQ));\n setSelectedLevels((prev) => (isSameLogLevelSet(nextLevels, prev) ? prev : nextLevels));\n setModuleFilter((prev) => (prev === nextModule ? prev : nextModule));\n setDateFrom((prev) => (prev === nextFrom ? prev : nextFrom));\n setDateTo((prev) => (prev === nextTo ? prev : nextTo));\n setAutoRefresh((prev) => (prev === nextAutoRefresh ? prev : nextAutoRefresh));\n }, [searchParams]);\n\n useEffect(() => {\n const params = new URLSearchParams(searchParams);\n const nextQ = debouncedSearch.trim();\n if (nextQ) params.set('q', nextQ);\n else params.delete('q');\n\n if (selectedLevels.size > 0) {\n params.set('level', Array.from(selectedLevels).sort().join(','));\n } else {\n params.delete('level');\n }\n\n if (moduleFilter) params.set('module', moduleFilter);\n else params.delete('module');\n if (dateFrom) params.set('from', dateFrom);\n else params.delete('from');\n if (dateTo) params.set('to', dateTo);\n else params.delete('to');\n if (autoRefresh) params.set('live', '1');\n else params.delete('live');\n\n const next = params.toString();\n if (next !== searchParams.toString()) {\n setSearchParams(params, { replace: true });\n }\n }, [\n autoRefresh,\n dateFrom,\n dateTo,\n debouncedSearch,\n moduleFilter,\n searchParams,\n selectedLevels,\n setSearchParams,\n ]);\n\n const queryParams = useMemo(\n () => ({\n q: debouncedSearch || undefined,\n level: selectedLevels.size > 0 ? Array.from(selectedLevels) : undefined,\n module: moduleFilter || undefined,\n from: dateFrom || undefined,\n to: dateTo || undefined,\n limit: PAGE_LIMIT,\n }),\n [debouncedSearch, selectedLevels, moduleFilter, dateFrom, dateTo],\n );\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n (async () => {\n setLoading(true);\n setError(null);\n setLogs([]);\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n if (cancelled) return;\n setLogs(result.logs);\n setHasMore(result.logs.length === PAGE_LIMIT);\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : L.loadError);\n setLogs([]);\n setHasMore(false);\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, queryParams, L.loadError]);\n\n useEffect(() => {\n if (!hasToken) return;\n let cancelled = false;\n (async () => {\n try {\n const [mods, st, fileList] = await Promise.all([getLogModules(), getLogStats(), getLogFiles()]);\n if (!cancelled) {\n setModules(mods);\n setStats(st);\n setFiles(fileList);\n }\n } catch {\n /* optional */\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken]);\n\n useEffect(() => {\n if (!hasToken || !filesOpen) return;\n let cancelled = false;\n (async () => {\n try {\n const [list, dir] = await Promise.all([getLogFiles(), getLogDir()]);\n if (!cancelled) {\n setFiles(list);\n setLogDir(dir);\n }\n } catch {\n if (!cancelled) setFiles([]);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [hasToken, filesOpen]);\n\n useEffect(() => {\n if (!autoRefresh || !hasToken) return;\n const id = window.setInterval(() => {\n void (async () => {\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n setLogs(result.logs);\n setHasMore(result.logs.length === PAGE_LIMIT);\n const st = await getLogStats();\n setStats(st);\n } catch {\n /* ignore */\n }\n })();\n }, REFRESH_MS);\n return () => clearInterval(id);\n }, [autoRefresh, hasToken, queryParams]);\n\n useEffect(() => {\n if (!copiedDetail) return;\n const t = window.setTimeout(() => setCopiedDetail(null), 2000);\n return () => clearTimeout(t);\n }, [copiedDetail]);\n\n const clearFilters = () => {\n setSearchInput('');\n setDebouncedSearch('');\n setSelectedLevels(new Set());\n setModuleFilter('');\n setDateFrom('');\n setDateTo('');\n };\n\n const handleLevelSegment = (value: LevelSegmentValue) => {\n if (value === 'other') {\n setFiltersOpen(true);\n return;\n }\n setSelectedLevels(levelsForPreset(value));\n };\n\n const toggleDialogLevel = (level: LogLevel) => {\n setSelectedLevels((prev) => {\n const next = new Set(prev);\n if (next.has(level)) next.delete(level);\n else next.add(level);\n return next;\n });\n };\n\n const handleLoadMore = () => {\n if (loading || !hasMore) return;\n void (async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await queryLogs({ ...queryParams, offset: logs.length });\n setLogs((prev) => [...prev, ...result.logs]);\n setHasMore(result.logs.length === PAGE_LIMIT);\n } catch (e) {\n setError(e instanceof Error ? e.message : L.loadError);\n } finally {\n setLoading(false);\n }\n })();\n };\n\n const refreshAll = () => {\n void (async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await queryLogs({ ...queryParams, offset: 0 });\n setLogs(result.logs);\n setHasMore(result.logs.length === PAGE_LIMIT);\n const [st, fileList] = await Promise.all([getLogStats(), getLogFiles()]);\n setStats(st);\n setFiles(fileList);\n } catch (e) {\n setError(e instanceof Error ? e.message : L.loadError);\n } finally {\n setLoading(false);\n }\n })();\n };\n\n const statsLine = stats ? formatStatsLine(stats.byLevel ?? {}, L.levelNames) : '';\n\n if (!hasToken) {\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10\">\n <div className=\"flex items-start gap-3 rounded-2xl border border-edge-subtle bg-surface-base p-6 dark:border-edge\">\n <Terminal className=\"mt-0.5 size-5 shrink-0 text-fg-subtle\" strokeWidth={1.75} aria-hidden />\n <div>\n <h1 className=\"text-base font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-1 text-sm leading-relaxed text-fg-muted\">{L.needToken}</p>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6\">\n <header className=\"flex flex-col gap-4 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"min-w-0\">\n <h1 className=\"text-xl font-semibold tracking-tight text-fg\">{L.title}</h1>\n <p className=\"mt-0.5 text-sm leading-relaxed text-fg-muted\">{L.subtitle}</p>\n </div>\n <div className=\"flex w-full shrink-0 flex-col gap-2 sm:w-auto sm:max-w-md sm:flex-row sm:items-center sm:justify-end\">\n <div className=\"w-full sm:w-48\">\n <SlidingSegmented\n aria-label={L.refreshModeAria}\n value={autoRefresh ? 'live' : 'paused'}\n onChange={(v) => setAutoRefresh(v === 'live')}\n options={[\n { value: 'paused', label: L.refreshManual },\n { value: 'live', label: L.refreshLive },\n ]}\n buttonClassName=\"h-8\"\n />\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-center\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.logFiles}\n aria-label={L.logFiles}\n onClick={() => setFilesOpen(true)}\n >\n <Folder className=\"size-4\" strokeWidth={1.75} />\n {files.length > 0 ? (\n <span className=\"rounded-full bg-surface-hover px-1.5 text-xs text-fg-muted\">{files.length}</span>\n ) : null}\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 min-h-[44px] min-w-[44px] px-2 sm:min-h-9 sm:min-w-0\"\n title={L.refresh}\n aria-label={L.refresh}\n onClick={refreshAll}\n >\n <RefreshCw\n className={cn(\n 'size-4 transition-transform duration-150 ease-out motion-reduce:transition-none',\n loading && 'animate-spin motion-reduce:animate-none',\n )}\n strokeWidth={1.75}\n />\n </Button>\n </div>\n </div>\n </header>\n\n {error ? (\n <div\n className=\"rounded-xl border border-edge bg-surface-base px-3 py-2 text-sm text-fg dark:border-edge\"\n role=\"alert\"\n >\n {error}\n </div>\n ) : null}\n\n {stats && statsLine ? (\n <div className=\"flex flex-wrap items-center gap-2\">\n <Popover.Root>\n <Popover.Trigger asChild>\n <button\n type=\"button\"\n className=\"max-w-full truncate rounded-lg border border-transparent px-1 py-0.5 text-left text-xs leading-5 text-fg-subtle transition-colors duration-150 ease-out hover:border-edge-subtle hover:bg-surface-hover hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel dark:hover:border-edge\"\n >\n <span className=\"font-medium text-fg-muted\">{L.statsRegion}</span>\n <span className=\"mx-1.5 text-fg-subtle\">·</span>\n <span className=\"tabular-nums\">{statsLine}</span>\n </button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side=\"bottom\"\n align=\"start\"\n sideOffset={6}\n className={cn(\n 'z-50 w-[min(calc(100vw-2rem),20rem)] rounded-xl border border-edge bg-surface-panel p-3 shadow-popover outline-none',\n 'dark:border-edge',\n )}\n >\n <p className=\"text-xs font-medium text-fg\">{L.statsDetailTitle}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-muted\">{L.statsHint}</p>\n <ul className=\"mt-3 flex flex-col gap-1.5\" role=\"list\">\n {LOG_LEVELS.map((lv) => {\n const n = stats.byLevel?.[lv] ?? 0;\n if (n === 0) return null;\n return (\n <li\n key={lv}\n className=\"flex items-center justify-between gap-2 rounded-md border border-edge-subtle bg-surface-base px-2 py-1 text-xs dark:border-edge\"\n >\n <span className=\"font-medium capitalize text-fg\">{L.levelNames[lv]}</span>\n <span className=\"tabular-nums text-fg-muted\">{n}</span>\n </li>\n );\n })}\n </ul>\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </div>\n ) : null}\n\n <section className=\"flex flex-col gap-3\" aria-label={L.filters}>\n <div className=\"overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n <div className=\"min-w-[min(100%,36rem)]\">\n <SlidingSegmented<LevelSegmentValue>\n aria-label={L.levelPresetAria}\n value={levelSegment}\n onChange={handleLevelSegment}\n options={[\n { value: 'all', label: L.presetAll },\n { value: 'errors', label: L.presetErrors },\n { value: 'warnPlus', label: L.presetWarnPlus },\n { value: 'infoPlus', label: L.presetInfoPlus },\n { value: 'verbose', label: L.presetVerbose },\n { value: 'other', label: L.presetOther },\n ]}\n buttonClassName=\"h-8 px-1.5 text-[11px] sm:px-2 sm:text-xs\"\n />\n </div>\n </div>\n\n <div className=\"flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center\">\n <label className=\"relative min-w-0 flex-1 sm:min-w-[12rem]\">\n <span className=\"sr-only\">{L.searchPlaceholder}</span>\n <Search\n className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle\"\n strokeWidth={1.75}\n aria-hidden\n />\n <input\n type=\"search\"\n value={searchInput}\n onChange={(e) => setSearchInput(e.target.value)}\n placeholder={L.searchPlaceholder}\n autoComplete=\"off\"\n spellCheck={false}\n className={cn(\n 'h-10 w-full rounded-md border border-edge bg-surface-panel py-0 pl-10 pr-3 text-sm leading-5 text-fg placeholder:text-fg-subtle dark:border-edge',\n bareInputFocusClass,\n )}\n />\n </label>\n\n <select\n id=\"log-module\"\n value={moduleFilter}\n onChange={(e) => setModuleFilter(e.target.value)}\n aria-label={L.module}\n title={L.module}\n className={cn(\n selectControlBaseClass,\n 'h-10 w-full min-w-0 rounded-md py-0 sm:w-[min(100%,14rem)] sm:shrink-0',\n )}\n >\n <option value=\"\">{L.allModules}</option>\n {modules.map((mod) => (\n <option key={mod} value={mod}>\n {mod}\n </option>\n ))}\n </select>\n\n <div className=\"flex min-w-0 shrink-0 items-center gap-2\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"h-10 min-h-[44px] gap-2 rounded-md sm:min-h-10\"\n onClick={() => setFiltersOpen(true)}\n >\n <ListFilter className=\"size-4\" strokeWidth={1.75} />\n {L.filtersMore}\n {activeFilterCount > 0 ? (\n <span className=\"rounded-md bg-surface-hover px-1.5 text-xs tabular-nums text-fg-muted\">\n {activeFilterCount}\n </span>\n ) : null}\n </Button>\n {hasActiveFilters ? (\n <Button type=\"button\" variant=\"ghost\" className=\"h-10 min-h-[44px] gap-1 sm:min-h-10\" onClick={clearFilters}>\n <X className=\"size-4\" strokeWidth={1.75} />\n {L.clear}\n </Button>\n ) : null}\n </div>\n </div>\n\n {autoRefresh ? <p className=\"text-xs leading-5 text-fg-subtle\">{L.liveHint}</p> : null}\n </section>\n\n {loading && logs.length === 0 ? (\n <div\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel dark:divide-edge dark:border-edge\"\n aria-busy=\"true\"\n >\n {Array.from({ length: 8 }).map((_, i) => (\n <div key={i} className=\"flex gap-3 px-3 py-2.5\">\n <div className=\"h-4 w-16 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-12 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 w-20 shrink-0 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n <div className=\"h-4 min-w-0 flex-1 bg-surface-hover motion-reduce:animate-none animate-pulse\" />\n </div>\n ))}\n </div>\n ) : null}\n\n {!loading && logs.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center gap-2 rounded-xl border border-edge-subtle bg-surface-base py-16 text-center dark:border-edge\">\n <FileText className=\"size-12 text-fg-subtle\" strokeWidth={1.5} aria-hidden />\n <h2 className=\"text-base font-semibold tracking-tight text-fg\">{L.noLogs}</h2>\n <p className=\"max-w-sm text-sm leading-relaxed text-fg-muted\">{L.noLogsDescription}</p>\n <Button type=\"button\" variant=\"secondary\" className=\"mt-4 gap-2\" onClick={refreshAll}>\n <RefreshCw className=\"size-4\" strokeWidth={1.75} />\n {L.refresh}\n </Button>\n </div>\n ) : null}\n\n {logs.length > 0 ? (\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-xs leading-5 text-fg-muted\">\n {interpolate(L.showingCount, { count: String(logs.length) })}\n {hasMore ? <span className=\"text-fg-subtle\"> · {L.moreAvailable}</span> : null}\n </p>\n <ul\n className=\"divide-y divide-edge-subtle overflow-hidden rounded-xl border border-edge bg-surface-panel font-mono text-sm leading-6 dark:divide-edge dark:border-edge\"\n role=\"list\"\n >\n {logs.map((log, idx) => {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId.trim() : '';\n return (\n <li key={`${log.timestamp}-${idx}`}>\n <button\n type=\"button\"\n onClick={() => setSelectedLog(log)}\n className={cn(\n 'flex w-full min-w-0 items-center gap-3 px-3 py-2.5 text-left transition-colors duration-150 ease-out',\n 'hover:bg-surface-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n )}\n >\n <span className=\"w-[5.25rem] shrink-0 tabular-nums text-fg-subtle\">\n {formatTimeCompact(log.timestamp)}\n </span>\n <span className=\"w-[4.5rem] shrink-0 truncate text-fg-muted\" title={lv}>\n {levelLabel(lv)}\n </span>\n <span\n className=\"w-[4.5rem] shrink-0 truncate text-fg-subtle sm:w-[5.25rem]\"\n title={rid ? `${L.requestId}: ${rid}` : undefined}\n >\n {rid ? requestIdPreview(rid) : '—'}\n </span>\n <span\n className=\"hidden max-w-[7rem] shrink-0 truncate text-fg-muted lg:inline\"\n title={moduleLabel(log)}\n >\n {moduleLabel(log)}\n </span>\n <span className=\"min-w-0 flex-1 truncate text-fg\">{messagePreview(log)}</span>\n </button>\n </li>\n );\n })}\n </ul>\n {hasMore ? (\n <div className=\"flex justify-center pt-1\">\n <Button\n type=\"button\"\n variant=\"secondary\"\n className=\"gap-2\"\n disabled={loading}\n onClick={handleLoadMore}\n >\n {loading ? (\n <RefreshCw className=\"size-4 animate-spin motion-reduce:animate-none\" strokeWidth={1.75} />\n ) : (\n <ChevronDown className=\"size-4\" strokeWidth={1.75} />\n )}\n {L.loadMore}\n </Button>\n </div>\n ) : null}\n </div>\n ) : null}\n\n <Dialog.Root open={filtersOpen} onOpenChange={setFiltersOpen}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-50 bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 z-50 flex max-h-[min(32rem,90vh)] w-[min(100%-2rem,22rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n aria-describedby=\"log-filters-desc\"\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.filtersDialogTitle}</Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"h-9 w-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div id=\"log-filters-desc\" className=\"sr-only\">\n {L.filtersDialogDesc}\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4\">\n <p className=\"text-xs font-medium text-fg-muted\">{L.timeRange}</p>\n <div className=\"mt-2 flex flex-col gap-3\">\n <div>\n <label htmlFor=\"log-from-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.from}\n </label>\n <input\n id=\"log-from-d\"\n type=\"datetime-local\"\n value={dateFrom}\n onChange={(e) => setDateFrom(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base px-2 py-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n <div>\n <label htmlFor=\"log-to-d\" className=\"mb-1 block text-xs text-fg-muted\">\n {L.to}\n </label>\n <input\n id=\"log-to-d\"\n type=\"datetime-local\"\n value={dateTo}\n onChange={(e) => setDateTo(e.target.value)}\n className=\"w-full rounded-xl border border-edge bg-surface-base px-2 py-2 text-sm text-fg dark:border-edge\"\n />\n </div>\n </div>\n <p className=\"mt-6 text-xs font-medium text-fg-muted\">{L.levelCustom}</p>\n <p className=\"mt-1 text-xs leading-5 text-fg-subtle\">{L.levelCustomHint}</p>\n <div className=\"mt-3 flex flex-wrap gap-2\" role=\"group\" aria-label={L.level}>\n {LOG_LEVELS.map((level) => {\n const active = selectedLevels.has(level);\n return (\n <button\n key={level}\n type=\"button\"\n className={cn(\n 'rounded-full border px-3 py-1.5 text-xs font-medium capitalize transition-[color,background-color,border-color] duration-150 ease-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel',\n active\n ? 'border-edge bg-surface-active text-fg dark:border-edge'\n : 'border-edge-subtle bg-surface-base text-fg-muted hover:bg-surface-hover dark:border-edge',\n )}\n onClick={() => toggleDialogLevel(level)}\n >\n {L.levelNames[level]}\n </button>\n );\n })}\n </div>\n </div>\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-3 dark:border-edge\">\n <Button type=\"button\" className=\"w-full rounded-xl\" onClick={() => setFiltersOpen(false)}>\n {L.filtersDone}\n </Button>\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n\n <Dialog.Root open={selectedLog !== null} onOpenChange={(o) => !o && setSelectedLog(null)}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-50 bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-drawer-right fixed right-0 top-0 z-50 flex h-full w-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n aria-describedby={undefined}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"text-base font-semibold tracking-tight text-fg\">{L.details}</Dialog.Title>\n <div className=\"flex min-w-0 items-center gap-1\">\n {selectedLog ? (\n <>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n const text = typeof selectedLog.message === 'string' ? selectedLog.message : '';\n void navigator.clipboard.writeText(text).then(() => setCopiedDetail('message'));\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'message' ? L.copied : L.copyMessage}</span>\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n className=\"h-9 shrink-0 gap-1 px-2 text-xs\"\n onClick={() => {\n void navigator.clipboard\n .writeText(JSON.stringify(selectedLog, null, 2))\n .then(() => setCopiedDetail('json'));\n }}\n >\n <ClipboardCopy className=\"size-3.5 shrink-0\" strokeWidth={1.75} />\n <span className=\"hidden sm:inline\">{copiedDetail === 'json' ? L.copied : L.copyJson}</span>\n </Button>\n </>\n ) : null}\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"h-9 w-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-4 font-mono text-sm leading-relaxed\">\n {selectedLog ? (\n <LogDetailBody\n log={selectedLog}\n labels={{\n time: L.time,\n level: L.level,\n module: L.module,\n message: L.message,\n metadata: L.metadata,\n requestId: L.requestId,\n sessionId: L.sessionId,\n }}\n />\n ) : null}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n\n <Dialog.Root open={filesOpen} onOpenChange={setFilesOpen}>\n <Dialog.Portal>\n <Dialog.Overlay className=\"xopc-dialog-overlay fixed inset-0 z-50 bg-scrim\" />\n <Dialog.Content\n className={cn(\n 'xopc-dialog-content fixed left-1/2 top-1/2 z-50 flex max-h-[min(32rem,85vh)] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 flex-col rounded-xl border border-edge bg-surface-panel shadow-popover outline-none',\n 'dark:border-edge',\n )}\n >\n <div className=\"flex shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge\">\n <Dialog.Title className=\"flex items-center gap-2 text-base font-semibold tracking-tight text-fg\">\n <Folder className=\"size-4 text-fg-muted\" strokeWidth={1.75} />\n {L.logFiles}\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button type=\"button\" variant=\"ghost\" className=\"h-9 w-9 shrink-0 p-0\" aria-label={L.close}>\n <X className=\"size-5\" strokeWidth={1.75} />\n </Button>\n </Dialog.Close>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto px-4 py-3\">\n {files.length === 0 ? (\n <p className=\"text-sm text-fg-muted\">{L.filesEmpty}</p>\n ) : (\n <ul className=\"flex flex-col gap-2\" role=\"list\">\n {files.map((f) => (\n <li\n key={f.name}\n className=\"flex flex-col gap-1 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge\"\n >\n <span className=\"break-all font-mono text-xs text-fg\">{f.name}</span>\n <span className=\"flex flex-wrap gap-x-2 text-xs text-fg-subtle\">\n <span>{formatFileSize(f.size)}</span>\n <span>{formatTimestampFull(f.modified)}</span>\n </span>\n </li>\n ))}\n </ul>\n )}\n </div>\n {logDir ? (\n <div className=\"shrink-0 border-t border-edge-subtle px-4 py-2 text-xs text-fg-subtle dark:border-edge\">\n <span className=\"font-medium text-fg-muted\">{L.logDir}: </span>\n <code className=\"break-all text-fg-subtle\">{logDir}</code>\n </div>\n ) : null}\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n </div>\n );\n}\n\nfunction LogDetailBody({\n log,\n labels,\n}: {\n log: LogEntry;\n labels: {\n time: string;\n level: string;\n module: string;\n message: string;\n metadata: string;\n requestId: string;\n sessionId: string;\n };\n}) {\n const lv = log.level ?? 'info';\n const rid = typeof log.requestId === 'string' ? log.requestId : '';\n const sid = typeof log.sessionId === 'string' ? log.sessionId : '';\n return (\n <div className=\"flex flex-col gap-8\">\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.message}</span>\n <pre className=\"mt-2 whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {log.message || '—'}\n </pre>\n </div>\n <div className=\"grid grid-cols-[5.5rem_1fr] gap-x-3 gap-y-2 text-xs\">\n <span className=\"font-sans text-fg-muted\">{labels.time}</span>\n <code className=\"break-all text-fg\">{log.timestamp}</code>\n <span className=\"font-sans text-fg-muted\">{labels.level}</span>\n <span className=\"text-fg\">{levelLabel(lv)}</span>\n <span className=\"font-sans text-fg-muted\">{labels.module}</span>\n <code className=\"break-all text-fg\">{moduleLabel(log)}</code>\n {rid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.requestId}</span>\n <code className=\"break-all text-fg\">{rid}</code>\n </>\n ) : null}\n {sid ? (\n <>\n <span className=\"font-sans text-fg-muted\">{labels.sessionId}</span>\n <code className=\"break-all text-fg\">{sid}</code>\n </>\n ) : null}\n </div>\n {log.meta && Object.keys(log.meta).length > 0 ? (\n <div>\n <span className=\"text-xs font-sans font-medium text-fg-muted\">{labels.metadata}</span>\n <pre className=\"mt-2 overflow-x-auto whitespace-pre-wrap break-words border border-edge bg-surface-base p-3 text-xs leading-relaxed text-fg dark:border-edge\">\n {JSON.stringify(log.meta, null, 2)}\n </pre>\n </div>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r}from"./vendor-swr-B5fPo7KK.js";import{t as i}from"./cn-BMCV0OMB.js";import{Cn as a,Ct as o,Dn as s,Dt as c,Et as l,Fn as u,Jn as d,Kr as f,On as p,Ot as m,St as h,Tt as ee,U as g,W as _,X as v,Y as y,Z as b,br as te,bt as x,ct as ne,dt as re,ft as ie,hi as ae,hn as oe,ht as se,ir as S,kr as ce,lr as C,lt as le,mt as ue,oi as de,ot as fe,pt as pe,rr as w,si as T,st as me,un as he,ut as E,wn as D,xr as ge,xt as _e,yr as ve,zr as O}from"./index-CR8zUHGR.js";var k=e(t(),1),A=n();function ye(e){let t=new Date(e),n=Math.floor((new Date().getTime()-t.getTime())/(1e3*60*60*24));return n===0?t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):n===1?`Yesterday`:n<7?t.toLocaleDateString([],{weekday:`short`}):t.toLocaleDateString([],{month:`short`,day:`numeric`})}function be(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function xe({session:e,variant:t,labels:n,sessionAgentId:r,sessionAgentAvatar:a,onOpen:o,onAction:c}){let l=e.name?.trim()||n.unnamedSession,d=!!e.name?.trim(),f=e.status===`archived`,p=e.status===`pinned`;return(0,A.jsxs)(`div`,{role:`button`,tabIndex:0,className:i(`group flex min-w-0 w-full max-w-full cursor-pointer flex-col rounded-xl bg-surface-base text-left transition-colors duration-150 ease-out`,`hover:bg-surface-hover active:scale-[0.99]`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,t===`list`&&`sm:flex-row sm:items-center sm:gap-4`),onClick:o,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),o())},children:[(0,A.jsxs)(`div`,{className:i(`flex min-w-0 items-start justify-between gap-2 bg-surface-hover/35 px-3 py-2 dark:bg-surface-hover/25`,t===`list`&&`sm:py-3`),children:[(0,A.jsx)(`div`,{className:`flex min-w-0 items-center gap-2`,children:(0,A.jsx)(`span`,{className:`truncate text-[11px] font-medium uppercase tracking-wide text-fg-subtle`,children:e.sourceChannel})}),(0,A.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1.5 text-xs text-fg-muted`,children:[p?(0,A.jsx)(w,{className:`size-3.5 text-accent-fg`,strokeWidth:1.75,"aria-hidden":!0}):null,(0,A.jsx)(`span`,{children:ye(e.updatedAt)})]})]}),(0,A.jsxs)(`div`,{className:i(`min-w-0 flex-1 px-3 py-2`,t===`list`&&`sm:py-3`),children:[(0,A.jsxs)(`div`,{className:i(`flex gap-3`,t===`list`&&`sm:items-start`),children:[(0,A.jsx)(b,{agentId:r,avatar:a,size:40,className:`size-10 shrink-0 ring-1 ring-edge/60 dark:ring-edge`}),(0,A.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,A.jsx)(`div`,{className:`min-w-0 max-w-full truncate text-sm font-semibold text-fg`,title:l,children:l}),d?(0,A.jsx)(`div`,{className:`mt-0.5 min-w-0 max-w-full truncate font-mono text-[11px] text-fg-subtle`,title:e.key,children:e.key}):null]})]}),(0,A.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-center gap-3 text-xs text-fg-muted`,children:[(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,A.jsx)(C,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0}),e.messageCount]}),(0,A.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,A.jsx)(s,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0}),be(e.estimatedTokens)]})]}),e.tags.length>0?(0,A.jsxs)(`div`,{className:`mt-2 flex flex-wrap gap-1`,children:[e.tags.slice(0,3).map(e=>(0,A.jsx)(`span`,{className:`max-w-full break-words rounded-md bg-surface-hover px-1.5 py-0.5 text-[11px] text-fg-muted`,children:e},e)),e.tags.length>3?(0,A.jsxs)(`span`,{className:`text-[11px] text-fg-disabled`,children:[`+`,e.tags.length-3]}):null]}):null]}),(0,A.jsxs)(`div`,{className:`flex flex-wrap items-center gap-0.5 border-t border-edge-subtle/80 bg-surface-hover/25 px-2 py-2 dark:border-edge-subtle`,onClick:e=>e.stopPropagation(),onKeyDown:e=>e.stopPropagation(),children:[(0,A.jsx)(`button`,{type:`button`,className:g,title:n.continueChat,"aria-label":n.continueChat,onClick:()=>c(`continue`),children:(0,A.jsx)(C,{className:`size-4`,strokeWidth:1.75})}),f?(0,A.jsx)(`button`,{type:`button`,className:g,title:n.unarchive,"aria-label":n.unarchive,onClick:()=>c(`unarchive`),children:(0,A.jsx)(T,{className:`size-4`,strokeWidth:1.75})}):(0,A.jsx)(`button`,{type:`button`,className:g,title:n.archive,"aria-label":n.archive,onClick:()=>c(`archive`),children:(0,A.jsx)(de,{className:`size-4`,strokeWidth:1.75})}),p?(0,A.jsx)(`button`,{type:`button`,className:g,title:n.unpin,"aria-label":n.unpin,onClick:()=>c(`unpin`),children:(0,A.jsx)(S,{className:`size-4`,strokeWidth:1.75})}):(0,A.jsx)(`button`,{type:`button`,className:g,title:n.pin,"aria-label":n.pin,onClick:()=>c(`pin`),children:(0,A.jsx)(w,{className:`size-4`,strokeWidth:1.75})}),(0,A.jsx)(`button`,{type:`button`,className:g,title:n.export,"aria-label":n.export,onClick:()=>c(`export`),children:(0,A.jsx)(O,{className:`size-4`,strokeWidth:1.75})}),(0,A.jsx)(`button`,{type:`button`,className:i(g,`text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950/40`),title:n.delete,"aria-label":n.delete,onClick:()=>c(`delete`),children:(0,A.jsx)(u,{className:`size-4`,strokeWidth:1.75})})]})]})}function Se(e){if(typeof e==`string`)return e.length>2e3?`${e.slice(0,2e3)}…`:e;try{let t=JSON.stringify(e,null,2);return t.length>2e3?`${t.slice(0,2e3)}…`:t}catch{return String(e)}}function Ce({open:e,loading:t,session:n,sessionAgentId:r,sessionAgentAvatar:a,labels:s,onClose:u,onArchive:d,onUnarchive:f,onPin:g,onUnpin:_,onExport:v,onDelete:y}){let te=n?.status===`archived`,x=n?.status===`pinned`;return(0,A.jsx)(c,{open:e,onOpenChange:e=>!e&&u(),children:(0,A.jsxs)(l,{children:[(0,A.jsx)(ee,{className:`xopc-dialog-overlay fixed inset-0 z-50 bg-scrim`}),(0,A.jsxs)(o,{className:i(`xopc-drawer-right fixed right-0 top-0 z-50 flex h-full w-full max-w-lg flex-col border-l border-edge bg-surface-panel shadow-popover outline-none`,`dark:border-edge`),"aria-describedby":void 0,children:[(0,A.jsxs)(`div`,{className:`flex min-w-0 shrink-0 items-center justify-between gap-2 border-b border-edge px-4 py-3 dark:border-edge`,children:[(0,A.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-3`,children:[n&&r?(0,A.jsx)(b,{agentId:r,avatar:a,size:40,className:`size-10 shrink-0 ring-1 ring-edge/60 dark:ring-edge`}):null,(0,A.jsx)(m,{className:`min-w-0 flex-1 truncate text-base font-semibold tracking-tight text-fg`,children:n?.name?.trim()||s.unnamedSession})]}),(0,A.jsx)(h,{asChild:!0,children:(0,A.jsx)(D,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-label":s.close,children:(0,A.jsx)(p,{className:`size-5`,strokeWidth:1.75})})})]}),(0,A.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-4 py-3`,children:t?(0,A.jsx)(`p`,{className:`text-sm text-fg-muted`,children:s.detailLoading}):n?(0,A.jsxs)(A.Fragment,{children:[(0,A.jsxs)(`dl`,{className:`mb-4 grid gap-2 text-xs text-fg-muted`,children:[(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`dt`,{className:`text-fg-disabled`,children:`Key`}),(0,A.jsx)(`dd`,{className:`mt-0.5 break-all font-mono text-fg`,children:n.key})]}),(0,A.jsx)(`div`,{className:`flex flex-wrap gap-4`,children:(0,A.jsxs)(`span`,{children:[n.messageCount,` msgs · `,n.estimatedTokens,` tok`]})})]}),(0,A.jsx)(`h3`,{className:`mb-2 text-xs font-medium uppercase tracking-wide text-fg-subtle`,children:s.detailMessages}),(0,A.jsx)(`ul`,{className:`space-y-3`,children:n.messages.map((e,t)=>(0,A.jsxs)(`li`,{className:`rounded-lg border border-edge-subtle bg-surface-hover/50 p-2 dark:border-edge`,children:[(0,A.jsx)(`div`,{className:`mb-1 text-[10px] font-medium uppercase text-fg-subtle`,children:e.role}),(0,A.jsx)(`pre`,{className:`max-h-40 overflow-auto whitespace-pre-wrap break-words font-mono text-[11px] leading-relaxed text-fg-muted`,children:Se(e.content)})]},`${e.timestamp??t}-${t}`))})]}):null}),(0,A.jsx)(`div`,{className:`shrink-0 border-t border-edge px-4 py-3 dark:border-edge`,children:(0,A.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,A.jsx)(D,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:v,children:s.detailExport}),te?(0,A.jsx)(D,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:f,children:s.unarchive}):(0,A.jsx)(D,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:d,children:s.archive}),x?(0,A.jsx)(D,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:_,children:s.unpin}):(0,A.jsx)(D,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:g,children:s.pin}),(0,A.jsx)(D,{type:`button`,variant:`secondary`,className:`text-sm text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-950/40`,onClick:y,children:s.delete})]})})]})]})})}var we=20;function Te(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}var Ee=new Set([`all`,`active`,`pinned`,`archived`]),De=new Set([`grid`,`list`]);function j(){let e=a(oe(e=>e.language)),t=e.sessions,n=he(e=>e.token),s=!!n,{data:u,mutate:p}=r(s?[`gateway-chat-agents`,n]:null,se,{revalidateOnFocus:!1}),h=u?.defaultId??`main`,g=u?.items??[],[b,S]=ae(),C=b.get(`q`)??``,T=b.get(`status`),O=b.get(`view`),ye=b.get(`channel`)??``,be=Ee.has(T)?T:`all`,Se=De.has(O)?O:`grid`,[j,Oe]=(0,k.useState)(C),[M,ke]=(0,k.useState)(C.trim()),[N,Ae]=(0,k.useState)(be),[P,F]=(0,k.useState)(Se),[I,L]=(0,k.useState)(ye.trim()),[R,z]=(0,k.useState)([]),[B,V]=(0,k.useState)(!1),[je,H]=(0,k.useState)(null),[U,Me]=(0,k.useState)(!1),[W,G]=(0,k.useState)(null),[Ne,K]=(0,k.useState)(!1),[Pe,Fe]=(0,k.useState)(!1),[q,J]=(0,k.useState)(null),[Ie,Y]=(0,k.useState)(!1),[X,Z]=(0,k.useState)(null);(0,k.useEffect)(()=>{let e=setTimeout(()=>ke(j.trim()),300);return()=>clearTimeout(e)},[j]),(0,k.useEffect)(()=>{let e=b.get(`q`)??``,t=b.get(`status`),n=b.get(`view`),r=(b.get(`channel`)??``).trim(),i=Ee.has(t)?t:`all`,a=De.has(n)?n:`grid`,o=e.trim();Oe(t=>t===e?t:e),ke(e=>e===o?e:o),Ae(e=>e===i?e:i),F(e=>e===a?e:a),L(e=>e===r?e:r)},[b]),(0,k.useEffect)(()=>{let e=new URLSearchParams(b),t=M.trim();t?e.set(`q`,t):e.delete(`q`),N===`all`?e.delete(`status`):e.set(`status`,N),P===`grid`?e.delete(`view`):e.set(`view`,P),I?e.set(`channel`,I):e.delete(`channel`),e.toString()!==b.toString()&&S(e,{replace:!0})},[M,b,S,N,P,I]),(0,k.useEffect)(()=>{if(!s)return;let e=!1;return(async()=>{V(!0),H(null);try{let t=await re({limit:we,offset:0,...M?{search:M}:{},...N===`all`?{}:{status:N},...I?{channel:I}:{}});if(e)return;z(t.items),Me(t.hasMore)}catch(n){e||H(n instanceof Error?n.message:t.loadError)}finally{e||V(!1)}})(),()=>{e=!0}},[s,M,N,t.loadError]),(0,k.useEffect)(()=>{s&&E().then(G).catch(()=>{})},[s]),(0,k.useEffect)(()=>{if(!s)return;let e=()=>void p();return window.addEventListener(`config-reload`,e),()=>window.removeEventListener(`config-reload`,e)},[s,p]),(0,k.useEffect)(()=>{if(!s)return;let e=e=>{let t=e.detail;!t?.key||t.name===void 0||(z(e=>e.map(e=>e.key===t.key?{...e,name:t.name}:e)),J(e=>e&&e.key===t.key?{...e,name:t.name}:e))};return window.addEventListener(`session-updated`,e),()=>{window.removeEventListener(`session-updated`,e)}},[s]);let Le=(0,k.useCallback)(async()=>{if(!(!s||B||!U)){V(!0),H(null);try{let e=await re({limit:we,offset:R.length,...M?{search:M}:{},...N===`all`?{}:{status:N},...I?{channel:I}:{}});z(t=>[...t,...e.items]),Me(e.hasMore)}catch(e){H(e instanceof Error?e.message:t.loadError)}finally{V(!1)}}},[s,B,U,R.length,M,N,I,t.loadError]),Q=(0,k.useCallback)((e,t)=>{z(n=>n.map(n=>n.key===e?{...n,status:t}:n)),J(n=>n&&n.key===e?{...n,status:t}:n)},[]),Re=(0,k.useCallback)(async e=>{K(!0),Fe(!0),J(null);try{J(await le(e))}catch{K(!1)}finally{Fe(!1)}},[]),ze=e=>{Re(e)},$=async(e,t)=>{if(t===`continue`){window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{sessionKey:e},bubbles:!0}));return}if(t===`delete`){Z(e),Y(!0);return}try{switch(t){case`archive`:await fe(e),Q(e,`archived`);break;case`unarchive`:await pe(e),Q(e,`active`);break;case`pin`:await ie(e),Q(e,`pinned`);break;case`unpin`:await ue(e),Q(e,`active`);break;case`export`:{let t=await ne(e),n=new Blob([t],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`session-${e.replace(/[^a-z0-9]/gi,`_`)}.json`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r);break}default:break}E().then(G).catch(()=>{})}catch{}},Be=async e=>{try{await me(e),z(t=>t.filter(t=>t.key!==e)),J(t=>t?.key===e?null:t),q?.key===e&&K(!1),E().then(G).catch(()=>{})}catch{}},Ve={continueChat:t.continueChat,archive:t.archive,unarchive:t.unarchive,pin:t.pin,unpin:t.unpin,export:t.export,delete:t.delete,unnamedSession:e.chat.newSession},He={close:t.close,detailLoading:t.detailLoading,detailMessages:t.detailMessages,detailExport:t.detailExport,archive:t.archive,unarchive:t.unarchive,pin:t.pin,unpin:t.unpin,delete:t.delete,unnamedSession:e.chat.newSession},Ue=[{key:`all`,label:t.filterAll,icon:ge},{key:`active`,label:t.filterActive,icon:f},{key:`pinned`,label:t.filterPinned,icon:w},{key:`archived`,label:t.filterArchived,icon:de}],We=(()=>{let e=Object.entries(W?.byChannel??{}).sort((e,t)=>t[1]-e[1]).slice(0,6).map(([e])=>e);for(let t of[`telegram`,`weixin`,`feishu`])e.includes(t)||e.push(t);return e.slice(0,8)})();return s?(0,A.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-y-auto overflow-x-hidden bg-surface-panel`,children:[(0,A.jsxs)(`div`,{className:`mx-auto flex w-full min-w-0 max-w-2xl flex-col gap-4 px-4 py-6 sm:px-6 lg:max-w-app-main lg:px-8`,children:[(0,A.jsxs)(`header`,{className:`flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between`,children:[(0,A.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:t.title}),(0,A.jsxs)(`div`,{className:`flex w-full min-w-0 items-center gap-2 rounded-xl bg-surface-base px-3 py-2 transition-colors sm:max-w-md dark:bg-surface-hover/40`,children:[(0,A.jsx)(d,{className:`size-4 shrink-0 text-fg-disabled`,strokeWidth:1.75,"aria-hidden":!0}),(0,A.jsx)(`input`,{type:`search`,value:j,onChange:e=>Oe(e.target.value),placeholder:t.searchPlaceholder,className:`min-w-0 flex-1 border-0 bg-transparent text-sm text-fg placeholder:text-fg-disabled focus:outline-none focus:ring-0`})]})]}),(0,A.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:Ue.map(({key:e,label:t,icon:n})=>(0,A.jsxs)(`button`,{type:`button`,"aria-pressed":N===e,onClick:()=>Ae(e),className:i(`inline-flex items-center gap-1.5 rounded-xl px-3 py-2 text-sm font-medium`,_.transition,_.focusRingPanel,N===e?`bg-accent-soft text-accent-fg`:`bg-surface-base text-fg-muted hover:bg-surface-hover hover:text-fg dark:bg-surface-hover/35`),children:[(0,A.jsx)(n,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),t]},e))}),(0,A.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,A.jsx)(`span`,{className:`text-xs font-medium text-fg-subtle`,children:t.filterChannelLabel}),(0,A.jsx)(`button`,{type:`button`,"aria-pressed":!I,onClick:()=>L(``),className:i(`inline-flex items-center rounded-xl px-3 py-2 text-sm font-medium`,_.transition,_.focusRingPanel,I?`bg-surface-base text-fg-muted hover:bg-surface-hover hover:text-fg dark:bg-surface-hover/35`:`bg-accent-soft text-accent-fg`),children:t.filterChannelAll}),We.map(e=>(0,A.jsxs)(`button`,{type:`button`,"aria-pressed":I===e,onClick:()=>L(e),className:i(`inline-flex items-center rounded-xl px-3 py-2 text-sm font-medium`,_.transition,_.focusRingPanel,I===e?`bg-accent-soft text-accent-fg`:`bg-surface-base text-fg-muted hover:bg-surface-hover hover:text-fg dark:bg-surface-hover/35`),children:[e,W?.byChannel?.[e]==null?null:(0,A.jsx)(`span`,{className:`ml-2 rounded-full bg-surface-hover px-2 py-0.5 text-[11px] text-fg-subtle`,children:W.byChannel[e]})]},e))]}),W?(0,A.jsx)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-4`,children:[[W.totalSessions,t.totalSessions],[W.activeSessions,t.activeSessions],[W.pinnedSessions,t.pinnedSessions],[W.archivedSessions,t.archivedSessions]].map(([e,t])=>(0,A.jsxs)(`div`,{className:`rounded-xl bg-surface-base px-3 py-3 dark:bg-surface-hover/30`,children:[(0,A.jsx)(`div`,{className:`text-lg font-semibold tabular-nums text-fg`,children:e}),(0,A.jsx)(`div`,{className:`text-xs text-fg-muted`,children:t})]},t))}):null,je?(0,A.jsx)(`div`,{className:`rounded-lg border border-edge bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-edge dark:bg-red-950/40 dark:text-red-300`,children:je}):null,(0,A.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,A.jsx)(`p`,{className:`text-xs text-fg-muted`,children:Te(t.sessionCount,{count:R.length})}),(0,A.jsxs)(`div`,{className:_e,role:`group`,"aria-label":t.layoutToggleGroup,children:[(0,A.jsx)(D,{type:`button`,variant:`segmented`,title:t.gridView,"aria-pressed":P===`grid`,onClick:()=>F(`grid`),className:i(x,`size-7 p-0`,P===`grid`&&`bg-surface-panel shadow-sm dark:bg-surface-panel dark:shadow-sm dark:ring-1 dark:ring-edge-strong/40`,P===`grid`&&`text-accent-fg`),children:(0,A.jsx)(te,{className:`size-3.5`,strokeWidth:1.5})}),(0,A.jsx)(D,{type:`button`,variant:`segmented`,title:t.listView,"aria-pressed":P===`list`,onClick:()=>F(`list`),className:i(x,`size-9 p-0`,P===`list`&&`bg-surface-panel shadow-sm dark:bg-surface-panel dark:shadow-sm dark:ring-1 dark:ring-edge-strong/40`,P===`list`&&`text-accent-fg`),children:(0,A.jsx)(ve,{className:`size-3.5`,strokeWidth:1.5})})]})]}),B&&R.length===0?(0,A.jsx)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3`,children:Array.from({length:6}).map((e,t)=>(0,A.jsx)(`div`,{className:`h-40 animate-pulse rounded-xl bg-surface-hover/60 dark:bg-surface-hover/40`},t))}):R.length===0?(0,A.jsxs)(`div`,{className:`flex flex-col items-center justify-center rounded-2xl bg-surface-base py-16 text-center dark:bg-surface-hover/25`,children:[(0,A.jsx)(ce,{className:`mb-3 size-12 text-fg-disabled`,strokeWidth:1.25,"aria-hidden":!0}),(0,A.jsx)(`p`,{className:`text-base font-semibold text-fg`,children:t.noSessions}),(0,A.jsx)(`p`,{className:`mt-1 max-w-sm text-sm text-fg-muted`,children:t.noSessionsDescription}),(0,A.jsx)(D,{variant:`primary`,className:`mt-6`,onClick:()=>{window.dispatchEvent(new CustomEvent(`navigate-to-chat`,{detail:{sessionKey:``},bubbles:!0}))},children:t.startNewChat})]}):(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(`div`,{className:i(`grid min-w-0 gap-3`,P===`grid`?`sm:grid-cols-2 lg:grid-cols-3`:`grid-cols-1`),children:R.map(e=>{let t=v(e,h);return(0,A.jsx)(xe,{session:e,variant:P,labels:Ve,sessionAgentId:t,sessionAgentAvatar:y(t,g),onOpen:()=>ze(e.key),onAction:t=>void $(e.key,t)},e.key)})}),U?(0,A.jsx)(`div`,{className:`flex justify-center pt-2`,children:(0,A.jsx)(D,{type:`button`,variant:`secondary`,disabled:B,onClick:()=>void Le(),children:t.loadMore})}):null]})]}),(0,A.jsx)(Ce,{open:Ne,loading:Pe,session:q,sessionAgentId:q?v(q,h):void 0,sessionAgentAvatar:q?y(v(q,h),g):void 0,labels:He,onClose:()=>{K(!1),J(null)},onArchive:()=>q&&void $(q.key,`archive`),onUnarchive:()=>q&&void $(q.key,`unarchive`),onPin:()=>q&&void $(q.key,`pin`),onUnpin:()=>q&&void $(q.key,`unpin`),onExport:()=>q&&void $(q.key,`export`),onDelete:()=>q&&(Z(q.key),Y(!0))}),(0,A.jsx)(c,{open:Ie,onOpenChange:Y,children:(0,A.jsxs)(l,{children:[(0,A.jsx)(ee,{className:`xopc-dialog-overlay fixed inset-0 z-[60] bg-scrim`}),(0,A.jsxs)(o,{className:`xopc-dialog-content fixed left-1/2 top-1/2 z-[60] w-[min(100%-2rem,24rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`,children:[(0,A.jsx)(m,{className:`text-base font-semibold text-fg`,children:t.deleteSessionTitle}),(0,A.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:X?Te(t.deleteSessionMessage,{name:R.find(e=>e.key===X)?.name?.trim()||e.chat.newSession}):``}),(0,A.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2`,children:[(0,A.jsx)(D,{type:`button`,variant:`secondary`,onClick:()=>Y(!1),children:t.cancel}),(0,A.jsx)(D,{type:`button`,variant:`primary`,className:`bg-red-600 hover:bg-red-700`,onClick:()=>{X&&Be(X),Y(!1),Z(null)},children:t.delete})]})]})]})})]}):(0,A.jsx)(`div`,{className:`mx-auto w-full max-w-2xl px-4 py-16 text-center text-sm text-fg-muted sm:px-8 lg:max-w-app-main`,children:t.needToken})}export{j as SessionsPage};
2
- //# sourceMappingURL=sessions-page-Be5kIGl_.js.map
@@ -1,2 +0,0 @@
1
- import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r,o as i}from"./vendor-swr-B5fPo7KK.js";import{t as a}from"./cn-BMCV0OMB.js";import{An as o,At as s,Br as c,Cn as l,Cr as u,Ct as d,Dn as f,Dt as p,Et as m,Fn as h,Fr as g,Ir as _,Jn as v,Jr as y,Kn as b,Mt as x,Nt as S,On as C,Ot as w,Pr as T,Pt as E,Qr as D,Sn as O,St as k,Tr as A,Tt as ee,Un as j,Vn as te,Vr as M,W as N,Wn as P,Xn as F,Xr as ne,Zn as I,_t as L,a as re,ar as R,c as ie,cn as z,cr as B,di as V,dn as ae,dr as H,ei as oe,er as U,fr as se,g as ce,gt as W,h as le,hn as ue,i as de,jt as fe,kn as pe,kt as me,l as he,li as ge,mi as _e,mn as ve,mr as G,n as ye,nr as be,o as xe,on as K,pn as Se,pr as Ce,q as we,r as Te,ri as Ee,s as De,sn as Oe,sr as ke,t as Ae,ti as je,u as Me,ui as Ne,un as Pe,wn as q,wr as Fe,xn as Ie,yn as Le,zn as Re}from"./index-CR8zUHGR.js";import{a as ze,p as Be,v as Ve}from"./cron-utils-N1PqD2DB.js";import{a as He,c as Ue,i as J,l as We,n as Ge,o as Ke,r as qe,s as Je,t as Ye,u as Xe}from"./agents-CkgFSiCY.js";var Y=n();function Ze(){return a(`rounded-xl border border-edge-subtle bg-surface-base px-4 py-1 sm:px-5`)}function Qe({scheme:e}){return e===`emerald`?(0,Y.jsxs)(`div`,{className:`flex h-10 w-full overflow-hidden rounded-md border border-edge-subtle`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#0a0a0a] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-8 rounded-full bg-[#134e2a]`}),(0,Y.jsx)(`div`,{className:`h-1 w-5 rounded-full bg-[#134e2a]`})]}),(0,Y.jsx)(`div`,{className:`w-1.5 bg-[#10b981]`}),(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#000000] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-6 rounded-full bg-[#34d399]`}),(0,Y.jsx)(`div`,{className:`h-1 w-9 rounded-full bg-[#065f46]`}),(0,Y.jsx)(`div`,{className:`h-1 w-4 rounded-full bg-[#065f46]`})]})]}):(0,Y.jsxs)(`div`,{className:`flex h-10 w-full overflow-hidden rounded-md border border-edge-subtle`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#f5f5f7] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-8 rounded-full bg-[#d2d2d7]`}),(0,Y.jsx)(`div`,{className:`h-1 w-5 rounded-full bg-[#d2d2d7]`})]}),(0,Y.jsx)(`div`,{className:`w-1.5 bg-[#2563eb]`}),(0,Y.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 bg-[#ffffff] p-1.5`,children:[(0,Y.jsx)(`div`,{className:`h-1 w-6 rounded-full bg-[#1d1d1f]`}),(0,Y.jsx)(`div`,{className:`h-1 w-9 rounded-full bg-[#d2d2d7]`}),(0,Y.jsx)(`div`,{className:`h-1 w-4 rounded-full bg-[#d2d2d7]`})]})]})}var $e=[{value:`default`,labelKey:`colorSchemeDefault`},{value:`emerald`,labelKey:`colorSchemeLightGreen`}];function et(){let e=l(ue(e=>e.language)).appearanceSettings,t=ve(e=>e.colorScheme),n=ve(e=>e.setColorScheme);return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 border-b border-edge-subtle py-3.5 last:border-b-0 sm:py-4`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-semibold text-fg`,children:e.colorSchemeTitle}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:e.colorSchemeDescription})]}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-3 sm:grid-cols-3`,children:$e.map(({value:r,labelKey:i})=>{let o=t===r;return(0,Y.jsxs)(`button`,{type:`button`,"aria-pressed":o,onClick:()=>n(r),className:a(`flex flex-col gap-2 rounded-xl border-2 p-2.5 text-left transition-[border-color,box-shadow] duration-150`,o?`border-accent shadow-[0_0_0_1px_var(--color-accent)]`:`border-edge-subtle hover:border-edge`),children:[(0,Y.jsx)(Qe,{scheme:r}),(0,Y.jsx)(`span`,{className:a(`text-xs font-medium leading-none`,o?`text-accent-fg`:`text-fg-muted`),children:e[i]})]},r)})})]})}function tt(){let e=l(ue(e=>e.language)).appearanceSettings;return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight text-fg`,children:e.pageTitle}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.subtitle})]}),(0,Y.jsxs)(`section`,{className:Ze(),"aria-labelledby":`pref-language-heading`,children:[(0,Y.jsx)(`h2`,{id:`pref-language-heading`,className:`sr-only`,children:e.languageTitle}),(0,Y.jsx)(Se,{variant:`page`,sections:[`language`]})]}),(0,Y.jsxs)(`section`,{className:Ze(),"aria-labelledby":`pref-appearance-heading`,children:[(0,Y.jsx)(`h2`,{id:`pref-appearance-heading`,className:`sr-only`,children:e.themeTitle}),(0,Y.jsx)(Se,{variant:`page`,sections:[`theme`,`font`]}),(0,Y.jsx)(et,{})]})]})}var X=e(t(),1);function nt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function rt(e){let t=nt(e)?e:{},n=nt(t.gateway)?t.gateway:{},r=nt(n.auth)?n.auth:{},i=r.mode===`none`||r.mode===`token`?r.mode:`token`,a=(nt(t.update)?t.update:{}).channel,o=a===`beta`||a===`dev`||a===`stable`?a:`stable`;return{host:typeof n.host==`string`?n.host:``,port:typeof n.port==`number`?n.port:void 0,auth:{mode:i,token:typeof r.token==`string`?r.token:``},updateChannel:o}}async function it(e){let t=e.auth.token.trim().length>0?{mode:e.auth.mode,token:e.auth.token}:{mode:e.auth.mode};await z(K(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{auth:t},update:{channel:e.updateChannel}})}),W()}function at(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,O,`dark:border-edge`)}function ot(){let e=ue(e=>e.language),t=l(e),n=t.gatewaySettings,r=Pe(e=>e.token),i=Pe(e=>e.tokenExpired),a=Pe(e=>e.openTokenDialog),o=!!r,[s,c]=(0,X.useState)(null),[u,d]=(0,X.useState)(null),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(null),[g,v]=(0,X.useState)(!1),[y,x]=(0,X.useState)(!1),[S,C]=(0,X.useState)(!1),w=(0,X.useRef)(!1),{data:T,error:E,isLoading:D,mutate:O}=L(o),k=(0,X.useMemo)(()=>T?.payload?.config===void 0?null:structuredClone(rt(T.payload.config)),[T]);(0,X.useEffect)(()=>{if(!o){c(null),d(null),w.current=!1;return}k!==null&&(w.current||(c(k),d(structuredClone(k)),v(!1)))},[o,k]);let A=!!(o&&D&&T===void 0&&!E),ee=E instanceof Error?E.message:E?String(E):null,j=(0,X.useMemo)(()=>!s||!u?!1:JSON.stringify(s)!==JSON.stringify(u),[s,u]),te=(0,X.useCallback)(e=>{w.current=!0,c(t=>t?{...t,auth:{...t.auth,...e}}:null)},[]),M=(0,X.useCallback)(e=>{w.current=!0,c(t=>t?{...t,updateChannel:e}:null)},[]),N=(0,X.useCallback)(async()=>{if(!(!s||f)){p(!0),h(null),v(!1);try{await it(s),w.current=!1,d(structuredClone(s)),v(!0),window.setTimeout(()=>v(!1),2500)}catch(e){h(e instanceof Error?e.message:n.saveError)}finally{p(!1)}}},[s,f,n.saveError]),P=(0,X.useCallback)(async()=>{let e=s?.auth.token;e&&(await navigator.clipboard.writeText(e).catch(()=>{}),C(!0),window.setTimeout(()=>C(!1),2e3))},[s?.auth.token]);return o?A?(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(G,{className:`size-4 animate-spin`}),n.loading]})}):s?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.gateway}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:ae(e,`gateway`),target:`_blank`,rel:`noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,children:[n.docsLink,(0,Y.jsx)(_,{className:`size-3.5`})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[g?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,(0,Y.jsx)(q,{type:`button`,variant:`primary`,disabled:!j||f,onClick:()=>void N(),children:f?n.saving:n.save})]})]}),i?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-lg border border-red-200 bg-red-50 px-4 py-3 dark:border-red-900/50 dark:bg-red-950/40`,role:`alert`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(ne,{className:`mt-0.5 size-4 shrink-0 text-red-600 dark:text-red-400`}),(0,Y.jsx)(`p`,{className:`text-sm text-red-900 dark:text-red-100`,children:n.tokenExpired})]}),(0,Y.jsx)(`div`,{children:(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:()=>a(),children:n.updateToken})})]}):null,j?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,m?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:m}):null,s.auth.mode===`none`?(0,Y.jsx)(`p`,{className:`rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-xs text-amber-950 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100`,children:n.authModeNone}):null,(0,Y.jsxs)(`section`,{className:`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`,children:[(0,Y.jsxs)(`div`,{className:`mb-5 flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(b,{className:`size-4 text-accent`,strokeWidth:1.75}),t.settingsSections.gateway]}),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(s.host||s.port!=null)&&(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:n.listenHost}),(0,Y.jsx)(`div`,{className:`rounded-lg bg-surface-hover/80 px-3 py-2 font-mono text-xs text-fg-muted dark:bg-surface-hover/50`,children:s.host||`—`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:n.listenPort}),(0,Y.jsx)(`div`,{className:`rounded-lg bg-surface-hover/80 px-3 py-2 font-mono text-xs text-fg-muted dark:bg-surface-hover/50`,children:s.port==null?`—`:String(s.port)})]}),(0,Y.jsx)(`p`,{className:`sm:col-span-2 text-xs text-fg-subtle`,children:n.listenHint})]}),(0,Y.jsx)(st,{g:n,value:s.auth.token,show:y,copied:S,onToggleShow:()=>x(e=>!e),onCopy:()=>void P(),onChange:e=>te({token:e})}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`w-full sm:w-auto`,onClick:()=>a(),children:n.changeToken}),(0,Y.jsxs)(`div`,{className:`space-y-2 border-t border-edge pt-4`,children:[(0,Y.jsx)(`label`,{className:`text-sm font-medium text-fg`,htmlFor:`gateway-update-channel`,children:n.updateChannel}),(0,Y.jsxs)(`select`,{id:`gateway-update-channel`,value:s.updateChannel,onChange:e=>M(e.target.value),className:at(),children:[(0,Y.jsx)(`option`,{value:`stable`,children:n.channelStable}),(0,Y.jsx)(`option`,{value:`beta`,children:n.channelBeta}),(0,Y.jsx)(`option`,{value:`dev`,children:n.channelDev})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:n.updateChannelHint})]})]})]})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:m??ee??n.loadError}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,onClick:()=>void O(),children:n.retry})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.gateway}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function st({g:e,value:t,show:n,copied:r,onToggleShow:i,onCopy:o,onChange:s}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.accessToken}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsx)(`input`,{className:a(at(),`min-w-0 flex-1 font-mono text-xs`),type:n?`text`:`password`,autoComplete:`off`,value:t,onChange:e=>s(e.target.value),placeholder:e.tokenPlaceholder}),t?(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:o,children:[r?(0,Y.jsx)(je,{className:`size-3.5`}):(0,Y.jsx)(M,{className:`size-3.5`}),r?e.copied:e.copy]}):null,(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:i,children:[n?(0,Y.jsx)(g,{className:`size-3.5`}):(0,Y.jsx)(T,{className:`size-3.5`}),n?e.hide:e.show]})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:e.tokenHelp})]})}function ct(){return K(`/api/channels/status`)}var lt=Be;function ut(){return K(`/api/workspace/heartbeat-md`)}async function dt(){let e=await z(ut());return typeof e.payload?.content==`string`?e.payload.content:``}function ft(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function pt(e){let t=ft(e)?e:{},n=ft(t.gateway)?t.gateway:{},r=ft(n.heartbeat)?n.heartbeat:{},i=r.activeHours,a=ft(i)?i:null,o=a&&typeof a.start==`string`&&typeof a.end==`string`&&a.start&&a.end?{start:a.start,end:a.end,timezone:typeof a.timezone==`string`?a.timezone:``}:null;return{enabled:!!(r.enabled??!0),intervalMs:typeof r.intervalMs==`number`&&Number.isFinite(r.intervalMs)?r.intervalMs:18e5,target:typeof r.target==`string`?r.target:``,targetChatId:typeof r.targetChatId==`string`?r.targetChatId:``,prompt:typeof r.prompt==`string`?r.prompt:``,ackMaxChars:typeof r.ackMaxChars==`number`&&Number.isFinite(r.ackMaxChars)?r.ackMaxChars:``,isolatedSession:!!r.isolatedSession,activeHours:o}}function mt(e){let t={enabled:e.enabled,intervalMs:e.intervalMs};return e.target.trim()?t.target=e.target.trim():t.target=null,e.targetChatId.trim()?t.targetChatId=e.targetChatId.trim():t.targetChatId=null,e.prompt.trim()?t.prompt=e.prompt.trim():t.prompt=null,e.ackMaxChars===``||e.ackMaxChars===void 0?t.ackMaxChars=null:t.ackMaxChars=e.ackMaxChars,e.isolatedSession?t.isolatedSession=!0:t.isolatedSession=null,e.activeHours?.start?.trim()&&e.activeHours?.end?.trim()?t.activeHours={start:e.activeHours.start.trim(),end:e.activeHours.end.trim(),...e.activeHours.timezone.trim()?{timezone:e.activeHours.timezone.trim()}:{}}:t.activeHours=null,t}async function ht(e){await z(K(`/api/config`),{method:`PATCH`,body:JSON.stringify({gateway:{heartbeat:mt(e)}})}),W()}async function gt(e){await z(K(`/api/workspace/heartbeat-md`),{method:`PUT`,body:JSON.stringify({content:e})}),i(ut())}async function _t(e){await z(K(`/api/heartbeat/trigger`),{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e?{reason:e}:{})})}var vt=[3e4,6e4,3e5,6e5,9e5,18e5,36e5,72e5],yt=new Set(vt);function bt(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,O,`dark:border-edge`)}function xt(){return a(Ie,Le)}function St(e){if(!e||typeof e!=`object`||Array.isArray(e))return``;let t=e.agents;if(!t||typeof t!=`object`||Array.isArray(t))return``;let n=t.defaults;if(!n||typeof n!=`object`||Array.isArray(n))return``;let r=n.workspace;return typeof r==`string`?r:``}function Ct(e,t){switch(e){case 3e4:return t.every30s;case 6e4:return t.every1min;case 3e5:return t.every5min;case 6e5:return t.every10min;case 9e5:return t.every15min;case 18e5:return t.every30min;case 36e5:return t.every1h;case 72e5:return t.every2h;default:return String(e)}}function wt(){let e=ue(e=>e.language),t=l(e),n=t.heartbeatSettings,i=!!Pe(e=>e.token),[o,s]=(0,X.useState)(null),[c,u]=(0,X.useState)(null),[d,f]=(0,X.useState)(``),[p,m]=(0,X.useState)(``),[h,g]=(0,X.useState)(!1),[v,y]=(0,X.useState)(!1),[b,x]=(0,X.useState)(null),[S,C]=(0,X.useState)(!1),[w,T]=(0,X.useState)(!1),[E,D]=(0,X.useState)(!1),[O,k]=(0,X.useState)(!1),[ee,j]=(0,X.useState)(null),[te,M]=(0,X.useState)([]),{data:N,error:P,isLoading:F,mutate:ne}=L(i),{data:I,error:re,isLoading:R,mutate:ie}=r(i?ut():null,dt,{revalidateOnFocus:!1}),{data:z=[]}=r(i?ct():null,lt,{revalidateOnFocus:!1}),B=(0,X.useMemo)(()=>St(N?.payload?.config),[N]),V=(0,X.useMemo)(()=>pt(N?.payload?.config??{}),[N]),H=(0,X.useMemo)(()=>!o||!c?!1:JSON.stringify(o)!==JSON.stringify(c),[o,c]),oe=(0,X.useMemo)(()=>d!==p,[d,p]);(0,X.useEffect)(()=>{if(!i){s(null),u(null);return}if(N!==void 0&&!H){let e=structuredClone(V);s(e),u(e),C(!1)}},[i,N,V,H]),(0,X.useEffect)(()=>{!i||I===void 0||oe||(f(I),m(I),T(!1))},[i,I,oe]);let U=P instanceof Error?P.message:P?String(P):re instanceof Error?re.message:re?String(re):null,se=!!(i&&(N===void 0||I===void 0)&&!U&&(F||R));(0,X.useEffect)(()=>{if(!i||!o){M([]);return}let e=o.target.trim();if(!e){M([]);return}let t=!1;return Ve(e).then(e=>{t||M(e)}),()=>{t=!0}},[i,o?.target]);let ce=(0,X.useCallback)(()=>{let e=o?.target?.trim();e&&Ve(e).then(M)},[o?.target]),W=(0,X.useCallback)(async()=>{D(!0),k(!1),j(null);try{await _t(),k(!0),window.setTimeout(()=>k(!1),3e3)}catch(e){j(e instanceof Error?e.message:n.triggerError)}finally{D(!1)}},[n.triggerError]),le=(0,X.useCallback)(e=>{s(t=>t?{...t,...e}:null)},[]),de=(0,X.useCallback)(async()=>{if(!(!o||h)){g(!0),x(null),C(!1);try{await ht(o),u(structuredClone(o)),C(!0),window.setTimeout(()=>C(!1),2500)}catch(e){x(e instanceof Error?e.message:n.saveConfigError)}finally{g(!1)}}},[o,h,n.saveConfigError]),fe=(0,X.useCallback)(async()=>{if(!v){y(!0),x(null),T(!1);try{await gt(d),m(d),T(!0),window.setTimeout(()=>T(!1),2500)}catch(e){x(e instanceof Error?e.message:n.saveDocError)}finally{y(!1)}}},[d,v,n.saveDocError]);return i?se?(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(G,{className:`size-4 animate-spin`}),n.loading]})}):o?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsx)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.heartbeat}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:ae(e,`heartbeat`),target:`_blank`,rel:`noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,children:[n.docsLink,(0,Y.jsx)(_,{className:`size-3.5`})]})]})}),B?(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[n.workspaceLabel,`: `,(0,Y.jsx)(`span`,{className:`font-mono text-fg-muted`,children:B})]}):null,b?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:b}):null,(0,Y.jsxs)(Ge,{children:[(0,Y.jsxs)(`div`,{className:`mb-2 flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(A,{className:`size-4 text-accent`,strokeWidth:1.75}),n.configSection]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`inline-flex items-center gap-2`,disabled:E,onClick:()=>void W(),children:[E?(0,Y.jsx)(G,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(be,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),E?n.triggering:n.triggerNow]}),O?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.triggered}):null]})]}),(0,Y.jsx)(`p`,{className:`mb-4 text-xs text-fg-subtle`,children:n.triggerHint}),ee?(0,Y.jsx)(`p`,{className:`mb-3 text-sm text-red-600 dark:text-red-400`,children:ee}):null,(0,Y.jsx)(Tt,{h:n,cron:t.cron,form:o,channels:z,sessionChatIds:te,onRefreshChatIds:ce,update:le,inputClassName:bt,selectClassName:xt}),(0,Y.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[S?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.savedConfig}):null,(0,Y.jsx)(q,{type:`button`,variant:`primary`,disabled:!H||h,onClick:()=>void de(),children:h?n.savingConfig:n.saveConfig}),H?(0,Y.jsx)(`span`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedConfig}):null]})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(`div`,{className:`mb-2 text-sm font-semibold text-fg`,children:n.docSection}),(0,Y.jsx)(`p`,{className:`mb-3 text-xs text-fg-subtle`,children:n.docHint}),(0,Y.jsx)(`textarea`,{className:a(bt(),`min-h-[12rem] resize-y font-mono text-xs leading-relaxed`),value:d,onChange:e=>f(e.target.value),spellCheck:!1,"aria-label":n.docSection}),(0,Y.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center gap-2`,children:[w?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.savedDoc}):null,(0,Y.jsx)(q,{type:`button`,variant:`primary`,disabled:!oe||v,onClick:()=>void fe(),children:v?n.savingDoc:n.saveDoc}),oe?(0,Y.jsx)(`span`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedDoc}):null]})]})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:b??U??n.loadError}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,onClick:()=>{ne(),ie()},children:n.retry})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.heartbeat}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function Tt({h:e,cron:t,form:n,channels:r,sessionChatIds:i,onRefreshChatIds:o,update:s,inputClassName:c,selectClassName:l}){let u=(0,X.useMemo)(()=>new Set(r.map(e=>e.name)),[r]),d=n.target.trim(),f=!!(d&&!u.has(d)),p=(0,X.useMemo)(()=>yt.has(n.intervalMs)?String(n.intervalMs):``,[n.intervalMs]),[m,h]=(0,X.useState)(null),g=Math.max(1,Math.round(n.intervalMs/1e3)),_=m===null?String(g):m;return(0,X.useEffect)(()=>{h(null)},[n.intervalMs]),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:n.enabled,onChange:e=>s({enabled:e.target.checked})}),e.enable]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.interval}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:e.intervalSecondsLabel}),(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(`input`,{type:`number`,min:1,step:1,className:a(c(),`min-w-0 flex-1`),value:_,onChange:e=>{let t=e.target.value;h(t);let n=parseInt(t,10);Number.isFinite(n)&&n>=1&&s({intervalMs:n*1e3})},onBlur:()=>{if(m===null)return;let e=parseInt(m,10);s(!Number.isFinite(e)||e<1?{intervalMs:1e3}:{intervalMs:e*1e3}),h(null)}}),(0,Y.jsxs)(`select`,{className:a(l(),`max-w-[11rem] shrink-0 text-xs`),value:p,onChange:e=>{let t=e.target.value;t&&(s({intervalMs:parseInt(t,10)}),h(null))},children:[(0,Y.jsx)(`option`,{value:``,children:e.intervalPresets.custom}),vt.map(t=>(0,Y.jsx)(`option`,{value:String(t),children:Ct(t,e.intervalPresets)},t))]})]})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.intervalHintPreset}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:e.intervalHint})]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-4`,children:[(0,Y.jsx)(`div`,{className:`mb-2 text-sm font-medium text-fg`,children:e.deliveryTitle}),(0,Y.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:t.channel}),(0,Y.jsxs)(`select`,{className:l(),value:d,onChange:e=>{s({target:e.target.value.trim(),targetChatId:``})},children:[(0,Y.jsx)(`option`,{value:``,children:e.channelNone}),f?(0,Y.jsxs)(`option`,{value:d,children:[d,` (`,e.customChannelSuffix,`)`]}):null,r.map(e=>(0,Y.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:`(disabled)`]},e.name))]})]}),d?(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-col gap-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium text-fg-muted`,children:t.recipient}),(0,Y.jsxs)(q,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,title:t.refreshRecipientHint,onClick:o,children:[(0,Y.jsx)(I,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0}),t.refreshList]})]}),(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(`input`,{type:`text`,className:a(c(),`min-w-0 flex-1`),value:n.targetChatId,onChange:e=>s({targetChatId:e.target.value}),placeholder:t.recipientPlaceholder,autoComplete:`off`}),(0,Y.jsxs)(`select`,{className:a(l(),`max-w-[10rem] shrink-0 text-xs`),value:n.targetChatId,onChange:e=>{let t=e.target.value;t&&s({targetChatId:t})},children:[(0,Y.jsx)(`option`,{value:``,children:t.selectRecipient}),i.length>0?i.map(e=>(0,Y.jsx)(`option`,{value:e.chatId,children:ze(e,t.lastActiveLabels)},`${e.channel}-${e.chatId}`)):(0,Y.jsx)(`option`,{value:``,disabled:!0,children:t.noRecentChatsOption})]})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:i.length>0?t.enterManuallyOrSelect:t.noRecentChats})]}):null,(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:e.deliveryHint})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:e.prompt}),(0,Y.jsx)(`textarea`,{className:a(c(),`min-h-[4.5rem] resize-y font-mono text-xs`),value:n.prompt,onChange:e=>s({prompt:e.target.value}),placeholder:e.promptPlaceholder}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.promptHint})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-sm font-medium text-fg`,children:e.ackMaxChars}),(0,Y.jsx)(`input`,{type:`number`,min:1,className:c(),value:n.ackMaxChars===``?``:n.ackMaxChars,onChange:e=>{let t=e.target.value;if(t===``)s({ackMaxChars:``});else{let e=parseInt(t,10);s({ackMaxChars:Number.isFinite(e)?e:``})}},placeholder:e.ackDefaultPlaceholder}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:e.ackMaxCharsHint})]}),(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-start gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox mt-0.5`,checked:n.isolatedSession,onChange:e=>s({isolatedSession:e.target.checked})}),(0,Y.jsxs)(`span`,{children:[e.isolatedSession,(0,Y.jsx)(`span`,{className:`mt-1 block text-xs text-fg-subtle`,children:e.isolatedSessionHint})]})]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-4`,children:[(0,Y.jsx)(`div`,{className:`mb-2 text-sm font-medium text-fg`,children:e.activeHoursTitle}),n.activeHours?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-xs text-fg`,children:e.activeStart}),(0,Y.jsx)(`input`,{className:c(),value:n.activeHours.start,onChange:e=>s({activeHours:{...n.activeHours,start:e.target.value}}),placeholder:`09:00`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-xs text-fg`,children:e.activeEnd}),(0,Y.jsx)(`input`,{className:c(),value:n.activeHours.end,onChange:e=>s({activeHours:{...n.activeHours,end:e.target.value}}),placeholder:`22:00`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`mb-1 text-xs text-fg`,children:e.activeTimezone}),(0,Y.jsx)(`input`,{className:c(),value:n.activeHours.timezone,onChange:e=>s({activeHours:{...n.activeHours,timezone:e.target.value}}),placeholder:`Asia/Shanghai`})]})]}):(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`text-sm`,onClick:()=>s({activeHours:{start:`09:00`,end:`22:00`,timezone:``}}),children:e.addActiveHours}),n.activeHours?(0,Y.jsx)(`div`,{className:`mt-2 flex flex-wrap gap-2`,children:(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`text-xs`,onClick:()=>s({activeHours:null}),children:e.clearActiveHours})}):null,(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:e.activeHoursHint})]})]})}var Et=[{value:`openai-completions`,label:`OpenAI Completions`},{value:`openai-responses`,label:`OpenAI Responses`},{value:`anthropic-messages`,label:`Anthropic Messages`},{value:`google-generative-ai`,label:`Google Generative AI`},{value:`azure-openai-responses`,label:`Azure OpenAI`},{value:`bedrock-converse-stream`,label:`AWS Bedrock`},{value:`openai-codex-responses`,label:`OpenAI Codex`},{value:`google-gemini-cli`,label:`Google Gemini CLI`},{value:`google-vertex`,label:`Google Vertex AI`}];function Dt(e){if(!e||typeof e!=`object`)return;let t=e;if(typeof t.error==`string`)return t.error;if(t.error&&typeof t.error==`object`&&`message`in t.error){let e=t.error.message;return typeof e==`string`?e:void 0}}function Ot(e){if(!e||typeof e!=`object`)return{providers:{}};let t=e,n=t.providers;return n&&typeof n==`object`&&!Array.isArray(n)?e:{...t,providers:{}}}async function kt(){let e=await Oe(K(`/api/models-json`)),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok||!t.payload)throw Error(Dt(t)||`HTTP ${e.status}`);return{...t.payload,config:Ot(t.payload.config)}}async function At(e){let t=await Oe(K(`/api/models-json/validate`),{method:`POST`,body:JSON.stringify({config:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(Dt(n)||`HTTP ${t.status}`);return n.payload}async function jt(e){let t=await Oe(K(`/api/models-json`),{method:`PATCH`,body:JSON.stringify({config:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(Dt(n)||`HTTP ${t.status}`);return n.payload}async function Mt(){let e=await Oe(K(`/api/models-json/reload`),{method:`POST`}),t=await e.json().catch(()=>({}));if(!e.ok||!t.ok||!t.payload)throw Error(Dt(t)||`HTTP ${e.status}`);return t.payload}async function Nt(e){let t=await Oe(K(`/api/models-json/test-api-key`),{method:`POST`,body:JSON.stringify({value:e})}),n=await t.json().catch(()=>({}));if(!t.ok||!n.ok||!n.payload)throw Error(Dt(n)||`HTTP ${t.status}`);return n.payload}function Pt(e,t,n){return{id:e,name:t||e,input:[`text`],contextWindow:128e3,maxTokens:16384,cost:{input:0,output:0,cacheRead:0,cacheWrite:0},...n}}function Ft(e){return e.startsWith(`!`)}function It(e){return/^[A-Z][A-Z0-9_]*$/.test(e)}function Lt(e){return Ft(e)?`shell`:It(e)?`env`:`literal`}function Rt(e){return e?e.length<=8?`••••`:`${e.slice(0,4)}••••${e.slice(-4)}`:``}var zt={ollama:{baseUrl:`http://localhost:11434/v1`,api:`openai-completions`,apiKey:`ollama`},lmstudio:{baseUrl:`http://localhost:1234/v1`,api:`openai-completions`,apiKey:`lmstudio`},openrouter:{baseUrl:`https://openrouter.ai/api/v1`,api:`openai-completions`,apiKey:``},zhipuCn:{baseUrl:`https://open.bigmodel.cn/api/coding/paas/v4`,api:`openai-completions`,apiKey:`ZHIPU_API_KEY`},zaiGeneral:{baseUrl:`https://api.z.ai/api/paas/v4`,api:`openai-completions`,apiKey:`ZAI_API_KEY`}};function Bt(e){return e===`openrouter`?`openrouter`:e===`zhipuCn`?`zhipu-cn`:e===`zaiGeneral`?`zai`:e}var Vt=[{value:`text`,labelKey:`inputTextOnly`},{value:`text,image`,labelKey:`inputTextVision`}];function Ht(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,O,`dark:border-edge`)}function Ut(){return a(Ie,Le)}function Wt(e){return(e.input||[`text`]).includes(`image`)?`text,image`:`text`}function Gt(e){return e===`text,image`?[`text`,`image`]:[`text`]}function Kt(e,t,n){return{...e,providers:{...e.providers,[t]:{...e.providers[t],...n}}}}function qt(e,t){let n={...e.providers};return delete n[t],{...e,providers:n}}function Jt(e,t,n){return{...e,providers:{...e.providers,[t]:n}}}function Yt({open:e,onOpenChange:t,presetKey:n,onConfirm:r,m:i}){let[o,s]=(0,X.useState)(``),[c,l]=(0,X.useState)(`custom`),[u,f]=(0,X.useState)(``),[h,g]=(0,X.useState)(`openai-completions`),[_,v]=(0,X.useState)(``),[y,b]=(0,X.useState)(null);(0,X.useEffect)(()=>{if(!e)return;b(null);let t=n||null;if(t&&zt[t]){let e=zt[t];l(t),f(e.baseUrl||``),g(e.api||`openai-completions`),v(e.apiKey??``),s(Bt(t))}else l(`custom`),s(``),f(``),g(`openai-completions`),v(``)},[e,n]);let x=e=>{if(l(e),e===`custom`)return;let t=zt[e];t&&(f(t.baseUrl||``),g(t.api||`openai-completions`),v(t.apiKey??``),s(Bt(e)))};return(0,Y.jsx)(p,{open:e,onOpenChange:t,children:(0,Y.jsxs)(m,{children:[(0,Y.jsx)(ee,{className:`xopc-dialog-overlay fixed inset-0 z-50 bg-scrim`}),(0,Y.jsxs)(d,{className:a(`xopc-dialog-content fixed left-1/2 top-1/2 z-50 max-h-[min(90vh,640px)] w-[min(100%-2rem,32rem)] -translate-x-1/2 -translate-y-1/2`,`overflow-y-auto rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Y.jsxs)(`div`,{className:`mb-3 flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(w,{className:`text-base font-semibold text-fg`,children:i.addProviderTitle}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:i.addProviderSubtitle})]}),(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,"aria-label":i.close,children:(0,Y.jsx)(C,{className:`size-4`})})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.presetLabel}),(0,Y.jsxs)(`select`,{className:Ut(),value:c,onChange:e=>x(e.target.value),children:[(0,Y.jsx)(`option`,{value:`custom`,children:i.presetCustom}),(0,Y.jsx)(`option`,{value:`ollama`,children:i.presetOllama}),(0,Y.jsx)(`option`,{value:`lmstudio`,children:i.presetLmStudio}),(0,Y.jsx)(`option`,{value:`openrouter`,children:i.presetOpenRouter}),(0,Y.jsx)(`option`,{value:`zhipuCn`,children:i.presetZhipuCn}),(0,Y.jsx)(`option`,{value:`zaiGeneral`,children:i.presetZaiGeneral})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`label`,{className:`mb-1 block text-xs font-medium text-fg`,children:[i.providerIdLabel,(0,Y.jsx)(`span`,{className:`text-red-600 dark:text-red-400`,children:` *`})]}),(0,Y.jsx)(`input`,{className:Ht(),value:o,onChange:e=>s(e.target.value),placeholder:i.providerIdPlaceholder})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.baseUrl}),(0,Y.jsx)(`input`,{className:Ht(),value:u,onChange:e=>f(e.target.value),placeholder:`https://…`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.apiType}),(0,Y.jsx)(`select`,{className:Ut(),value:h,onChange:e=>g(e.target.value),children:Et.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:i.apiKey}),(0,Y.jsx)(`input`,{className:Ht(),value:_,onChange:e=>v(e.target.value),placeholder:i.apiKeyPlaceholder})]}),y?(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-xs text-red-600 dark:text-red-400`,children:[(0,Y.jsx)(ne,{className:`size-3.5 shrink-0`}),y]}):null]}),(0,Y.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2 border-t border-edge-subtle pt-3 dark:border-edge`,children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(q,{type:`button`,variant:`secondary`,children:i.cancel})}),(0,Y.jsx)(q,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:()=>{let e=o.trim();if(!e){b(i.providerIdRequired);return}b(null),r(e,{baseUrl:u.trim()||void 0,api:h,apiKey:_.trim()||void 0,models:[]}),t(!1)},children:i.addProviderConfirm})]})]})]})})}function Xt({open:e,onOpenChange:t,providerId:n,model:r,isNew:i,onSave:o,m:s}){let[c,l]=(0,X.useState)(()=>Pt(``)),[u,f]=(0,X.useState)(()=>new Map);(0,X.useEffect)(()=>{e&&(f(new Map),l(r?{...r}:Pt(``)))},[e,r]);let h=(e,t)=>{l(n=>({...n,[e]:t})),f(t=>{let n=new Map(t);return n.delete(e),n})},g=()=>{let e=new Map;return(c.id||``).trim()||e.set(`id`,s.modelIdRequired),c.contextWindow!==void 0&&c.contextWindow<=0&&e.set(`contextWindow`,s.mustBePositive),c.maxTokens!==void 0&&c.maxTokens<=0&&e.set(`maxTokens`,s.mustBePositive),f(e),e.size===0},_=()=>{if(!g())return;let e=(c.id||``).trim();o({...c,id:e,name:c.name?.trim()||e,reasoning:c.reasoning||!1,input:c.input||[`text`],contextWindow:c.contextWindow??128e3,maxTokens:c.maxTokens??16384,cost:{input:c.cost?.input??0,output:c.cost?.output??0,cacheRead:c.cost?.cacheRead??0,cacheWrite:c.cost?.cacheWrite??0}}),t(!1)},v=Wt(c);return(0,Y.jsx)(p,{open:e,onOpenChange:t,children:(0,Y.jsxs)(m,{children:[(0,Y.jsx)(ee,{className:`xopc-dialog-overlay fixed inset-0 z-50 bg-scrim`}),(0,Y.jsxs)(d,{className:a(`xopc-dialog-content fixed left-1/2 top-1/2 z-50 max-h-[min(90vh,720px)] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2`,`overflow-y-auto rounded-xl border border-edge bg-surface-panel p-4 shadow-popover dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,Y.jsxs)(`div`,{className:`mb-3 flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(w,{className:`text-base font-semibold text-fg`,children:i?s.addModelTitle:s.editModelTitle}),n?(0,Y.jsxs)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:[s.modelProviderLabel,`: `,n]}):null]}),(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,"aria-label":s.close,children:(0,Y.jsx)(C,{className:`size-4`})})})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`label`,{className:`mb-1 block text-xs font-medium text-fg`,children:[s.modelId,(0,Y.jsx)(`span`,{className:`text-red-600 dark:text-red-400`,children:` *`})]}),(0,Y.jsx)(`input`,{className:a(Ht(),u.has(`id`)&&`border-red-500`),value:c.id||``,onChange:e=>h(`id`,e.target.value),placeholder:`e.g. llama3.1:8b`,disabled:!i}),u.has(`id`)?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-red-600 dark:text-red-400`,children:u.get(`id`)}):null]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.displayName}),(0,Y.jsx)(`input`,{className:Ht(),value:c.name||``,onChange:e=>h(`name`,e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.inputTypes}),(0,Y.jsx)(`select`,{className:Ut(),value:v,onChange:e=>h(`input`,Gt(e.target.value)),children:Vt.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:s[e.labelKey]},e.value))})]}),(0,Y.jsxs)(`label`,{className:`mt-6 flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:c.reasoning||!1,onChange:e=>h(`reasoning`,e.target.checked)}),s.reasoning]})]}),(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.contextWindow}),(0,Y.jsx)(`input`,{type:`number`,min:1,className:a(Ht(),u.has(`contextWindow`)&&`border-red-500`),value:c.contextWindow??128e3,onChange:e=>h(`contextWindow`,parseInt(e.target.value,10)||0)}),u.has(`contextWindow`)?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-red-600 dark:text-red-400`,children:u.get(`contextWindow`)}):null]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:s.maxOutputTokens}),(0,Y.jsx)(`input`,{type:`number`,min:1,className:a(Ht(),u.has(`maxTokens`)&&`border-red-500`),value:c.maxTokens??16384,onChange:e=>h(`maxTokens`,parseInt(e.target.value,10)||0)}),u.has(`maxTokens`)?(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-red-600 dark:text-red-400`,children:u.get(`maxTokens`)}):null]})]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-2 dark:border-edge`,children:[(0,Y.jsx)(`p`,{className:`mb-2 text-xs font-semibold text-fg`,children:s.costSection}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-3`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs text-fg-muted`,children:s.costInput}),(0,Y.jsx)(`input`,{type:`number`,step:`any`,min:0,className:Ht(),value:c.cost?.input??0,onChange:e=>h(`cost`,{...c.cost,input:parseFloat(e.target.value)||0,output:c.cost?.output??0,cacheRead:c.cost?.cacheRead??0,cacheWrite:c.cost?.cacheWrite??0})})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs text-fg-muted`,children:s.costOutput}),(0,Y.jsx)(`input`,{type:`number`,step:`any`,min:0,className:Ht(),value:c.cost?.output??0,onChange:e=>h(`cost`,{...c.cost,input:c.cost?.input??0,output:parseFloat(e.target.value)||0,cacheRead:c.cost?.cacheRead??0,cacheWrite:c.cost?.cacheWrite??0})})]})]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-4 flex justify-end gap-2 border-t border-edge-subtle pt-3 dark:border-edge`,children:[(0,Y.jsx)(k,{asChild:!0,children:(0,Y.jsx)(q,{type:`button`,variant:`secondary`,children:s.cancel})}),(0,Y.jsx)(q,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:_,children:i?s.addModelConfirm:s.saveModelConfirm})]})]})]})})}function Zt(){let e=ue(e=>e.language),t=l(e),n=t.modelsSettings,r=!!Pe(e=>e.token),[i,o]=(0,X.useState)({providers:{}}),[s,u]=(0,X.useState)({providers:{}}),[d,p]=(0,X.useState)(``),[m,v]=(0,X.useState)(),[y,b]=(0,X.useState)(!0),[x,S]=(0,X.useState)(!1),[C,w]=(0,X.useState)(!1),[E,O]=(0,X.useState)(!1),[k,A]=(0,X.useState)(null),[ee,j]=(0,X.useState)(!1),[te,M]=(0,X.useState)(null),[P,F]=(0,X.useState)(()=>new Set),[L,re]=(0,X.useState)(!1),[ie,z]=(0,X.useState)(``),[B,V]=(0,X.useState)(null),[H,se]=(0,X.useState)(()=>new Set),[ce,W]=(0,X.useState)(()=>new Map),[le,de]=(0,X.useState)(!1),[fe,pe]=(0,X.useState)(null),[me,he]=(0,X.useState)(!1),[ge,_e]=(0,X.useState)(null),ve=(0,X.useCallback)(async e=>{let t=!e?.skipFullPageLoading;t&&b(!0),A(null);try{let e=await kt(),t=Ot(e.config);o(t),u(structuredClone(t)),p(e.path),v(e.loadError),M(null),j(!1)}catch(e){A(e instanceof Error?e.message:n.loadError),o({providers:{}}),u({providers:{}})}finally{t&&b(!1)}},[n.loadError]);(0,X.useEffect)(()=>{if(!r){b(!1);return}ve()},[r,ve]);let ye=(0,X.useMemo)(()=>JSON.stringify(i)!==JSON.stringify(s),[i,s]),be=(0,X.useMemo)(()=>{let e=Object.keys(i.providers),t=0;for(let e of Object.values(i.providers))t+=e.models?.length??0;return{providers:e.length,models:t}},[i.providers]),xe=e=>{F(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},K=e=>{se(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},Se=(0,X.useCallback)(()=>{z(JSON.stringify(i,null,2)),V(null)},[i]);(0,X.useEffect)(()=>{L&&Se()},[L,Se]);let Ce=()=>{try{o(Ot(JSON.parse(ie))),V(null)}catch{V(n.jsonParseError)}},we=async()=>{w(!0),A(null);try{M(await At(i))}catch(e){A(e instanceof Error?e.message:n.validateError)}finally{w(!1)}},Te=async()=>{if(!x){S(!0),A(null),j(!1);try{await jt(i),u(structuredClone(i)),j(!0),M(null)}catch(e){A(e instanceof Error?e.message:n.saveError)}finally{S(!1)}}},De=async()=>{O(!0),A(null);try{await Mt(),await ve({skipFullPageLoading:!0})}catch(e){A(e instanceof Error?e.message:n.reloadError)}finally{O(!1)}},Oe=async(e,t)=>{try{let n=await Nt(t);W(t=>{let r=new Map(t);return r.set(e,n),r})}catch(t){W(n=>{let r=new Map(n);return r.set(e,{type:`error`,error:t instanceof Error?t.message:`Error`}),r})}},ke=(e=null)=>{pe(e),de(!0)},Ae=(e,t)=>{o(n=>Jt(n,e,t)),F(t=>new Set(t).add(e))},je=e=>{window.confirm(n.removeProviderConfirm.replace(`{{id}}`,e))&&(o(t=>qt(t,e)),W(t=>{let n=new Map(t);return n.delete(e),n}))},Me=(e,t,n)=>{_e({providerId:e,model:t,isNew:n}),he(!0)};return r?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-8`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.models}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:ae(e,`models`),target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,children:[n.docsLink,(0,Y.jsx)(_,{className:`size-3.5`})]})]}),m?(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-lg border border-amber-200 bg-amber-50 px-3 py-2 text-sm text-amber-900 dark:border-amber-800 dark:bg-amber-950/40 dark:text-amber-100`,role:`status`,children:[(0,Y.jsx)(ne,{className:`mt-0.5 size-4 shrink-0`}),(0,Y.jsxs)(`span`,{children:[n.loadFileWarning,`: `,m]})]}):null,d?(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[n.filePath,`: `,(0,Y.jsx)(`code`,{className:`rounded bg-surface-base px-1 py-0.5 font-mono text-fg-muted`,children:d})]}):null,(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsxs)(q,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:()=>ke(null),disabled:y,children:[(0,Y.jsx)(U,{className:`mr-1 size-4`}),n.addProvider]}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`inline-flex min-h-9 min-w-[7.5rem] justify-center`,onClick:we,disabled:y||C,children:C?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(G,{className:`mr-1 size-4 animate-spin`}),n.validating]}):n.validate}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`inline-flex min-h-9 min-w-[7.5rem] justify-center`,onClick:Te,disabled:y||x||!ye,children:x?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(G,{className:`mr-1 size-4 animate-spin`}),n.saving]}):n.save}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`inline-flex min-h-9 min-w-[8.5rem] justify-center`,onClick:De,disabled:y||E,children:E?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(G,{className:`mr-1 size-4 animate-spin`}),n.reloading]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(I,{className:`mr-1 size-4`}),n.reload]})}),(0,Y.jsx)(q,{type:`button`,variant:`ghost`,className:`text-fg-muted`,onClick:()=>{re(e=>!e),V(null)},children:L?n.hideJson:n.showJson}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-2 rounded-lg border border-edge-subtle bg-surface-panel px-3 py-1.5 text-sm dark:border-edge`,children:[(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:n.statsProviders.replace(`{{count}}`,String(be.providers))}),(0,Y.jsx)(`span`,{className:`text-fg-subtle`,children:`|`}),(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:n.statsModels.replace(`{{count}}`,String(be.models))})]})]}),ye?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,ee?(0,Y.jsx)(`p`,{className:`text-xs text-emerald-700 dark:text-emerald-400`,role:`status`,children:n.saved}):null,k?(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-sm text-red-600 dark:text-red-400`,role:`alert`,children:[(0,Y.jsx)(ne,{className:`size-4 shrink-0`}),k]}):null,te&&te.errors.length>0?(0,Y.jsxs)(`div`,{className:`rounded-lg border border-amber-200 bg-amber-50/80 px-3 py-2 dark:border-amber-800 dark:bg-amber-950/30`,role:`status`,children:[(0,Y.jsx)(`p`,{className:`mb-1 text-sm font-medium text-amber-950 dark:text-amber-100`,children:te.valid?n.validationWarnings:n.validationErrors}),(0,Y.jsx)(`ul`,{className:`list-inside list-disc space-y-0.5 text-xs text-amber-900 dark:text-amber-200`,children:te.errors.map((e,t)=>(0,Y.jsxs)(`li`,{children:[e.path,`: `,e.message,` (`,e.severity,`)`]},`${e.path}-${t}`))})]}):null,y?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(G,{className:`size-4 animate-spin`}),n.loading]}):L?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`textarea`,{className:a(Ht(),`min-h-[320px] resize-y font-mono text-xs leading-relaxed`),value:ie,onChange:e=>z(e.target.value),spellCheck:!1}),B?(0,Y.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:B}):null,(0,Y.jsxs)(`div`,{className:`flex gap-2`,children:[(0,Y.jsx)(q,{type:`button`,variant:`secondary`,onClick:Se,children:n.jsonReset}),(0,Y.jsx)(q,{type:`button`,className:`bg-accent text-white hover:bg-accent/90`,onClick:Ce,children:n.jsonApply})]})]}):Object.keys(i.providers).length===0?(0,Y.jsxs)(`div`,{className:`flex flex-col items-center rounded-xl border-2 border-dashed border-edge-subtle bg-surface-panel px-6 py-12 text-center dark:border-edge`,children:[(0,Y.jsx)(`div`,{className:`mb-4 flex size-14 items-center justify-center rounded-full border border-edge bg-surface-base dark:border-edge`,children:(0,Y.jsx)(c,{className:`size-7 text-accent`,strokeWidth:1.5})}),(0,Y.jsx)(`h2`,{className:`mb-1 text-base font-semibold text-fg`,children:n.emptyTitle}),(0,Y.jsx)(`p`,{className:`mb-6 max-w-md text-sm text-fg-muted`,children:n.emptyDesc}),(0,Y.jsxs)(q,{type:`button`,className:`mb-6 bg-accent text-white hover:bg-accent/90`,onClick:()=>ke(null),children:[(0,Y.jsx)(U,{className:`mr-1 size-4`}),n.emptyCta]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap justify-center gap-2`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:a(`inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge`,N.transition,N.focusRingBase),onClick:()=>ke(`ollama`),children:[(0,Y.jsx)(f,{className:`size-3.5`,"aria-hidden":!0}),n.presetOllama]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge`,N.transition,N.focusRingBase),onClick:()=>ke(`openrouter`),children:[(0,Y.jsx)(Ee,{className:`size-3.5`,"aria-hidden":!0}),n.presetOpenRouter]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge`,N.transition,N.focusRingBase),onClick:()=>ke(`lmstudio`),children:[(0,Y.jsx)(c,{className:`size-3.5`,"aria-hidden":!0}),n.presetLmStudio]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge`,N.transition,N.focusRingBase),onClick:()=>ke(`zhipuCn`),children:[(0,Y.jsx)(f,{className:`size-3.5`,"aria-hidden":!0}),n.presetZhipuCn]}),(0,Y.jsxs)(`button`,{type:`button`,className:a(`inline-flex items-center gap-1.5 rounded-full border border-edge bg-surface-base px-3 py-1.5 text-xs text-fg hover:border-accent hover:text-accent dark:border-edge`,N.transition,N.focusRingBase),onClick:()=>ke(`zaiGeneral`),children:[(0,Y.jsx)(Ee,{className:`size-3.5`,"aria-hidden":!0}),n.presetZaiGeneral]})]})]}):(0,Y.jsx)(`div`,{className:`flex flex-col gap-3`,children:Object.entries(i.providers).sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>{let r=P.has(e),i=t.models?.length??0,s=t.apiKey?Lt(t.apiKey):null,c=ce.get(e),l=H.has(e);return(0,Y.jsxs)(`section`,{className:`overflow-hidden rounded-2xl bg-surface-base`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b border-edge-subtle bg-surface-hover/35 px-3 py-2 dark:border-edge-subtle`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`flex min-w-0 flex-1 items-center gap-2 text-left text-sm font-semibold text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,onClick:()=>xe(e),children:[r?(0,Y.jsx)(oe,{className:`size-4 shrink-0 text-fg-muted`}):(0,Y.jsx)(D,{className:`size-4 shrink-0 text-fg-muted`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e}),i>0?(0,Y.jsx)(`span`,{className:`shrink-0 rounded-full bg-accent px-2 py-0.5 text-[10px] font-medium text-white`,children:i}):null,s?(0,Y.jsx)(`span`,{className:a(`shrink-0 rounded-full px-2 py-0.5 text-[10px] font-medium`,s===`shell`&&`bg-blue-100 text-blue-800 dark:bg-blue-950 dark:text-blue-200`,s===`env`&&`bg-emerald-100 text-emerald-800 dark:bg-emerald-950 dark:text-emerald-200`,s===`literal`&&`bg-surface-hover text-fg-muted dark:bg-surface-active`),children:s===`shell`?n.badgeShell:s===`env`?n.badgeEnv:n.badgeLiteral}):null]}),(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-red-600 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40 dark:hover:text-red-400`,onClick:()=>je(e),"aria-label":n.removeProvider,children:(0,Y.jsx)(h,{className:`size-4`})})]}),r?(0,Y.jsxs)(`div`,{className:`space-y-4 px-3 py-3`,children:[(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:n.baseUrl}),(0,Y.jsx)(`input`,{className:Ht(),value:t.baseUrl||``,onChange:t=>o(n=>Kt(n,e,{baseUrl:t.target.value}))})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:n.apiType}),(0,Y.jsx)(`select`,{className:Ut(),value:t.api||`openai-completions`,onChange:t=>o(n=>Kt(n,e,{api:t.target.value})),children:Et.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`label`,{className:`mb-1 block text-xs font-medium text-fg-muted`,children:n.apiKey}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsx)(`input`,{className:a(Ht(),`min-w-0 flex-1`),type:l?`text`:`password`,autoComplete:`off`,value:t.apiKey||``,onChange:t=>{let n=t.target.value;o(t=>Kt(t,e,{apiKey:n})),W(t=>{let n=new Map(t);return n.delete(e),n})},placeholder:n.apiKeyPlaceholder}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:()=>K(e),children:l?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(g,{className:`mr-1 size-3.5`}),n.hide]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(T,{className:`mr-1 size-3.5`}),n.show]})}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`px-2 py-1 text-xs`,onClick:()=>Oe(e,t.apiKey||``),children:n.testKey})]}),c?(0,Y.jsx)(`p`,{className:a(`mt-1 text-xs`,c.error?`text-red-600 dark:text-red-400`:`text-emerald-700 dark:text-emerald-400`),children:c.error?`${n.testError}: ${c.error}`:`${n.testOk} (${c.type}): ${Rt(c.resolved||``)}`}):null,(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:n.apiKeyHint})]}),(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.authHeader||!1,onChange:t=>o(n=>Kt(n,e,{authHeader:t.target.checked}))}),n.authHeader]}),(0,Y.jsxs)(`div`,{className:`border-t border-edge-subtle pt-3 dark:border-edge`,children:[(0,Y.jsxs)(`div`,{className:`mb-2 flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-semibold text-fg`,children:n.modelsSection}),(0,Y.jsxs)(q,{type:`button`,variant:`primary`,className:`px-2 py-1 text-xs`,onClick:()=>Me(e,null,!0),children:[(0,Y.jsx)(U,{className:`mr-1 size-3.5`}),n.addModel]})]}),(t.models||[]).length===0?(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:n.modelsEmpty}):(0,Y.jsx)(`ul`,{className:`space-y-2`,children:(t.models||[]).map(t=>(0,Y.jsxs)(`li`,{className:`flex items-center justify-between gap-2 rounded-lg border border-edge-subtle bg-surface-base px-3 py-2 dark:border-edge`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`truncate text-sm font-medium text-fg`,children:t.id}),t.name&&t.name!==t.id?(0,Y.jsx)(`div`,{className:`truncate text-xs text-fg-muted`,children:t.name}):null]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 gap-1`,children:[(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-panel hover:text-fg`,onClick:()=>Me(e,t,!1),"aria-label":n.editModel,children:(0,Y.jsx)(R,{className:`size-4`})}),(0,Y.jsx)(`button`,{type:`button`,className:`rounded-lg p-1.5 text-fg-muted hover:bg-surface-panel hover:text-red-600 dark:hover:text-red-400`,onClick:()=>{window.confirm(n.removeModelConfirm.replace(`{{id}}`,t.id))&&o(n=>{let r=n.providers[e];return r?Kt(n,e,{models:(r.models||[]).filter(e=>e.id!==t.id)}):n})},"aria-label":n.removeModel,children:(0,Y.jsx)(h,{className:`size-4`})})]})]},t.id))})]})]}):null]},e)})}),(0,Y.jsx)(Yt,{open:le,onOpenChange:de,presetKey:fe,onConfirm:Ae,m:n}),(0,Y.jsx)(Xt,{open:me,onOpenChange:e=>{he(e),e||_e(null)},providerId:ge?.providerId??null,model:ge?.model??null,isNew:ge?.isNew??!1,onSave:e=>{if(!ge)return;let{providerId:t,isNew:n}=ge;o(r=>{let i=r.providers[t];if(!i)return r;let a=i.models||[];return n?Kt(r,t,{models:[...a,e]}):Kt(r,t,{models:a.map(t=>t.id===e.id?e:t)})})},m:n})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.models}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function Qt(){return{enabled:!1,provider:`alibaba`,alibaba:{model:`paraformer-v2`},openai:{model:`whisper-1`},fallback:{enabled:!0,order:[`alibaba`,`openai`]}}}function $t(){return{enabled:!1,provider:`openai`,trigger:`always`,maxTextLength:4096,timeoutMs:3e4,alibaba:{model:`qwen-tts`,voice:`Cherry`},openai:{model:`tts-1`,voice:`alloy`},edge:{voice:`zh-CN-XiaoxiaoNeural`},minimax:{model:`speech-2.8-hd`,voice:`male-qn-qingse`}}}function en(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function tn(e){let t=Qt();if(!en(e))return t;let n=e.provider===`openai`?`openai`:`alibaba`,r=en(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,i=en(e.openai)?{...t.openai,...e.openai}:t.openai,a=t.fallback??{enabled:!0,order:[`alibaba`,`openai`]};if(en(e.fallback)){let t=Array.isArray(e.fallback.order)?e.fallback.order.filter(e=>e===`alibaba`||e===`openai`):a.order;a={enabled:typeof e.fallback.enabled==`boolean`?e.fallback.enabled:a.enabled,order:t.length?t:a.order}}return{enabled:!!e.enabled,provider:n,alibaba:r,openai:i,fallback:a}}function nn(e){return e===`openai`||e===`alibaba`||e===`edge`||e===`minimax`}function rn(e){let t=$t();if(!en(e))return t;let n=nn(e.provider)?e.provider:`openai`,r=e.trigger===`off`||e.trigger===`always`||e.trigger===`inbound`||e.trigger===`tagged`?e.trigger:`always`;return{enabled:!!e.enabled,provider:n,trigger:r,maxTextLength:typeof e.maxTextLength==`number`&&Number.isFinite(e.maxTextLength)?e.maxTextLength:t.maxTextLength,timeoutMs:typeof e.timeoutMs==`number`&&Number.isFinite(e.timeoutMs)?e.timeoutMs:t.timeoutMs,alibaba:en(e.alibaba)?{...t.alibaba,...e.alibaba}:t.alibaba,openai:en(e.openai)?{...t.openai,...e.openai}:t.openai,edge:en(e.edge)?{...t.edge,...e.edge}:t.edge,minimax:en(e.minimax)?{...t.minimax,...e.minimax}:t.minimax}}function an(e){let t=en(e)?e:{};return{stt:tn(t.stt),tts:rn(t.tts)}}async function on(e){await z(K(`/api/config`),{method:`PATCH`,body:JSON.stringify({stt:e.stt,tts:e.tts})}),W()}async function sn(){let e=await z(K(`/api/voice/models`));if(!e.payload?.models)throw Error(`Missing voice models payload`);return e.payload.models}function cn(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,O,`dark:border-edge`)}function ln(){return a(Ie,Le)}var un=[{id:`paraformer-v2`,name:`Paraformer v2`},{id:`paraformer-v1`,name:`Paraformer v1`}],dn=[{id:`whisper-1`,name:`Whisper-1`}],fn=[{id:`tts-1`,name:`TTS-1`},{id:`tts-1-hd`,name:`TTS-1 HD`}],pn=[{id:`alloy`,name:`Alloy`},{id:`echo`,name:`Echo`}],mn=[{id:`qwen-tts`,name:`Qwen TTS`},{id:`qwen3-tts-flash`,name:`Qwen3 TTS Flash`}],hn=[{id:`Cherry`,name:`Cherry`},{id:`longxiaochun`,name:`Long Xiao Chun`}],gn=[{id:`en-US-MichelleNeural`,name:`Michelle (US English)`},{id:`zh-CN-XiaoxiaoNeural`,name:`Xiaoxiao (Chinese)`}],_n=[{id:`speech-2.8-hd`,name:`Speech 2.8 HD (Recommended)`},{id:`speech-2.8-turbo`,name:`Speech 2.8 Turbo (Fast)`}],vn=[{id:`male-qn-qingse`,name:`Male Qingse (青涩男声)`},{id:`female-shaonv`,name:`Female Shaonv (少女音)`}];function yn(){let e=ue(e=>e.language),t=l(e),n=t.voiceSettings,i=!!Pe(e=>e.token),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[u,d]=(0,X.useState)(null),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(null),[g,v]=(0,X.useState)(!1),{data:y,error:b,isLoading:x,mutate:S}=L(i),{data:C,error:w,isLoading:T,mutate:E}=r(i?K(`/api/voice/models`):null,sn,{revalidateOnFocus:!1}),D=(0,X.useMemo)(()=>y?.payload?.config===void 0?null:an(y.payload.config),[y]),O=(0,X.useMemo)(()=>!a||!s?!1:JSON.stringify(a)!==JSON.stringify(s),[a,s]);(0,X.useEffect)(()=>{if(!i){o(null),c(null),d(null);return}D===null||C===void 0||O||(o(structuredClone(D)),c(structuredClone(D)),d(C),v(!1))},[i,D,C,O]);let k=!!(i&&(D===null||C===void 0)&&(x||T)),A=b instanceof Error?b.message:b?String(b):w instanceof Error?w.message:w?String(w):null,ee=(0,X.useCallback)(e=>{o(t=>t?{...t,stt:{...t.stt,...e}}:null)},[]),j=(0,X.useCallback)(e=>{o(t=>t?{...t,stt:{...t.stt,alibaba:{...t.stt.alibaba,...e}}}:null)},[]),te=(0,X.useCallback)(e=>{o(t=>t?{...t,stt:{...t.stt,openai:{...t.stt.openai,...e}}}:null)},[]),M=(0,X.useCallback)(e=>{o(t=>{if(!t)return null;let n=t.stt.fallback??{enabled:!0,order:[`alibaba`,`openai`]};return{...t,stt:{...t.stt,fallback:{...n,...e}}}})},[]),N=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,...e}}:null)},[]),P=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,alibaba:{...t.tts.alibaba,...e}}}:null)},[]),F=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,openai:{...t.tts.openai,...e}}}:null)},[]),ne=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,edge:{...t.tts.edge,...e}}}:null)},[]),I=(0,X.useCallback)(e=>{o(t=>t?{...t,tts:{...t.tts,minimax:{...t.tts.minimax,...e}}}:null)},[]),re=(0,X.useCallback)(async()=>{if(!(!a||f)){p(!0),h(null),v(!1);try{await on(a);let e=structuredClone(a);c(e),o(e),v(!0),window.setTimeout(()=>v(!1),2500)}catch(e){h(e instanceof Error?e.message:n.saveError)}finally{p(!1)}}},[a,f,n.saveError]);if(!i)return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.settingsSections.voice}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]});if(k)return(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(G,{className:`size-4 animate-spin`}),n.loading]})});if(!a||u===null)return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:m??A??n.loadError}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,onClick:()=>{S(),E()},children:n.retry})]});let R=a.stt,ie=a.tts;return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.voice}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:ae(e,`voice`),target:`_blank`,rel:`noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,children:[n.docsLink,(0,Y.jsx)(_,{className:`size-3.5`})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[g?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,(0,Y.jsx)(q,{type:`button`,variant:`primary`,disabled:!O||f,onClick:()=>void re(),children:f?n.saving:n.save})]})]}),O?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,m?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:m}):null,(0,Y.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,Y.jsx)(bn,{v:n,stt:R,models:u,updateStt:ee,updateSttAlibaba:j,updateSttOpenai:te,updateSttFallback:M}),(0,Y.jsx)(xn,{v:n,tts:ie,models:u,updateTts:N,updateTtsAlibaba:P,updateTtsOpenai:F,updateTtsEdge:ne,updateTtsMinimax:I})]}),(0,Y.jsxs)(`div`,{className:`rounded-xl border border-accent/25 bg-accent/5 px-4 py-3 dark:border-accent/30 dark:bg-accent/10`,children:[(0,Y.jsxs)(`p`,{className:`text-sm text-fg`,children:[(0,Y.jsx)(`strong`,{className:`text-accent`,children:n.notes.title}),` `,n.notes.duration]}),(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-muted`,children:n.notes.envVars})]})]})}function bn({v:e,stt:t,models:n,updateStt:r,updateSttAlibaba:i,updateSttOpenai:o,updateSttFallback:s}){let c=n?.stt?.alibaba?.length?n.stt.alibaba:un,l=n?.stt?.openai?.length?n.stt.openai:dn;return(0,Y.jsxs)(`section`,{className:`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`,children:[(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(B,{className:`size-4 text-accent`,strokeWidth:1.75}),e.stt.title]}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:e.stt.description})]}),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.stt.enable}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.stt.enableDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.enabled,onChange:e=>r({enabled:e.target.checked})})]}),t.enabled?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.provider}),(0,Y.jsxs)(`select`,{className:ln(),value:t.provider,onChange:e=>r({provider:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`alibaba`,children:e.stt.alibaba}),(0,Y.jsx)(`option`,{value:`openai`,children:e.stt.openai})]})]})}),t.provider===`alibaba`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.alibaba?.apiKey??``,onChange:e=>i({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (DASHSCOPE_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.alibaba?.model??``,onChange:e=>i({model:e.target.value}),children:c.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.openai?.apiKey??``,onChange:e=>o({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (OPENAI_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.openai?.model??``,onChange:e=>o({model:e.target.value}),children:l.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.stt.fallback}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.stt.fallbackDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.fallback?.enabled??!0,onChange:e=>s({enabled:e.target.checked})})]})]}):null]})]})}function xn({v:e,tts:t,models:n,updateTts:r,updateTtsAlibaba:i,updateTtsOpenai:s,updateTtsEdge:c,updateTtsMinimax:l}){let u=t=>t===`off`?e.tts.triggerDescOff:t===`always`?e.tts.triggerDescAlways:t===`inbound`?e.tts.triggerDescInbound:t===`tagged`?e.tts.triggerDescTagged:``,d=n?.tts?.openai?.length?n.tts.openai:fn,f=n?.ttsVoices?.openai?.length?n.ttsVoices.openai:pn,p=n?.tts?.alibaba?.length?n.tts.alibaba:mn,m=n?.ttsVoices?.alibaba?.length?n.ttsVoices.alibaba:hn,h=n?.ttsVoices?.edge?.length?n.ttsVoices.edge:gn,g=n?.tts?.minimax?.length?n.tts.minimax:_n,_=n?.ttsVoices?.minimax?.length?n.ttsVoices.minimax:vn;return(0,Y.jsxs)(`section`,{className:`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`,children:[(0,Y.jsxs)(`div`,{className:`mb-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(o,{className:`size-4 text-accent`,strokeWidth:1.75}),e.tts.title]}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-fg-muted`,children:e.tts.description})]}),(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e.tts.enable}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.tts.enableDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:t.enabled,onChange:e=>r({enabled:e.target.checked})})]}),t.enabled?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.trigger}),(0,Y.jsxs)(`select`,{className:ln(),value:t.trigger,onChange:e=>r({trigger:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`off`,children:e.tts.triggerOff}),(0,Y.jsx)(`option`,{value:`always`,children:e.tts.triggerAlways}),(0,Y.jsx)(`option`,{value:`inbound`,children:e.tts.triggerInbound}),(0,Y.jsx)(`option`,{value:`tagged`,children:e.tts.triggerTagged})]}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:u(t.trigger)})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.provider}),(0,Y.jsxs)(`select`,{className:ln(),value:t.provider,onChange:e=>r({provider:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`openai`,children:e.tts.providerOpenai}),(0,Y.jsx)(`option`,{value:`alibaba`,children:e.stt.alibaba}),(0,Y.jsx)(`option`,{value:`minimax`,children:`MiniMax`}),(0,Y.jsx)(`option`,{value:`edge`,children:e.tts.providerEdge})]})]})]}),t.provider===`openai`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.openai?.apiKey??``,onChange:e=>s({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (OPENAI_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.openai?.model??``,onChange:e=>s({model:e.target.value}),children:d.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.openai?.voice??``,onChange:e=>s({voice:e.target.value}),children:f.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):null,t.provider===`alibaba`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.alibaba?.apiKey??``,onChange:e=>i({apiKey:e.target.value}),placeholder:`sk-...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (DASHSCOPE_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.alibaba?.model??``,onChange:e=>i({model:e.target.value}),children:p.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.alibaba?.voice??``,onChange:e=>i({voice:e.target.value}),children:m.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):null,t.provider===`minimax`?(0,Y.jsxs)(`div`,{className:`grid gap-3 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5 sm:col-span-2`,children:[(0,Y.jsx)(Z,{children:e.stt.apiKey}),(0,Y.jsx)(`input`,{className:a(cn(),`font-mono text-xs`),type:`password`,autoComplete:`off`,value:t.minimax?.apiKey??``,onChange:e=>l({apiKey:e.target.value}),placeholder:`eyJ...`}),(0,Y.jsxs)(`p`,{className:`text-xs text-fg-subtle`,children:[e.stt.apiKeyDesc,` (MINIMAX_API_KEY)`]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.stt.model}),(0,Y.jsx)(`select`,{className:ln(),value:t.minimax?.model??``,onChange:e=>l({model:e.target.value}),children:g.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.minimax?.voice??``,onChange:e=>l({voice:e.target.value}),children:_.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))})]})]}):null,t.provider===`edge`?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(Z,{children:e.tts.voice}),(0,Y.jsx)(`select`,{className:ln(),value:t.edge?.voice??``,onChange:e=>c({voice:e.target.value}),children:h.map(e=>(0,Y.jsx)(`option`,{value:e.id,children:e.name},e.id))}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:e.tts.edgeHint})]}):null]}):null]})]})}function Z({children:e}){return(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e})}function Sn(e){let t=e&&typeof e==`object`&&`tools`in e?e.tools:void 0,n=t&&typeof t==`object`&&`web`in t?t.web:void 0,r=n&&typeof n==`object`&&`region`in n?n.region:void 0,i=r===`cn`||r===`global`?r:`auto`,a=n&&typeof n==`object`&&`search`in n?n.search:void 0,o=a&&typeof a==`object`?a:{},s=typeof o.maxResults==`number`&&Number.isFinite(o.maxResults)?Math.floor(o.maxResults):5,c=o.providers;return{regionMode:i,maxResults:s,providers:Array.isArray(c)?c.map(e=>{let t=e&&typeof e==`object`?e:{},n=t.type;return{type:n===`brave`||n===`tavily`||n===`bing`||n===`searxng`?n:`brave`,apiKey:typeof t.apiKey==`string`?t.apiKey:``,url:typeof t.url==`string`?t.url:``,disabled:t.disabled===!0}}):[]}}async function Cn(e){let t=e.regionMode===`auto`?`auto`:e.regionMode===`cn`?`cn`:`global`,n={maxResults:e.maxResults,providers:e.providers.map(e=>{let t={type:e.type,apiKey:e.apiKey};return e.type===`searxng`&&e.url.trim()&&(t.url=e.url.trim().replace(/\/+$/,``)),e.disabled&&(t.disabled=!0),t})};await z(K(`/api/config`),{method:`PATCH`,body:JSON.stringify({tools:{web:{region:t,search:n}}})}),W()}function wn({label:e,description:t,children:n}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e}),n,(0,Y.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-subtle`,children:t})]})}function Tn(){return a(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,O,`dark:border-edge`)}function En(){return a(Ie,Le)}var Dn=[`brave`,`tavily`,`bing`,`searxng`];function On(){return{type:`brave`,apiKey:``,url:``,disabled:!1}}function kn(){let e=ue(e=>e.language),t=l(e),n=t.webSearchSettings,r=t.logs,i=!!Pe(e=>e.token),[a,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[u,d]=(0,X.useState)(!1),[f,p]=(0,X.useState)(null),[m,h]=(0,X.useState)(!1),g=(0,X.useRef)(!1),{data:y,error:b,isLoading:x,mutate:S}=L(i),C=(0,X.useMemo)(()=>y?.payload?.config===void 0?null:Sn(y.payload.config),[y]);(0,X.useEffect)(()=>{if(!i){o(null),c(null),g.current=!1;return}C!==null&&(g.current||(o(C),c(C)))},[i,C]);let w=!!(i&&x&&y===void 0&&!b),T=b instanceof Error?b.message:b?String(b):null,E=(0,X.useMemo)(()=>!a||!s?!1:JSON.stringify(a)!==JSON.stringify(s),[a,s]),D=(0,X.useCallback)(e=>{g.current=!0,o(t=>t?{...t,...e}:null)},[]),O=(0,X.useCallback)(async()=>{if(!(!a||u)){d(!0),p(null),h(!1);try{await Cn(a),g.current=!1,h(!0),window.setTimeout(()=>h(!1),2500)}catch(e){p(e instanceof Error?e.message:n.saveError)}finally{d(!1)}}},[a,u,n.saveError]);return i?w?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col items-center gap-3 px-4 py-8`,children:[(0,Y.jsx)(G,{className:`size-8 animate-spin text-fg-muted`,"aria-hidden":!0}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.loading})]}):a?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:n.title}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsxs)(`a`,{href:ae(e,`gateway`),target:`_blank`,rel:`noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-sm text-accent hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,children:[n.docsLink,(0,Y.jsx)(_,{className:`size-3.5`})]})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-2`,children:[m?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,(0,Y.jsx)(q,{type:`button`,variant:`primary`,disabled:!E||u,onClick:()=>void O(),children:u?n.saving:n.save})]})]}),E?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,f?(0,Y.jsx)(`p`,{className:`text-sm text-red-600 dark:text-red-400`,children:f}):null,(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:v,title:n.sectionRegion,subtitle:n.sectionRegionHint}),(0,Y.jsx)(`div`,{className:`flex max-w-md flex-col gap-4`,children:(0,Y.jsx)(wn,{label:n.regionLabel,description:n.regionDesc,children:(0,Y.jsxs)(`select`,{className:En(),value:a.regionMode,onChange:e=>D({regionMode:e.target.value}),children:[(0,Y.jsx)(`option`,{value:`auto`,children:n.regionAuto}),(0,Y.jsx)(`option`,{value:`cn`,children:n.regionCn}),(0,Y.jsx)(`option`,{value:`global`,children:n.regionGlobal})]})})})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:v,title:n.sectionSearch,subtitle:n.sectionSearchHint}),(0,Y.jsxs)(`div`,{className:`flex max-w-xl flex-col gap-6`,children:[(0,Y.jsx)(wn,{label:n.maxResultsLabel,description:n.maxResultsDesc,children:(0,Y.jsx)(`input`,{type:`number`,min:1,max:50,className:Tn(),value:a.maxResults,onChange:e=>D({maxResults:Math.max(1,Math.min(50,Number(e.target.value)||5))})})}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:n.providersTitle}),a.providers.map((e,t)=>(0,Y.jsx)(An,{row:e,labels:n,onChange:e=>{let n=[...a.providers];n[t]=e,D({providers:n})},onRemove:()=>{D({providers:a.providers.filter((e,n)=>n!==t)})}},t)),(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`w-fit gap-1.5 text-sm`,onClick:()=>D({providers:[...a.providers,On()]}),children:[(0,Y.jsx)(U,{className:`size-4`}),n.addProvider]})]})]})]}),(0,Y.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-subtle`,children:n.footerHint})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:f??T??n.loadError}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,onClick:()=>void S(),children:r.refresh})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-4 px-4 py-6`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:n.title}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.needToken})]})}function An({row:e,labels:t,onChange:n,onRemove:r}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-xl border border-edge-subtle bg-surface-panel/60 p-4 dark:border-edge-subtle`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,Y.jsx)(`select`,{className:a(En(),`min-w-[8rem]`),value:e.type,onChange:t=>n({...e,type:t.target.value,url:t.target.value===`searxng`?e.url:``}),children:Dn.map(e=>(0,Y.jsx)(`option`,{value:e,children:t.providerTypes[e]},e))}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-1.5 text-xs text-fg-muted`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`size-3.5 rounded border-edge`,checked:e.disabled,onChange:t=>n({...e,disabled:t.target.checked})}),t.disabled]}),(0,Y.jsx)(q,{type:`button`,variant:`ghost`,className:`h-8 px-2 text-fg-muted`,onClick:r,children:(0,Y.jsx)(h,{className:`size-4`})})]})]}),e.type===`searxng`?(0,Y.jsx)(wn,{label:t.urlLabel,description:t.urlDesc,children:(0,Y.jsx)(`input`,{type:`url`,className:Tn(),value:e.url,placeholder:`http://localhost:8080`,onChange:t=>n({...e,url:t.target.value})})}):null,(0,Y.jsx)(wn,{label:t.apiKeyLabel,description:t.apiKeyDesc,children:(0,Y.jsx)(`input`,{type:`password`,autoComplete:`off`,className:Tn(),value:ye(e.apiKey)?``:e.apiKey,placeholder:ye(e.apiKey)?t.keyPlaceholderMasked:t.keyPlaceholder,onChange:t=>n({...e,apiKey:t.target.value})})})]})}var jn=[{key:`fullDisk`,pane:`fullDisk`},{key:`screen`,pane:`screen`},{key:`microphone`,pane:`microphone`},{key:`accessibility`,pane:`accessibility`},{key:`automation`,pane:`automation`},{key:`notifications`,pane:`notifications`},{key:`location`,pane:`location`}];function Mn(e,t){let n=l(e).systemSettings.status;return t===`granted`?{label:n.granted,className:`text-emerald-600 dark:text-emerald-400`}:t===`denied`?{label:n.denied,className:`text-amber-600 dark:text-amber-400`}:{label:n.unknown,className:`text-fg-muted`}}function Nn(){let e=ue(e=>e.language),t=l(e).systemSettings,[n,r]=(0,X.useState)(null),[i,a]=(0,X.useState)(null),[o,s]=(0,X.useState)(null),c=typeof window<`u`?window.electronAPI?.system:void 0,u=(0,X.useCallback)(async()=>{if(c){s(null);try{r(await c.getBehavior()),a(await c.getPermissions())}catch(e){s(e instanceof Error?e.message:String(e))}}},[c]);if((0,X.useEffect)(()=>{we()&&c&&u()},[c,u]),!we()||!c)return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.title}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:t.desktopOnlyTitle}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:t.desktopOnlyBody})]})]});let d=async e=>{try{let{behavior:t}=await c.setBehavior(e);r(t)}catch(e){s(e instanceof Error?e.message:String(e))}},f=async e=>{try{(await c.openPrivacy(e)).ok||s(`open_privacy failed`)}catch(e){s(e instanceof Error?e.message:String(e))}},p=n?n.platform===`win32`?t.permissionsHintWin:n.platform===`linux`?t.permissionsHintLinux:n.platform===`darwin`?t.permissionsHintDarwin:t.permissionsHint:t.permissionsHint;return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,Y.jsx)(`div`,{children:(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:t.title})}),o?(0,Y.jsx)(`p`,{className:`text-sm text-amber-600 dark:text-amber-400`,role:`alert`,children:o}):null,(0,Y.jsxs)(Ge,{children:[(0,Y.jsxs)(`div`,{className:`mb-4 flex items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(j,{className:`size-4 text-accent`,strokeWidth:1.75}),t.behaviorGroup]}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.openAtLogin}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.openAtLoginDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.openAtLogin,onChange:e=>{d({openAtLogin:e.target.checked})}})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.keepAwake}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.keepAwakeDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.keepAwakePreferred,onChange:e=>{d({keepAwakePreferred:e.target.checked})}})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.notifyDesktop}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.notifyDesktopDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.notifyEnabled,onChange:e=>{d({notifyEnabled:e.target.checked})}})]}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 rounded-xl bg-surface-hover/50 px-3 py-2.5 dark:bg-surface-hover/35`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:t.toggles.notifySound}),(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.toggles.notifySoundDesc})]}),(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,disabled:!n,checked:!!n?.notifySoundEnabled,onChange:e=>{d({notifySoundEnabled:e.target.checked})}})]})]})]}),n&&i?(0,Y.jsxs)(`section`,{className:J(),children:[(0,Y.jsxs)(`div`,{className:`mb-4 flex flex-col gap-1 sm:flex-row sm:items-center sm:justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t.permissionsTitle}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:p})]}),(0,Y.jsx)(`button`,{type:`button`,className:`mt-2 inline-flex max-w-full items-center justify-center rounded-lg border border-edge bg-surface-panel px-3 py-1.5 text-sm font-medium text-fg transition-colors hover:bg-surface-hover sm:mt-0`,onClick:()=>void u(),children:t.refresh})]}),(0,Y.jsx)(`ul`,{className:`space-y-3`,children:jn.map(({key:r,pane:o})=>{let l=Mn(e,i[r]),u=t.perm[r];return u?(0,Y.jsxs)(`li`,{className:`flex flex-col gap-2 rounded-xl border border-edge-subtle bg-surface-panel/60 px-3 py-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:u.title}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:u.desc}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs font-medium ${l.className}`,children:l.label})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[r===`microphone`&&n?.platform===`darwin`?(0,Y.jsx)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded-lg border border-edge bg-surface-base px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover`,onClick:()=>{(async()=>{try{await c.requestMicrophone(),a(await c.getPermissions())}catch(e){s(e instanceof Error?e.message:String(e))}})()},children:e===`zh`?`请求访问`:`Request`}):null,(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-lg border border-edge bg-surface-base px-2.5 py-1.5 text-xs font-medium text-fg hover:bg-surface-hover`,onClick:()=>void f(o),children:[t.openSettings,(0,Y.jsx)(_,{className:`size-3.5`,strokeWidth:1.75,"aria-hidden":!0})]})]})]},r):null})})]}):null]})}function Pn(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Fn={enabled:!0,cron:`0 */6 * * *`,lookbackDays:1,limit:50,dedupeSimilarity:.85},In={enabled:!0,cron:`0 3 * * *`,minScore:.8,minRecallCount:3,limit:10,recencyHalfLifeDays:14,maxAgeDays:30},Ln={enabled:!0,cron:`0 5 * * 0`,lookbackDays:7,limit:20,minPatternStrength:.6},Rn={enabled:!1,frequency:`0 3 * * *`,timezone:``,deepEnabled:!0,minScore:.8,minRecallCount:3,limit:10,light:Fn,deep:In,rem:Ln};function zn(e,t){return Number.isFinite(e)?Math.max(0,Math.min(1,e)):t}function Bn(e,t){let n=typeof e==`string`?Number(e):e;return Number.isFinite(n)?Math.max(0,Math.floor(n)):t}function Vn(e,t){let n=typeof e==`string`?Number(e):e;return Number.isFinite(n)?n:t}function Hn(e){let t=Pn(e)?e:{},n=Pn(t.agents)?t.agents:{},r=Pn(n.defaults)?n.defaults:{},i=Pn(r.memory)?r.memory:{},a=Pn(i.dreaming)?i.dreaming:{},o=Pn(a.phases)?a.phases:{},s=Pn(o.light)?o.light:{},c=Pn(o.deep)?o.deep:{},l=Pn(o.rem)?o.rem:{};return{enabled:a.enabled===!0,frequency:typeof a.frequency==`string`&&a.frequency.trim()?a.frequency.trim():Rn.frequency,timezone:typeof a.timezone==`string`?a.timezone:``,deepEnabled:c.enabled!==!1,minScore:zn(typeof c.minScore==`number`?c.minScore:Number(c.minScore),Rn.minScore),minRecallCount:Math.max(1,Bn(c.minRecallCount,Rn.minRecallCount)),limit:Bn(c.limit,Rn.limit),light:{enabled:s.enabled!==!1,cron:typeof s.cron==`string`&&s.cron.trim()?s.cron.trim():Fn.cron,lookbackDays:Math.max(1,Bn(s.lookbackDays,Fn.lookbackDays)),limit:Bn(s.limit,Fn.limit),dedupeSimilarity:zn(Vn(s.dedupeSimilarity,Fn.dedupeSimilarity),Fn.dedupeSimilarity)},deep:{enabled:c.enabled!==!1,cron:typeof c.cron==`string`&&c.cron.trim()?c.cron.trim():In.cron,minScore:zn(Vn(c.minScore,In.minScore),In.minScore),minRecallCount:Math.max(1,Bn(c.minRecallCount,In.minRecallCount)),limit:Bn(c.limit,In.limit),recencyHalfLifeDays:Math.max(1,Vn(c.recencyHalfLifeDays,In.recencyHalfLifeDays)),maxAgeDays:Math.max(1,Vn(c.maxAgeDays,In.maxAgeDays))},rem:{enabled:l.enabled!==!1,cron:typeof l.cron==`string`&&l.cron.trim()?l.cron.trim():Ln.cron,lookbackDays:Math.max(1,Bn(l.lookbackDays,Ln.lookbackDays)),limit:Bn(l.limit,Ln.limit),minPatternStrength:zn(Vn(l.minPatternStrength,Ln.minPatternStrength),Ln.minPatternStrength)}}}async function Un(e){let t=e.frequency.trim(),n=e.timezone.trim();await z(K(`/api/config`),{method:`PATCH`,body:JSON.stringify({agents:{defaults:{memory:{dreaming:{enabled:!!e.enabled,frequency:t||null,timezone:n||null,phases:{light:{enabled:!!e.light.enabled,cron:e.light.cron.trim()||null,lookbackDays:Math.max(1,Math.floor(e.light.lookbackDays)),limit:Math.max(0,Math.floor(e.light.limit)),dedupeSimilarity:zn(e.light.dedupeSimilarity,Fn.dedupeSimilarity)},deep:{enabled:!!e.deep.enabled,cron:e.deep.cron.trim()||null,minScore:zn(e.deep.minScore,In.minScore),minRecallCount:Math.max(1,Math.floor(e.deep.minRecallCount)),limit:Math.max(0,Math.floor(e.deep.limit)),recencyHalfLifeDays:Math.max(1,e.deep.recencyHalfLifeDays),maxAgeDays:Math.max(1,e.deep.maxAgeDays)},rem:{enabled:!!e.rem.enabled,cron:e.rem.cron.trim()||null,lookbackDays:Math.max(1,Math.floor(e.rem.lookbackDays)),limit:Math.max(0,Math.floor(e.rem.limit)),minPatternStrength:zn(e.rem.minPatternStrength,Ln.minPatternStrength)}}}}}}})}),W()}function Q(){return`text-xs font-medium text-fg-muted`}function $(){return`text-sm font-medium text-fg`}function Wn(e){return e?e.replace(`T`,` `).replace(`Z`,``):`—`}function Gn(e){return e===void 0||!Number.isFinite(e)||e<0?`—`:e<1e3?`${Math.round(e)} ms`:`${(e/1e3).toFixed(2)} s`}function Kn({label:e,children:t,className:n}){return(0,Y.jsxs)(`div`,{className:a(`space-y-2`,n),children:[(0,Y.jsx)(`h3`,{className:`text-[0.7rem] font-semibold uppercase tracking-wider text-fg-muted`,children:e}),t]})}function qn({icon:e,label:t,enabled:n,cron:r,details:i,t:o}){return(0,Y.jsxs)(`div`,{className:a(J(),`space-y-1.5`),children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[e,(0,Y.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:t}),(0,Y.jsx)(`span`,{className:a(`ml-auto text-xs font-medium`,n?`text-emerald-600 dark:text-emerald-400`:`text-fg-muted`),children:n?o.on:o.off})]}),(0,Y.jsx)(`div`,{className:`font-mono text-xs text-fg-muted`,children:r}),(0,Y.jsx)(`div`,{className:`text-xs text-fg-muted`,children:i})]})}function Jn({label:e,lastRun:t,t:n}){return(0,Y.jsx)(Kn,{label:e,children:t?.exists?(0,Y.jsxs)(`details`,{className:`group rounded-lg border border-edge-subtle`,children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer list-none px-3 py-2 text-xs font-medium text-fg-muted marker:hidden [&::-webkit-details-marker]:hidden`,children:(0,Y.jsx)(`span`,{className:`underline decoration-edge underline-offset-2 group-open:text-fg`,children:n.lastRunRaw})}),(0,Y.jsx)(`pre`,{className:`max-h-[12rem] overflow-auto border-t border-edge-subtle p-3 text-xs text-fg-muted`,children:JSON.stringify(t.raw,null,2)})]}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:n.phaseLastRunEmpty})})}function Yn({t:e,r:t}){let n=t.deep?.skipped;return(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunStatus}),(0,Y.jsx)(`div`,{className:a($(),t.ok?`text-emerald-600 dark:text-emerald-400`:`text-amber-600 dark:text-amber-400`),children:t.ok?e.lastRunSuccess:e.lastRunFailure})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunDuration}),(0,Y.jsx)(`div`,{className:$(),children:Gn(t.durationMs)})]}),(0,Y.jsxs)(`div`,{className:a(J(),`sm:col-span-2`),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunReason}),(0,Y.jsx)(`div`,{className:$(),children:t.reason}),t.errorMessage?(0,Y.jsx)(`div`,{className:`mt-1 text-xs text-amber-600 dark:text-amber-400`,children:`${e.lastRunError}: ${t.errorMessage}`}):null]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunRanked}),(0,Y.jsx)(`div`,{className:$(),children:String(t.deep?.candidatesRanked??`—`)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunApplied}),(0,Y.jsx)(`div`,{className:$(),children:String(t.deep?.applied??`—`)})]}),n?(0,Y.jsxs)(`div`,{className:`sm:col-span-2`,children:[(0,Y.jsx)(`div`,{className:`mb-2 text-xs font-medium text-fg`,children:e.lastRunSkipped}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipKey}),(0,Y.jsx)(`div`,{className:$(),children:String(n.alreadyPromotedKey)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipRehydrate}),(0,Y.jsx)(`div`,{className:$(),children:String(n.rehydrateFailed)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipContaminated}),(0,Y.jsx)(`div`,{className:$(),children:String(n.contaminated)})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lastRunSkipHash}),(0,Y.jsx)(`div`,{className:$(),children:String(n.hashDuplicate)})]})]})]}):null]})}function Xn(e,t){return e.locked?{text:t.lockValueLocked,className:`text-amber-600 dark:text-amber-400`}:{text:t.lockValueUnlocked,className:`text-emerald-600 dark:text-emerald-400`}}function Zn(){let e=l(ue(e=>e.language)).dreamingSettings,t=!!Pe(e=>e.token),{data:n}=L(t),[i,o]=(0,X.useState)(null),[s,c]=(0,X.useState)(null),[u,d]=(0,X.useState)(!1),[f,p]=(0,X.useState)(!1),[m,g]=(0,X.useState)(!1),[_,v]=(0,X.useState)(null),[y,b]=(0,X.useState)(`deep`),[x,S]=(0,X.useState)(null),[C,w]=(0,X.useState)(null),[T,E]=(0,X.useState)(!1),[D,O]=(0,X.useState)(!1),[k,A]=(0,X.useState)(null),[ee,j]=(0,X.useState)(!1),[M,N]=(0,X.useState)(null),[ne,re]=(0,X.useState)(null),[R,ie]=(0,X.useState)(!1),[z,B]=(0,X.useState)(null),[V,ae]=(0,X.useState)(null),{data:H,error:oe,isLoading:U,mutate:se}=r(t?He():null,Ue,{revalidateOnFocus:!1}),ce=(0,X.useMemo)(()=>H?Xn(H.lock,e):null,[H,e]),W=(0,X.useMemo)(()=>{let e=[];return oe&&e.push(oe instanceof Error?oe.message:String(oe)),s&&e.push(s),_&&e.push(_),M&&e.push(M),z&&e.push(z),k&&e.push(k),e},[oe,s,_,M,z,k]),le=(0,X.useMemo)(()=>{let t=[];return D&&t.push(e.configSaved),m&&t.push(e.runQueued),u&&t.push(e.actionOk),t},[D,m,u,e]),de=(0,X.useCallback)(async()=>{d(!1),c(null),g(!1),v(null),O(!1),A(null),N(null),await se()},[se]),fe=(0,X.useCallback)(async()=>{j(!0),N(null);try{re((await Je(20)).items??[])}catch(e){N(e instanceof Error?e.message:String(e))}finally{j(!1)}},[]),me=(0,X.useCallback)(async()=>{ie(!0),B(null);try{ae(await Ke(50))}catch(e){B(e instanceof Error?e.message:String(e))}finally{ie(!1)}},[]),he=(0,X.useCallback)(async(e=`deep`)=>{p(!0),g(!1),v(null);try{await Xe(e),g(!0),await se()}catch(e){v(e instanceof Error?e.message:String(e))}finally{p(!1)}},[se]),_e=(0,X.useCallback)(async e=>{o(e),c(null),d(!1);try{await We(e),d(!0),await se()}catch(e){c(e instanceof Error?e.message:String(e))}finally{o(null)}},[se]),ve=!t||U||!!i,ye=(0,X.useMemo)(()=>{let e=n?.payload?.config;return Hn(e??{})},[n]);(0,X.useEffect)(()=>{if(t){if(!C){w(ye),S(ye);return}JSON.stringify(ye)!==JSON.stringify(C)&&(w(ye),S(ye))}},[C,ye,t]);let xe=(0,X.useMemo)(()=>!x||!C?!1:JSON.stringify(x)!==JSON.stringify(C),[x,C]),K=(0,X.useCallback)(async()=>{if(x){E(!0),O(!1),A(null);try{await Un(x),w(x),O(!0),await se()}catch(e){A(e instanceof Error?e.message:String(e))}finally{E(!1)}}},[x,se]);return(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:e.title}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:e.subtitle})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center justify-end gap-2`,children:[(0,Y.jsxs)(`select`,{className:`rounded-lg border border-edge bg-surface-panel px-2 py-1.5 text-xs text-fg`,value:y,onChange:e=>b(e.target.value),disabled:!t||f,children:[(0,Y.jsx)(`option`,{value:`light`,children:`Light`}),(0,Y.jsx)(`option`,{value:`deep`,children:`Deep`}),(0,Y.jsx)(`option`,{value:`rem`,children:`REM`})]}),(0,Y.jsxs)(q,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||f,onClick:()=>void he(y),title:e.runNowHint,children:[f?(0,Y.jsx)(G,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(be,{className:`mr-2 size-4`,"aria-hidden":!0}),e.runNow]}),(0,Y.jsxs)(q,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t,onClick:()=>void de(),children:[(0,Y.jsx)(I,{className:`mr-2 size-4`,"aria-hidden":!0}),e.refresh]})]})]}),W.length>0?(0,Y.jsx)(`div`,{className:`space-y-1.5 rounded-2xl border border-amber-500/20 bg-amber-500/5 px-4 py-3`,role:`alert`,children:W.map((e,t)=>(0,Y.jsx)(`p`,{className:`text-sm text-amber-800 dark:text-amber-200/90`,children:e},t))}):null,le.length>0?(0,Y.jsx)(`div`,{className:`space-y-1.5 rounded-2xl border border-emerald-500/20 bg-emerald-500/5 px-4 py-3`,role:`status`,children:le.map((e,t)=>(0,Y.jsx)(`p`,{className:`text-sm text-emerald-800 dark:text-emerald-200/90`,children:e},t))}):null,(0,Y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,Y.jsxs)(Ge,{className:`min-w-0`,children:[(0,Y.jsx)(qe,{icon:P,title:e.configTitle,subtitle:e.configHint,trailing:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(q,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||!x||T||!xe,onClick:()=>void K(),children:[T?(0,Y.jsx)(G,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,e.saveConfig]}),(0,Y.jsx)(q,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||!x||T||!xe,onClick:()=>{O(!1),A(null),S(C)},children:e.resetConfig})]})}),x?(0,Y.jsxs)(`div`,{className:`space-y-5`,children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:x.enabled,onChange:e=>S({...x,enabled:e.target.checked})}),(0,Y.jsx)(`span`,{children:x.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configFrequency}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle dark:border-edge`,value:x.frequency,onChange:e=>S({...x,frequency:e.target.value}),placeholder:`0 3 * * *`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configTimezone}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg placeholder:text-fg-subtle dark:border-edge`,value:x.timezone,onChange:e=>S({...x,timezone:e.target.value}),placeholder:`Asia/Shanghai`})]})]}),(0,Y.jsxs)(Kn,{label:e.configPhaseLight,children:[(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.configPhaseLightHint}),(0,Y.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:x.light.enabled,onChange:e=>S({...x,light:{...x.light,enabled:e.target.checked}})}),(0,Y.jsx)(`span`,{children:x.light.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseCron}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.light.cron,onChange:e=>S({...x,light:{...x.light,cron:e.target.value}}),placeholder:`0 */6 * * *`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configLightLookbackDays}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.light.lookbackDays,onChange:e=>S({...x,light:{...x.light,lookbackDays:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configLightLimit}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:0,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.light.limit,onChange:e=>S({...x,light:{...x.light,limit:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configLightDedupe}),(0,Y.jsx)(`input`,{type:`number`,step:`0.01`,min:0,max:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.light.dedupeSimilarity,onChange:e=>S({...x,light:{...x.light,dedupeSimilarity:Number(e.target.value)}})})]})]})]}),(0,Y.jsxs)(Kn,{label:e.configPhaseDeep,children:[(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.configPhaseDeepHint}),(0,Y.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:x.deep.enabled,onChange:e=>S({...x,deep:{...x.deep,enabled:e.target.checked}})}),(0,Y.jsx)(`span`,{children:x.deep.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseCron}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.deep.cron,onChange:e=>S({...x,deep:{...x.deep,cron:e.target.value}}),placeholder:`0 3 * * *`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepMinScore}),(0,Y.jsx)(`input`,{type:`number`,step:`0.01`,min:0,max:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.deep.minScore,onChange:e=>S({...x,deep:{...x.deep,minScore:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepMinRecallCount}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.deep.minRecallCount,onChange:e=>S({...x,deep:{...x.deep,minRecallCount:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepLimit}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:0,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.deep.limit,onChange:e=>S({...x,deep:{...x.deep,limit:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepHalfLife}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.deep.recencyHalfLifeDays,onChange:e=>S({...x,deep:{...x.deep,recencyHalfLifeDays:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configDeepMaxAge}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.deep.maxAgeDays,onChange:e=>S({...x,deep:{...x.deep,maxAgeDays:Number(e.target.value)}})})]})]})]}),(0,Y.jsxs)(Kn,{label:e.configPhaseRem,children:[(0,Y.jsx)(`p`,{className:`text-xs text-fg-muted`,children:e.configPhaseRemHint}),(0,Y.jsxs)(`div`,{className:`mt-2 grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseEnabled}),(0,Y.jsxs)(`label`,{className:`mt-2 inline-flex items-center gap-2 text-sm text-fg`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,className:`ui-checkbox`,checked:x.rem.enabled,onChange:e=>S({...x,rem:{...x.rem,enabled:e.target.checked}})}),(0,Y.jsx)(`span`,{children:x.rem.enabled?e.on:e.off})]})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configPhaseCron}),(0,Y.jsx)(`input`,{className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.rem.cron,onChange:e=>S({...x,rem:{...x.rem,cron:e.target.value}}),placeholder:`0 5 * * 0`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configRemLookbackDays}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.rem.lookbackDays,onChange:e=>S({...x,rem:{...x.rem,lookbackDays:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configRemLimit}),(0,Y.jsx)(`input`,{type:`number`,step:`1`,min:0,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.rem.limit,onChange:e=>S({...x,rem:{...x.rem,limit:Number(e.target.value)}})})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.configRemMinStrength}),(0,Y.jsx)(`input`,{type:`number`,step:`0.01`,min:0,max:1,className:`mt-2 w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg dark:border-edge`,value:x.rem.minPatternStrength,onChange:e=>S({...x,rem:{...x.rem,minPatternStrength:Number(e.target.value)}})})]})]})]})]}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.configLoading})]}),(0,Y.jsxs)(Ge,{className:`min-w-0`,children:[(0,Y.jsx)(qe,{icon:ge,title:e.runtimeTitle,subtitle:e.runtimeHint,trailing:U?(0,Y.jsx)(G,{className:`size-4 shrink-0 animate-spin text-fg-muted`,"aria-hidden":!0}):null}),(0,Y.jsxs)(`div`,{className:`space-y-6`,children:[(0,Y.jsx)(Kn,{label:e.subsectionSchedule,children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.enabled}),(0,Y.jsx)(`div`,{className:$(),children:H?H.config.enabled?e.on:e.off:`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.lock}),(0,Y.jsx)(`div`,{className:a($(),ce?.className),children:ce?ce.text:`—`})]}),(0,Y.jsxs)(`div`,{className:a(J(),`sm:col-span-2`),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.schedule}),(0,Y.jsx)(`div`,{className:`mt-1 break-all font-mono text-sm text-fg`,children:H?H.config.frequency:`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.timezone}),(0,Y.jsx)(`div`,{className:$(),children:H?H.config.timezone:`—`})]})]})}),(0,Y.jsx)(Kn,{label:e.subsectionStore,children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storeEntries}),(0,Y.jsx)(`div`,{className:$(),children:H?String(H.store.entryCount):`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storePromoted}),(0,Y.jsx)(`div`,{className:$(),children:H?String(H.store.promotedCount):`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storeUpdatedAt}),(0,Y.jsx)(`div`,{className:$(),children:H?Wn(H.store.updatedAt):`—`})]}),(0,Y.jsxs)(`div`,{className:J(),children:[(0,Y.jsx)(`div`,{className:Q(),children:e.storeLastPromotedAt}),(0,Y.jsx)(`div`,{className:$(),children:H?Wn(H.store.lastPromotedAt):`—`})]})]})}),H?.config?.phases?(0,Y.jsx)(Kn,{label:e.subsectionPhases,children:(0,Y.jsxs)(`div`,{className:`grid grid-cols-1 gap-3 sm:grid-cols-3`,children:[(0,Y.jsx)(qn,{icon:(0,Y.jsx)(Re,{className:`size-4 text-amber-500`}),label:`Light`,enabled:H.config.phases.light.enabled,cron:H.config.phases.light.cron,details:`lookback=${H.config.phases.light.lookbackDays}d, limit=${H.config.phases.light.limit}, dedupe=${H.config.phases.light.dedupeSimilarity}`,t:e}),(0,Y.jsx)(qn,{icon:(0,Y.jsx)(ke,{className:`size-4 text-indigo-500`}),label:`Deep`,enabled:H.config.phases.deep.enabled,cron:H.config.phases.deep.cron,details:`minScore=${H.config.phases.deep.minScore}, recalls≥${H.config.phases.deep.minRecallCount}, limit=${H.config.phases.deep.limit}, halfLife=${H.config.phases.deep.recencyHalfLifeDays}d`,t:e}),(0,Y.jsx)(qn,{icon:(0,Y.jsx)(te,{className:`size-4 text-purple-500`}),label:`REM`,enabled:H.config.phases.rem.enabled,cron:H.config.phases.rem.cron,details:`lookback=${H.config.phases.rem.lookbackDays}d, limit=${H.config.phases.rem.limit}, strength≥${H.config.phases.rem.minPatternStrength}`,t:e})]})}):null,(0,Y.jsxs)(Kn,{label:e.subsectionLastRun,children:[(0,Y.jsx)(`p`,{className:`mb-2 text-xs text-fg-muted`,children:e.lastRunBlockHint}),H?.lastRun?.exists?(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[H.lastRun.parseError?(0,Y.jsxs)(`p`,{className:`text-sm text-amber-600 dark:text-amber-400`,role:`alert`,children:[e.lastRunParseError,`: `,H.lastRun.parseError]}):null,H.lastRun.record?(0,Y.jsx)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/40 p-2 sm:p-3`,children:(0,Y.jsx)(Yn,{t:e,r:H.lastRun.record})}):null,H.lastRun.raw!==void 0&&H.lastRun.raw!==null?(0,Y.jsxs)(`details`,{className:`group rounded-lg border border-edge-subtle`,children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer list-none px-3 py-2 text-xs font-medium text-fg-muted marker:hidden [&::-webkit-details-marker]:hidden`,children:(0,Y.jsx)(`span`,{className:`underline decoration-edge underline-offset-2 group-open:text-fg`,children:e.lastRunRaw})}),(0,Y.jsx)(`pre`,{className:`max-h-[12rem] overflow-auto border-t border-edge-subtle p-3 text-xs text-fg-muted`,children:JSON.stringify(H.lastRun.raw,null,2)})]}):null]}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.lastRunEmpty})]}),(0,Y.jsx)(Jn,{label:e.subsectionLightLastRun,lastRun:H?.lightLastRun,t:e}),(0,Y.jsx)(Jn,{label:e.subsectionRemLastRun,lastRun:H?.remLastRun,t:e})]})]})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:F,title:e.previewTitle,subtitle:e.previewHint,trailing:(0,Y.jsxs)(q,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||ee,onClick:()=>void fe(),children:[ee?(0,Y.jsx)(G,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,e.previewLoad]})}),ne?ne.length>0?(0,Y.jsx)(`div`,{className:`space-y-2`,children:ne.map(t=>{let n=`${t.path}:${t.startLine}-${t.endLine}`,r=t.skippedReason;return(0,Y.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/60 px-3 py-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-xs text-fg-muted`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-fg`,children:n}),(0,Y.jsxs)(`span`,{children:[`score=`,t.score.toFixed(3)]}),(0,Y.jsxs)(`span`,{children:[`recalls=`,t.recallCount]}),(0,Y.jsxs)(`span`,{children:[`avg=`,t.avgScore.toFixed(3)]}),(0,Y.jsxs)(`span`,{children:[`decay=`,t.recencyDecay?.toFixed(3)??`—`]}),r?(0,Y.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400`,children:r}):(0,Y.jsx)(`span`,{className:`text-emerald-600 dark:text-emerald-400`,children:e.previewEligible})]}),t.snippet?(0,Y.jsx)(`div`,{className:`mt-2 text-sm text-fg`,children:t.snippet}):null]},`${t.key}:${t.hash}:${n}`)})}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.previewEmpty}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.previewNotLoaded})]}),(0,Y.jsxs)(Ge,{children:[(0,Y.jsx)(qe,{icon:ge,title:e.eventsTitle,subtitle:e.eventsHint,trailing:(0,Y.jsxs)(q,{variant:`secondary`,className:`px-2.5 py-1.5 text-xs`,disabled:!t||R,onClick:()=>void me(),children:[R?(0,Y.jsx)(G,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):null,e.eventsLoad]})}),V?V.length>0?(0,Y.jsx)(`div`,{className:`space-y-1.5`,children:V.map((e,t)=>{let n=e.phase===`light`?`☀️`:e.phase===`rem`?`✨`:`🌙`,r=e.phase===`light`?`scanned=${e.scannedEntries??0} new=${e.newSignals??0} deduped=${e.deduped??0}`:e.phase===`rem`?`patterns=${e.patternsDiscovered??0} analyzed=${e.entriesAnalyzed??0}`:`candidates=${e.candidates??0} applied=${e.applied??0}`;return(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 rounded-lg border border-edge-subtle bg-surface-panel/60 px-3 py-2 text-xs`,children:[(0,Y.jsx)(`span`,{children:n}),(0,Y.jsx)(`span`,{className:`font-medium text-fg`,children:e.phase}),(0,Y.jsx)(`span`,{className:a(`font-medium`,e.ok?`text-emerald-600 dark:text-emerald-400`:`text-amber-600 dark:text-amber-400`),children:e.ok?`OK`:`FAIL`}),(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:r}),(0,Y.jsx)(`span`,{className:`text-fg-muted`,children:Gn(e.durationMs)}),(0,Y.jsx)(`span`,{className:`ml-auto text-fg-subtle`,children:Wn(e.timestamp)})]},`${e.timestamp}:${e.phase}:${t}`)})}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.eventsEmpty}):(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.eventsNotLoaded})]}),(0,Y.jsxs)(Ge,{className:`max-w-2xl`,children:[(0,Y.jsx)(qe,{icon:pe,title:e.maintenanceTitle,subtitle:e.maintenanceHint}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,Y.jsxs)(q,{variant:`secondary`,disabled:ve,onClick:()=>{confirm(e.confirmResetStore)&&_e(`reset_store`)},children:[i===`reset_store`?(0,Y.jsx)(G,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(h,{className:`mr-2 size-4`,"aria-hidden":!0}),e.resetStore]}),(0,Y.jsxs)(q,{variant:`secondary`,disabled:ve,onClick:()=>{confirm(e.confirmClearLock)&&_e(`clear_lock`)},children:[i===`clear_lock`?(0,Y.jsx)(G,{className:`mr-2 size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(Ce,{className:`mr-2 size-4`,"aria-hidden":!0}),e.clearLock]})]})]})]})}async function Qn(e){let t=await Oe(K(`/api/auth/oauth-async/start`),{method:`POST`,body:JSON.stringify({provider:e})});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error||`OAuth start failed: ${t.status}`)}return(await t.json()).payload}async function $n(e){let t=await Oe(K(`/api/auth/oauth-async/${encodeURIComponent(e)}/status`));if(!t.ok)throw Error(`OAuth status: ${t.status}`);return(await t.json()).payload}async function er(e,t){let n=await Oe(K(`/api/auth/oauth-async/${encodeURIComponent(e)}/code`),{method:`POST`,body:JSON.stringify({code:t})});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error||`Submit code failed: ${n.status}`)}}async function tr(e){let t=await Oe(K(`/api/auth/oauth-async/${encodeURIComponent(e)}/cancel`),{method:`POST`});if(!t.ok)throw Error(`Cancel OAuth failed: ${t.status}`)}async function nr(e){let t=await Oe(K(`/api/auth/oauth-async/${encodeURIComponent(e)}`),{method:`DELETE`});if(!t.ok)throw Error(`Cleanup session failed: ${t.status}`)}async function rr(e){let t=await Oe(K(`/api/auth/oauth/${encodeURIComponent(e)}`),{method:`DELETE`});if(!t.ok)throw Error(`Revoke OAuth failed: ${t.status}`)}function ir({providerId:e,language:t}){let n=De[e];if(!n)return null;let r=t===`zh`,i=r&&n.descriptionZh?n.descriptionZh:n.description;return i?(0,Y.jsxs)(S,{children:[(0,Y.jsx)(E,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,className:`rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,"aria-label":r?`${e} 详情`:`${e} info`,children:(0,Y.jsx)(Fe,{className:`size-3.5`,"aria-hidden":!0})})}),(0,Y.jsx)(x,{children:(0,Y.jsxs)(fe,{side:`right`,align:`start`,sideOffset:6,className:a(`z-50 w-64 rounded-xl border border-edge bg-surface-panel p-3 shadow-md`,`data-[state=open]:animate-in data-[state=closed]:animate-out`,`data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0`,`data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95`),children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Y.jsx)(`p`,{className:`text-xs font-semibold text-fg`,children:e}),(0,Y.jsx)(s,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,className:`shrink-0 rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,"aria-label":r?`关闭`:`Close`,children:(0,Y.jsx)(C,{className:`size-3.5`,"aria-hidden":!0})})})]}),(0,Y.jsx)(`p`,{className:`mt-1.5 text-xs leading-relaxed text-fg-muted`,children:i}),n.bestFor&&n.bestFor.length>0?(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r?`适合场景`:`Best for`}),(0,Y.jsx)(`div`,{className:`mt-1 flex flex-wrap gap-1`,children:n.bestFor.map(e=>(0,Y.jsx)(`span`,{className:`rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium text-fg-muted`,children:e},e))})]}):null,n.freeTier===void 0?null:(0,Y.jsxs)(`div`,{className:`mt-2`,children:[(0,Y.jsx)(`p`,{className:`text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r?`免费额度`:`Free tier`}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:n.freeTier?n.freeTierNote??(r?`有免费额度`:`Available`):r?`无免费额度(按量付费)`:`None (pay-as-you-go)`})]}),n.pricingUrl||n.docsUrl?(0,Y.jsxs)(`div`,{className:`mt-2.5 flex gap-3`,children:[n.pricingUrl?(0,Y.jsxs)(`a`,{href:n.pricingUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-0.5 text-xs text-accent-fg hover:underline`,children:[r?`定价`:`Pricing`,(0,Y.jsx)(_,{className:`size-3`,"aria-hidden":!0})]}):null,n.docsUrl?(0,Y.jsxs)(`a`,{href:n.docsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-0.5 text-xs text-accent-fg hover:underline`,children:[r?`文档`:`Docs`,(0,Y.jsx)(_,{className:`size-3`,"aria-hidden":!0})]}):null]}):null,(0,Y.jsx)(me,{className:`fill-edge`})]})})]}):null}var ar=[`common`,`specialty`,`enterprise`,`oauth`,`extension`];function or(e){let t=new Map;for(let e of ar)t.set(e,[]);for(let n of e){let e=n.category||`specialty`,r=t.get(e)??[];r.push(n),t.set(e,r)}return t}function sr(e,t){return e.replace(/\{\{(\w+)\}\}/g,(e,n)=>String(t[n]??``))}function cr(e,t){switch(t){case`agent`:return e.sourceAgent;case`gateway`:return e.sourceGateway;case`oauth`:return e.sourceOauth;case`env`:return e.sourceEnv;case`models_json`:return e.sourceModelsJson;case`extension`:return e.sourceExtension;default:return e.sourceNone}}function lr(){let e=ue(e=>e.language),t=l(e),n=t.providersSettings,i=!!Pe(e=>e.token),[o,s]=(0,X.useState)({}),[c,d]=(0,X.useState)({}),[f,p]=(0,X.useState)(!1),[m,h]=(0,X.useState)(null),[g,_]=(0,X.useState)(null),[b,x]=(0,X.useState)(()=>new Set([`common`])),[S,C]=(0,X.useState)(``),[w,T]=(0,X.useState)(!1),[E,D]=(0,X.useState)(()=>new Set),k=(0,X.useRef)(``),A=K(`/api/providers/meta`),ee=(0,X.useCallback)(async e=>(await z(e)).payload?.providers??[],[]),{data:j,error:te,isLoading:M,mutate:N}=L(i),{data:P,error:F,isLoading:ne,mutate:I}=r(i?A:null,ee,{revalidateOnFocus:!1}),{data:R,mutate:ie}=r(i?le:null,()=>ce(),{revalidateOnFocus:!1}),B=(0,X.useMemo)(()=>!P||j===void 0?null:Te(P,re(j.payload?.config),R??[]),[P,j,R]),V=te instanceof Error?te.message:te?String(te):F instanceof Error?F.message:F?String(F):null,H=!!(i&&B===null&&(M||ne)&&!V),U=(0,X.useMemo)(()=>JSON.stringify(o)!==JSON.stringify(c),[o,c]);(0,X.useEffect)(()=>{if(!U)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[U]),(0,X.useEffect)(()=>{if(!(!i||B===null)&&!U){let e={};for(let t of B)e[t.id]=t.apiKey;s(e),d({...e})}},[i,B,U]);let se=B??[],W=(0,X.useMemo)(()=>{let e=se,t=S.trim().toLowerCase();return t&&(e=e.filter(e=>{let n=De[e.id]?.aliases??[];return e.id.toLowerCase().includes(t)||e.name.toLowerCase().includes(t)||n.some(e=>e.toLowerCase().includes(t))})),w&&(e=e.filter(e=>!e.configured)),e},[se,S,w]),fe=(0,X.useMemo)(()=>or(W),[W]);(0,X.useEffect)(()=>{let e=k.current;if(k.current=S,S.trim()){let e=new Set;for(let t of ar)(fe.get(t)??[]).length>0&&e.add(t);x(e);return}e.trim()&&x(new Set([`common`]))},[S,fe]);let pe=(0,X.useCallback)(async()=>{if(f)return;let e={};for(let t of Object.keys(o)){let n=o[t]?.trim()??``;!n||ye(n)||(e[t]=n)}if(Object.keys(e).length===0){d({...o}),_(`noChanges`),window.setTimeout(()=>_(null),2500);return}p(!0),h(null),_(null);try{await de(e),D(new Set(Object.keys(e)));let t=await ie(ce(!0))??R??[],[n,r]=await Promise.all([N(),I()]),i=Array.isArray(r)?r:P??[],a=n??j;if(a?.payload){let e=Te(i,re(a.payload.config),t),n={};for(let t of e)n[t.id]=t.apiKey;s(n),d({...n})}_(`saved`),window.setTimeout(()=>_(null),2500)}catch(e){h(e instanceof Error?e.message:n.saveError)}finally{p(!1)}},[j,o,P,R,N,I,ie,n.saveError,f]),me=(0,X.useCallback)(()=>{s({...c}),h(null),_(null),D(new Set)},[c]),he=e=>{x(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},ge=(0,X.useCallback)(()=>{N(),I()},[N,I]),_e=!!(S.trim()||w);return i?H?(0,Y.jsxs)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-8`,children:[(0,Y.jsx)(`div`,{className:`h-8 w-48 animate-pulse rounded bg-surface-hover`}),(0,Y.jsx)(`div`,{className:`mt-6 h-32 animate-pulse rounded-xl bg-surface-hover`}),(0,Y.jsx)(`p`,{className:`mt-4 text-sm text-fg-muted`,children:t.logs.loading})]}):se.length===0?(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:[(0,Y.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-base px-4 py-3`,children:[(0,Y.jsx)(`p`,{className:`text-sm font-medium text-fg`,children:n.loadError}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:m??V??n.empty})]}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,onClick:()=>{N(),I()},children:t.logs.refresh})]}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-6`,children:[(0,Y.jsxs)(`header`,{className:`flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:t.settingsSections.providers}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.subtitle}),(0,Y.jsx)(`p`,{className:`mt-2 text-xs text-fg-subtle`,children:n.rotateHint})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center gap-2`,children:[g===`saved`?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.saved}):null,g===`noChanges`?(0,Y.jsx)(`span`,{className:`text-sm text-fg-muted`,children:n.noChangesSaved}):null,(0,Y.jsx)(q,{type:`button`,variant:`secondary`,disabled:!U||f,onClick:me,children:n.discard}),(0,Y.jsx)(q,{type:`button`,variant:`primary`,disabled:!U||f,onClick:()=>void pe(),children:f?n.saving:n.save})]})]}),U?(0,Y.jsx)(`p`,{className:`text-xs text-amber-800 dark:text-amber-200`,children:n.unsavedHint}):null,(0,Y.jsxs)(`p`,{className:`text-sm leading-relaxed text-fg-muted`,children:[n.intro,` `,(0,Y.jsx)(`a`,{href:ae(e,`models`),target:`_blank`,rel:`noopener noreferrer`,className:`font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:n.docsLink}),` · `,(0,Y.jsx)(Ne,{to:`/settings/models`,className:`font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:n.modelsLink})]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:flex-wrap sm:items-center`,children:[(0,Y.jsxs)(`div`,{className:`relative min-w-0 flex-1 sm:max-w-md`,children:[(0,Y.jsx)(v,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-subtle`,strokeWidth:1.75,"aria-hidden":!0}),(0,Y.jsx)(`input`,{type:`search`,value:S,onChange:e=>C(e.target.value),placeholder:n.searchPlaceholder,autoComplete:`off`,className:a(`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-10 pr-3 text-sm text-fg placeholder:text-fg-subtle`,O,`dark:border-edge`),"aria-label":n.searchPlaceholder})]}),(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg-muted`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:w,onChange:e=>T(e.target.checked),className:`size-4 rounded border-edge text-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`}),n.unconfiguredOnly]}),_e?(0,Y.jsx)(q,{type:`button`,variant:`ghost`,className:`h-9 w-fit self-start text-fg-muted`,onClick:()=>{C(``),T(!1)},children:n.clearFilters}):null]}),m?(0,Y.jsx)(`div`,{className:`rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`,role:`alert`,children:m}):null,W.length===0?(0,Y.jsxs)(`div`,{className:`rounded-xl border border-dashed border-edge-subtle bg-surface-base px-4 py-8 text-center text-sm text-fg-muted`,children:[(0,Y.jsx)(`p`,{children:n.noMatches}),(0,Y.jsx)(q,{type:`button`,variant:`secondary`,className:`mt-4`,onClick:()=>{C(``),T(!1)},children:n.clearFilters})]}):(0,Y.jsx)(`div`,{className:`flex flex-col gap-3`,children:ar.map(t=>{let r=fe.get(t)??[];if(r.length===0)return null;let i=b.has(t),l=r.filter(e=>e.configured).length,u=`providers-cat-${t}`;return(0,Y.jsxs)(`section`,{className:`overflow-hidden rounded-2xl bg-surface-base`,children:[(0,Y.jsxs)(`button`,{type:`button`,id:`${u}-trigger`,"aria-expanded":i,"aria-controls":u,className:`flex w-full items-center justify-between gap-2 border-b border-edge-subtle px-4 py-3 text-left transition-colors hover:bg-surface-hover/60 dark:border-edge-subtle`,onClick:()=>he(t),children:[(0,Y.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2 text-sm font-semibold text-fg`,children:[(0,Y.jsx)(`span`,{className:`truncate`,children:n.categories[t]}),(0,Y.jsx)(`span`,{className:`shrink-0 rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:r.length})]}),(0,Y.jsxs)(`span`,{className:`flex shrink-0 items-center gap-2`,children:[l>0?(0,Y.jsxs)(`span`,{className:`flex items-center gap-1 text-xs text-fg-subtle`,children:[(0,Y.jsx)(y,{className:`size-3.5 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}),sr(n.configuredCount,{count:String(l)})]}):null,(0,Y.jsx)(oe,{className:a(`size-4 text-fg-subtle transition-transform`,i&&`rotate-180`),"aria-hidden":!0})]})]}),i?(0,Y.jsx)(`div`,{id:u,role:`region`,"aria-labelledby":`${u}-trigger`,className:`divide-y divide-edge-subtle`,children:r.map(t=>(0,Y.jsx)(`div`,{id:`provider-row-${t.id}`,children:(0,Y.jsx)(dr,{row:t,value:o[t.id]??``,rowDirty:(o[t.id]??``)!==(c[t.id]??``),labels:n,language:e,onChange:(e,t)=>s(n=>({...n,[e]:t})),onReload:ge,justSaved:E.has(t.id),availableModels:R??[]})},t.id))}):null]},t)})})]}):(0,Y.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-3 rounded-2xl bg-surface-base p-6`,children:[(0,Y.jsx)(u,{className:`mt-0.5 size-5 shrink-0 text-fg-subtle`,strokeWidth:1.75}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-base font-semibold text-fg`,children:t.settingsSections.providers}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:n.needToken})]})]})})}function ur({envVar:e,labels:t}){let[n,r]=(0,X.useState)(!1),i=async()=>{try{await navigator.clipboard.writeText(e),r(!0),window.setTimeout(()=>r(!1),2e3)}catch{}};return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`code`,{className:`rounded bg-surface-hover px-1.5 py-0.5 font-mono text-[11px] text-fg-muted`,children:e}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>void i(),className:`rounded p-0.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,title:n?t.copied:t.copy,"aria-label":n?t.copied:t.copy,children:n?(0,Y.jsx)(y,{className:`size-3.5 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}):(0,Y.jsx)(M,{className:`size-3.5`,"aria-hidden":!0})})]})}function dr({row:e,value:t,rowDirty:n,labels:r,language:i,onChange:o,onReload:s,justSaved:c,availableModels:l}){let[d,f]=(0,X.useState)(!1),[p,m]=(0,X.useState)(!1),[v,b]=(0,X.useState)(!1),[x,S]=(0,X.useState)(null),[w,E]=(0,X.useState)(!1),[D,k]=(0,X.useState)(null),[A,ee]=(0,X.useState)(!1),j=ye(t),te=j&&!p?``:t,P=e.configured&&!j&&!!t,[F,I]=(0,X.useState)(!1),[L,re]=(0,X.useState)(),[R,z]=(0,X.useState)(),[B,V]=(0,X.useState)(),[ae,U]=(0,X.useState)(),[ce,W]=(0,X.useState)(),[le,ue]=(0,X.useState)(``),[de,fe]=(0,X.useState)(!1),[pe,me]=(0,X.useState)(null),[ge,_e]=(0,X.useState)(null),ve=e.activeKeySource??`none`,be=(0,X.useMemo)(()=>ie(e.id,i),[e.id,i]);(0,X.useEffect)(()=>()=>{L&&nr(L).catch(()=>{})},[L]),(0,X.useEffect)(()=>{if(!L||!F)return;let e=window.setInterval(()=>{(async()=>{try{let t=await $n(L);V(t.message),U(t.authUrl),W(t.instructions),t.status===`waiting_auth`||t.status===`waiting_code`?z(t.status===`waiting_code`?`waiting_code`:`waiting`):t.status===`completed`?(window.clearInterval(e),I(!1),z(`success`),V(t.message),window.setTimeout(()=>s(),800)):(t.status===`failed`||t.status===`cancelled`)&&(window.clearInterval(e),I(!1),z(`error`),V(t.error||t.message||`OAuth failed`))}catch{}})()},1e3);return()=>window.clearInterval(e)},[L,F,s]);let K=async()=>{I(!0),z(`waiting`),V(r.oauthStarting),re(void 0),U(void 0),W(void 0);try{re((await Qn(e.id)).sessionId)}catch(e){z(`error`),V(e instanceof Error?e.message:`OAuth failed`),I(!1)}},Se=async()=>{if(L){try{await tr(L)}catch{}re(void 0),I(!1),z(`idle`),V(void 0)}},Ce=async()=>{if(!(!L||!le.trim()))try{await er(L,le.trim()),ue(``),V(r.oauthProcessingCode)}catch(e){z(`error`),V(e instanceof Error?e.message:`Failed`)}},we=()=>{window.confirm(sr(r.revokeConfirm,{name:e.name}))&&(S(null),rr(e.id).then(()=>s()).catch(e=>S(e instanceof Error?e.message:r.revokeFailed)))},Te=async()=>{ee(!1),E(!0),k(null);try{await Ae(e.id),k(r.removeKeySuccess),o(e.id,``),window.setTimeout(()=>s(),600)}catch(e){k(e instanceof Error?e.message:r.removeKeyFailed)}finally{E(!1)}},Ee=e.configured&&j&&ve!==`env`&&ve!==`extension`&&ve!==`models_json`,Oe=async()=>{if(!(!t||j))try{await navigator.clipboard.writeText(t),b(!0),window.setTimeout(()=>b(!1),2e3)}catch{}},ke=async()=>{let e=t.trim();if(!(!e||ye(e))){fe(!0),me(null),_e(null);try{let t=await xe(e);if(t.error){_e(!1),me(`${r.testFailed} ${t.error}`);return}_e(!0),t.type===`env`?me(r.testOkEnv):t.type===`command`?me(r.testOkCommand):me(r.testOkLiteral)}catch(e){_e(!1),me(e instanceof Error?e.message:r.testFailed)}finally{fe(!1)}}},je=n?r.metaWillSave:e.configured?j?`${r.metaMasked} · ${r.runtimeLabelPrefix} ${cr(r,ve)}`:`${r.runtimeLabelPrefix} ${cr(r,ve)}`:r.metaNotConfigured,Ne=`provider-details-${e.id}`;return(0,Y.jsxs)(`div`,{className:`bg-surface-panel`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-3 sm:px-4`,children:[(0,Y.jsx)(`div`,{className:`flex size-8 shrink-0 items-center justify-center rounded-md bg-surface-hover/80 dark:bg-surface-hover/50`,"aria-hidden":!0,children:e.configured?(0,Y.jsx)(y,{className:`size-4 text-emerald-600 dark:text-emerald-400`}):(0,Y.jsx)(u,{className:`size-4 text-fg-subtle`,strokeWidth:1.75})}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-semibold text-fg`,children:e.name}),(0,Y.jsx)(ir,{providerId:e.id,language:i}),(0,Y.jsx)(`span`,{className:`rounded bg-surface-hover px-1.5 py-0.5 font-mono text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:e.id}),(0,Y.jsx)(`span`,{className:`rounded bg-surface-hover px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-fg-subtle`,children:e.category})]}),(0,Y.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:je})]}),(0,Y.jsx)(q,{type:`button`,variant:`ghost`,className:`h-9 w-9 shrink-0 p-0`,"aria-expanded":d,"aria-controls":Ne,"aria-label":r.expandRowDetails,onClick:()=>f(e=>!e),children:(0,Y.jsx)(oe,{className:a(`size-4 transition-transform`,d&&`rotate-180`),"aria-hidden":!0})})]}),d?(0,Y.jsxs)(`div`,{id:Ne,role:`region`,className:`space-y-3 border-t border-edge-subtle bg-surface-base/40 px-3 py-3 dark:bg-surface-base/20 sm:px-4`,children:[e.supportsApiKey===!1?null:(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative flex flex-col gap-2 sm:flex-row sm:gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,Y.jsx)(`input`,{type:p||!j?`text`:`password`,className:a(`w-full rounded-lg border border-edge bg-surface-panel py-2 pl-3 pr-20 font-mono text-sm text-fg`,`placeholder:text-fg-subtle`,O,`dark:border-edge`),value:te,placeholder:j?r.placeholderOverride:e.configured?r.placeholderKeep:r.placeholderKey,disabled:F,onChange:t=>o(e.id,t.target.value),autoComplete:`off`,spellCheck:!1}),(0,Y.jsxs)(`div`,{className:`absolute right-1 top-1/2 flex -translate-y-1/2 gap-0.5`,children:[t&&!j?(0,Y.jsx)(`button`,{type:`button`,className:a(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg`,N.transition,N.press,N.focusRingPanel),title:v?r.copied:r.copy,"aria-label":v?r.copied:r.copy,onClick:()=>void Oe(),children:v?(0,Y.jsx)(y,{className:`size-4`}):(0,Y.jsx)(M,{className:`size-4`})}):null,(0,Y.jsx)(`button`,{type:`button`,className:a(`rounded p-1.5 text-fg-subtle hover:bg-surface-hover hover:text-fg disabled:opacity-40`,N.transition,N.press,N.focusRingPanel),title:p?r.hide:r.show,"aria-label":p?r.hide:r.show,disabled:j,onClick:()=>m(e=>!e),children:p?(0,Y.jsx)(g,{className:`size-4`}):(0,Y.jsx)(T,{className:`size-4`})})]})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2 sm:shrink-0`,children:[(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`gap-1`,disabled:F||de||!t.trim()||ye(t),onClick:()=>void ke(),children:[de?(0,Y.jsx)(G,{className:`size-4 animate-spin`,"aria-hidden":!0}):null,de?r.testingKey:r.testKey]}),e.supportsOAuth?P?(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`gap-1 text-red-600 dark:text-red-400`,onClick:we,children:[(0,Y.jsx)(H,{className:`size-4`,"aria-hidden":!0}),r.revoke]}):(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`gap-1`,disabled:F,onClick:()=>void K(),children:[F?(0,Y.jsx)(G,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(se,{className:`size-4`,"aria-hidden":!0}),r.oauth]}):null,Ee?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`gap-1 text-red-600 dark:text-red-400`,disabled:w,onClick:()=>ee(!0),children:[w?(0,Y.jsx)(G,{className:`size-4 animate-spin`,"aria-hidden":!0}):(0,Y.jsx)(h,{className:`size-4`,"aria-hidden":!0}),r.removeKey]}),(0,Y.jsx)(Me,{open:A,title:r.removeKey,description:sr(r.removeKeyConfirm,{name:e.name}),confirmLabel:r.removeKey,cancelLabel:r.cancelOAuth,destructive:!0,onConfirm:()=>void Te(),onCancel:()=>ee(!1)})]}):null]})]}),pe?(0,Y.jsx)(`p`,{className:a(`text-xs`,ge===!1?`text-red-600 dark:text-red-400`:`text-fg-muted`),role:`status`,children:pe}):null,be.length>0?(0,Y.jsx)(`div`,{className:`flex flex-col gap-1`,children:be.map(e=>(0,Y.jsxs)(`a`,{href:e.href,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex w-fit items-center gap-1 text-xs font-medium text-accent-fg hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent`,children:[he(e.kind,r),(0,Y.jsx)(_,{className:`size-3`,"aria-hidden":!0})]},`${e.kind}-${e.href}`))}):null]}),B?(0,Y.jsxs)(`div`,{className:a(`flex gap-2 rounded-md px-3 py-2 text-xs`,R===`error`?`border border-red-200 bg-red-50 text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`:`bg-surface-base text-fg-muted`),children:[R===`error`?(0,Y.jsx)(ne,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}):R===`success`?(0,Y.jsx)(y,{className:`mt-0.5 size-4 shrink-0 text-emerald-600`,"aria-hidden":!0}):(0,Y.jsx)(Fe,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:B})]}):null,x?(0,Y.jsxs)(`div`,{className:`flex gap-2 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`,role:`alert`,children:[(0,Y.jsx)(ne,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:x})]}):null,D?(0,Y.jsxs)(`div`,{className:a(`flex gap-2 rounded-md px-3 py-2 text-xs`,D===r.removeKeySuccess?`bg-surface-hover/60 text-fg-muted dark:bg-surface-hover/40`:`border border-red-200 bg-red-50 text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`),role:`status`,children:[D===r.removeKeySuccess?(0,Y.jsx)(y,{className:`mt-0.5 size-4 shrink-0 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}):(0,Y.jsx)(ne,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:D})]}):null,(R===`waiting`||R===`waiting_code`)&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[ae?(0,Y.jsxs)(`a`,{href:ae,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 rounded-md bg-accent px-3 py-2 text-sm font-medium text-white hover:bg-accent-hover`,children:[(0,Y.jsx)(_,{className:`size-4`,"aria-hidden":!0}),r.openAuthPage]}):null,(0,Y.jsxs)(q,{type:`button`,variant:`secondary`,className:`gap-1`,onClick:()=>void Se(),children:[(0,Y.jsx)(C,{className:`size-4`,"aria-hidden":!0}),r.cancelOAuth]})]}),ce?(0,Y.jsxs)(`div`,{className:`flex gap-2 rounded-md bg-surface-hover/60 px-3 py-2 text-xs text-fg-muted dark:bg-surface-hover/40`,children:[(0,Y.jsx)(Fe,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:ce})]}):null,R===`waiting_code`?(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,Y.jsx)(`input`,{type:`text`,className:a(`min-w-0 flex-1 rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,O,`dark:border-edge`),value:le,placeholder:r.pasteRedirectUrl,onChange:e=>ue(e.target.value),onKeyDown:e=>e.key===`Enter`&&void Ce()}),(0,Y.jsx)(q,{type:`button`,variant:`primary`,className:`shrink-0`,onClick:()=>void Ce(),children:r.submitCode})]}):null,j?(0,Y.jsxs)(`div`,{className:`flex gap-2 rounded-md bg-surface-hover/60 px-3 py-2 text-xs text-fg-muted dark:bg-surface-hover/40`,children:[(0,Y.jsx)(Fe,{className:`mt-0.5 size-4 shrink-0`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:ve===`env`?r.envHint:r.maskedStoredHint})]}):null,e.supportsOAuth&&!j&&!P?(0,Y.jsx)(`p`,{className:`text-xs text-fg-subtle`,children:r.oauthHint}):null,c?(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md bg-surface-hover/60 px-3 py-2 text-xs text-fg-muted dark:bg-surface-hover/40`,children:[(0,Y.jsx)(y,{className:`mt-0.5 size-3.5 shrink-0 text-emerald-600 dark:text-emerald-400`,"aria-hidden":!0}),(0,Y.jsx)(`span`,{children:(()=>{let t=l.filter(t=>t.provider===e.id);if(t.length===0)return r.savedNoModels;let n=t.slice(0,3).map(e=>e.name||e.id).join(`, `),i=t.length>3?`… (+${t.length-3})`:``;return`${t.length} ${r.savedModelsAvailable}: ${n}${i}`})()})]}):null,(De[e.id]?.envVars??[]).length>0?(0,Y.jsxs)(`details`,{children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer select-none list-none text-xs text-fg-subtle hover:text-fg-muted`,children:r.envVarAlt}),(0,Y.jsx)(`div`,{className:`mt-1.5 flex flex-col gap-1`,children:(De[e.id]?.envVars??[]).map(e=>(0,Y.jsx)(ur,{envVar:e,labels:r},e))})]}):null]}):null]})}var fr=[`appearance`,`system`,`agent-defaults`,`providers`,`models`,`voice`,`gateway`,`heartbeat`,`search`,`dreams`];function pr(){let{section:e}=_e(),t=ue(e=>e.language),n=l(t);if(e===`agent`||e===`agents`)return(0,Y.jsx)(V,{to:`/agents`,replace:!0});if(!e||!fr.includes(e))return(0,Y.jsx)(V,{to:`/settings/appearance`,replace:!0});let r=e,i=n.settingsSections[r];return r===`appearance`?(0,Y.jsx)(tt,{}):r===`system`?(0,Y.jsx)(Nn,{}):r===`agent-defaults`?(0,Y.jsx)(Ye,{}):r===`providers`?(0,Y.jsx)(lr,{}):r===`models`?(0,Y.jsx)(Zt,{}):r===`voice`?(0,Y.jsx)(yn,{}):r===`gateway`?(0,Y.jsx)(ot,{}):r===`heartbeat`?(0,Y.jsx)(wt,{}):r===`search`?(0,Y.jsx)(kn,{}):r===`dreams`?(0,Y.jsx)(Zn,{}):(0,Y.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,Y.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:i}),(0,Y.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t===`zh`?`设置 · ${i}(即将推出)。`:`Settings · ${i} (coming soon).`})]})}export{pr as SettingsPage};
2
- //# sourceMappingURL=settings-page-PodSlNwr.js.map