hermes-web-ui 0.3.0 → 0.3.2

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 (83) hide show
  1. package/dist/client/assets/{Add-HK51AOcE.js → Add-CYFVC6GK.js} +1 -1
  2. package/dist/client/assets/{Button-sy1PzWPU.js → Button-Bls2FkVh.js} +1 -1
  3. package/dist/client/assets/{ChannelsView-Do43S3tP.css → ChannelsView-CSo2o-P4.css} +1 -1
  4. package/dist/client/assets/ChannelsView-hQeWN-ve.js +1 -0
  5. package/dist/client/assets/{ChatView-BZljWOsk.js → ChatView-C67INFi3.js} +2 -2
  6. package/dist/client/assets/{ChatView-DWJ1E8rg.css → ChatView-CtLv9X8G.css} +1 -1
  7. package/dist/client/assets/{Close-h76fWaJi.js → Close-CkAmZwHA.js} +1 -1
  8. package/dist/client/assets/{FormItem-DAkggFjx.js → FormItem-CO8nEllS.js} +1 -1
  9. package/dist/client/assets/{Input-BgeYIOdH.js → Input-CmTdqaW1.js} +1 -1
  10. package/dist/client/assets/{InputNumber-CP0Q1JN_.js → InputNumber-BVqiFQ5W.js} +1 -1
  11. package/dist/client/assets/JobsView-B0LZ2Ep0.js +2 -0
  12. package/dist/client/assets/{JobsView-CvuV9mZY.css → JobsView-CVx2Yv-y.css} +1 -1
  13. package/dist/client/assets/{LoginView-DR64ehSS.js → LoginView-BjqBXdDl.js} +1 -1
  14. package/dist/client/assets/{LogsView-De8hT0ry.js → LogsView-CXiJ_mte.js} +1 -1
  15. package/dist/client/assets/{MarkdownRenderer-CgO4HMET.js → MarkdownRenderer-CtI0yse1.js} +1 -1
  16. package/dist/client/assets/{MemoryView-vo6uIeGe.js → MemoryView-CjPn1pVR.js} +1 -1
  17. package/dist/client/assets/{Modal-D0bHwidv.js → Modal-apmj2qGK.js} +1 -1
  18. package/dist/client/assets/ModelsView-DXvahVC_.js +1 -0
  19. package/dist/client/assets/{Popconfirm-C4L6j7Ed.js → Popconfirm-B9XSMaYA.js} +1 -1
  20. package/dist/client/assets/{Popover-CSVNytD9.js → Popover-CjCb_fJl.js} +1 -1
  21. package/dist/client/assets/{ProfilesView-5N8GD-OY.js → ProfilesView-CmMfNg5X.js} +1 -1
  22. package/dist/client/assets/{Scrollbar-CP3UrDPW.js → Scrollbar-v6Ok23iG.js} +1 -1
  23. package/dist/client/assets/{Select-BX8K2ITf.js → Select-CDF2CEro.js} +1 -1
  24. package/dist/client/assets/{SettingRow-Dj1WGKUP.js → SettingRow-CSjwu__h.js} +1 -1
  25. package/dist/client/assets/{SettingsView-C78xbLXK.css → SettingsView-BIEQOPzq.css} +1 -1
  26. package/dist/client/assets/{SettingsView-8WKddMDg.js → SettingsView-BYedQhU5.js} +2 -2
  27. package/dist/client/assets/{SkillsView-huWlVVSd.js → SkillsView-B_MA4How.js} +1 -1
  28. package/dist/client/assets/{Spin-7qVct-fX.js → Spin-UqA8uGuf.js} +1 -1
  29. package/dist/client/assets/{Suffix-CTB2TVbZ.js → Suffix-iRME2DUp.js} +1 -1
  30. package/dist/client/assets/{Switch-DznAKpSq.js → Switch-B4za8e-x.js} +1 -1
  31. package/dist/client/assets/{TerminalView-D8h6hUON.js → TerminalView-C0xlWgsR.js} +1 -1
  32. package/dist/client/assets/{Tooltip-hZdU3QDl.js → Tooltip-C9kFaGpi.js} +1 -1
  33. package/dist/client/assets/{UsageView-c67PH6UD.js → UsageView-Df6TKjYG.js} +1 -1
  34. package/dist/client/assets/{Warning-ajVqmXLg.js → Warning-C--exCXL.js} +1 -1
  35. package/dist/client/assets/{_plugin-vue_export-helper-Cla2Sei2.js → _plugin-vue_export-helper-BPCSidQI.js} +1 -1
  36. package/dist/client/assets/{app-Dn_xFNgc.js → app-BEBfTlZP.js} +1 -1
  37. package/dist/client/assets/app-DoAgSphx.js +1 -0
  38. package/dist/client/assets/{browser-Bj_pylgC.js → browser-OtgUKGth.js} +1 -1
  39. package/dist/client/assets/{chat-oRYxV4zZ.js → chat-B8_g1FhX.js} +2 -2
  40. package/dist/client/assets/composables-VZZHak9F.js +1 -0
  41. package/dist/client/assets/{fade-in-scale-up.cssr-A5vydVRa.js → fade-in-scale-up.cssr-BbYEGcju.js} +1 -1
  42. package/dist/client/assets/index-DY7SeRWD.js +284 -0
  43. package/dist/client/assets/index-JeutuTe0.css +1 -0
  44. package/dist/client/assets/{jobs-D6sYt3p2.js → jobs-BRLhuQpK.js} +1 -1
  45. package/dist/client/assets/{light-s39H4IqC.js → light-8G-BZ0JM.js} +1 -1
  46. package/dist/client/assets/{light-BlRycys6.js → light-B3QvGN97.js} +1 -1
  47. package/dist/client/assets/{light-2H7dwk18.js → light-B83Z4vA9.js} +1 -1
  48. package/dist/client/assets/{light-BRnwbni5.js → light-Bmu6b0jg.js} +1 -1
  49. package/dist/client/assets/{light-DyxaUrhN.js → light-BtLlDltU.js} +1 -1
  50. package/dist/client/assets/{light-DTze2Byq.js → light-DDEUT7ek.js} +1 -1
  51. package/dist/client/assets/{pinia-0T1SpgZT.js → pinia-F-uLzgMS.js} +1 -1
  52. package/dist/client/assets/{profiles-CXj2WAET.js → profiles-DIJT1P0i.js} +1 -1
  53. package/dist/client/assets/{router-k7Mt11r-.js → router-Drg4uUER.js} +2 -2
  54. package/dist/client/assets/{sessions-C04iLbID.js → sessions-BwtYroiN.js} +1 -1
  55. package/dist/client/assets/{skills-CrJMmxLv.js → skills-BLhNwqgu.js} +1 -1
  56. package/dist/client/assets/use-compitable-BgSV79Sl.js +1 -0
  57. package/dist/client/assets/{use-message-kLSX34Jy.js → use-message-xhQoRXQV.js} +1 -1
  58. package/dist/client/assets/{useTheme-OKrDn5ib.js → useTheme-Dd5YNF4O.js} +1 -1
  59. package/dist/client/index.html +28 -28
  60. package/dist/server/index.js +2 -2
  61. package/dist/server/routes/hermes/config.js +15 -3
  62. package/dist/server/routes/hermes/filesystem.js +25 -5
  63. package/dist/server/routes/hermes/logs.js +1 -1
  64. package/dist/server/routes/hermes/profiles.js +1 -1
  65. package/dist/server/routes/hermes/sessions.js +1 -1
  66. package/dist/server/routes/hermes/weixin.js +2 -2
  67. package/dist/server/routes/webhook.js +1 -1
  68. package/dist/server/services/hermes/hermes-cli.d.ts +125 -0
  69. package/dist/server/services/hermes/hermes-cli.js +488 -0
  70. package/dist/server/services/hermes/hermes-profile.d.ts +22 -0
  71. package/dist/server/services/hermes/hermes-profile.js +60 -0
  72. package/dist/server/services/hermes/hermes.d.ts +40 -0
  73. package/dist/server/services/hermes/hermes.js +118 -0
  74. package/dist/server/shared/providers.js +2 -2
  75. package/package.json +4 -1
  76. package/dist/client/assets/ChannelsView-B3Iv1qGF.js +0 -1
  77. package/dist/client/assets/JobsView-C3MddyvL.js +0 -2
  78. package/dist/client/assets/ModelsView-Czh0QZMT.js +0 -1
  79. package/dist/client/assets/app-DuW413U3.js +0 -1
  80. package/dist/client/assets/composables-NK3hMwZN.js +0 -1
  81. package/dist/client/assets/index-8Iu2oDQ9.css +0 -1
  82. package/dist/client/assets/index-CNVL9pSf.js +0 -284
  83. package/dist/client/assets/use-compitable-CBi_h52X.js +0 -1
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sendInstruction = sendInstruction;
4
+ exports.getRunStatus = getRunStatus;
5
+ exports.streamRunEvents = streamRunEvents;
6
+ exports.healthCheck = healthCheck;
7
+ exports.fetchModels = fetchModels;
8
+ exports.onWebhook = onWebhook;
9
+ exports.emitWebhook = emitWebhook;
10
+ const config_1 = require("../../config");
11
+ const UPSTREAM = config_1.config.upstream.replace(/\/$/, '');
12
+ /**
13
+ * Send an instruction to Hermes Agent via /v1/runs
14
+ */
15
+ async function sendInstruction(params) {
16
+ const headers = {
17
+ 'Content-Type': 'application/json',
18
+ };
19
+ if (params.authToken) {
20
+ headers['Authorization'] = `Bearer ${params.authToken}`;
21
+ }
22
+ const body = { input: params.input };
23
+ if (params.instructions)
24
+ body.instructions = params.instructions;
25
+ if (params.conversationHistory)
26
+ body.conversation_history = params.conversationHistory;
27
+ if (params.sessionId)
28
+ body.session_id = params.sessionId;
29
+ const res = await fetch(`${UPSTREAM}/v1/runs`, {
30
+ method: 'POST',
31
+ headers,
32
+ body: JSON.stringify(body),
33
+ });
34
+ if (!res.ok) {
35
+ const text = await res.text();
36
+ throw new Error(`Hermes API error ${res.status}: ${text}`);
37
+ }
38
+ return res.json();
39
+ }
40
+ /**
41
+ * Get run status (poll /v1/runs/:id if supported)
42
+ */
43
+ async function getRunStatus(runId) {
44
+ const res = await fetch(`${UPSTREAM}/v1/runs/${runId}`);
45
+ if (!res.ok) {
46
+ throw new Error(`Failed to get run status: ${res.status}`);
47
+ }
48
+ return res.json();
49
+ }
50
+ /**
51
+ * Subscribe to SSE events for a run
52
+ */
53
+ async function* streamRunEvents(runId, authToken) {
54
+ const headers = {};
55
+ if (authToken) {
56
+ headers['Authorization'] = `Bearer ${authToken}`;
57
+ }
58
+ const res = await fetch(`${UPSTREAM}/v1/runs/${runId}/events`, { headers });
59
+ if (!res.ok || !res.body) {
60
+ throw new Error(`Failed to stream run events: ${res.status}`);
61
+ }
62
+ const reader = res.body.getReader();
63
+ const decoder = new TextDecoder();
64
+ let buffer = '';
65
+ try {
66
+ while (true) {
67
+ const { done, value } = await reader.read();
68
+ if (done)
69
+ break;
70
+ buffer += decoder.decode(value, { stream: true });
71
+ const lines = buffer.split('\n');
72
+ buffer = lines.pop() || '';
73
+ for (const line of lines) {
74
+ if (line.startsWith('data: ')) {
75
+ const data = line.slice(6).trim();
76
+ if (data === '[DONE]')
77
+ return;
78
+ try {
79
+ const event = JSON.parse(data);
80
+ yield event;
81
+ if (event.event === 'run.completed' || event.event === 'run.failed')
82
+ return;
83
+ }
84
+ catch { /* skip malformed lines */ }
85
+ }
86
+ }
87
+ }
88
+ }
89
+ finally {
90
+ reader.releaseLock();
91
+ }
92
+ }
93
+ /**
94
+ * Health check
95
+ */
96
+ async function healthCheck() {
97
+ const res = await fetch(`${UPSTREAM}/health`);
98
+ return res.json();
99
+ }
100
+ /**
101
+ * Fetch available models
102
+ */
103
+ async function fetchModels() {
104
+ const res = await fetch(`${UPSTREAM}/v1/models`);
105
+ return res.json();
106
+ }
107
+ const webhookCallbacks = [];
108
+ function onWebhook(callback) {
109
+ webhookCallbacks.push(callback);
110
+ }
111
+ function emitWebhook(payload) {
112
+ for (const cb of webhookCallbacks) {
113
+ const result = cb(payload);
114
+ if (result && typeof result.catch === 'function') {
115
+ result.catch((err) => console.error('Webhook callback error:', err));
116
+ }
117
+ }
118
+ }
@@ -82,13 +82,13 @@ exports.PROVIDER_PRESETS = [
82
82
  label: 'MiniMax',
83
83
  value: 'minimax',
84
84
  base_url: 'https://api.minimax.io/anthropic/v1',
85
- models: ['MiniMax-M2.7', 'MiniMax-M2.5', 'MiniMax-M2.1', 'MiniMax-M2'],
85
+ models: ['MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5', 'MiniMax-M2.5-highspeed', 'MiniMax-M2.1', 'MiniMax-M2.1-highspeed', 'MiniMax-M2', 'MiniMax-M2-highspeed'],
86
86
  },
87
87
  {
88
88
  label: 'MiniMax (China)',
89
89
  value: 'minimax-cn',
90
90
  base_url: 'https://api.minimaxi.com/v1',
91
- models: ['MiniMax-M2.7', 'MiniMax-M2.5', 'MiniMax-M2.1', 'MiniMax-M2'],
91
+ models: ['MiniMax-M2.7', 'MiniMax-M2.7-highspeed', 'MiniMax-M2.5', 'MiniMax-M2.5-highspeed', 'MiniMax-M2.1', 'MiniMax-M2.1-highspeed', 'MiniMax-M2', 'MiniMax-M2-highspeed'],
92
92
  },
93
93
  {
94
94
  label: 'Alibaba Cloud',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hermes-web-ui",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Web dashboard for Hermes Agent — multi-platform AI chat, session management, scheduled jobs, usage analytics & channel configuration (Telegram, Discord, Slack, WhatsApp)",
5
5
  "repository": {
6
6
  "type": "git",
@@ -8,6 +8,9 @@
8
8
  },
9
9
  "homepage": "https://github.com/EKKOLearnAI/hermes-web-ui",
10
10
  "license": "MIT",
11
+ "engines": {
12
+ "node": ">=20.0.0"
13
+ },
11
14
  "keywords": [
12
15
  "hermes",
13
16
  "ai-agent",
@@ -1 +0,0 @@
1
- import{A as e,C as t,D as n,E as r,G as i,J as a,Q as o,T as s,U as c,W as l,Y as u,ct as d,gt as f,j as p,k as m,mt as h,ot as g,pt as _,q as v,w as y,y as b}from"./router-k7Mt11r-.js";import{r as x,t as S}from"./_plugin-vue_export-helper-Cla2Sei2.js";import{t as C}from"./Button-sy1PzWPU.js";import{t as w}from"./Input-BgeYIOdH.js";import{r as T}from"./light-BRnwbni5.js";import{t as E}from"./use-message-kLSX34Jy.js";import{t as D}from"./Switch-DznAKpSq.js";import{t as O}from"./Spin-7qVct-fX.js";import{a as k,i as A,n as j,o as M,r as N,t as P}from"./SettingRow-Dj1WGKUP.js";var F={class:`platform-info`},I=[`innerHTML`],L={class:`platform-name`},R={key:0,class:`platform-card-body`},z=S(p({__name:`PlatformCard`,props:{name:{},icon:{},config:{},credentials:{}},setup(s){let c=s,l=d(!0),{t:u}=x(),p=t(()=>{let e=c.credentials;if(!e)return!1;let t=[`token`,`api_key`,`app_id`,`client_id`,`secret`,`app_secret`,`client_secret`,`access_token`,`bot_id`,`account_id`,`enabled`];return[e,e.extra].filter(Boolean).some(e=>t.some(t=>{let n=e[t];return n!=null&&n!==``&&n!==!1}))});return(t,c)=>(i(),n(`div`,{class:h([`platform-card`,{configured:p.value}])},[y(`div`,{class:`platform-card-header`,onClick:c[0]||=e=>l.value=!l.value},[y(`div`,F,[y(`span`,{class:`platform-icon`,innerHTML:s.icon},null,8,I),y(`span`,L,f(s.name),1),e(_(T),{type:p.value?`success`:`default`,size:`small`,round:``},{default:o(()=>[m(f(p.value?_(u)(`common.configured`):_(u)(`common.notConfigured`)),1)]),_:1},8,[`type`])]),y(`span`,{class:h([`expand-icon`,{expanded:l.value}])},`▾`,2)]),l.value?(i(),n(`div`,R,[a(t.$slots,`default`,{},void 0,!0)])):r(``,!0)],2))}}),[[`__scopeId`,`data-v-cee18614`]]),B={class:`settings-section`},V={class:`weixin-qr-section`},H={key:1,class:`weixin-qr-loading`},U={key:2,class:`weixin-qr-hint`},W=S(p({__name:`PlatformSettings`,setup(t){let a=j(),c=E(),{t:p}=x(),h=g({});function S(e,t){return`${e}.${t}`}function T(e,t){return!!h[S(e,t)]}let O={};function F(e,t,n,r=600){let i=S(e,t);O[i]&&clearTimeout(O[i]),O[i]=setTimeout(async()=>{h[i]=!0;try{await n(),c.success(p(`settings.saved`))}catch{c.error(p(`settings.saveFailed`))}finally{h[i]=!1}},r)}async function I(e,t,n){let r=S(e,t);h[r]=!0;try{await n(),c.success(p(`settings.saved`))}catch{c.error(p(`settings.saveFailed`))}finally{h[r]=!1}}async function L(e,t,n){I(e,t,()=>a.saveSection(e,n))}function R(e,t,n){F(e,t,()=>a.saveSection(e,n))}async function W(e,t,n){I(e,t,async()=>{await k(e,n),await a.fetchSettings()})}function G(e,t,n){F(e,t,async()=>{await k(e,n),await a.fetchSettings()})}function K(e){return a.platforms[e]||{}}let q=d(``),J=d(``),Y=d(`idle`),X=null;async function Z(){Y.value=`loading`,q.value=``,J.value=``,$();try{let e=await N();J.value=e.qrcode,q.value=e.qrcode_url,window.open(e.qrcode_url,`_blank`),Y.value=`waiting`,Q()}catch(e){Y.value=`error`,c.error(e.message||p(`platform.qrFetching`))}}function Q(){J.value&&(X=setTimeout(async()=>{try{let e=await A(J.value);e.status===`wait`?Q():e.status===`scaned`?(Y.value=`scaned`,Q()):e.status===`expired`?Y.value=`expired`:e.status===`confirmed`&&(Y.value=`confirmed`,await M({account_id:e.account_id,token:e.token,base_url:e.base_url}),await a.fetchSettings(),c.success(p(`settings.saved`)))}catch{Q()}},3e3))}function $(){X&&=(clearTimeout(X),null)}l(()=>{$(),Object.values(O).forEach(e=>clearTimeout(e))});let ee=[{key:`telegram`,name:`Telegram`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.479.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/></svg>`},{key:`discord`,name:`Discord`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.946 2.4189-2.1568 2.4189z"/></svg>`},{key:`slack`,name:`Slack`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.527 2.527 0 0 1 2.522-2.52h2.52v2.52zm1.271 0a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zm0 1.271a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zm10.122 0a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V5.042zm-1.27 0a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.527 2.527 0 0 1-2.52-2.522v-2.522h2.52zm0-1.27a2.527 2.527 0 0 1 2.523-2.52h6.313A2.528 2.528 0 0 1 24 18.956a2.528 2.528 0 0 1-2.522 2.523h-6.313z"/></svg>`},{key:`whatsapp`,name:`WhatsApp`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413z"/></svg>`},{key:`matrix`,name:`Matrix`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M.632.55v22.9H2.28V24H0V0h2.28v.55zm7.043 7.26v1.157h.033c.309-.443.683-.784 1.117-1.024.433-.245.936-.365 1.5-.365.54 0 1.033.107 1.48.324.448.217.786.619 1.017 1.205.24-.376.558-.702.956-.98.398-.277.872-.414 1.424-.414.41 0 .784.065 1.122.194.34.13.629.325.87.588.241.263.428.59.56.984.132.393.198.85.198 1.368v5.89h-2.49v-4.893c0-.268-.016-.525-.048-.77a1.627 1.627 0 00-.2-.63 1.028 1.028 0 00-.392-.426 1.294 1.294 0 00-.616-.134c-.277 0-.508.05-.693.15a1.043 1.043 0 00-.43.41 1.768 1.768 0 00-.214.616 4.15 4.15 0 00-.06.74v4.937H9.29v-4.937c0-.25-.01-.498-.032-.742a1.84 1.84 0 00-.166-.638.998.998 0 00-.363-.448 1.206 1.206 0 00-.624-.154c-.26 0-.483.048-.67.144a1.055 1.055 0 00-.436.402 1.744 1.744 0 00-.227.616 4.108 4.108 0 00-.063.74v4.937H5.21V7.81zm15.693 15.64V.55H21.72V0H24v24h-2.28v-.55z"/></svg>`},{key:`feishu`,name:`Feishu`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M6.59 3.41a2.25 2.25 0 0 1 3.182 0L13.5 7.14l-3.182 3.182L6.59 7.59a2.25 2.25 0 0 1 0-3.182zm5.303 5.303L15.075 5.53a2.25 2.25 0 0 1 3.182 3.182L15.075 11.894 11.893 8.713zM3.41 6.59a2.25 2.25 0 0 1 3.182 0l3.182 3.182-3.182 3.182a2.25 2.25 0 0 1-3.182-3.182L3.41 6.59zm5.303 5.303L11.894 15.075a2.25 2.25 0 0 1-3.182 3.182L5.53 15.075 8.713 11.893zm5.303-5.303L17.478 9.778a2.25 2.25 0 0 1-3.182 3.182L10.53 10.075l3.182-3.182 0 .023z"/></svg>`},{key:`weixin`,name:`Weixin`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 01.213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 00.167-.054l1.903-1.114a.864.864 0 01.717-.098 10.16 10.16 0 002.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 01-1.162 1.178A1.17 1.17 0 014.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 01-1.162 1.178 1.17 1.17 0 01-1.162-1.178c0-.651.52-1.18 1.162-1.18zm3.68 4.025c-3.694 0-6.69 2.462-6.69 5.496 0 3.034 2.996 5.496 6.69 5.496.753 0 1.477-.1 2.158-.28a.66.66 0 01.548.074l1.46.854a.25.25 0 00.127.041.224.224 0 00.221-.225c0-.055-.022-.109-.037-.162l-.298-1.131a.453.453 0 01.163-.509C21.81 18.613 22.77 16.973 22.77 15.512c0-3.034-2.996-5.496-6.69-5.496h.198zm-2.454 3.347c.491 0 .889.404.889.902a.896.896 0 01-.889.903.896.896 0 01-.889-.903c0-.498.398-.902.889-.902zm4.912 0c.491 0 .889.404.889.902a.896.896 0 01-.889.903.896.896 0 01-.889-.903c0-.498.398-.902.889-.902z"/></svg>`},{key:`wecom`,name:`WeCom`,icon:`<svg viewBox="0 0 24 24" fill="currentColor"><path d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 01.213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 00.167-.054l1.903-1.114a.864.864 0 01.717-.098 10.16 10.16 0 002.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 01-1.162 1.178A1.17 1.17 0 014.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 01-1.162 1.178 1.17 1.17 0 01-1.162-1.178c0-.651.52-1.18 1.162-1.18zm3.68 4.025c-3.694 0-6.69 2.462-6.69 5.496 0 3.034 2.996 5.496 6.69 5.496.753 0 1.477-.1 2.158-.28a.66.66 0 01.548.074l1.46.854a.25.25 0 00.127.041.224.224 0 00.221-.225c0-.055-.022-.109-.037-.162l-.298-1.131a.453.453 0 01.163-.509C21.81 18.613 22.77 16.973 22.77 15.512c0-3.034-2.996-5.496-6.69-5.496h.198zm-2.454 3.347c.491 0 .889.404.889.902a.896.896 0 01-.889.903.896.896 0 01-.889-.903c0-.498.398-.902.889-.902zm4.912 0c.491 0 .889.404.889.902a.896.896 0 01-.889.903.896.896 0 01-.889-.903c0-.498.398-.902.889-.902z"/></svg>`}];return(t,c)=>{let l=u(`NSpin`);return i(),n(`section`,B,[(i(),n(b,null,v(ee,t=>e(z,{key:t.key,name:t.name,icon:t.icon,config:_(a)[t.key],credentials:K(t.key)},{default:o(()=>[t.key===`telegram`?(i(),n(b,{key:0},[e(P,{label:_(p)(`platform.botToken`),hint:_(p)(`platform.botTokenHint`)},{default:o(()=>[e(_(w),{value:K(`telegram`).token||``,loading:T(`telegram`,`token`),clearable:``,size:`small`,class:`input-lg`,placeholder:`123456:ABC-DEF...`,"onUpdate:value":c[0]||=e=>G(`telegram`,`token`,{token:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionGroup`)},{default:o(()=>[e(_(D),{value:_(a).telegram.require_mention,loading:T(`telegram`,`require_mention`),"onUpdate:value":c[1]||=e=>L(`telegram`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.reactions`),hint:_(p)(`platform.reactionsHint`)},{default:o(()=>[e(_(D),{value:_(a).telegram.reactions,loading:T(`telegram`,`reactions`),"onUpdate:value":c[2]||=e=>L(`telegram`,`reactions`,{reactions:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseChats`),hint:_(p)(`platform.freeResponseChatsHint`)},{default:o(()=>[e(_(w),{value:_(a).telegram.free_response_chats||``,loading:T(`telegram`,`free_response_chats`),size:`small`,placeholder:`chat_id1,chat_id2`,"onUpdate:value":c[3]||=e=>R(`telegram`,`free_response_chats`,{free_response_chats:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.mentionPatterns`),hint:_(p)(`platform.mentionPatternsHint`)},{default:o(()=>[e(_(w),{value:(_(a).telegram.mention_patterns||[]).join(`, `),loading:T(`telegram`,`mention_patterns`),size:`small`,placeholder:`pattern1, pattern2`,"onUpdate:value":c[4]||=e=>R(`telegram`,`mention_patterns`,{mention_patterns:e?e.split(`,`).map(e=>e.trim()):[]})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`discord`?(i(),n(b,{key:1},[e(P,{label:_(p)(`platform.botToken`),hint:_(p)(`platform.botTokenHint`)},{default:o(()=>[e(_(w),{value:K(`discord`).token||``,loading:T(`discord`,`token`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Bot token...`,"onUpdate:value":c[5]||=e=>G(`discord`,`token`,{token:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionChannel`)},{default:o(()=>[e(_(D),{value:_(a).discord.require_mention,loading:T(`discord`,`require_mention`),"onUpdate:value":c[6]||=e=>L(`discord`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.autoThread`),hint:_(p)(`platform.autoThreadHint`)},{default:o(()=>[e(_(D),{value:_(a).discord.auto_thread,loading:T(`discord`,`auto_thread`),"onUpdate:value":c[7]||=e=>L(`discord`,`auto_thread`,{auto_thread:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.reactions`),hint:_(p)(`platform.reactionsHint`)},{default:o(()=>[e(_(D),{value:_(a).discord.reactions,loading:T(`discord`,`reactions`),"onUpdate:value":c[8]||=e=>L(`discord`,`reactions`,{reactions:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseChannels`),hint:_(p)(`platform.freeResponseChannelsHint`)},{default:o(()=>[e(_(w),{value:_(a).discord.free_response_channels||``,loading:T(`discord`,`free_response_channels`),size:`small`,placeholder:`channel_id1,channel_id2`,"onUpdate:value":c[9]||=e=>R(`discord`,`free_response_channels`,{free_response_channels:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.allowedChannels`),hint:_(p)(`platform.allowedChannelsHint`)},{default:o(()=>[e(_(w),{value:_(a).discord.allowed_channels||``,loading:T(`discord`,`allowed_channels`),size:`small`,placeholder:`channel_id1,channel_id2`,"onUpdate:value":c[10]||=e=>R(`discord`,`allowed_channels`,{allowed_channels:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.ignoredChannels`),hint:_(p)(`platform.ignoredChannelsHint`)},{default:o(()=>[e(_(w),{value:_(a).discord.ignored_channels||``,loading:T(`discord`,`ignored_channels`),size:`small`,placeholder:`channel_id1,channel_id2`,"onUpdate:value":c[11]||=e=>R(`discord`,`ignored_channels`,{ignored_channels:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.noThreadChannels`),hint:_(p)(`platform.noThreadChannelsHint`)},{default:o(()=>[e(_(w),{value:_(a).discord.no_thread_channels||``,loading:T(`discord`,`no_thread_channels`),size:`small`,placeholder:`channel_id1,channel_id2`,"onUpdate:value":c[12]||=e=>R(`discord`,`no_thread_channels`,{no_thread_channels:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`slack`?(i(),n(b,{key:2},[e(P,{label:_(p)(`platform.botToken`),hint:_(p)(`platform.botTokenHint`)},{default:o(()=>[e(_(w),{value:K(`slack`).token||``,loading:T(`slack`,`token`),clearable:``,size:`small`,class:`input-lg`,placeholder:`xoxb-...`,"onUpdate:value":c[13]||=e=>G(`slack`,`token`,{token:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionChannel`)},{default:o(()=>[e(_(D),{value:_(a).slack.require_mention,loading:T(`slack`,`require_mention`),"onUpdate:value":c[14]||=e=>L(`slack`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.allowBots`),hint:_(p)(`platform.allowBotsHint`)},{default:o(()=>[e(_(D),{value:_(a).slack.allow_bots,loading:T(`slack`,`allow_bots`),"onUpdate:value":c[15]||=e=>L(`slack`,`allow_bots`,{allow_bots:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseChannels`),hint:_(p)(`platform.freeResponseChannelsHint`)},{default:o(()=>[e(_(w),{value:_(a).slack.free_response_channels||``,loading:T(`slack`,`free_response_channels`),size:`small`,placeholder:`channel_id1,channel_id2`,"onUpdate:value":c[16]||=e=>R(`slack`,`free_response_channels`,{free_response_channels:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`whatsapp`?(i(),n(b,{key:3},[e(P,{label:_(p)(`platform.waEnabled`),hint:_(p)(`platform.waEnabledHint`)},{default:o(()=>[e(_(D),{value:K(`whatsapp`).enabled,loading:T(`whatsapp`,`enabled`),"onUpdate:value":c[17]||=e=>W(`whatsapp`,`enabled`,{enabled:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionGroup`)},{default:o(()=>[e(_(D),{value:_(a).whatsapp.require_mention,loading:T(`whatsapp`,`require_mention`),"onUpdate:value":c[18]||=e=>L(`whatsapp`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseChats`),hint:_(p)(`platform.freeResponseChatsHint`)},{default:o(()=>[e(_(w),{value:_(a).whatsapp.free_response_chats||``,loading:T(`whatsapp`,`free_response_chats`),size:`small`,placeholder:`chat_id1,chat_id2`,"onUpdate:value":c[19]||=e=>R(`whatsapp`,`free_response_chats`,{free_response_chats:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.mentionPatterns`),hint:_(p)(`platform.mentionPatternsHint`)},{default:o(()=>[e(_(w),{value:(_(a).whatsapp.mention_patterns||[]).join(`, `),loading:T(`whatsapp`,`mention_patterns`),size:`small`,placeholder:`pattern1, pattern2`,"onUpdate:value":c[20]||=e=>R(`whatsapp`,`mention_patterns`,{mention_patterns:e?e.split(`,`).map(e=>e.trim()):[]})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`matrix`?(i(),n(b,{key:4},[e(P,{label:_(p)(`platform.accessToken`),hint:_(p)(`platform.accessTokenHint`)},{default:o(()=>[e(_(w),{value:K(`matrix`).token||``,loading:T(`matrix`,`token`),clearable:``,size:`small`,class:`input-lg`,placeholder:`syt_...`,"onUpdate:value":c[21]||=e=>G(`matrix`,`token`,{token:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.homeserver`),hint:_(p)(`platform.homeserverHint`)},{default:o(()=>[e(_(w),{value:K(`matrix`).extra?.homeserver||``,loading:T(`matrix`,`homeserver`),clearable:``,size:`small`,class:`input-lg`,placeholder:`https://matrix.org`,"onUpdate:value":c[22]||=e=>G(`matrix`,`homeserver`,{extra:{...K(`matrix`).extra,homeserver:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionRoom`)},{default:o(()=>[e(_(D),{value:_(a).matrix.require_mention,loading:T(`matrix`,`require_mention`),"onUpdate:value":c[23]||=e=>L(`matrix`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.autoThread`),hint:_(p)(`platform.autoThreadHintRoom`)},{default:o(()=>[e(_(D),{value:_(a).matrix.auto_thread,loading:T(`matrix`,`auto_thread`),"onUpdate:value":c[24]||=e=>L(`matrix`,`auto_thread`,{auto_thread:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.dmMentionThreads`),hint:_(p)(`platform.dmMentionThreadsHint`)},{default:o(()=>[e(_(D),{value:_(a).matrix.dm_mention_threads,loading:T(`matrix`,`dm_mention_threads`),"onUpdate:value":c[25]||=e=>L(`matrix`,`dm_mention_threads`,{dm_mention_threads:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseRooms`),hint:_(p)(`platform.freeResponseRoomsHint`)},{default:o(()=>[e(_(w),{value:_(a).matrix.free_response_rooms||``,loading:T(`matrix`,`free_response_rooms`),size:`small`,placeholder:`room_id1,room_id2`,"onUpdate:value":c[26]||=e=>R(`matrix`,`free_response_rooms`,{free_response_rooms:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`feishu`?(i(),n(b,{key:5},[e(P,{label:_(p)(`platform.appId`),hint:_(p)(`platform.appIdHint`)},{default:o(()=>[e(_(w),{value:K(`feishu`).extra?.app_id||``,loading:T(`feishu`,`app_id`),clearable:``,size:`small`,class:`input-lg`,placeholder:`cli_...`,"onUpdate:value":c[27]||=e=>G(`feishu`,`app_id`,{extra:{...K(`feishu`).extra,app_id:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.appSecret`),hint:_(p)(`platform.appSecretHint`)},{default:o(()=>[e(_(w),{value:K(`feishu`).extra?.app_secret||``,loading:T(`feishu`,`app_secret`),clearable:``,size:`small`,class:`input-lg`,placeholder:`App Secret`,"onUpdate:value":c[28]||=e=>G(`feishu`,`app_secret`,{extra:{...K(`feishu`).extra,app_secret:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionGroup`)},{default:o(()=>[e(_(D),{value:_(a).feishu.require_mention,loading:T(`feishu`,`require_mention`),"onUpdate:value":c[29]||=e=>L(`feishu`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseChats`),hint:_(p)(`platform.freeResponseChatsHint`)},{default:o(()=>[e(_(w),{value:_(a).feishu.free_response_chats||``,loading:T(`feishu`,`free_response_chats`),size:`small`,placeholder:`chat_id1,chat_id2`,"onUpdate:value":c[30]||=e=>R(`feishu`,`free_response_chats`,{free_response_chats:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`dingtalk`?(i(),n(b,{key:6},[e(P,{label:_(p)(`platform.clientId`),hint:_(p)(`platform.clientIdHint`)},{default:o(()=>[e(_(w),{value:K(`dingtalk`).extra?.client_id||``,loading:T(`dingtalk`,`client_id`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Client ID`,"onUpdate:value":c[31]||=e=>G(`dingtalk`,`client_id`,{extra:{...K(`dingtalk`).extra,client_id:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.clientSecret`),hint:_(p)(`platform.clientSecretHint`)},{default:o(()=>[e(_(w),{value:K(`dingtalk`).extra?.client_secret||``,loading:T(`dingtalk`,`client_secret`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Client Secret`,"onUpdate:value":c[32]||=e=>G(`dingtalk`,`client_secret`,{extra:{...K(`dingtalk`).extra,client_secret:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.requireMention`),hint:_(p)(`platform.requireMentionGroup`)},{default:o(()=>[e(_(D),{value:_(a).dingtalk.require_mention,loading:T(`dingtalk`,`require_mention`),"onUpdate:value":c[33]||=e=>L(`dingtalk`,`require_mention`,{require_mention:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.freeResponseChats`),hint:_(p)(`platform.freeResponseChatsHint`)},{default:o(()=>[e(_(w),{value:_(a).dingtalk.free_response_chats||``,loading:T(`dingtalk`,`free_response_chats`),size:`small`,placeholder:`chat_id1,chat_id2`,"onUpdate:value":c[34]||=e=>R(`dingtalk`,`free_response_chats`,{free_response_chats:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`weixin`?(i(),n(b,{key:7},[y(`div`,V,[Y.value===`idle`||Y.value===`error`||Y.value===`expired`||Y.value===`confirmed`?(i(),s(_(C),{key:0,type:`primary`,size:`small`,onClick:Z},{default:o(()=>[m(f(Y.value===`confirmed`?_(p)(`platform.qrRelogin`):_(p)(`platform.qrLogin`)),1)]),_:1})):r(``,!0),Y.value===`loading`?(i(),n(`div`,H,[e(l,{size:`small`}),y(`span`,null,f(_(p)(`platform.qrFetching`)),1)])):r(``,!0),Y.value===`waiting`||Y.value===`scaned`?(i(),n(`div`,U,f(Y.value===`scaned`?_(p)(`platform.qrScanedHint`):_(p)(`platform.qrScanHint`)),1)):r(``,!0)]),e(P,{label:_(p)(`platform.weixinToken`),hint:_(p)(`platform.weixinTokenHint`)},{default:o(()=>[e(_(w),{value:K(`weixin`).token||``,loading:T(`weixin`,`token`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Token`,"onUpdate:value":c[35]||=e=>G(`weixin`,`token`,{token:e})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.accountId`),hint:_(p)(`platform.accountIdHint`)},{default:o(()=>[e(_(w),{value:K(`weixin`).extra?.account_id||``,loading:T(`weixin`,`account_id`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Account ID`,"onUpdate:value":c[36]||=e=>G(`weixin`,`account_id`,{extra:{...K(`weixin`).extra,account_id:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0),t.key===`wecom`?(i(),n(b,{key:8},[e(P,{label:_(p)(`platform.botId`),hint:_(p)(`platform.botIdHint`)},{default:o(()=>[e(_(w),{value:K(`wecom`).extra?.bot_id||``,loading:T(`wecom`,`bot_id`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Bot ID`,"onUpdate:value":c[37]||=e=>G(`wecom`,`bot_id`,{extra:{...K(`wecom`).extra,bot_id:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`]),e(P,{label:_(p)(`platform.appSecret`),hint:_(p)(`platform.wecomSecretHint`)},{default:o(()=>[e(_(w),{value:K(`wecom`).extra?.secret||``,loading:T(`wecom`,`secret`),clearable:``,size:`small`,class:`input-lg`,placeholder:`Secret`,"onUpdate:value":c[38]||=e=>G(`wecom`,`secret`,{extra:{...K(`wecom`).extra,secret:e}})},null,8,[`value`,`loading`])]),_:1},8,[`label`,`hint`])],64)):r(``,!0)]),_:2},1032,[`name`,`icon`,`config`,`credentials`])),64))])}}}),[[`__scopeId`,`data-v-20cb9ef9`]]),G={class:`channels-view`},K={class:`page-header`},q={class:`header-title`},J={class:`channels-content`},Y=S(p({__name:`ChannelsView`,setup(t){let r=j(),{t:a}=x();return c(()=>{r.fetchSettings()}),(t,s)=>(i(),n(`div`,G,[y(`header`,K,[y(`h2`,q,f(_(a)(`sidebar.channels`)),1)]),y(`div`,J,[e(_(O),{show:_(r).loading||_(r).saving,size:`large`,description:_(a)(`common.loading`)},{default:o(()=>[e(W)]),_:1},8,[`show`,`description`])])]))}}),[[`__scopeId`,`data-v-51c1ea7b`]]);export{Y as default};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/jobs-D6sYt3p2.js","assets/router-k7Mt11r-.js"])))=>i.map(i=>d[i]);
2
- import{A as e,C as t,D as n,E as r,G as i,O as a,Q as o,T as s,U as c,ct as l,gt as u,j as d,k as f,mt as p,n as m,pt as h,q as g,w as _,y as v}from"./router-k7Mt11r-.js";import{n as y}from"./pinia-0T1SpgZT.js";import{r as b,t as x}from"./_plugin-vue_export-helper-Cla2Sei2.js";import{t as S}from"./Modal-D0bHwidv.js";import{n as C,t as w}from"./FormItem-DAkggFjx.js";import{t as T}from"./Select-BX8K2ITf.js";import{t as E}from"./Button-sy1PzWPU.js";import{t as D}from"./Input-BgeYIOdH.js";import{t as O}from"./InputNumber-CP0Q1JN_.js";import{t as k}from"./Tooltip-hZdU3QDl.js";import{t as A}from"./use-message-kLSX34Jy.js";import{t as j}from"./Spin-7qVct-fX.js";import{a as M,c as N,i as P,n as F,o as I,s as ee,t as L}from"./jobs-D6sYt3p2.js";function R(e,t){return e.job_id===t||e.id===t}var z=y(`jobs`,()=>{let e=l([]),t=l(!1);async function n(){t.value=!0;try{e.value=await P()}catch(e){console.error(`Failed to fetch jobs:`,e)}finally{t.value=!1}}async function r(t){let n=await L(t);return e.value.unshift(n),n}async function i(t,n){let r=await N(t,n),i=e.value.findIndex(e=>R(e,t));return i!==-1&&(e.value[i]=r),r}async function a(t){await F(t),e.value=e.value.filter(e=>!R(e,t))}async function o(t){let n=await M(t),r=e.value.findIndex(e=>R(e,t));r!==-1&&(e.value[r]=n)}async function s(t){let n=await I(t),r=e.value.findIndex(e=>R(e,t));r!==-1&&(e.value[r]=n)}async function c(t){let n=await ee(t),r=e.value.findIndex(e=>R(e,t));r!==-1&&(e.value[r]=n)}return{jobs:e,loading:t,fetchJobs:n,createJob:r,updateJob:i,deleteJob:a,pauseJob:o,resumeJob:s,runJob:c}}),B={class:`job-card`},V={class:`card-header`},H={class:`job-name`},U={class:`card-body`},W={class:`info-row`},G={class:`info-label`},K={class:`info-value mono`},q={class:`info-row`},J={class:`info-label`},Y={class:`info-value`},X={class:`info-row`},Z={class:`info-label`},Q={class:`info-value`},te={class:`info-row`},ne={class:`info-label`},re={class:`info-value`},ie={key:0,class:`info-row`},ae={class:`info-label`},oe={class:`info-value`},se={class:`card-actions`},ce=x(d({__name:`JobCard`,props:{job:{}},emits:[`edit`],setup(a,{emit:c}){let l=a,d=c,{t:m}=b(),g=z(),y=A(),x=t(()=>l.job.job_id||l.job.id),S=t(()=>l.job.state===`running`?m(`jobs.status.running`):l.job.state===`paused`?m(`jobs.status.paused`):l.job.enabled?m(`jobs.status.scheduled`):m(`jobs.status.disabled`)),C=t(()=>l.job.state===`running`?`info`:l.job.state===`paused`?`warning`:l.job.enabled?`success`:`error`),w=t(()=>{let e=l.job.schedule;return typeof e==`string`?e:e?.expr||l.job.schedule_display||`—`}),T=e=>e?new Date(e).toLocaleString():`—`;async function D(){try{await g.pauseJob(x.value),y.success(m(`jobs.jobPaused`))}catch(e){y.error(e.message)}}async function O(){try{await g.resumeJob(x.value),y.success(m(`jobs.jobResumed`))}catch(e){y.error(e.message)}}async function j(){try{await g.runJob(x.value),y.info(m(`jobs.jobTriggered`))}catch(e){y.error(e.message)}}async function M(){try{await g.deleteJob(x.value),y.success(m(`jobs.jobDeleted`))}catch(e){y.error(e.message)}}return(t,c)=>(i(),n(`div`,B,[_(`div`,V,[_(`h3`,H,u(a.job.name),1),_(`span`,{class:p([`status-badge`,C.value])},u(S.value),3)]),_(`div`,U,[_(`div`,W,[_(`span`,G,u(h(m)(`jobs.info.schedule`)),1),_(`code`,K,u(w.value),1)]),_(`div`,q,[_(`span`,J,u(h(m)(`jobs.info.lastRun`)),1),_(`span`,Y,[f(u(T(a.job.last_run_at))+` `,1),a.job.last_status?(i(),n(`span`,{key:0,class:p([`run-status`,{ok:a.job.last_status===`ok`,err:a.job.last_status!==`ok`}])},u(a.job.last_status===`ok`?h(m)(`common.ok`):a.job.last_status),3)):r(``,!0)])]),_(`div`,X,[_(`span`,Z,u(h(m)(`jobs.info.nextRun`)),1),_(`span`,Q,u(T(a.job.next_run_at)),1)]),_(`div`,te,[_(`span`,ne,u(h(m)(`jobs.info.deliver`)),1),_(`span`,re,[f(u(a.job.deliver),1),a.job.origin?(i(),n(v,{key:0},[f(` (`+u(a.job.origin.platform)+`)`,1)],64)):r(``,!0)])]),a.job.repeat?(i(),n(`div`,ie,[_(`span`,ae,u(h(m)(`jobs.info.repeat`)),1),_(`span`,oe,[typeof a.job.repeat==`string`?(i(),n(v,{key:0},[f(u(a.job.repeat),1)],64)):(i(),n(v,{key:1},[f(u(a.job.repeat.completed)+` / `+u(a.job.repeat.times??`∞`),1)],64))])])):r(``,!0)]),_(`div`,se,[a.job.state!==`paused`&&a.job.enabled?(i(),s(h(k),{key:0},{trigger:o(()=>[e(h(E),{size:`tiny`,quaternary:``,onClick:D},{default:o(()=>[f(u(h(m)(`jobs.action.pause`)),1)]),_:1})]),default:o(()=>[f(` `+u(h(m)(`jobs.action.pauseJob`)),1)]),_:1})):a.job.state===`paused`?(i(),s(h(k),{key:1},{trigger:o(()=>[e(h(E),{size:`tiny`,quaternary:``,onClick:O},{default:o(()=>[f(u(h(m)(`jobs.action.resume`)),1)]),_:1})]),default:o(()=>[f(` `+u(h(m)(`jobs.action.resumeJob`)),1)]),_:1})):r(``,!0),e(h(k),null,{trigger:o(()=>[e(h(E),{size:`tiny`,quaternary:``,onClick:j},{default:o(()=>[f(u(h(m)(`jobs.action.runNow`)),1)]),_:1})]),default:o(()=>[f(` `+u(h(m)(`jobs.action.triggerImmediately`)),1)]),_:1}),e(h(E),{size:`tiny`,quaternary:``,onClick:c[0]||=e=>d(`edit`,x.value)},{default:o(()=>[f(u(h(m)(`common.edit`)),1)]),_:1}),e(h(E),{size:`tiny`,quaternary:``,type:`error`,onClick:M},{default:o(()=>[f(u(h(m)(`common.delete`)),1)]),_:1})])]))}}),[[`__scopeId`,`data-v-5c958088`]]),le={key:0,class:`empty-state`},ue={key:1,class:`jobs-grid`},de=x(d({__name:`JobsPanel`,emits:[`edit`],setup(e,{emit:t}){let{t:r}=b(),o=t,c=z();return(e,t)=>h(c).jobs.length===0?(i(),n(`div`,le,[t[0]||=a(`<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" class="empty-icon" data-v-a0a8d138><rect x="3" y="4" width="18" height="18" rx="2" ry="2" data-v-a0a8d138></rect><line x1="16" y1="2" x2="16" y2="6" data-v-a0a8d138></line><line x1="8" y1="2" x2="8" y2="6" data-v-a0a8d138></line><line x1="3" y1="10" x2="21" y2="10" data-v-a0a8d138></line></svg>`,1),_(`p`,null,u(h(r)(`jobs.noJobs`)),1)])):(i(),n(`div`,ue,[(i(!0),n(v,null,g(h(c).jobs,e=>(i(),s(ce,{key:e.id,job:e,onEdit:t=>o(`edit`,e.id)},null,8,[`job`,`onEdit`]))),128))]))}}),[[`__scopeId`,`data-v-a0a8d138`]]),fe={class:`modal-footer`},pe=x(d({__name:`JobFormModal`,props:{jobId:{}},emits:[`close`,`saved`],setup(n,{emit:r}){let{t:a}=b(),d=n,p=r,g=z(),v=A(),y=l(!0),x=l(!1),k=l({name:``,schedule:``,prompt:``,deliver:`origin`,repeat_times:null}),j=l(null),M=t(()=>!!d.jobId),N=t(()=>[{label:a(`jobs.presetEveryMinute`),value:`* * * * *`},{label:a(`jobs.presetEvery5Min`),value:`*/5 * * * *`},{label:a(`jobs.presetEveryHour`),value:`0 * * * *`},{label:a(`jobs.presetEveryDay`),value:`0 0 * * *`},{label:a(`jobs.presetEveryDay9`),value:`0 9 * * *`},{label:a(`jobs.presetEveryMonday`),value:`0 9 * * 1`},{label:a(`jobs.presetEveryMonth`),value:`0 9 1 * *`}]),P=t(()=>[{label:a(`jobs.origin`),value:`origin`},{label:a(`jobs.local`),value:`local`}]);c(async()=>{if(d.jobId)try{let{getJob:e}=await m(async()=>{let{getJob:e}=await import(`./jobs-D6sYt3p2.js`).then(e=>e.r);return{getJob:e}},__vite__mapDeps([0,1])),t=await e(d.jobId);k.value={name:t.name,schedule:typeof t.schedule==`string`?t.schedule:t.schedule?.expr||t.schedule_display||``,prompt:t.prompt,deliver:t.deliver||`origin`,repeat_times:typeof t.repeat==`number`?t.repeat:typeof t.repeat==`object`?t.repeat.times:null}}catch(e){v.error(a(`jobs.loadFailed`)+`: `+e.message)}});async function F(){if(!k.value.name.trim()){v.warning(a(`jobs.nameRequired`));return}if(!k.value.schedule.trim()){v.warning(a(`jobs.scheduleRequired`));return}x.value=!0;try{let e={name:k.value.name,schedule:k.value.schedule,prompt:k.value.prompt,deliver:k.value.deliver,repeat:k.value.repeat_times??void 0};M.value?(await g.updateJob(d.jobId,e),v.success(a(`jobs.jobUpdated`))):(await g.createJob(e),v.success(a(`jobs.jobCreated`))),p(`saved`)}catch(e){v.error(e.message)}finally{x.value=!1}}function I(){y.value=!1,setTimeout(()=>p(`close`),200)}return(t,n)=>(i(),s(h(S),{show:y.value,"onUpdate:show":n[7]||=e=>y.value=e,preset:`card`,title:M.value?h(a)(`jobs.editJob`):h(a)(`jobs.createJob`),style:{width:`min(520px, calc(100vw - 32px))`},"mask-closable":!x.value,onAfterLeave:n[8]||=e=>p(`close`)},{footer:o(()=>[_(`div`,fe,[e(h(E),{onClick:I},{default:o(()=>[f(u(h(a)(`common.cancel`)),1)]),_:1}),e(h(E),{type:`primary`,loading:x.value,onClick:F},{default:o(()=>[f(u(M.value?h(a)(`common.update`):h(a)(`common.create`)),1)]),_:1},8,[`loading`])])]),default:o(()=>[e(h(C),{"label-placement":`top`},{default:o(()=>[e(h(w),{label:h(a)(`jobs.name`),required:``},{default:o(()=>[e(h(D),{value:k.value.name,"onUpdate:value":n[0]||=e=>k.value.name=e,placeholder:h(a)(`jobs.namePlaceholder`),maxlength:`200`,"show-count":``},null,8,[`value`,`placeholder`])]),_:1},8,[`label`]),e(h(w),{label:h(a)(`jobs.schedule`),required:``},{default:o(()=>[e(h(D),{value:k.value.schedule,"onUpdate:value":n[1]||=e=>k.value.schedule=e,placeholder:h(a)(`jobs.schedulePlaceholder`)},null,8,[`value`,`placeholder`])]),_:1},8,[`label`]),e(h(w),{label:h(a)(`jobs.quickPresets`)},{default:o(()=>[e(h(T),{value:j.value,"onUpdate:value":[n[2]||=e=>j.value=e,n[3]||=e=>k.value.schedule=e],options:N.value,placeholder:h(a)(`jobs.selectPreset`)},null,8,[`value`,`options`,`placeholder`])]),_:1},8,[`label`]),e(h(w),{label:h(a)(`jobs.prompt`),required:``},{default:o(()=>[e(h(D),{value:k.value.prompt,"onUpdate:value":n[4]||=e=>k.value.prompt=e,type:`textarea`,placeholder:h(a)(`jobs.promptPlaceholder`),rows:4,maxlength:`5000`,"show-count":``},null,8,[`value`,`placeholder`])]),_:1},8,[`label`]),e(h(w),{label:h(a)(`jobs.deliverTarget`)},{default:o(()=>[e(h(T),{value:k.value.deliver,"onUpdate:value":n[5]||=e=>k.value.deliver=e,options:P.value},null,8,[`value`,`options`])]),_:1},8,[`label`]),e(h(w),{label:h(a)(`jobs.repeatCount`)},{default:o(()=>[e(h(O),{value:k.value.repeat_times,"onUpdate:value":n[6]||=e=>k.value.repeat_times=e,min:1,placeholder:h(a)(`jobs.repeatPlaceholder`),clearable:``,style:{width:`100%`}},null,8,[`value`,`placeholder`])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`show`,`title`,`mask-closable`]))}}),[[`__scopeId`,`data-v-866b240e`]]),$={class:`jobs-view`},me={class:`page-header`},he={class:`header-title`},ge={class:`jobs-content`},_e=x(d({__name:`JobsView`,setup(t){let{t:a}=b(),d=z(),p=l(!1),m=l(null);c(()=>{d.fetchJobs()});function g(){m.value=null,p.value=!0}function v(e){m.value=e,p.value=!0}function y(){p.value=!1,m.value=null}async function x(){await d.fetchJobs(),y()}return(t,c)=>(i(),n(`div`,$,[_(`header`,me,[_(`h2`,he,u(h(a)(`jobs.title`)),1),e(h(E),{type:`primary`,size:`small`,onClick:g},{icon:o(()=>[...c[0]||=[_(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[_(`line`,{x1:`12`,y1:`5`,x2:`12`,y2:`19`}),_(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`})],-1)]]),default:o(()=>[f(` `+u(h(a)(`jobs.createJob`)),1)]),_:1})]),_(`div`,ge,[e(h(j),{show:h(d).loading&&h(d).jobs.length===0},{default:o(()=>[e(de,{onEdit:v})]),_:1},8,[`show`])]),p.value?(i(),s(pe,{key:0,"job-id":m.value,onClose:y,onSaved:x},null,8,[`job-id`])):r(``,!0)]))}}),[[`__scopeId`,`data-v-c0d68ae3`]]);export{_e as default};
@@ -1 +0,0 @@
1
- import{A as e,C as t,D as n,E as r,G as i,Q as a,T as o,U as s,X as c,ct as l,gt as u,j as d,k as f,mt as p,pt as m,q as h,w as g,y as _}from"./router-k7Mt11r-.js";import{n as v}from"./pinia-0T1SpgZT.js";import{r as y,t as b}from"./_plugin-vue_export-helper-Cla2Sei2.js";import{t as x}from"./Modal-D0bHwidv.js";import{n as S,t as C}from"./FormItem-DAkggFjx.js";import{t as w}from"./Select-BX8K2ITf.js";import{t as T}from"./Button-sy1PzWPU.js";import{t as E}from"./Input-BgeYIOdH.js";import{t as D}from"./composables-NK3hMwZN.js";import{t as O}from"./use-message-kLSX34Jy.js";import{t as k}from"./Spin-7qVct-fX.js";import{a as A,i as j,n as M,r as N,t as P}from"./app-Dn_xFNgc.js";var F=v(`models`,()=>{let e=l([]),n=l(``),r=l(!1),i=t(()=>e.value.filter(e=>e.provider.startsWith(`custom:`))),a=t(()=>e.value.filter(e=>!e.provider.startsWith(`custom:`))),o=t(()=>e.value.flatMap(e=>e.models.map(t=>({id:t,provider:e.provider,label:e.label,base_url:e.base_url,isDefault:t===n.value}))));async function s(){r.value=!0;try{let t=await N();e.value=t.groups,n.value=t.default}catch(e){console.error(`Failed to fetch providers:`,e)}finally{r.value=!1}}async function c(e,t){await A({default:e,provider:t}),n.value=e,P().loadModels()}async function u(e){await M(e),await s(),P().loadModels()}async function d(e){await j(e),await s(),P().loadModels()}return{providers:e,defaultModel:n,loading:r,customProviders:i,builtinProviders:a,allModels:o,fetchProviders:s,setDefaultModel:c,addProvider:u,removeProvider:d}}),I={class:`provider-card`},L={class:`card-header`},R={class:`provider-name`},z={class:`card-body`},B={class:`info-row`},V={class:`info-label`},H={class:`info-value mono`},U={class:`info-row`},W={class:`info-label`},G={class:`info-value mono`},K={class:`card-actions`},q=b(d({__name:`ProviderCard`,props:{provider:{}},setup(r){let o=r,{t:s}=y(),c=F(),l=O(),d=D(),h=t(()=>o.provider.provider.startsWith(`custom:`)),_=t(()=>o.provider.label);async function v(){d.warning({title:s(`models.deleteProvider`),content:s(`models.deleteConfirm`,{name:_.value}),positiveText:s(`common.delete`),negativeText:s(`common.cancel`),onPositiveClick:async()=>{try{await c.removeProvider(o.provider.provider),l.success(s(`models.providerDeleted`))}catch(e){l.error(e.message)}}})}return(t,o)=>(i(),n(`div`,I,[g(`div`,L,[g(`h3`,R,u(_.value),1),g(`span`,{class:p([`type-badge`,h.value?`custom`:`builtin`])},u(h.value?m(s)(`models.customType`):m(s)(`models.builtIn`)),3)]),g(`div`,z,[g(`div`,B,[g(`span`,V,u(m(s)(`models.provider`)),1),g(`code`,H,u(r.provider.provider),1)]),g(`div`,U,[g(`span`,W,u(m(s)(`models.baseUrl`)),1),g(`code`,G,u(r.provider.base_url),1)])]),g(`div`,K,[e(m(T),{size:`tiny`,quaternary:``,type:`error`,onClick:v},{default:a(()=>[f(u(m(s)(`common.delete`)),1)]),_:1})])]))}}),[[`__scopeId`,`data-v-31916e31`]]),J={key:0,class:`empty-state`},Y={key:1,class:`providers-grid`},X=b(d({__name:`ProvidersPanel`,setup(e){let{t}=y(),r=F();return(e,a)=>m(r).providers.length===0?(i(),n(`div`,J,[a[0]||=g(`svg`,{width:`48`,height:`48`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`1`,class:`empty-icon`},[g(`path`,{d:`M12 2L2 7l10 5 10-5-10-5z`}),g(`path`,{d:`M2 17l10 5 10-5`}),g(`path`,{d:`M2 12l10 5 10-5`})],-1),g(`p`,null,u(m(t)(`models.noProviders`)),1)])):(i(),n(`div`,Y,[(i(!0),n(_,null,h(m(r).providers,e=>(i(),o(q,{key:e.provider,provider:e},null,8,[`provider`]))),128))]))}}),[[`__scopeId`,`data-v-76eec30b`]]),Z=[{label:`Anthropic`,value:`anthropic`,base_url:`https://api.anthropic.com`,models:[`claude-opus-4-6`,`claude-sonnet-4-6`,`claude-opus-4-5-20251101`,`claude-sonnet-4-5-20250929`,`claude-opus-4-20250514`,`claude-sonnet-4-20250514`,`claude-haiku-4-5-20251001`]},{label:`Google AI Studio`,value:`gemini`,base_url:`https://generativelanguage.googleapis.com/v1beta/openai`,models:[`gemini-3.1-pro-preview`,`gemini-3-flash-preview`,`gemini-3.1-flash-lite-preview`,`gemini-2.5-pro`,`gemini-2.5-flash`,`gemini-2.5-flash-lite`,`gemma-4-31b-it`,`gemma-4-26b-it`]},{label:`DeepSeek`,value:`deepseek`,base_url:`https://api.deepseek.com`,models:[`deepseek-chat`,`deepseek-reasoner`]},{label:`Z.AI / GLM`,value:`zai`,base_url:`https://api.z.ai/api/paas/v4`,models:[`glm-5`,`glm-5-turbo`,`glm-4.7`,`glm-4.5`,`glm-4.5-flash`]},{label:`Kimi for Coding`,value:`kimi-for-coding`,base_url:`https://api.kimi.com/coding/v1`,models:[`kimi-for-coding`,`kimi-k2.5`,`kimi-k2-thinking`,`kimi-k2-thinking-turbo`,`kimi-k2-turbo-preview`,`kimi-k2-0905-preview`]},{label:`xAI`,value:`xai`,base_url:`https://api.x.ai/v1`,models:[`grok-4.20-0309-reasoning`,`grok-4.20-0309-non-reasoning`,`grok-4-1-fast-reasoning`,`grok-4-1-fast-non-reasoning`,`grok-4-fast-reasoning`,`grok-4-fast-non-reasoning`,`grok-4-0709`,`grok-code-fast-1`,`grok-3`,`grok-3-mini`]},{label:`MiniMax`,value:`minimax`,base_url:`https://api.minimax.io/anthropic/v1`,models:[`MiniMax-M2.7`,`MiniMax-M2.5`,`MiniMax-M2.1`,`MiniMax-M2`]},{label:`MiniMax (China)`,value:`minimax-cn`,base_url:`https://api.minimaxi.com/v1`,models:[`MiniMax-M2.7`,`MiniMax-M2.5`,`MiniMax-M2.1`,`MiniMax-M2`]},{label:`Alibaba Cloud`,value:`alibaba`,base_url:`https://dashscope-intl.aliyuncs.com/compatible-mode/v1`,models:[`qwen3.5-plus`,`qwen3-coder-plus`,`qwen3-coder-next`,`glm-5`,`glm-4.7`,`kimi-k2.5`,`MiniMax-M2.5`]},{label:`Hugging Face`,value:`huggingface`,base_url:`https://router.huggingface.co/v1`,models:[`Qwen/Qwen3.5-397B-A17B`,`Qwen/Qwen3.5-35B-A3B`,`deepseek-ai/DeepSeek-V3.2`,`moonshotai/Kimi-K2.5`,`MiniMaxAI/MiniMax-M2.5`,`zai-org/GLM-5`,`XiaomiMiMo/MiMo-V2-Flash`,`moonshotai/Kimi-K2-Thinking`]},{label:`Xiaomi MiMo`,value:`xiaomi`,base_url:`https://api.xiaomimimo.com/v1`,models:[`mimo-v2-pro`,`mimo-v2-omni`,`mimo-v2-flash`]},{label:`Kilo Code`,value:`kilo`,base_url:`https://api.kilo.ai/api/gateway`,models:[`anthropic/claude-opus-4.6`,`anthropic/claude-sonnet-4.6`,`openai/gpt-5.4`,`google/gemini-3-pro-preview`,`google/gemini-3-flash-preview`]},{label:`Vercel AI Gateway`,value:`vercel`,base_url:`https://ai-gateway.vercel.sh/v1`,models:[`anthropic/claude-opus-4.6`,`anthropic/claude-sonnet-4.6`,`anthropic/claude-sonnet-4.5`,`anthropic/claude-haiku-4.5`,`openai/gpt-5`,`openai/gpt-4.1`,`openai/gpt-4.1-mini`,`google/gemini-3-pro-preview`,`google/gemini-3-flash`,`google/gemini-2.5-pro`,`google/gemini-2.5-flash`,`deepseek/deepseek-v3.2`]},{label:`OpenCode Zen`,value:`opencode`,base_url:`https://opencode.ai/zen/v1`,models:[`gpt-5.4-pro`,`gpt-5.4`,`gpt-5.3-codex`,`gpt-5.2`,`gpt-5.1`,`claude-opus-4-6`,`claude-sonnet-4-6`,`claude-haiku-4-5`,`gemini-3.1-pro`,`gemini-3-pro`,`gemini-3-flash`,`minimax-m2.7`,`minimax-m2.5`,`glm-5`,`glm-4.7`,`kimi-k2.5`]},{label:`OpenCode Go`,value:`opencode-go`,base_url:`https://opencode.ai/zen/go/v1`,models:[`glm-5`,`kimi-k2.5`,`mimo-v2-pro`,`mimo-v2-omni`,`minimax-m2.7`,`minimax-m2.5`]},{label:`OpenRouter`,value:`openrouter`,base_url:`https://openrouter.ai/api/v1`,models:[]}],Q={style:{display:`flex`,gap:`12px`}},$={style:{display:`flex`,gap:`8px`,width:`100%`}},ee={class:`modal-footer`},te=b(d({__name:`ProviderFormModal`,emits:[`close`,`saved`],setup(t,{emit:n}){let{t:s}=y(),d=n,p=F(),h=O(),_=l(!0),v=l(!1),b=l(!1),D=l(`preset`),k=l(null),A=l({name:``,base_url:``,api_key:``,model:``}),j=l([]),M=Z;function N(e){let t=e.replace(/^https?:\/\//,``).replace(/\/v1\/?$/,``).split(`/`)[0];return t.includes(`localhost`)||t.includes(`127.0.0.1`)?s(`models.local`,{host:t}):t.charAt(0).toUpperCase()+t.slice(1)}c(k,e=>{if(A.value.model=``,e){let t=M.find(t=>t.value===e);t&&(A.value.name=t.label,A.value.base_url=t.base_url,j.value=t.models.map(e=>({label:e,value:e})),t.models.length>0&&(A.value.model=t.models[0]))}}),c(()=>A.value.base_url,e=>{D.value===`custom`&&e.trim()&&(A.value.name=N(e.trim()))}),c(D,()=>{j.value=[],A.value={name:``,base_url:``,api_key:``,model:``},k.value=null});async function P(){let{base_url:e}=A.value;if(!e.trim()){h.warning(s(`models.enterBaseUrl`));return}b.value=!0;try{let t=e.replace(/\/+$/,``)+`/models`,n={};A.value.api_key.trim()&&(n.Authorization=`Bearer ${A.value.api_key.trim()}`);let r=await fetch(t,{headers:n,signal:AbortSignal.timeout(8e3)});if(!r.ok)throw Error(`HTTP ${r.status}`);let i=await r.json();if(!Array.isArray(i.data))throw Error(s(`models.unexpectedFormat`));j.value=i.data.map(e=>({label:e.id,value:e.id})),j.value.length>0&&!A.value.model&&(A.value.model=j.value[0].value),h.success(s(`models.foundModels`,{count:j.value.length}))}catch(e){h.error(s(`models.fetchFailed`)+`: `+e.message)}finally{b.value=!1}}async function I(){if(D.value===`preset`&&!k.value){h.warning(s(`models.selectProviderRequired`));return}if(!A.value.base_url.trim()){h.warning(s(`models.baseUrlRequired`));return}if(!A.value.api_key.trim()){h.warning(s(`models.apiKeyRequired`));return}if(!A.value.model){h.warning(s(`models.modelRequired`));return}v.value=!0;try{let e=D.value===`preset`&&M.find(e=>e.value===k.value)?.value||null;await p.addProvider({name:A.value.name.trim(),base_url:A.value.base_url.trim(),api_key:A.value.api_key.trim(),model:A.value.model,providerKey:e}),h.success(s(`models.providerAdded`)),d(`saved`)}catch(e){h.error(e.message)}finally{v.value=!1}}function L(){_.value=!1,setTimeout(()=>d(`close`),200)}return(t,n)=>(i(),o(m(x),{show:_.value,"onUpdate:show":n[7]||=e=>_.value=e,preset:`card`,title:m(s)(`models.addProvider`),style:{width:`min(520px, calc(100vw - 32px))`},"mask-closable":!v.value,onAfterLeave:n[8]||=e=>d(`close`)},{footer:a(()=>[g(`div`,ee,[e(m(T),{onClick:L},{default:a(()=>[f(u(m(s)(`common.cancel`)),1)]),_:1}),e(m(T),{type:`primary`,loading:v.value,onClick:I},{default:a(()=>[f(u(m(s)(`common.add`)),1)]),_:1},8,[`loading`])])]),default:a(()=>[e(m(S),{"label-placement":`top`},{default:a(()=>[e(m(C),{label:m(s)(`models.providerType`)},{default:a(()=>[g(`div`,Q,[e(m(T),{type:D.value===`preset`?`primary`:`default`,size:`small`,onClick:n[0]||=e=>D.value=`preset`},{default:a(()=>[f(u(m(s)(`models.preset`)),1)]),_:1},8,[`type`]),e(m(T),{type:D.value===`custom`?`primary`:`default`,size:`small`,onClick:n[1]||=e=>D.value=`custom`},{default:a(()=>[f(u(m(s)(`models.custom`)),1)]),_:1},8,[`type`])])]),_:1},8,[`label`]),D.value===`preset`?(i(),o(m(C),{key:0,label:m(s)(`models.selectProvider`),required:``},{default:a(()=>[e(m(w),{value:k.value,"onUpdate:value":n[2]||=e=>k.value=e,options:m(M),placeholder:m(s)(`models.chooseProvider`),filterable:``},null,8,[`value`,`options`,`placeholder`])]),_:1},8,[`label`])):r(``,!0),D.value===`custom`?(i(),o(m(C),{key:1,label:m(s)(`models.name`)},{default:a(()=>[e(m(E),{value:A.value.name,"onUpdate:value":n[3]||=e=>A.value.name=e,placeholder:m(s)(`models.autoGeneratedName`),disabled:``},null,8,[`value`,`placeholder`])]),_:1},8,[`label`])):r(``,!0),e(m(C),{label:m(s)(`models.baseUrl`),required:``},{default:a(()=>[e(m(E),{value:A.value.base_url,"onUpdate:value":n[4]||=e=>A.value.base_url=e,placeholder:m(s)(`models.baseUrlPlaceholder`),disabled:D.value===`preset`},null,8,[`value`,`placeholder`,`disabled`])]),_:1},8,[`label`]),e(m(C),{label:m(s)(`models.apiKey`),required:``},{default:a(()=>[e(m(E),{value:A.value.api_key,"onUpdate:value":n[5]||=e=>A.value.api_key=e,type:`password`,"show-password-on":`click`,placeholder:m(s)(`models.apiKeyPlaceholder`)},null,8,[`value`,`placeholder`])]),_:1},8,[`label`]),e(m(C),{label:m(s)(`models.defaultModel`),required:``},{default:a(()=>[g(`div`,$,[e(m(w),{value:A.value.model,"onUpdate:value":n[6]||=e=>A.value.model=e,options:j.value,filterable:``,placeholder:m(s)(`models.selectModel`),style:{flex:`1`}},null,8,[`value`,`options`,`placeholder`]),D.value===`custom`||D.value===`preset`&&j.value.length===0?(i(),o(m(T),{key:0,loading:b.value,onClick:P},{default:a(()=>[f(u(m(s)(`common.fetch`)),1)]),_:1},8,[`loading`])):r(``,!0)])]),_:1},8,[`label`])]),_:1})]),_:1},8,[`show`,`title`,`mask-closable`]))}}),[[`__scopeId`,`data-v-c6cd4f75`]]),ne={class:`models-view`},re={class:`page-header`},ie={class:`header-title`},ae={class:`models-content`},oe=b(d({__name:`ModelsView`,setup(t){let{t:c}=y(),d=F(),p=l(!1);s(()=>{d.fetchProviders()});function h(){p.value=!0}function _(){p.value=!1}async function v(){await d.fetchProviders(),_()}return(t,s)=>(i(),n(`div`,ne,[g(`header`,re,[g(`h2`,ie,u(m(c)(`models.title`)),1),e(m(T),{type:`primary`,size:`small`,onClick:h},{icon:a(()=>[...s[0]||=[g(`svg`,{width:`14`,height:`14`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,"stroke-width":`2`},[g(`line`,{x1:`12`,y1:`5`,x2:`12`,y2:`19`}),g(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`})],-1)]]),default:a(()=>[f(` `+u(m(c)(`models.addProvider`)),1)]),_:1})]),g(`div`,ae,[e(m(k),{show:m(d).loading&&m(d).providers.length===0},{default:a(()=>[e(X)]),_:1},8,[`show`])]),p.value?(i(),o(te,{key:0,onClose:_,onSaved:v})):r(``,!0)]))}}),[[`__scopeId`,`data-v-f120758c`]]);export{oe as default};
@@ -1 +0,0 @@
1
- import{t as e}from"./app-Dn_xFNgc.js";export{e as useAppStore};
@@ -1 +0,0 @@
1
- import{F as e}from"./router-k7Mt11r-.js";import{Y as t}from"./browser-Bj_pylgC.js";import{s as n}from"./Modal-D0bHwidv.js";function r(){let r=e(n,null);return r===null&&t(`use-dialog`,`No outer <n-dialog-provider /> founded.`),r}export{r as t};
@@ -1 +0,0 @@
1
- [data-v-724ec6a4]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-724ec6a4]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#e0e0e0;--text-secondary:#a0a0a0;--text-muted:#666;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:224, 224, 224;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:224, 224, 224;--text-muted-rgb:102, 102, 102;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.model-selector[data-v-724ec6a4]{margin-bottom:8px;padding:0 12px}.model-label[data-v-724ec6a4]{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-size:11px;font-weight:600}[data-v-3d150b4a]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-3d150b4a]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#e0e0e0;--text-secondary:#a0a0a0;--text-muted:#666;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:224, 224, 224;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:224, 224, 224;--text-muted-rgb:102, 102, 102;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.profile-selector[data-v-3d150b4a]{margin-bottom:8px;padding:0 12px}.selector-label[data-v-3d150b4a]{color:var(--text-muted);text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px;font-size:11px;font-weight:600}.theme-switch[data-v-c304cee6]{cursor:pointer;width:28px;height:28px;color:var(--text-muted);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;transition:color .15s,background-color .15s;display:flex}.theme-switch[data-v-c304cee6]:hover{color:var(--text-primary);background:rgba(var(--accent-primary-rgb), .06)}[data-v-6beb5fa3]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-6beb5fa3]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#e0e0e0;--text-secondary:#a0a0a0;--text-muted:#666;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:224, 224, 224;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:224, 224, 224;--text-muted-rgb:102, 102, 102;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.sidebar[data-v-6beb5fa3]{width:240px;height:calc(100 * var(--vh));background-color:var(--bg-sidebar);border-right:1px solid var(--border-color);flex-direction:column;flex-shrink:0;padding:0 12px 20px;transition:width .25s;display:flex}.logo-img[data-v-6beb5fa3]{border-radius:0;flex-shrink:0;width:28px;height:28px}.sidebar-logo[data-v-6beb5fa3]{color:var(--text-primary);cursor:pointer;background-color:var(--bg-card);align-items:center;gap:10px;margin:0 -12px;padding:20px 12px;display:flex;box-shadow:0 2px 8px #00000014}.dark .sidebar-logo[data-v-6beb5fa3]{background-color:#393939}.sidebar-logo[data-v-6beb5fa3]{position:relative;overflow:hidden}.sidebar-logo .logo-text[data-v-6beb5fa3]{letter-spacing:.5px;font-size:18px;font-weight:600}.sidebar-logo .logo-dance[data-v-6beb5fa3]{object-fit:contain;pointer-events:none;border-radius:10px;flex-shrink:0;width:auto;height:100px;position:absolute;top:50%;right:12px;transform:translateY(-50%)}.sidebar-nav[data-v-6beb5fa3]{scrollbar-width:none;flex-direction:column;flex:1;gap:4px;min-height:0;padding-top:12px;display:flex;overflow-y:auto}.sidebar-nav[data-v-6beb5fa3]::-webkit-scrollbar{display:none}.nav-item[data-v-6beb5fa3]{color:var(--text-secondary);cursor:pointer;text-align:left;background:0 0;border:none;border-radius:6px;align-items:center;gap:10px;width:100%;padding:12px;font-size:14px;transition:all .15s;display:flex}.nav-item[data-v-6beb5fa3]:hover{background-color:rgba(var(--accent-primary-rgb), .06);color:var(--text-primary)}.nav-item.active[data-v-6beb5fa3]{background-color:rgba(var(--accent-primary-rgb), .12);color:var(--accent-primary)}.sidebar-footer[data-v-6beb5fa3]{border-top:1px solid var(--border-color);padding-top:16px}.status-row[data-v-6beb5fa3]{justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.status-indicator[data-v-6beb5fa3]{align-items:center;gap:8px;font-size:12px;display:flex}.status-indicator .status-dot[data-v-6beb5fa3]{border-radius:50%;flex-shrink:0;width:8px;height:8px}.status-indicator.connected .status-dot[data-v-6beb5fa3]{background-color:var(--success);box-shadow:0 0 6px rgba(var(--success-rgb), .5)}.status-indicator.disconnected .status-dot[data-v-6beb5fa3]{background-color:var(--error)}.status-indicator .status-text[data-v-6beb5fa3]{color:var(--text-secondary)}.version-info[data-v-6beb5fa3]{color:var(--text-muted);flex-direction:row;justify-content:space-between;align-items:center;padding:2px 12px 8px;font-size:11px;display:flex}.update-btn[data-v-6beb5fa3]{margin:0 12px 4px}@media (width<=768px){.logo-dance[data-v-6beb5fa3]{display:none}.status-row[data-v-6beb5fa3]{flex-direction:column;align-items:flex-start;gap:8px}.sidebar[data-v-6beb5fa3]{z-index:1000;transition:transform .25s;position:fixed;top:0;left:0;transform:translate(-100%)}.sidebar.open[data-v-6beb5fa3]{transform:translate(0)}.sidebar .input-sm[data-v-6beb5fa3]{width:90px}}[data-v-2fd2e439]:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark[data-v-2fd2e439]{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#e0e0e0;--text-secondary:#a0a0a0;--text-muted:#666;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:224, 224, 224;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:224, 224, 224;--text-muted-rgb:102, 102, 102;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}.app-layout[data-v-2fd2e439]{height:calc(100 * var(--vh));width:100vw;display:flex;overflow:hidden}.app-layout.no-sidebar[data-v-2fd2e439]{display:block}.app-main[data-v-2fd2e439]{background-color:var(--bg-primary);flex:1;overflow-y:auto}.no-sidebar .app-main[data-v-2fd2e439]{height:calc(100 * var(--vh))}:root{--bg-primary:#fafafa;--bg-secondary:#f0f0f0;--bg-sidebar:#f5f5f5;--bg-card:#fff;--bg-card-hover:#fafafa;--bg-input:#fff;--border-color:#e0e0e0;--border-light:#ebebeb;--accent-primary:#333;--accent-hover:#1a1a1a;--accent-muted:#888;--text-primary:#1a1a1a;--text-secondary:#666;--text-muted:#999;--success:#2e7d32;--error:#c62828;--warning:#f57f17;--msg-user-bg:#f5f5f5;--msg-assistant-bg:#f5f5f5;--msg-system-border:#bdbdbd;--code-bg:#f4f4f4;--text-on-accent:#fff;--text-on-overlay:#fff;--accent-info:#4a90d9;--accent-primary-rgb:51, 51, 51;--accent-hover-rgb:26, 26, 26;--text-primary-rgb:26, 26, 26;--text-muted-rgb:153, 153, 153;--success-rgb:46, 125, 50;--error-rgb:198, 40, 40;--warning-rgb:245, 127, 23;--accent-info-rgb:74, 144, 217}.dark{--bg-primary:#1a1a1a;--bg-secondary:#252525;--bg-sidebar:#202020;--bg-card:#333;--bg-card-hover:#333;--bg-input:#2a2a2a;--border-color:#3a3a3a;--border-light:#333;--accent-primary:#e0e0e0;--accent-hover:#f5f5f5;--accent-muted:#888;--text-primary:#e0e0e0;--text-secondary:#a0a0a0;--text-muted:#666;--success:#66bb6a;--error:#ef5350;--warning:#ffb74d;--msg-user-bg:#252525;--msg-assistant-bg:#252525;--msg-system-border:#555;--code-bg:#1e1e1e;--text-on-accent:#1a1a1a;--text-on-overlay:#fff;--accent-info:#6ba3d6;--accent-primary-rgb:224, 224, 224;--accent-hover-rgb:245, 245, 245;--text-primary-rgb:224, 224, 224;--text-muted-rgb:102, 102, 102;--success-rgb:102, 187, 106;--error-rgb:239, 83, 80;--warning-rgb:255, 183, 77;--accent-info-rgb:107, 163, 214}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--vh:1vh}@supports (height:100dvh){:root{--vh:1dvh}}html.theme-transitioning,html.theme-transitioning *,html.theme-transitioning :before,html.theme-transitioning :after{transition:background-color .3s,color .3s,border-color .3s,box-shadow .3s,fill .3s,stroke .3s!important}html,body,#app{width:100%;height:100%;overflow:hidden}body{background-color:var(--bg-primary);color:var(--text-primary);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:Inter,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.6}code,pre,.mono{font-family:JetBrains Mono,Fira Code,Consolas,monospace}a{color:var(--accent-primary);text-decoration:none}a:hover{color:var(--accent-hover)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-color);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--text-muted)}::selection{background:rgba(var(--accent-primary-rgb), .3)}.page-header{border-bottom:1px solid var(--border-color);flex-shrink:0;justify-content:space-between;align-items:center;padding:21px 20px;display:flex}.header-title{color:var(--text-primary);font-size:16px;font-weight:600}.input-sm{width:90px}.input-md{width:200px}.input-lg{width:300px}.mobile-backdrop{z-index:999;background:#0006;display:none;position:fixed;inset:0}.hamburger-btn{z-index:1001;background:var(--bg-card);cursor:pointer;border:none;border-radius:6px;justify-content:center;align-items:center;width:36px;height:36px;display:none;position:fixed;top:16px;left:12px;box-shadow:0 1px 4px #0000001a}@media (width<=768px){.mobile-backdrop{display:block}.hamburger-btn{display:flex}.page-header{padding:16px 12px 16px 52px}.input-sm,.input-md,.input-lg{width:100%}}