diff --git a/appinfo/info.xml b/appinfo/info.xml index 7c9941d..df1a759 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -4,31 +4,31 @@ jadaagent Jada Agent JadaAgent - AI Agent powered by Hermes — autonomous tasks, workspaces, MCP tools, and Telegram bot + AI Agent powered by LibreChat — native MCP tools, multi-model, workspaces, and Nextcloud integration - 0.3.6 + 0.5.0 AGPL-3.0-or-later Garza OS integration diff --git a/appinfo/routes.php b/appinfo/routes.php index 85cae23..445bcb1 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -5,17 +5,52 @@ // Page routes ['name' => 'page#index', 'url' => '/', 'verb' => 'GET'], - // OpenClaw proxy API routes + // Health ['name' => 'agent#health', 'url' => '/api/health', 'verb' => 'GET'], ['name' => 'agent#healthDetail', 'url' => '/api/health/detail', 'verb' => 'GET'], + + // Chat (Agents API — API key auth) ['name' => 'agent#chat', 'url' => '/api/chat', 'verb' => 'POST'], ['name' => 'agent#chatSSE', 'url' => '/api/chat/sse', 'verb' => 'POST'], - ['name' => 'agent#reconnect', 'url' => '/api/reconnect', 'verb' => 'POST'], + + // Conversations (LibreChat /api/convos — JWT auth) ['name' => 'agent#getConversations', 'url' => '/api/conversations', 'verb' => 'GET'], ['name' => 'agent#getConversation', 'url' => '/api/conversations/{id}', 'verb' => 'GET'], + ['name' => 'agent#deleteConversation', 'url' => '/api/conversations/{id}', 'verb' => 'DELETE'], + ['name' => 'agent#updateConversation', 'url' => '/api/conversations/update', 'verb' => 'POST'], + ['name' => 'agent#archiveConversation', 'url' => '/api/conversations/archive', 'verb' => 'POST'], + ['name' => 'agent#genTitle', 'url' => '/api/conversations/{id}/gen-title', 'verb' => 'GET'], + + // Messages (LibreChat /api/messages — JWT auth) + ['name' => 'agent#getMessages', 'url' => '/api/messages', 'verb' => 'GET'], + ['name' => 'agent#getConversationMessages', 'url' => '/api/messages/{id}', 'verb' => 'GET'], ['name' => 'agent#getConversationToolCalls', 'url' => '/api/conversations/{id}/toolcalls', 'verb' => 'GET'], ['name' => 'agent#getRecentToolCalls', 'url' => '/api/toolcalls/recent', 'verb' => 'GET'], - ['name' => 'agent#deleteConversation', 'url' => '/api/conversations/{id}', 'verb' => 'DELETE'], + + // Search (via /api/messages?search= — JWT auth) + ['name' => 'agent#searchMessages', 'url' => '/api/search', 'verb' => 'GET'], + + // Tags (LibreChat /api/tags — JWT auth) + ['name' => 'agent#getTags', 'url' => '/api/tags', 'verb' => 'GET'], + ['name' => 'agent#addTag', 'url' => '/api/tags', 'verb' => 'POST'], + ['name' => 'agent#removeTag', 'url' => '/api/tags', 'verb' => 'DELETE'], + + // Sharing (LibreChat /api/share — JWT auth) + ['name' => 'agent#getSharedLinks', 'url' => '/api/share', 'verb' => 'GET'], + ['name' => 'agent#createShareLink', 'url' => '/api/share', 'verb' => 'POST'], + ['name' => 'agent#deleteShareLink', 'url' => '/api/share/{id}', 'verb' => 'DELETE'], + + // Memories (LibreChat /api/memories — JWT auth) + ['name' => 'agent#getMemories', 'url' => '/api/memories', 'verb' => 'GET'], + ['name' => 'agent#deleteMemory', 'url' => '/api/memories/{id}', 'verb' => 'DELETE'], + + // Presets (LibreChat /api/presets — JWT auth) + ['name' => 'agent#getPresets', 'url' => '/api/presets', 'verb' => 'GET'], + ['name' => 'agent#createPreset', 'url' => '/api/presets', 'verb' => 'POST'], + ['name' => 'agent#deletePreset', 'url' => '/api/presets/{id}', 'verb' => 'DELETE'], + + // Legacy endpoints + ['name' => 'agent#reconnect', 'url' => '/api/reconnect', 'verb' => 'POST'], ['name' => 'agent#getSkills', 'url' => '/api/skills', 'verb' => 'GET'], ['name' => 'agent#getModels', 'url' => '/api/models', 'verb' => 'GET'], ['name' => 'agent#getConfig', 'url' => '/api/config', 'verb' => 'GET'], diff --git a/js/jadaagent-admin.js b/js/jadaagent-admin.js index 93fe179..836e3c3 100644 --- a/js/jadaagent-admin.js +++ b/js/jadaagent-admin.js @@ -7,6 +7,8 @@ document.addEventListener('DOMContentLoaded', () => { const msgEl = document.getElementById('openclaw-settings-msg') const urlInput = document.getElementById('openclaw-url') const tokenInput = document.getElementById('openclaw-token') + const serviceEmailInput = document.getElementById('librechat-service-email') + const servicePasswordInput = document.getElementById('librechat-service-password') if (!saveBtn) return @@ -27,6 +29,8 @@ document.addEventListener('DOMContentLoaded', () => { body: JSON.stringify({ openclaw_url: urlInput.value.trim(), openclaw_token: tokenInput.value.trim(), + librechat_service_email: serviceEmailInput.value.trim(), + librechat_service_password: servicePasswordInput.value.trim(), }), }, ) diff --git a/js/jadaagent-main.js b/js/jadaagent-main.js index 2d5d442..835eab0 100644 --- a/js/jadaagent-main.js +++ b/js/jadaagent-main.js @@ -1,21 +1,21 @@ -(function(){"use strict";var _o=document.createElement("style");_o.textContent=`.jada-chat[data-v-cff9a10a]{display:flex;flex-direction:column;height:100%;min-height:0}.jada-chat-empty[data-v-cff9a10a]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px}.jada-chat-empty-icon[data-v-cff9a10a]{margin-bottom:20px;opacity:.9;animation:float-cff9a10a 3s ease-in-out infinite}@keyframes float-cff9a10a{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.jada-chat-empty h2[data-v-cff9a10a]{font-size:24px;font-weight:700;color:#fff;margin:0 0 8px}.jada-chat-empty p[data-v-cff9a10a]{font-size:14px;color:#8b8b9e;margin:0 0 24px}.jada-suggestions[data-v-cff9a10a]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:600px}.jada-chip[data-v-cff9a10a]{padding:8px 16px;border-radius:20px;border:1px solid rgba(255,255,255,.1);background:#ffffff0a;color:#e8e8ef;font-size:13px;cursor:pointer;transition:all .2s}.jada-chip[data-v-cff9a10a]:hover{border-color:#e94560;background:#e945601a;color:#e94560}.jada-chat-messages[data-v-cff9a10a]{flex:1;overflow-y:auto;padding:20px 24px}.jada-msg[data-v-cff9a10a]{display:flex;gap:12px;margin-bottom:20px;max-width:800px}.jada-msg.user[data-v-cff9a10a]{margin-left:auto;flex-direction:row-reverse}.jada-msg-avatar[data-v-cff9a10a]{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;color:#fff}.jada-msg.user .jada-msg-avatar[data-v-cff9a10a]{background:linear-gradient(135deg,#3b82f6,#2563eb)}.jada-msg.assistant .jada-msg-avatar[data-v-cff9a10a]{background:linear-gradient(135deg,#e94560,#c23152)}.jada-msg-body[data-v-cff9a10a]{max-width:650px;min-width:0}.jada-msg.user .jada-msg-body[data-v-cff9a10a]{text-align:right}.jada-msg-text[data-v-cff9a10a]{background:#1e1e2a;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:10px 14px;font-size:14px;line-height:1.6;color:#e8e8ef;display:inline-block;text-align:left}.jada-msg.user .jada-msg-text[data-v-cff9a10a]{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:none}.jada-msg-text code[data-v-cff9a10a]{background:#0003;padding:1px 5px;border-radius:4px;font-size:13px;font-family:SF Mono,Fira Code,monospace}.jada-msg-meta[data-v-cff9a10a]{font-size:11px;color:#555;margin-top:4px;padding:0 4px}.jada-tool-calls[data-v-cff9a10a]{margin-bottom:8px}.jada-tool-call[data-v-cff9a10a]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:8px;margin-bottom:6px;overflow:hidden}.jada-tool-header[data-v-cff9a10a]{display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:12px;font-weight:600;color:#e94560}.jada-tool-icon[data-v-cff9a10a]{font-size:13px}.jada-tool-icon.spinning[data-v-cff9a10a]{animation:spin-cff9a10a 1s linear infinite}@keyframes spin-cff9a10a{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.jada-tool-name[data-v-cff9a10a]{font-family:SF Mono,Fira Code,monospace;font-size:12px}.jada-typing[data-v-cff9a10a]{display:flex;gap:4px;padding:8px 14px;background:#1e1e2a;border-radius:12px;display:inline-flex}.jada-typing span[data-v-cff9a10a]{width:7px;height:7px;border-radius:50%;background:#e94560;animation:bounce-cff9a10a 1.4s ease-in-out infinite}.jada-typing span[data-v-cff9a10a]:nth-child(2){animation-delay:.2s}.jada-typing span[data-v-cff9a10a]:nth-child(3){animation-delay:.4s}@keyframes bounce-cff9a10a{0%,80%,to{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}.jada-chat-input-area[data-v-cff9a10a]{padding:12px 24px 16px;border-top:1px solid rgba(255,255,255,.06)}.jada-chat-input-row[data-v-cff9a10a]{display:flex;align-items:flex-end;gap:8px;background:#1e1e2a;border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:8px 8px 8px 16px;max-width:800px;transition:border-color .2s}.jada-chat-input-row[data-v-cff9a10a]:focus-within{border-color:#e9456080}.jada-chat-input[data-v-cff9a10a]{flex:1;border:none;background:transparent;color:#e8e8ef;font-size:14px;line-height:1.5;resize:none;outline:none;min-height:22px;max-height:120px;padding:2px 0;font-family:inherit}.jada-chat-input[data-v-cff9a10a]::placeholder{color:#555}.jada-send-btn[data-v-cff9a10a]{width:34px;height:34px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.jada-send-btn[data-v-cff9a10a]:hover:not(:disabled){box-shadow:0 2px 10px #e9456066}.jada-send-btn[data-v-cff9a10a]:disabled{opacity:.3;cursor:not-allowed}.jada-input-footer[data-v-cff9a10a]{display:flex;gap:6px;padding:6px 4px 0;font-size:11px;color:#444}.jada-workspaces[data-v-4921a983]{padding:28px;overflow-y:auto;height:100%}.jada-ws-header[data-v-4921a983]{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.jada-ws-header h1[data-v-4921a983]{font-size:24px;font-weight:700;color:#fff;margin:0}.jada-ws-grid[data-v-4921a983]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.jada-ws-card[data-v-4921a983]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:20px;cursor:pointer;transition:all .2s}.jada-ws-card[data-v-4921a983]:hover{transform:translateY(-2px);box-shadow:0 4px 20px #0000004d;border-color:#ffffff1f}.jada-ws-card.root[data-v-4921a983]{border-color:#0082c966;background:linear-gradient(135deg,rgba(0,130,201,.08),transparent)}.jada-ws-card-header[data-v-4921a983]{display:flex;align-items:center;gap:10px;margin-bottom:10px}.jada-ws-card-dot[data-v-4921a983]{width:12px;height:12px;border-radius:50%}.jada-ws-card-name[data-v-4921a983]{font-size:16px;font-weight:600;color:#fff}.jada-ws-card-badge[data-v-4921a983]{padding:2px 8px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:10px;font-weight:700;letter-spacing:.5px}.jada-ws-card-desc[data-v-4921a983]{font-size:13px;color:#8b8b9e;margin:0 0 12px;line-height:1.5}.jada-ws-card-tags[data-v-4921a983]{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.jada-ws-tag[data-v-4921a983]{padding:2px 8px;border-radius:12px;background:#ffffff0f;font-size:11px;color:#8b8b9e}.jada-ws-card-stats[data-v-4921a983]{font-size:12px;color:#555;display:flex;gap:6px}.jada-btn-primary[data-v-4921a983]{padding:8px 18px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}.jada-btn-primary[data-v-4921a983]:hover:not(:disabled){box-shadow:0 2px 12px #e9456066}.jada-btn-primary[data-v-4921a983]:disabled{opacity:.4;cursor:not-allowed}.jada-btn-secondary[data-v-4921a983]{padding:8px 18px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:13px;font-weight:600;cursor:pointer}.jada-modal-overlay[data-v-4921a983]{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:2000}.jada-modal[data-v-4921a983]{background:#1a1a24;border:1px solid rgba(255,255,255,.1);border-radius:16px;padding:28px;width:420px;max-width:90vw}.jada-modal h3[data-v-4921a983]{font-size:18px;font-weight:700;color:#fff;margin:0 0 20px}.jada-form-group[data-v-4921a983]{margin-bottom:16px}.jada-form-group label[data-v-4921a983]{display:block;font-size:12px;font-weight:600;color:#8b8b9e;margin-bottom:6px}.jada-form-group input[data-v-4921a983],.jada-form-group textarea[data-v-4921a983]{width:100%;padding:10px 14px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#111119;color:#e8e8ef;font-size:14px;box-sizing:border-box;font-family:inherit;resize:vertical}.jada-form-group input[data-v-4921a983]:focus,.jada-form-group textarea[data-v-4921a983]:focus{outline:none;border-color:#e94560}.jada-color-options[data-v-4921a983]{display:flex;gap:8px}.jada-color-btn[data-v-4921a983]{width:28px;height:28px;border-radius:8px;border:2px solid transparent;cursor:pointer;transition:all .15s}.jada-color-btn.selected[data-v-4921a983]{border-color:#fff;transform:scale(1.15)}.jada-modal-actions[data-v-4921a983]{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.jada-ws-detail[data-v-fbdfa994]{padding:28px;overflow-y:auto;height:100%}.jada-back-btn[data-v-fbdfa994]{background:none;border:none;color:#8b8b9e;font-size:13px;cursor:pointer;padding:0;margin-bottom:16px;display:block}.jada-back-btn[data-v-fbdfa994]:hover{color:#e94560}.jada-ws-detail-title[data-v-fbdfa994]{display:flex;align-items:center;gap:12px;margin-bottom:8px}.jada-ws-dot[data-v-fbdfa994]{width:14px;height:14px;border-radius:50%}.jada-ws-detail-title h1[data-v-fbdfa994]{font-size:24px;font-weight:700;color:#fff;margin:0}.jada-ws-badge[data-v-fbdfa994]{padding:2px 8px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:10px;font-weight:700}.jada-ws-detail-desc[data-v-fbdfa994]{font-size:14px;color:#8b8b9e;margin:0 0 24px}.jada-ws-detail-stats[data-v-fbdfa994]{display:flex;gap:16px;margin-bottom:24px}.jada-stat-card[data-v-fbdfa994]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 24px;text-align:center}.jada-stat-value[data-v-fbdfa994]{font-size:24px;font-weight:700;color:#e94560}.jada-stat-label[data-v-fbdfa994]{font-size:12px;color:#555;margin-top:4px}.jada-ws-detail-actions[data-v-fbdfa994]{display:flex;gap:12px;margin-bottom:28px}.jada-btn-primary[data-v-fbdfa994]{padding:10px 20px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:600;cursor:pointer}.jada-btn-secondary[data-v-fbdfa994]{padding:10px 20px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:13px;font-weight:600;cursor:pointer}h3[data-v-fbdfa994]{font-size:16px;font-weight:600;color:#e8e8ef;margin:0 0 12px}.jada-ws-conv-list[data-v-fbdfa994]{display:flex;flex-direction:column;gap:4px}.jada-ws-conv-item[data-v-fbdfa994]{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:10px;background:#1a1a24;cursor:pointer;transition:background .15s}.jada-ws-conv-item[data-v-fbdfa994]:hover{background:#e945601a}.jada-conv-icon[data-v-fbdfa994]{font-size:16px}.jada-conv-title[data-v-fbdfa994]{font-size:13px;font-weight:500;color:#e8e8ef}.jada-conv-time[data-v-fbdfa994]{font-size:11px;color:#555}.jada-ws-empty[data-v-fbdfa994]{font-size:13px;color:#555;padding:16px}.jada-doc-editor[data-v-fa97b8c8]{display:flex;height:100%;min-height:0}.jada-doc-sidebar[data-v-fa97b8c8]{width:240px;min-width:240px;background:#111119;border-right:1px solid rgba(255,255,255,.06);padding:16px 12px;overflow-y:auto}.jada-doc-sidebar h4[data-v-fa97b8c8]{font-size:14px;font-weight:700;color:#fff;margin:0 0 12px}.jada-doc-section-label[data-v-fa97b8c8]{font-size:10px;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.5px;padding:8px 8px 4px}.jada-doc-item[data-v-fa97b8c8]{display:flex;align-items:center;gap:8px;padding:8px;border-radius:8px;cursor:pointer;transition:background .15s}.jada-doc-item[data-v-fa97b8c8]:hover{background:#ffffff0a}.jada-doc-item.active[data-v-fa97b8c8]{background:#e945601f}.jada-doc-icon[data-v-fa97b8c8]{font-size:14px}.jada-doc-item-name[data-v-fa97b8c8]{font-size:13px;color:#e8e8ef;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jada-doc-item-meta[data-v-fa97b8c8]{font-size:10px;color:#444}.jada-doc-tree-hint[data-v-fa97b8c8]{font-size:11px;color:#444;padding:8px;line-height:1.5}.jada-doc-center[data-v-fa97b8c8]{flex:1;display:flex;flex-direction:column;min-width:0}.jada-doc-toolbar[data-v-fa97b8c8]{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.06);background:#16161f}.jada-doc-filename[data-v-fa97b8c8]{font-size:14px;font-weight:600;color:#e8e8ef}.jada-doc-toolbar-actions[data-v-fa97b8c8]{display:flex;gap:6px}.jada-doc-tb-btn[data-v-fa97b8c8]{background:none;border:none;color:#8b8b9e;font-size:16px;cursor:pointer;padding:4px 8px;border-radius:6px}.jada-doc-tb-btn[data-v-fa97b8c8]:hover{background:#ffffff0f}.jada-doc-content[data-v-fa97b8c8]{flex:1;overflow-y:auto;padding:16px}.jada-doc-textarea[data-v-fa97b8c8]{width:100%;min-height:300px;background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:16px;color:#e8e8ef;font-size:14px;line-height:1.8;font-family:Georgia,Times New Roman,serif;resize:vertical;box-sizing:border-box}.jada-doc-textarea[data-v-fa97b8c8]:focus{outline:none;border-color:#e945604d}.jada-doc-textarea[data-v-fa97b8c8]::placeholder{color:#444}.jada-doc-suggestions[data-v-fa97b8c8]{margin-top:16px}.jada-doc-suggestion[data-v-fa97b8c8]{background:#e9456014;border:1px solid rgba(233,69,96,.2);border-radius:10px;padding:12px;margin-bottom:10px}.jada-doc-suggestion-header[data-v-fa97b8c8]{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#e94560;margin-bottom:8px}.jada-doc-suggestion-text[data-v-fa97b8c8]{font-size:13px;color:#e8e8ef;line-height:1.6;margin-bottom:10px;max-height:120px;overflow-y:auto}.jada-doc-suggestion-actions[data-v-fa97b8c8]{display:flex;gap:8px}.jada-doc-apply-btn[data-v-fa97b8c8]{padding:4px 12px;border-radius:6px;border:none;background:#e94560;color:#fff;font-size:12px;font-weight:600;cursor:pointer}.jada-doc-dismiss-btn[data-v-fa97b8c8]{padding:4px 12px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:12px;cursor:pointer}.jada-doc-ai-panel[data-v-fa97b8c8]{width:280px;min-width:280px;background:#111119;border-left:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;padding:16px 12px}.jada-doc-ai-panel h4[data-v-fa97b8c8]{font-size:14px;font-weight:700;color:#fff;margin:0 0 6px}.jada-doc-ai-hint[data-v-fa97b8c8]{font-size:12px;color:#555;margin:0 0 12px}.jada-doc-quick-actions[data-v-fa97b8c8]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.jada-doc-action-btn[data-v-fa97b8c8]{padding:5px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.08);background:#ffffff08;color:#8b8b9e;font-size:11px;cursor:pointer;transition:all .15s}.jada-doc-action-btn[data-v-fa97b8c8]:hover{border-color:#e94560;color:#e94560}.jada-doc-ai-messages[data-v-fa97b8c8]{flex:1;overflow-y:auto;margin-bottom:12px}.jada-doc-ai-msg[data-v-fa97b8c8]{padding:8px 10px;border-radius:8px;margin-bottom:6px;font-size:13px;line-height:1.5}.jada-doc-ai-msg.user[data-v-fa97b8c8]{background:#3b82f626;color:#93c5fd}.jada-doc-ai-msg.assistant[data-v-fa97b8c8]{background:#1a1a24;color:#e8e8ef}.jada-doc-ai-input-row[data-v-fa97b8c8]{display:flex;gap:6px}.jada-doc-ai-input[data-v-fa97b8c8]{flex:1;padding:8px 12px;border:1px solid rgba(255,255,255,.08);border-radius:8px;background:#1a1a24;color:#e8e8ef;font-size:13px}.jada-doc-ai-input[data-v-fa97b8c8]:focus{outline:none;border-color:#e94560}.jada-doc-ai-input[data-v-fa97b8c8]::placeholder{color:#444}.jada-doc-ai-send[data-v-fa97b8c8]{width:34px;height:34px;border-radius:8px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center}.jada-doc-ai-send[data-v-fa97b8c8]:disabled{opacity:.3;cursor:not-allowed}.jada-tools[data-v-55629294]{padding:28px;overflow-y:auto;height:100%}.jada-tools-header[data-v-55629294]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.jada-tools-header h1[data-v-55629294]{font-size:24px;font-weight:700;color:#fff;margin:0}.jada-tools-input[data-v-55629294]{padding:8px 14px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#1a1a24;color:#e8e8ef;font-size:13px;width:280px}.jada-tools-input[data-v-55629294]:focus{outline:none;border-color:#e94560}.jada-tools-input[data-v-55629294]::placeholder{color:#444}.jada-tools-filters[data-v-55629294]{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.jada-filter-btn[data-v-55629294]{padding:6px 14px;border-radius:20px;border:1px solid rgba(255,255,255,.08);background:transparent;color:#8b8b9e;font-size:12px;font-weight:600;cursor:pointer;transition:all .15s;text-transform:capitalize}.jada-filter-btn[data-v-55629294]:hover{border-color:#fff3;color:#e8e8ef}.jada-filter-btn.active[data-v-55629294]{background:#e9456026;border-color:#e94560;color:#e94560}.jada-tools-grid[data-v-55629294]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.jada-tool-card[data-v-55629294]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:14px;transition:all .15s}.jada-tool-card[data-v-55629294]:hover{border-color:#ffffff1f}.jada-tool-card-header[data-v-55629294]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.jada-tool-card-icon[data-v-55629294]{font-size:14px}.jada-tool-card-name[data-v-55629294]{font-size:13px;font-weight:600;color:#e8e8ef;font-family:SF Mono,Fira Code,monospace}.jada-tool-card-desc[data-v-55629294]{font-size:12px;color:#555;margin:0 0 8px;line-height:1.4}.jada-tool-card-server[data-v-55629294]{display:flex;align-items:center;gap:6px;font-size:11px;color:#8b8b9e;text-transform:capitalize}.jada-tool-server-dot[data-v-55629294]{width:6px;height:6px;border-radius:50%}.jada-tools-empty[data-v-55629294]{text-align:center;padding:40px;color:#555;font-size:14px}.jada-search[data-v-48c69005]{padding:28px;overflow-y:auto;height:100%;max-width:700px}.jada-search-header h1[data-v-48c69005]{font-size:24px;font-weight:700;color:#fff;margin:0 0 20px}.jada-search-bar[data-v-48c69005]{display:flex;align-items:center;gap:10px;background:#1a1a24;border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:12px 16px;margin-bottom:24px}.jada-search-bar[data-v-48c69005]:focus-within{border-color:#e94560}.jada-search-icon[data-v-48c69005]{font-size:16px;color:#555}.jada-search-input[data-v-48c69005]{flex:1;background:transparent;border:none;color:#e8e8ef;font-size:15px;outline:none}.jada-search-input[data-v-48c69005]::placeholder{color:#444}.jada-search-result-count[data-v-48c69005]{font-size:12px;color:#555;margin-bottom:12px}.jada-search-result[data-v-48c69005]{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:10px;cursor:pointer;transition:background .15s;margin-bottom:4px}.jada-search-result[data-v-48c69005]:hover{background:#ffffff0a}.jada-search-type[data-v-48c69005]{padding:2px 8px;border-radius:4px;font-size:10px;font-weight:700;text-transform:uppercase;flex-shrink:0;margin-top:2px}.jada-search-type.chat[data-v-48c69005]{background:#e9456026;color:#e94560}.jada-search-type.tool[data-v-48c69005]{background:#4ade8026;color:#4ade80}.jada-search-type.workspace[data-v-48c69005]{background:#8b5cf626;color:#8b5cf6}.jada-search-type.document[data-v-48c69005]{background:#3b82f626;color:#3b82f6}.jada-search-result-title[data-v-48c69005]{font-size:14px;font-weight:500;color:#e8e8ef;margin-bottom:2px}.jada-search-result-preview[data-v-48c69005]{font-size:12px;color:#555}.jada-search-empty[data-v-48c69005]{text-align:center;padding:32px;color:#555}.jada-search-empty-state[data-v-48c69005]{text-align:center;padding:40px 0;color:#555}.jada-search-recent[data-v-48c69005]{margin-top:24px;text-align:left}.jada-search-recent-label[data-v-48c69005]{font-size:11px;font-weight:700;color:#444;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.jada-search-recent-item[data-v-48c69005]{padding:8px 12px;border-radius:8px;font-size:13px;color:#8b8b9e;cursor:pointer;transition:background .15s}.jada-search-recent-item[data-v-48c69005]:hover{background:#ffffff0a;color:#e8e8ef}.jada-settings[data-v-26717cb5]{padding:28px;overflow-y:auto;height:100%}.jada-settings h1[data-v-26717cb5]{font-size:24px;font-weight:700;color:#fff;margin:0 0 24px}.jada-settings-grid[data-v-26717cb5]{display:flex;gap:24px}.jada-settings-nav[data-v-26717cb5]{width:180px;min-width:180px;display:flex;flex-direction:column;gap:2px}.jada-settings-nav-item[data-v-26717cb5]{padding:8px 14px;border-radius:8px;font-size:13px;color:#8b8b9e;cursor:pointer;transition:all .15s;text-decoration:none}.jada-settings-nav-item[data-v-26717cb5]:hover{background:#ffffff0a;color:#e8e8ef}.jada-settings-nav-item.active[data-v-26717cb5]{background:#e9456026;color:#e94560}.jada-settings-content[data-v-26717cb5]{flex:1;max-width:600px}.jada-settings-section h2[data-v-26717cb5]{font-size:18px;font-weight:600;color:#e8e8ef;margin:0 0 16px}.jada-hint[data-v-26717cb5]{font-size:13px;color:#555;margin:0 0 16px}.jada-form-group[data-v-26717cb5]{margin-bottom:18px}.jada-form-group label[data-v-26717cb5]{display:block;font-size:12px;font-weight:600;color:#8b8b9e;margin-bottom:6px}.jada-form-group input[data-v-26717cb5]{width:100%;padding:10px 14px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#1a1a24;color:#e8e8ef;font-size:14px;box-sizing:border-box}.jada-form-group input[data-v-26717cb5]:focus{outline:none;border-color:#e94560}.jada-toggle-row[data-v-26717cb5]{display:flex;align-items:center;justify-content:space-between}.jada-toggle-label[data-v-26717cb5]{font-size:13px;color:#8b8b9e}.jada-toggle[data-v-26717cb5]{width:40px;height:22px;border-radius:12px;border:none;background:#333;position:relative;cursor:pointer;transition:background .2s}.jada-toggle.on[data-v-26717cb5]{background:#e94560}.jada-toggle-knob[data-v-26717cb5]{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .2s}.jada-toggle.on .jada-toggle-knob[data-v-26717cb5]{transform:translate(18px)}.jada-btn-primary[data-v-26717cb5]{padding:10px 24px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:600;cursor:pointer;margin-right:12px}.jada-btn-primary[data-v-26717cb5]:disabled{opacity:.4;cursor:not-allowed}.jada-status-msg[data-v-26717cb5]{font-size:13px;font-weight:600}.jada-status-msg.ok[data-v-26717cb5]{color:#4ade80}.jada-status-msg.err[data-v-26717cb5]{color:#f87171}.jada-mcp-list[data-v-26717cb5]{margin-bottom:16px}.jada-mcp-item[data-v-26717cb5]{display:flex;align-items:center;gap:12px;padding:12px 14px;background:#1a1a24;border-radius:10px;margin-bottom:6px}.jada-mcp-dot[data-v-26717cb5]{width:8px;height:8px;border-radius:50%}.jada-mcp-dot.on[data-v-26717cb5]{background:#4ade80}.jada-mcp-dot.off[data-v-26717cb5]{background:#f87171}.jada-mcp-info[data-v-26717cb5]{flex:1}.jada-mcp-name[data-v-26717cb5]{font-size:14px;font-weight:600;color:#e8e8ef;text-transform:capitalize}.jada-mcp-tools[data-v-26717cb5]{font-size:12px;color:#555}.jada-mcp-status[data-v-26717cb5]{font-size:12px;font-weight:600}.jada-mcp-status.on[data-v-26717cb5]{color:#4ade80}.jada-mcp-status.off[data-v-26717cb5]{color:#f87171}.jada-mcp-empty[data-v-26717cb5]{padding:16px;text-align:center;color:#555;font-size:13px}.jada-mcp-total[data-v-26717cb5]{font-size:13px;color:#8b8b9e;font-weight:600}.jada-ws-setting-item[data-v-26717cb5]{display:flex;align-items:center;gap:10px;padding:10px 14px;background:#1a1a24;border-radius:8px;margin-bottom:4px}.jada-ws-dot[data-v-26717cb5]{width:10px;height:10px;border-radius:50%}.jada-ws-setting-name[data-v-26717cb5]{flex:1;font-size:14px;color:#e8e8ef}.jada-ws-badge[data-v-26717cb5]{padding:2px 6px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:9px;font-weight:700}.jada-ws-setting-count[data-v-26717cb5]{font-size:12px;color:#555}.jada-about-grid[data-v-26717cb5]{background:#1a1a24;border-radius:12px;overflow:hidden}.jada-about-row[data-v-26717cb5]{display:flex;padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.04)}.jada-about-row[data-v-26717cb5]:last-child{border-bottom:none}.jada-about-label[data-v-26717cb5]{flex:0 0 160px;font-size:13px;font-weight:600;color:#555}.jada-about-value[data-v-26717cb5]{font-size:13px;color:#e8e8ef}.jada-about-value.green[data-v-26717cb5]{color:#4ade80}.jada-about-value.red[data-v-26717cb5]{color:#f87171}.jada-profile[data-v-67e64c3b]{padding:28px;overflow-y:auto;height:100%;max-width:700px}.jada-profile-header[data-v-67e64c3b]{display:flex;align-items:center;gap:20px;margin-bottom:28px}.jada-profile-avatar[data-v-67e64c3b]{width:72px;height:72px;border-radius:16px;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:24px;font-weight:700;display:flex;align-items:center;justify-content:center}.jada-profile-info h1[data-v-67e64c3b]{font-size:24px;font-weight:700;color:#fff;margin:0 0 4px}.jada-profile-role[data-v-67e64c3b]{font-size:14px;color:#8b8b9e}.jada-profile-email[data-v-67e64c3b]{font-size:13px;color:#555;margin-top:2px}.jada-profile-stats[data-v-67e64c3b]{display:flex;gap:16px;margin-bottom:28px}.jada-profile-stat[data-v-67e64c3b]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 28px;text-align:center}.jada-profile-stat-value[data-v-67e64c3b]{font-size:28px;font-weight:700;color:#e94560}.jada-profile-stat-label[data-v-67e64c3b]{font-size:12px;color:#555;margin-top:4px}.jada-profile-section[data-v-67e64c3b]{margin-bottom:28px}.jada-profile-section h3[data-v-67e64c3b]{font-size:16px;font-weight:600;color:#e8e8ef;margin:0 0 12px}.jada-profile-ws-item[data-v-67e64c3b]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;background:#1a1a24;margin-bottom:4px}.jada-ws-dot[data-v-67e64c3b]{width:10px;height:10px;border-radius:50%}.jada-profile-ws-name[data-v-67e64c3b]{flex:1;font-size:13px;color:#e8e8ef}.jada-profile-ws-badge[data-v-67e64c3b]{padding:2px 6px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:9px;font-weight:700}.jada-profile-ws-role[data-v-67e64c3b]{font-size:12px;color:#555}.jada-profile-info-box[data-v-67e64c3b]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px}.jada-profile-info-box p[data-v-67e64c3b]{font-size:13px;color:#8b8b9e;margin:0 0 10px}.jada-profile-info-box ul[data-v-67e64c3b]{margin:0;padding-left:20px}.jada-profile-info-box li[data-v-67e64c3b]{font-size:13px;color:#8b8b9e;margin-bottom:4px}.jada-profile-users[data-v-67e64c3b]{display:flex;flex-direction:column;gap:4px}.jada-profile-user-item[data-v-67e64c3b]{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:8px;background:#1a1a24}.jada-profile-user-item.current[data-v-67e64c3b]{border:1px solid rgba(233,69,96,.2)}.jada-profile-user-avatar[data-v-67e64c3b]{width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}.jada-profile-user-name[data-v-67e64c3b]{font-size:14px;font-weight:600;color:#e8e8ef}.jada-profile-user-role[data-v-67e64c3b]{font-size:12px;color:#555}.jada-btn-secondary[data-v-67e64c3b]{padding:8px 18px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:13px;font-weight:600;cursor:pointer}.jada-btn-secondary[data-v-67e64c3b]:hover{border-color:#fff3;color:#e8e8ef}.jada-right-panel[data-v-0ec4cf5c]{width:300px;min-width:300px;background:#111119;border-left:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;overflow:hidden}.jada-rp-tabs[data-v-0ec4cf5c]{display:flex;border-bottom:1px solid rgba(255,255,255,.06)}.jada-rp-tab[data-v-0ec4cf5c]{flex:1;padding:10px;background:none;border:none;color:#555;font-size:12px;font-weight:600;cursor:pointer;transition:all .15s;border-bottom:2px solid transparent}.jada-rp-tab[data-v-0ec4cf5c]:hover{color:#8b8b9e}.jada-rp-tab.active[data-v-0ec4cf5c]{color:#e94560;border-bottom-color:#e94560}.jada-rp-content[data-v-0ec4cf5c]{flex:1;overflow-y:auto;padding:12px}.jada-rp-content h4[data-v-0ec4cf5c]{font-size:11px;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.5px;margin:12px 0 8px}.jada-rp-content h4[data-v-0ec4cf5c]:first-child{margin-top:0}.jada-rp-server[data-v-0ec4cf5c]{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px}.jada-rp-dot[data-v-0ec4cf5c]{width:6px;height:6px;border-radius:50%}.jada-rp-dot.on[data-v-0ec4cf5c]{background:#4ade80}.jada-rp-dot.off[data-v-0ec4cf5c]{background:#f87171}.jada-rp-server-name[data-v-0ec4cf5c]{flex:1;color:#e8e8ef;text-transform:capitalize}.jada-rp-server-tools[data-v-0ec4cf5c]{color:#555;font-size:12px}.jada-rp-tool-call[data-v-0ec4cf5c]{display:flex;align-items:flex-start;gap:8px;padding:6px 0}.jada-rp-tc-icon[data-v-0ec4cf5c]{font-size:12px}.jada-rp-tc-icon.running[data-v-0ec4cf5c]{animation:pulse-0ec4cf5c 1s infinite}.jada-rp-tc-icon.error[data-v-0ec4cf5c]{opacity:.7}@keyframes pulse-0ec4cf5c{0%,to{opacity:1}50%{opacity:.4}}.jada-rp-tc-name[data-v-0ec4cf5c]{font-size:12px;font-family:SF Mono,Fira Code,monospace;color:#4ade80}.jada-rp-tc-time[data-v-0ec4cf5c]{font-size:10px;color:#444}.jada-rp-empty[data-v-0ec4cf5c]{font-size:12px;color:#444;padding:8px 0}.jada-rp-context-item[data-v-0ec4cf5c]{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.04)}.jada-rp-context-label[data-v-0ec4cf5c]{font-size:12px;color:#555}.jada-rp-context-value[data-v-0ec4cf5c]{font-size:12px;color:#e8e8ef;font-weight:600}.jada-rp-context-value.green[data-v-0ec4cf5c]{color:#4ade80}.jada-rp-context-value.red[data-v-0ec4cf5c]{color:#f87171}.jada-app[data-v-8cc98c50]{display:flex;height:100%;min-height:calc(100vh - 50px);background:#0d0d14;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#e8e8ef;position:relative}.jada-sidebar[data-v-8cc98c50]{width:280px;min-width:280px;background:#111119;border-right:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;overflow-y:auto;z-index:100}.mobile .jada-sidebar[data-v-8cc98c50]{position:fixed;top:0;left:0;bottom:0;width:300px;z-index:1000;box-shadow:4px 0 24px #00000080}.jada-sidebar-header[data-v-8cc98c50]{padding:16px;border-bottom:1px solid rgba(255,255,255,.06);display:flex;align-items:center;justify-content:space-between}.jada-logo[data-v-8cc98c50]{display:flex;align-items:center;gap:10px}.jada-logo-svg[data-v-8cc98c50]{width:28px;height:28px}.jada-logo-text[data-v-8cc98c50]{font-size:17px;font-weight:700;color:#fff}.jada-new-chat-btn[data-v-8cc98c50]{padding:6px 14px;border-radius:8px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.jada-new-chat-btn[data-v-8cc98c50]:hover{box-shadow:0 2px 10px #e9456066}.jada-ws-selector[data-v-8cc98c50]{display:flex;align-items:center;gap:8px;padding:10px 16px;margin:8px 12px;border-radius:10px;background:#ffffff0a;cursor:pointer;transition:background .2s}.jada-ws-selector[data-v-8cc98c50]:hover{background:#ffffff14}.jada-ws-dot[data-v-8cc98c50]{width:10px;height:10px;border-radius:50%;flex-shrink:0}.jada-ws-name[data-v-8cc98c50]{flex:1;font-size:13px;font-weight:600;color:#fff}.jada-ws-pin[data-v-8cc98c50]{font-size:12px}.jada-ws-arrow[data-v-8cc98c50]{font-size:10px;color:#8b8b9e}.jada-ws-dropdown[data-v-8cc98c50]{margin:0 12px 8px;background:#1a1a24;border:1px solid rgba(255,255,255,.08);border-radius:10px;overflow:hidden}.jada-ws-dropdown-item[data-v-8cc98c50]{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:13px;color:#8b8b9e;cursor:pointer;transition:all .15s}.jada-ws-dropdown-item[data-v-8cc98c50]:hover{background:#ffffff0d;color:#e8e8ef}.jada-ws-dropdown-item.active[data-v-8cc98c50]{background:#e9456026;color:#e94560}.jada-ws-dropdown-item.root[data-v-8cc98c50]{border-left:2px solid #0082c9}.jada-ws-count[data-v-8cc98c50]{margin-left:auto;font-size:11px;color:#555}.jada-nav[data-v-8cc98c50]{padding:8px}.jada-nav-item[data-v-8cc98c50]{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;color:#8b8b9e;cursor:pointer;transition:all .15s;text-decoration:none;font-size:13px}.jada-nav-item[data-v-8cc98c50]:hover{color:#e8e8ef;background:#ffffff0a}.jada-nav-item.active[data-v-8cc98c50]{color:#fff;background:#e9456026}.jada-nav-icon[data-v-8cc98c50]{font-size:15px;width:20px;text-align:center}.jada-nav-label[data-v-8cc98c50]{font-weight:500}.jada-conv-list[data-v-8cc98c50]{flex:1;overflow-y:auto;padding:0 8px;border-top:1px solid rgba(255,255,255,.04);margin-top:4px}.jada-conv-section-label[data-v-8cc98c50]{font-size:11px;font-weight:600;color:#555;text-transform:uppercase;letter-spacing:.5px;padding:12px 12px 4px}.jada-conv-item[data-v-8cc98c50]{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer;transition:background .15s}.jada-conv-item[data-v-8cc98c50]:hover{background:#ffffff0a}.jada-conv-item.active[data-v-8cc98c50]{background:#e945601a}.jada-conv-icon[data-v-8cc98c50]{font-size:14px;margin-top:2px}.jada-conv-info[data-v-8cc98c50]{flex:1;min-width:0}.jada-conv-title[data-v-8cc98c50]{font-size:13px;font-weight:500;color:#e8e8ef;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jada-conv-preview[data-v-8cc98c50]{font-size:11px;color:#555;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.jada-sidebar-footer[data-v-8cc98c50]{padding:12px 16px;border-top:1px solid rgba(255,255,255,.06);margin-top:auto}.jada-user-info[data-v-8cc98c50]{display:flex;align-items:center;gap:10px;padding:6px 0;cursor:pointer}.jada-user-info:hover .jada-user-name[data-v-8cc98c50]{color:#e94560}.jada-user-avatar[data-v-8cc98c50]{width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.jada-user-avatar.small[data-v-8cc98c50]{width:28px;height:28px;font-size:11px}.jada-user-name[data-v-8cc98c50]{font-size:13px;font-weight:600;color:#e8e8ef;transition:color .15s}.jada-user-role[data-v-8cc98c50]{font-size:11px;color:#555}.jada-server-status[data-v-8cc98c50]{font-size:11px;color:#555;display:flex;align-items:center;gap:6px;margin-top:8px}.jada-status-dot[data-v-8cc98c50]{width:6px;height:6px;border-radius:50%}.jada-status-dot.online[data-v-8cc98c50]{background:#4ade80;box-shadow:0 0 6px #4ade80}.jada-status-dot.offline[data-v-8cc98c50]{background:#f87171}.jada-main[data-v-8cc98c50]{flex:1;overflow:hidden;display:flex;flex-direction:column;background:#16161f;min-width:0}.jada-mobile-header[data-v-8cc98c50]{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.06);background:#111119}.jada-hamburger[data-v-8cc98c50]{background:none;border:none;color:#e8e8ef;font-size:20px;cursor:pointer;padding:4px}.jada-mobile-title[data-v-8cc98c50]{flex:1;font-size:16px;font-weight:600}.jada-overlay[data-v-8cc98c50]{position:fixed;inset:0;background:#00000080;z-index:999} -/*$vite$:1*/`,document.head.appendChild(_o);function fn(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ee={},Ot=[],Ue=()=>{},Eo=()=>!1,ys=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),js=e=>e.startsWith("onUpdate:"),he=Object.assign,un=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Ei=Object.prototype.hasOwnProperty,X=(e,t)=>Ei.call(e,t),V=Array.isArray,At=e=>Wt(e)==="[object Map]",So=e=>Wt(e)==="[object Set]",Co=e=>Wt(e)==="[object Date]",B=e=>typeof e=="function",ce=e=>typeof e=="string",ze=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Ro=e=>(Z(e)||B(e))&&B(e.then)&&B(e.catch),To=Object.prototype.toString,Wt=e=>To.call(e),Si=e=>Wt(e).slice(8,-1),ko=e=>Wt(e)==="[object Object]",pn=e=>ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,qt=fn(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_s=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Ci=/-\w/g,ye=_s(e=>e.replace(Ci,t=>t.slice(1).toUpperCase())),Ri=/\B([A-Z])/g,bt=_s(e=>e.replace(Ri,"-$1").toLowerCase()),Es=_s(e=>e.charAt(0).toUpperCase()+e.slice(1)),hn=_s(e=>e?`on${Es(e)}`:""),ot=(e,t)=>!Object.is(e,t),Ss=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:s})},gn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ao;const Cs=()=>Ao||(Ao=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Le(e){if(V(e)){const t={};for(let s=0;s{if(s){const o=s.split(ki);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function H(e){let t="";if(ce(e))t=e;else if(V(e))for(let s=0;s!!(e&&e.__v_isRef===!0),T=e=>ce(e)?e:e==null?"":V(e)||Z(e)&&(e.toString===To||!B(e.toString))?No(e)?T(e.value):JSON.stringify(e,Po,2):String(e),Po=(e,t)=>No(t)?Po(e,t.value):At(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[o,n],a)=>(s[bn(o,a)+" =>"]=n,s),{})}:So(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>bn(s))}:ze(t)?bn(t):Z(t)&&!V(t)&&!ko(t)?String(t):t,bn=(e,t="")=>{var s;return ze(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let Ee;class Pi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ee,!t&&Ee&&(this.index=(Ee.scopes||(Ee.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Ee=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,o;for(s=0,o=this.effects.length;s0)return;if(Gt){let t=Gt;for(Gt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Kt;){let t=Kt;for(Kt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=s}}if(e)throw e}function Mo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Fo(e){let t,s=e.depsTail,o=s;for(;o;){const n=o.prevDep;o.version===-1?(o===s&&(s=n),jn(o),$i(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=n}e.deps=t,e.depsTail=s}function yn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Uo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Uo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Jt)||(e.globalVersion=Jt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!yn(e))))return;e.flags|=2;const t=e.dep,s=se,o=$e;se=e,$e=!0;try{Mo(e);const n=e.fn(e._value);(t.version===0||ot(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(n){throw t.version++,n}finally{se=s,$e=o,Fo(e),e.flags&=-3}}function jn(e,t=!1){const{dep:s,prevSub:o,nextSub:n}=e;if(o&&(o.nextSub=n,e.prevSub=void 0),n&&(n.prevSub=o,e.nextSub=void 0),s.subs===e&&(s.subs=o,!o&&s.computed)){s.computed.flags&=-5;for(let a=s.computed.deps;a;a=a.nextDep)jn(a,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function $i(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let $e=!0;const zo=[];function Ve(){zo.push($e),$e=!1}function Be(){const e=zo.pop();$e=e===void 0?!0:e}function Vo(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=se;se=void 0;try{t()}finally{se=s}}}let Jt=0;class Di{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bo{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!se||!$e||se===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==se)s=this.activeLink=new Di(se,this),se.deps?(s.prevDep=se.depsTail,se.depsTail.nextDep=s,se.depsTail=s):se.deps=se.depsTail=s,Ho(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const o=s.nextDep;o.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=o),s.prevDep=se.depsTail,s.nextDep=void 0,se.depsTail.nextDep=s,se.depsTail=s,se.deps===s&&(se.deps=o)}return s}trigger(t){this.version++,Jt++,this.notify(t)}notify(t){xn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{wn()}}}function Ho(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)Ho(o)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const _n=new WeakMap,jt=Symbol(""),En=Symbol(""),Xt=Symbol("");function ge(e,t,s){if($e&&se){let o=_n.get(e);o||_n.set(e,o=new Map);let n=o.get(s);n||(o.set(s,n=new Bo),n.map=o,n.key=s),n.track()}}function rt(e,t,s,o,n,a){const r=_n.get(e);if(!r){Jt++;return}const i=c=>{c&&c.trigger()};if(xn(),t==="clear")r.forEach(i);else{const c=V(e),f=c&&pn(s);if(c&&s==="length"){const l=Number(o);r.forEach((p,v)=>{(v==="length"||v===Xt||!ze(v)&&v>=l)&&i(p)})}else switch((s!==void 0||r.has(void 0))&&i(r.get(s)),f&&i(r.get(Xt)),t){case"add":c?f&&i(r.get("length")):(i(r.get(jt)),At(e)&&i(r.get(En)));break;case"delete":c||(i(r.get(jt)),At(e)&&i(r.get(En)));break;case"set":At(e)&&i(r.get(jt));break}}wn()}function It(e){const t=Y(e);return t===e?t:(ge(t,"iterate",Xt),De(e)?t:t.map(it))}function Rs(e){return ge(e=Y(e),"iterate",Xt),e}function He(e,t){return vt(e)?Nt(_t(e)?it(t):t):it(t)}const Mi={__proto__:null,[Symbol.iterator](){return Sn(this,Symbol.iterator,e=>He(this,e))},concat(...e){return It(this).concat(...e.map(t=>V(t)?It(t):t))},entries(){return Sn(this,"entries",e=>(e[1]=He(this,e[1]),e))},every(e,t){return at(this,"every",e,t,void 0,arguments)},filter(e,t){return at(this,"filter",e,t,s=>s.map(o=>He(this,o)),arguments)},find(e,t){return at(this,"find",e,t,s=>He(this,s),arguments)},findIndex(e,t){return at(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return at(this,"findLast",e,t,s=>He(this,s),arguments)},findLastIndex(e,t){return at(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return at(this,"forEach",e,t,void 0,arguments)},includes(...e){return Cn(this,"includes",e)},indexOf(...e){return Cn(this,"indexOf",e)},join(e){return It(this).join(e)},lastIndexOf(...e){return Cn(this,"lastIndexOf",e)},map(e,t){return at(this,"map",e,t,void 0,arguments)},pop(){return Yt(this,"pop")},push(...e){return Yt(this,"push",e)},reduce(e,...t){return Wo(this,"reduce",e,t)},reduceRight(e,...t){return Wo(this,"reduceRight",e,t)},shift(){return Yt(this,"shift")},some(e,t){return at(this,"some",e,t,void 0,arguments)},splice(...e){return Yt(this,"splice",e)},toReversed(){return It(this).toReversed()},toSorted(e){return It(this).toSorted(e)},toSpliced(...e){return It(this).toSpliced(...e)},unshift(...e){return Yt(this,"unshift",e)},values(){return Sn(this,"values",e=>He(this,e))}};function Sn(e,t,s){const o=Rs(e),n=o[t]();return o!==e&&!De(e)&&(n._next=n.next,n.next=()=>{const a=n._next();return a.done||(a.value=s(a.value)),a}),n}const Fi=Array.prototype;function at(e,t,s,o,n,a){const r=Rs(e),i=r!==e&&!De(e),c=r[t];if(c!==Fi[t]){const p=c.apply(e,a);return i?it(p):p}let f=s;r!==e&&(i?f=function(p,v){return s.call(this,He(e,p),v,e)}:s.length>2&&(f=function(p,v){return s.call(this,p,v,e)}));const l=c.call(r,f,o);return i&&n?n(l):l}function Wo(e,t,s,o){const n=Rs(e),a=n!==e&&!De(e);let r=s,i=!1;n!==e&&(a?(i=o.length===0,r=function(f,l,p){return i&&(i=!1,f=He(e,f)),s.call(this,f,He(e,l),p,e)}):s.length>3&&(r=function(f,l,p){return s.call(this,f,l,p,e)}));const c=n[t](r,...o);return i?He(e,c):c}function Cn(e,t,s){const o=Y(e);ge(o,"iterate",Xt);const n=o[t](...s);return(n===-1||n===!1)&&kn(s[0])?(s[0]=Y(s[0]),o[t](...s)):n}function Yt(e,t,s=[]){Ve(),xn();const o=Y(e)[t].apply(e,s);return wn(),Be(),o}const Ui=fn("__proto__,__v_isRef,__isVue"),qo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ze));function zi(e){ze(e)||(e=String(e));const t=Y(this);return ge(t,"has",e),t.hasOwnProperty(e)}class Ko{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,o){if(s==="__v_skip")return t.__v_skip;const n=this._isReadonly,a=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return a;if(s==="__v_raw")return o===(n?a?Zo:Qo:a?Yo:Xo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const r=V(t);if(!n){let c;if(r&&(c=Mi[s]))return c;if(s==="hasOwnProperty")return zi}const i=Reflect.get(t,s,me(t)?t:o);if((ze(s)?qo.has(s):Ui(s))||(n||ge(t,"get",s),a))return i;if(me(i)){const c=r&&pn(s)?i:i.value;return n&&Z(c)?Tn(c):c}return Z(i)?n?Tn(i):As(i):i}}class Go extends Ko{constructor(t=!1){super(!1,t)}set(t,s,o,n){let a=t[s];const r=V(t)&&pn(s);if(!this._isShallow){const f=vt(a);if(!De(o)&&!vt(o)&&(a=Y(a),o=Y(o)),!r&&me(a)&&!me(o))return f||(a.value=o),!0}const i=r?Number(s)e,Ts=e=>Reflect.getPrototypeOf(e);function qi(e,t,s){return function(...o){const n=this.__v_raw,a=Y(n),r=At(a),i=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,f=n[e](...o),l=s?Rn:t?Nt:it;return!t&&ge(a,"iterate",c?En:jt),he(Object.create(f),{next(){const{value:p,done:v}=f.next();return v?{value:p,done:v}:{value:i?[l(p[0]),l(p[1])]:l(p),done:v}}})}}function ks(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ki(e,t){const s={get(n){const a=this.__v_raw,r=Y(a),i=Y(n);e||(ot(n,i)&&ge(r,"get",n),ge(r,"get",i));const{has:c}=Ts(r),f=t?Rn:e?Nt:it;if(c.call(r,n))return f(a.get(n));if(c.call(r,i))return f(a.get(i));a!==r&&a.get(n)},get size(){const n=this.__v_raw;return!e&&ge(Y(n),"iterate",jt),n.size},has(n){const a=this.__v_raw,r=Y(a),i=Y(n);return e||(ot(n,i)&&ge(r,"has",n),ge(r,"has",i)),n===i?a.has(n):a.has(n)||a.has(i)},forEach(n,a){const r=this,i=r.__v_raw,c=Y(i),f=t?Rn:e?Nt:it;return!e&&ge(c,"iterate",jt),i.forEach((l,p)=>n.call(a,f(l),f(p),r))}};return he(s,e?{add:ks("add"),set:ks("set"),delete:ks("delete"),clear:ks("clear")}:{add(n){const a=Y(this),r=Ts(a),i=Y(n),c=!t&&!De(n)&&!vt(n)?i:n;return r.has.call(a,c)||ot(n,c)&&r.has.call(a,n)||ot(i,c)&&r.has.call(a,i)||(a.add(c),rt(a,"add",c,c)),this},set(n,a){!t&&!De(a)&&!vt(a)&&(a=Y(a));const r=Y(this),{has:i,get:c}=Ts(r);let f=i.call(r,n);f||(n=Y(n),f=i.call(r,n));const l=c.call(r,n);return r.set(n,a),f?ot(a,l)&&rt(r,"set",n,a):rt(r,"add",n,a),this},delete(n){const a=Y(this),{has:r,get:i}=Ts(a);let c=r.call(a,n);c||(n=Y(n),c=r.call(a,n)),i&&i.call(a,n);const f=a.delete(n);return c&&rt(a,"delete",n,void 0),f},clear(){const n=Y(this),a=n.size!==0,r=n.clear();return a&&rt(n,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=qi(n,e,t)}),s}function Os(e,t){const s=Ki(e,t);return(o,n,a)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?o:Reflect.get(X(s,n)&&n in o?s:o,n,a)}const Gi={get:Os(!1,!1)},Ji={get:Os(!1,!0)},Xi={get:Os(!0,!1)},Yi={get:Os(!0,!0)},Xo=new WeakMap,Yo=new WeakMap,Qo=new WeakMap,Zo=new WeakMap;function Qi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Zi(e){return e.__v_skip||!Object.isExtensible(e)?0:Qi(Si(e))}function As(e){return vt(e)?e:Is(e,!1,Vi,Gi,Xo)}function el(e){return Is(e,!1,Hi,Ji,Yo)}function Tn(e){return Is(e,!0,Bi,Xi,Qo)}function gm(e){return Is(e,!0,Wi,Yi,Zo)}function Is(e,t,s,o,n){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=Zi(e);if(a===0)return e;const r=n.get(e);if(r)return r;const i=new Proxy(e,a===2?o:s);return n.set(e,i),i}function _t(e){return vt(e)?_t(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function De(e){return!!(e&&e.__v_isShallow)}function kn(e){return e?!!e.__v_raw:!1}function Y(e){const t=e&&e.__v_raw;return t?Y(t):e}function tl(e){return!X(e,"__v_skip")&&Object.isExtensible(e)&&Oo(e,"__v_skip",!0),e}const it=e=>Z(e)?As(e):e,Nt=e=>Z(e)?Tn(e):e;function me(e){return e?e.__v_isRef===!0:!1}function sl(e){return me(e)?e.value:e}const nl={get:(e,t,s)=>t==="__v_raw"?e:sl(Reflect.get(e,t,s)),set:(e,t,s,o)=>{const n=e[t];return me(n)&&!me(s)?(n.value=s,!0):Reflect.set(e,t,s,o)}};function er(e){return _t(e)?e:new Proxy(e,nl)}class ol{constructor(t,s,o){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Bo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Jt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&se!==this)return Do(this,!0),!0}get value(){const t=this.dep.track();return Uo(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function rl(e,t,s=!1){let o,n;return B(e)?o=e:(o=e.get,n=e.set),new ol(o,n,s)}const Ns={},Ps=new WeakMap;let Et;function al(e,t=!1,s=Et){if(s){let o=Ps.get(s);o||Ps.set(s,o=[]),o.push(e)}}function il(e,t,s=ee){const{immediate:o,deep:n,once:a,scheduler:r,augmentJob:i,call:c}=s,f=I=>n?I:De(I)||n===!1||n===0?lt(I,1):lt(I);let l,p,v,R,x=!1,g=!1;if(me(e)?(p=()=>e.value,x=De(e)):_t(e)?(p=()=>f(e),x=!0):V(e)?(g=!0,x=e.some(I=>_t(I)||De(I)),p=()=>e.map(I=>{if(me(I))return I.value;if(_t(I))return f(I);if(B(I))return c?c(I,2):I()})):B(e)?t?p=c?()=>c(e,2):e:p=()=>{if(v){Ve();try{v()}finally{Be()}}const I=Et;Et=l;try{return c?c(e,3,[R]):e(R)}finally{Et=I}}:p=Ue,t&&n){const I=p,J=n===!0?1/0:n;p=()=>lt(I(),J)}const y=Li(),L=()=>{l.stop(),y&&y.active&&un(y.effects,l)};if(a&&t){const I=t;t=(...J)=>{I(...J),L()}}let $=g?new Array(e.length).fill(Ns):Ns;const M=I=>{if(!(!(l.flags&1)||!l.dirty&&!I))if(t){const J=l.run();if(n||x||(g?J.some((xe,le)=>ot(xe,$[le])):ot(J,$))){v&&v();const xe=Et;Et=l;try{const le=[J,$===Ns?void 0:g&&$[0]===Ns?[]:$,R];$=J,c?c(t,3,le):t(...le)}finally{Et=xe}}}else l.run()};return i&&i(M),l=new Lo(p),l.scheduler=r?()=>r(M,!1):M,R=I=>al(I,!1,l),v=l.onStop=()=>{const I=Ps.get(l);if(I){if(c)c(I,4);else for(const J of I)J();Ps.delete(l)}},t?o?M(!0):$=l.run():r?r(M.bind(null,!0),!0):l.run(),L.pause=l.pause.bind(l),L.resume=l.resume.bind(l),L.stop=L,L}function lt(e,t=1/0,s){if(t<=0||!Z(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,me(e))lt(e.value,t,s);else if(V(e))for(let o=0;o{lt(o,t,s)});else if(ko(e)){for(const o in e)lt(e[o],t,s);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&<(e[o],t,s)}return e}const Qt=[];let On=!1;function mm(e,...t){if(On)return;On=!0,Ve();const s=Qt.length?Qt[Qt.length-1].component:null,o=s&&s.appContext.config.warnHandler,n=ll();if(o)Pt(o,s,11,[e+t.map(a=>{var r,i;return(i=(r=a.toString)==null?void 0:r.call(a))!=null?i:JSON.stringify(a)}).join(""),s&&s.proxy,n.map(({vnode:a})=>`at <${Yr(s,a.type)}>`).join(` +(function(){"use strict";var _o=document.createElement("style");_o.textContent=`.jada-chat[data-v-05da0b92]{display:flex;flex-direction:column;height:100%;min-height:0}.jada-chat-empty[data-v-05da0b92]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px}.jada-chat-empty-icon[data-v-05da0b92]{margin-bottom:20px;opacity:.9;animation:float-05da0b92 3s ease-in-out infinite}@keyframes float-05da0b92{0%,to{transform:translateY(0)}50%{transform:translateY(-8px)}}.jada-chat-empty h2[data-v-05da0b92]{font-size:24px;font-weight:700;color:#fff;margin:0 0 8px}.jada-chat-empty p[data-v-05da0b92]{font-size:14px;color:#8b8b9e;margin:0 0 24px}.jada-suggestions[data-v-05da0b92]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:600px}.jada-chip[data-v-05da0b92]{padding:8px 16px;border-radius:20px;border:1px solid rgba(255,255,255,.1);background:#ffffff0a;color:#e8e8ef;font-size:13px;cursor:pointer;transition:all .2s}.jada-chip[data-v-05da0b92]:hover{border-color:#e94560;background:#e945601a;color:#e94560}.jada-chat-messages[data-v-05da0b92]{flex:1;overflow-y:auto;padding:20px 24px}.jada-msg[data-v-05da0b92]{display:flex;gap:12px;margin-bottom:20px;max-width:800px}.jada-msg.user[data-v-05da0b92]{margin-left:auto;flex-direction:row-reverse}.jada-msg-avatar[data-v-05da0b92]{width:32px;height:32px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:700;flex-shrink:0;color:#fff}.jada-msg.user .jada-msg-avatar[data-v-05da0b92]{background:linear-gradient(135deg,#3b82f6,#2563eb)}.jada-msg.assistant .jada-msg-avatar[data-v-05da0b92]{background:linear-gradient(135deg,#e94560,#c23152)}.jada-msg-body[data-v-05da0b92]{max-width:650px;min-width:0}.jada-msg.user .jada-msg-body[data-v-05da0b92]{text-align:right}.jada-msg-text[data-v-05da0b92]{background:#1e1e2a;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:10px 14px;font-size:14px;line-height:1.6;color:#e8e8ef;display:inline-block;text-align:left}.jada-msg.user .jada-msg-text[data-v-05da0b92]{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;border:none}.jada-msg-text code[data-v-05da0b92]{background:#0003;padding:1px 5px;border-radius:4px;font-size:13px;font-family:SF Mono,Fira Code,monospace}.jada-msg-meta[data-v-05da0b92]{font-size:11px;color:#555;margin-top:4px;padding:0 4px}.jada-tool-calls[data-v-05da0b92]{margin-bottom:8px}.jada-tool-call[data-v-05da0b92]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:8px;margin-bottom:6px;overflow:hidden}.jada-tool-header[data-v-05da0b92]{display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:12px;font-weight:600;color:#e94560}.jada-tool-icon[data-v-05da0b92]{font-size:13px}.jada-tool-icon.spinning[data-v-05da0b92]{animation:spin-05da0b92 1s linear infinite}@keyframes spin-05da0b92{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.jada-tool-name[data-v-05da0b92]{font-family:SF Mono,Fira Code,monospace;font-size:12px}.jada-typing[data-v-05da0b92]{display:flex;gap:4px;padding:8px 14px;background:#1e1e2a;border-radius:12px;display:inline-flex}.jada-typing span[data-v-05da0b92]{width:7px;height:7px;border-radius:50%;background:#e94560;animation:bounce-05da0b92 1.4s ease-in-out infinite}.jada-typing span[data-v-05da0b92]:nth-child(2){animation-delay:.2s}.jada-typing span[data-v-05da0b92]:nth-child(3){animation-delay:.4s}@keyframes bounce-05da0b92{0%,80%,to{transform:scale(.6);opacity:.4}40%{transform:scale(1);opacity:1}}.jada-chat-input-area[data-v-05da0b92]{padding:12px 24px 16px;border-top:1px solid rgba(255,255,255,.06)}.jada-chat-input-row[data-v-05da0b92]{display:flex;align-items:flex-end;gap:8px;background:#1e1e2a;border:1px solid rgba(255,255,255,.08);border-radius:14px;padding:8px 8px 8px 16px;max-width:800px;transition:border-color .2s}.jada-chat-input-row[data-v-05da0b92]:focus-within{border-color:#e9456080}.jada-chat-input[data-v-05da0b92]{flex:1;border:none;background:transparent;color:#e8e8ef;font-size:14px;line-height:1.5;resize:none;outline:none;min-height:22px;max-height:120px;padding:2px 0;font-family:inherit}.jada-chat-input[data-v-05da0b92]::placeholder{color:#555}.jada-send-btn[data-v-05da0b92]{width:34px;height:34px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.jada-send-btn[data-v-05da0b92]:hover:not(:disabled){box-shadow:0 2px 10px #e9456066}.jada-send-btn[data-v-05da0b92]:disabled{opacity:.3;cursor:not-allowed}.jada-input-footer[data-v-05da0b92]{display:flex;gap:6px;padding:6px 4px 0;font-size:11px;color:#444}.jada-workspaces[data-v-4921a983]{padding:28px;overflow-y:auto;height:100%}.jada-ws-header[data-v-4921a983]{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.jada-ws-header h1[data-v-4921a983]{font-size:24px;font-weight:700;color:#fff;margin:0}.jada-ws-grid[data-v-4921a983]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.jada-ws-card[data-v-4921a983]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:14px;padding:20px;cursor:pointer;transition:all .2s}.jada-ws-card[data-v-4921a983]:hover{transform:translateY(-2px);box-shadow:0 4px 20px #0000004d;border-color:#ffffff1f}.jada-ws-card.root[data-v-4921a983]{border-color:#0082c966;background:linear-gradient(135deg,rgba(0,130,201,.08),transparent)}.jada-ws-card-header[data-v-4921a983]{display:flex;align-items:center;gap:10px;margin-bottom:10px}.jada-ws-card-dot[data-v-4921a983]{width:12px;height:12px;border-radius:50%}.jada-ws-card-name[data-v-4921a983]{font-size:16px;font-weight:600;color:#fff}.jada-ws-card-badge[data-v-4921a983]{padding:2px 8px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:10px;font-weight:700;letter-spacing:.5px}.jada-ws-card-desc[data-v-4921a983]{font-size:13px;color:#8b8b9e;margin:0 0 12px;line-height:1.5}.jada-ws-card-tags[data-v-4921a983]{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}.jada-ws-tag[data-v-4921a983]{padding:2px 8px;border-radius:12px;background:#ffffff0f;font-size:11px;color:#8b8b9e}.jada-ws-card-stats[data-v-4921a983]{font-size:12px;color:#555;display:flex;gap:6px}.jada-btn-primary[data-v-4921a983]{padding:8px 18px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}.jada-btn-primary[data-v-4921a983]:hover:not(:disabled){box-shadow:0 2px 12px #e9456066}.jada-btn-primary[data-v-4921a983]:disabled{opacity:.4;cursor:not-allowed}.jada-btn-secondary[data-v-4921a983]{padding:8px 18px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:13px;font-weight:600;cursor:pointer}.jada-modal-overlay[data-v-4921a983]{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:2000}.jada-modal[data-v-4921a983]{background:#1a1a24;border:1px solid rgba(255,255,255,.1);border-radius:16px;padding:28px;width:420px;max-width:90vw}.jada-modal h3[data-v-4921a983]{font-size:18px;font-weight:700;color:#fff;margin:0 0 20px}.jada-form-group[data-v-4921a983]{margin-bottom:16px}.jada-form-group label[data-v-4921a983]{display:block;font-size:12px;font-weight:600;color:#8b8b9e;margin-bottom:6px}.jada-form-group input[data-v-4921a983],.jada-form-group textarea[data-v-4921a983]{width:100%;padding:10px 14px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#111119;color:#e8e8ef;font-size:14px;box-sizing:border-box;font-family:inherit;resize:vertical}.jada-form-group input[data-v-4921a983]:focus,.jada-form-group textarea[data-v-4921a983]:focus{outline:none;border-color:#e94560}.jada-color-options[data-v-4921a983]{display:flex;gap:8px}.jada-color-btn[data-v-4921a983]{width:28px;height:28px;border-radius:8px;border:2px solid transparent;cursor:pointer;transition:all .15s}.jada-color-btn.selected[data-v-4921a983]{border-color:#fff;transform:scale(1.15)}.jada-modal-actions[data-v-4921a983]{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.jada-ws-detail[data-v-fbdfa994]{padding:28px;overflow-y:auto;height:100%}.jada-back-btn[data-v-fbdfa994]{background:none;border:none;color:#8b8b9e;font-size:13px;cursor:pointer;padding:0;margin-bottom:16px;display:block}.jada-back-btn[data-v-fbdfa994]:hover{color:#e94560}.jada-ws-detail-title[data-v-fbdfa994]{display:flex;align-items:center;gap:12px;margin-bottom:8px}.jada-ws-dot[data-v-fbdfa994]{width:14px;height:14px;border-radius:50%}.jada-ws-detail-title h1[data-v-fbdfa994]{font-size:24px;font-weight:700;color:#fff;margin:0}.jada-ws-badge[data-v-fbdfa994]{padding:2px 8px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:10px;font-weight:700}.jada-ws-detail-desc[data-v-fbdfa994]{font-size:14px;color:#8b8b9e;margin:0 0 24px}.jada-ws-detail-stats[data-v-fbdfa994]{display:flex;gap:16px;margin-bottom:24px}.jada-stat-card[data-v-fbdfa994]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 24px;text-align:center}.jada-stat-value[data-v-fbdfa994]{font-size:24px;font-weight:700;color:#e94560}.jada-stat-label[data-v-fbdfa994]{font-size:12px;color:#555;margin-top:4px}.jada-ws-detail-actions[data-v-fbdfa994]{display:flex;gap:12px;margin-bottom:28px}.jada-btn-primary[data-v-fbdfa994]{padding:10px 20px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:600;cursor:pointer}.jada-btn-secondary[data-v-fbdfa994]{padding:10px 20px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:13px;font-weight:600;cursor:pointer}h3[data-v-fbdfa994]{font-size:16px;font-weight:600;color:#e8e8ef;margin:0 0 12px}.jada-ws-conv-list[data-v-fbdfa994]{display:flex;flex-direction:column;gap:4px}.jada-ws-conv-item[data-v-fbdfa994]{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:10px;background:#1a1a24;cursor:pointer;transition:background .15s}.jada-ws-conv-item[data-v-fbdfa994]:hover{background:#e945601a}.jada-conv-icon[data-v-fbdfa994]{font-size:16px}.jada-conv-title[data-v-fbdfa994]{font-size:13px;font-weight:500;color:#e8e8ef}.jada-conv-time[data-v-fbdfa994]{font-size:11px;color:#555}.jada-ws-empty[data-v-fbdfa994]{font-size:13px;color:#555;padding:16px}.jada-doc-editor[data-v-fa97b8c8]{display:flex;height:100%;min-height:0}.jada-doc-sidebar[data-v-fa97b8c8]{width:240px;min-width:240px;background:#111119;border-right:1px solid rgba(255,255,255,.06);padding:16px 12px;overflow-y:auto}.jada-doc-sidebar h4[data-v-fa97b8c8]{font-size:14px;font-weight:700;color:#fff;margin:0 0 12px}.jada-doc-section-label[data-v-fa97b8c8]{font-size:10px;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.5px;padding:8px 8px 4px}.jada-doc-item[data-v-fa97b8c8]{display:flex;align-items:center;gap:8px;padding:8px;border-radius:8px;cursor:pointer;transition:background .15s}.jada-doc-item[data-v-fa97b8c8]:hover{background:#ffffff0a}.jada-doc-item.active[data-v-fa97b8c8]{background:#e945601f}.jada-doc-icon[data-v-fa97b8c8]{font-size:14px}.jada-doc-item-name[data-v-fa97b8c8]{font-size:13px;color:#e8e8ef;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jada-doc-item-meta[data-v-fa97b8c8]{font-size:10px;color:#444}.jada-doc-tree-hint[data-v-fa97b8c8]{font-size:11px;color:#444;padding:8px;line-height:1.5}.jada-doc-center[data-v-fa97b8c8]{flex:1;display:flex;flex-direction:column;min-width:0}.jada-doc-toolbar[data-v-fa97b8c8]{display:flex;align-items:center;justify-content:space-between;padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.06);background:#16161f}.jada-doc-filename[data-v-fa97b8c8]{font-size:14px;font-weight:600;color:#e8e8ef}.jada-doc-toolbar-actions[data-v-fa97b8c8]{display:flex;gap:6px}.jada-doc-tb-btn[data-v-fa97b8c8]{background:none;border:none;color:#8b8b9e;font-size:16px;cursor:pointer;padding:4px 8px;border-radius:6px}.jada-doc-tb-btn[data-v-fa97b8c8]:hover{background:#ffffff0f}.jada-doc-content[data-v-fa97b8c8]{flex:1;overflow-y:auto;padding:16px}.jada-doc-textarea[data-v-fa97b8c8]{width:100%;min-height:300px;background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:16px;color:#e8e8ef;font-size:14px;line-height:1.8;font-family:Georgia,Times New Roman,serif;resize:vertical;box-sizing:border-box}.jada-doc-textarea[data-v-fa97b8c8]:focus{outline:none;border-color:#e945604d}.jada-doc-textarea[data-v-fa97b8c8]::placeholder{color:#444}.jada-doc-suggestions[data-v-fa97b8c8]{margin-top:16px}.jada-doc-suggestion[data-v-fa97b8c8]{background:#e9456014;border:1px solid rgba(233,69,96,.2);border-radius:10px;padding:12px;margin-bottom:10px}.jada-doc-suggestion-header[data-v-fa97b8c8]{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;color:#e94560;margin-bottom:8px}.jada-doc-suggestion-text[data-v-fa97b8c8]{font-size:13px;color:#e8e8ef;line-height:1.6;margin-bottom:10px;max-height:120px;overflow-y:auto}.jada-doc-suggestion-actions[data-v-fa97b8c8]{display:flex;gap:8px}.jada-doc-apply-btn[data-v-fa97b8c8]{padding:4px 12px;border-radius:6px;border:none;background:#e94560;color:#fff;font-size:12px;font-weight:600;cursor:pointer}.jada-doc-dismiss-btn[data-v-fa97b8c8]{padding:4px 12px;border-radius:6px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:12px;cursor:pointer}.jada-doc-ai-panel[data-v-fa97b8c8]{width:280px;min-width:280px;background:#111119;border-left:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;padding:16px 12px}.jada-doc-ai-panel h4[data-v-fa97b8c8]{font-size:14px;font-weight:700;color:#fff;margin:0 0 6px}.jada-doc-ai-hint[data-v-fa97b8c8]{font-size:12px;color:#555;margin:0 0 12px}.jada-doc-quick-actions[data-v-fa97b8c8]{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.jada-doc-action-btn[data-v-fa97b8c8]{padding:5px 10px;border-radius:8px;border:1px solid rgba(255,255,255,.08);background:#ffffff08;color:#8b8b9e;font-size:11px;cursor:pointer;transition:all .15s}.jada-doc-action-btn[data-v-fa97b8c8]:hover{border-color:#e94560;color:#e94560}.jada-doc-ai-messages[data-v-fa97b8c8]{flex:1;overflow-y:auto;margin-bottom:12px}.jada-doc-ai-msg[data-v-fa97b8c8]{padding:8px 10px;border-radius:8px;margin-bottom:6px;font-size:13px;line-height:1.5}.jada-doc-ai-msg.user[data-v-fa97b8c8]{background:#3b82f626;color:#93c5fd}.jada-doc-ai-msg.assistant[data-v-fa97b8c8]{background:#1a1a24;color:#e8e8ef}.jada-doc-ai-input-row[data-v-fa97b8c8]{display:flex;gap:6px}.jada-doc-ai-input[data-v-fa97b8c8]{flex:1;padding:8px 12px;border:1px solid rgba(255,255,255,.08);border-radius:8px;background:#1a1a24;color:#e8e8ef;font-size:13px}.jada-doc-ai-input[data-v-fa97b8c8]:focus{outline:none;border-color:#e94560}.jada-doc-ai-input[data-v-fa97b8c8]::placeholder{color:#444}.jada-doc-ai-send[data-v-fa97b8c8]{width:34px;height:34px;border-radius:8px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;cursor:pointer;font-size:14px;display:flex;align-items:center;justify-content:center}.jada-doc-ai-send[data-v-fa97b8c8]:disabled{opacity:.3;cursor:not-allowed}.jada-tools[data-v-55629294]{padding:28px;overflow-y:auto;height:100%}.jada-tools-header[data-v-55629294]{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px}.jada-tools-header h1[data-v-55629294]{font-size:24px;font-weight:700;color:#fff;margin:0}.jada-tools-input[data-v-55629294]{padding:8px 14px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#1a1a24;color:#e8e8ef;font-size:13px;width:280px}.jada-tools-input[data-v-55629294]:focus{outline:none;border-color:#e94560}.jada-tools-input[data-v-55629294]::placeholder{color:#444}.jada-tools-filters[data-v-55629294]{display:flex;gap:8px;margin-bottom:20px;flex-wrap:wrap}.jada-filter-btn[data-v-55629294]{padding:6px 14px;border-radius:20px;border:1px solid rgba(255,255,255,.08);background:transparent;color:#8b8b9e;font-size:12px;font-weight:600;cursor:pointer;transition:all .15s;text-transform:capitalize}.jada-filter-btn[data-v-55629294]:hover{border-color:#fff3;color:#e8e8ef}.jada-filter-btn.active[data-v-55629294]{background:#e9456026;border-color:#e94560;color:#e94560}.jada-tools-grid[data-v-55629294]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.jada-tool-card[data-v-55629294]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:10px;padding:14px;transition:all .15s}.jada-tool-card[data-v-55629294]:hover{border-color:#ffffff1f}.jada-tool-card-header[data-v-55629294]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.jada-tool-card-icon[data-v-55629294]{font-size:14px}.jada-tool-card-name[data-v-55629294]{font-size:13px;font-weight:600;color:#e8e8ef;font-family:SF Mono,Fira Code,monospace}.jada-tool-card-desc[data-v-55629294]{font-size:12px;color:#555;margin:0 0 8px;line-height:1.4}.jada-tool-card-server[data-v-55629294]{display:flex;align-items:center;gap:6px;font-size:11px;color:#8b8b9e;text-transform:capitalize}.jada-tool-server-dot[data-v-55629294]{width:6px;height:6px;border-radius:50%}.jada-tools-empty[data-v-55629294]{text-align:center;padding:40px;color:#555;font-size:14px}.jada-search[data-v-48c69005]{padding:28px;overflow-y:auto;height:100%;max-width:700px}.jada-search-header h1[data-v-48c69005]{font-size:24px;font-weight:700;color:#fff;margin:0 0 20px}.jada-search-bar[data-v-48c69005]{display:flex;align-items:center;gap:10px;background:#1a1a24;border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:12px 16px;margin-bottom:24px}.jada-search-bar[data-v-48c69005]:focus-within{border-color:#e94560}.jada-search-icon[data-v-48c69005]{font-size:16px;color:#555}.jada-search-input[data-v-48c69005]{flex:1;background:transparent;border:none;color:#e8e8ef;font-size:15px;outline:none}.jada-search-input[data-v-48c69005]::placeholder{color:#444}.jada-search-result-count[data-v-48c69005]{font-size:12px;color:#555;margin-bottom:12px}.jada-search-result[data-v-48c69005]{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border-radius:10px;cursor:pointer;transition:background .15s;margin-bottom:4px}.jada-search-result[data-v-48c69005]:hover{background:#ffffff0a}.jada-search-type[data-v-48c69005]{padding:2px 8px;border-radius:4px;font-size:10px;font-weight:700;text-transform:uppercase;flex-shrink:0;margin-top:2px}.jada-search-type.chat[data-v-48c69005]{background:#e9456026;color:#e94560}.jada-search-type.tool[data-v-48c69005]{background:#4ade8026;color:#4ade80}.jada-search-type.workspace[data-v-48c69005]{background:#8b5cf626;color:#8b5cf6}.jada-search-type.document[data-v-48c69005]{background:#3b82f626;color:#3b82f6}.jada-search-result-title[data-v-48c69005]{font-size:14px;font-weight:500;color:#e8e8ef;margin-bottom:2px}.jada-search-result-preview[data-v-48c69005]{font-size:12px;color:#555}.jada-search-empty[data-v-48c69005]{text-align:center;padding:32px;color:#555}.jada-search-empty-state[data-v-48c69005]{text-align:center;padding:40px 0;color:#555}.jada-search-recent[data-v-48c69005]{margin-top:24px;text-align:left}.jada-search-recent-label[data-v-48c69005]{font-size:11px;font-weight:700;color:#444;text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px}.jada-search-recent-item[data-v-48c69005]{padding:8px 12px;border-radius:8px;font-size:13px;color:#8b8b9e;cursor:pointer;transition:background .15s}.jada-search-recent-item[data-v-48c69005]:hover{background:#ffffff0a;color:#e8e8ef}.jada-settings[data-v-26717cb5]{padding:28px;overflow-y:auto;height:100%}.jada-settings h1[data-v-26717cb5]{font-size:24px;font-weight:700;color:#fff;margin:0 0 24px}.jada-settings-grid[data-v-26717cb5]{display:flex;gap:24px}.jada-settings-nav[data-v-26717cb5]{width:180px;min-width:180px;display:flex;flex-direction:column;gap:2px}.jada-settings-nav-item[data-v-26717cb5]{padding:8px 14px;border-radius:8px;font-size:13px;color:#8b8b9e;cursor:pointer;transition:all .15s;text-decoration:none}.jada-settings-nav-item[data-v-26717cb5]:hover{background:#ffffff0a;color:#e8e8ef}.jada-settings-nav-item.active[data-v-26717cb5]{background:#e9456026;color:#e94560}.jada-settings-content[data-v-26717cb5]{flex:1;max-width:600px}.jada-settings-section h2[data-v-26717cb5]{font-size:18px;font-weight:600;color:#e8e8ef;margin:0 0 16px}.jada-hint[data-v-26717cb5]{font-size:13px;color:#555;margin:0 0 16px}.jada-form-group[data-v-26717cb5]{margin-bottom:18px}.jada-form-group label[data-v-26717cb5]{display:block;font-size:12px;font-weight:600;color:#8b8b9e;margin-bottom:6px}.jada-form-group input[data-v-26717cb5]{width:100%;padding:10px 14px;border:1px solid rgba(255,255,255,.1);border-radius:10px;background:#1a1a24;color:#e8e8ef;font-size:14px;box-sizing:border-box}.jada-form-group input[data-v-26717cb5]:focus{outline:none;border-color:#e94560}.jada-toggle-row[data-v-26717cb5]{display:flex;align-items:center;justify-content:space-between}.jada-toggle-label[data-v-26717cb5]{font-size:13px;color:#8b8b9e}.jada-toggle[data-v-26717cb5]{width:40px;height:22px;border-radius:12px;border:none;background:#333;position:relative;cursor:pointer;transition:background .2s}.jada-toggle.on[data-v-26717cb5]{background:#e94560}.jada-toggle-knob[data-v-26717cb5]{position:absolute;top:3px;left:3px;width:16px;height:16px;border-radius:50%;background:#fff;transition:transform .2s}.jada-toggle.on .jada-toggle-knob[data-v-26717cb5]{transform:translate(18px)}.jada-btn-primary[data-v-26717cb5]{padding:10px 24px;border-radius:10px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:600;cursor:pointer;margin-right:12px}.jada-btn-primary[data-v-26717cb5]:disabled{opacity:.4;cursor:not-allowed}.jada-status-msg[data-v-26717cb5]{font-size:13px;font-weight:600}.jada-status-msg.ok[data-v-26717cb5]{color:#4ade80}.jada-status-msg.err[data-v-26717cb5]{color:#f87171}.jada-mcp-list[data-v-26717cb5]{margin-bottom:16px}.jada-mcp-item[data-v-26717cb5]{display:flex;align-items:center;gap:12px;padding:12px 14px;background:#1a1a24;border-radius:10px;margin-bottom:6px}.jada-mcp-dot[data-v-26717cb5]{width:8px;height:8px;border-radius:50%}.jada-mcp-dot.on[data-v-26717cb5]{background:#4ade80}.jada-mcp-dot.off[data-v-26717cb5]{background:#f87171}.jada-mcp-info[data-v-26717cb5]{flex:1}.jada-mcp-name[data-v-26717cb5]{font-size:14px;font-weight:600;color:#e8e8ef;text-transform:capitalize}.jada-mcp-tools[data-v-26717cb5]{font-size:12px;color:#555}.jada-mcp-status[data-v-26717cb5]{font-size:12px;font-weight:600}.jada-mcp-status.on[data-v-26717cb5]{color:#4ade80}.jada-mcp-status.off[data-v-26717cb5]{color:#f87171}.jada-mcp-empty[data-v-26717cb5]{padding:16px;text-align:center;color:#555;font-size:13px}.jada-mcp-total[data-v-26717cb5]{font-size:13px;color:#8b8b9e;font-weight:600}.jada-ws-setting-item[data-v-26717cb5]{display:flex;align-items:center;gap:10px;padding:10px 14px;background:#1a1a24;border-radius:8px;margin-bottom:4px}.jada-ws-dot[data-v-26717cb5]{width:10px;height:10px;border-radius:50%}.jada-ws-setting-name[data-v-26717cb5]{flex:1;font-size:14px;color:#e8e8ef}.jada-ws-badge[data-v-26717cb5]{padding:2px 6px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:9px;font-weight:700}.jada-ws-setting-count[data-v-26717cb5]{font-size:12px;color:#555}.jada-about-grid[data-v-26717cb5]{background:#1a1a24;border-radius:12px;overflow:hidden}.jada-about-row[data-v-26717cb5]{display:flex;padding:12px 16px;border-bottom:1px solid rgba(255,255,255,.04)}.jada-about-row[data-v-26717cb5]:last-child{border-bottom:none}.jada-about-label[data-v-26717cb5]{flex:0 0 160px;font-size:13px;font-weight:600;color:#555}.jada-about-value[data-v-26717cb5]{font-size:13px;color:#e8e8ef}.jada-about-value.green[data-v-26717cb5]{color:#4ade80}.jada-about-value.red[data-v-26717cb5]{color:#f87171}.jada-profile[data-v-67e64c3b]{padding:28px;overflow-y:auto;height:100%;max-width:700px}.jada-profile-header[data-v-67e64c3b]{display:flex;align-items:center;gap:20px;margin-bottom:28px}.jada-profile-avatar[data-v-67e64c3b]{width:72px;height:72px;border-radius:16px;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:24px;font-weight:700;display:flex;align-items:center;justify-content:center}.jada-profile-info h1[data-v-67e64c3b]{font-size:24px;font-weight:700;color:#fff;margin:0 0 4px}.jada-profile-role[data-v-67e64c3b]{font-size:14px;color:#8b8b9e}.jada-profile-email[data-v-67e64c3b]{font-size:13px;color:#555;margin-top:2px}.jada-profile-stats[data-v-67e64c3b]{display:flex;gap:16px;margin-bottom:28px}.jada-profile-stat[data-v-67e64c3b]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px 28px;text-align:center}.jada-profile-stat-value[data-v-67e64c3b]{font-size:28px;font-weight:700;color:#e94560}.jada-profile-stat-label[data-v-67e64c3b]{font-size:12px;color:#555;margin-top:4px}.jada-profile-section[data-v-67e64c3b]{margin-bottom:28px}.jada-profile-section h3[data-v-67e64c3b]{font-size:16px;font-weight:600;color:#e8e8ef;margin:0 0 12px}.jada-profile-ws-item[data-v-67e64c3b]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:8px;background:#1a1a24;margin-bottom:4px}.jada-ws-dot[data-v-67e64c3b]{width:10px;height:10px;border-radius:50%}.jada-profile-ws-name[data-v-67e64c3b]{flex:1;font-size:13px;color:#e8e8ef}.jada-profile-ws-badge[data-v-67e64c3b]{padding:2px 6px;border-radius:4px;background:#0082c933;color:#0082c9;font-size:9px;font-weight:700}.jada-profile-ws-role[data-v-67e64c3b]{font-size:12px;color:#555}.jada-profile-info-box[data-v-67e64c3b]{background:#1a1a24;border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:16px}.jada-profile-info-box p[data-v-67e64c3b]{font-size:13px;color:#8b8b9e;margin:0 0 10px}.jada-profile-info-box ul[data-v-67e64c3b]{margin:0;padding-left:20px}.jada-profile-info-box li[data-v-67e64c3b]{font-size:13px;color:#8b8b9e;margin-bottom:4px}.jada-profile-users[data-v-67e64c3b]{display:flex;flex-direction:column;gap:4px}.jada-profile-user-item[data-v-67e64c3b]{display:flex;align-items:center;gap:12px;padding:10px 14px;border-radius:8px;background:#1a1a24}.jada-profile-user-item.current[data-v-67e64c3b]{border:1px solid rgba(233,69,96,.2)}.jada-profile-user-avatar[data-v-67e64c3b]{width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center}.jada-profile-user-name[data-v-67e64c3b]{font-size:14px;font-weight:600;color:#e8e8ef}.jada-profile-user-role[data-v-67e64c3b]{font-size:12px;color:#555}.jada-btn-secondary[data-v-67e64c3b]{padding:8px 18px;border-radius:10px;border:1px solid rgba(255,255,255,.1);background:transparent;color:#8b8b9e;font-size:13px;font-weight:600;cursor:pointer}.jada-btn-secondary[data-v-67e64c3b]:hover{border-color:#fff3;color:#e8e8ef}.jada-right-panel[data-v-0ec4cf5c]{width:300px;min-width:300px;background:#111119;border-left:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;overflow:hidden}.jada-rp-tabs[data-v-0ec4cf5c]{display:flex;border-bottom:1px solid rgba(255,255,255,.06)}.jada-rp-tab[data-v-0ec4cf5c]{flex:1;padding:10px;background:none;border:none;color:#555;font-size:12px;font-weight:600;cursor:pointer;transition:all .15s;border-bottom:2px solid transparent}.jada-rp-tab[data-v-0ec4cf5c]:hover{color:#8b8b9e}.jada-rp-tab.active[data-v-0ec4cf5c]{color:#e94560;border-bottom-color:#e94560}.jada-rp-content[data-v-0ec4cf5c]{flex:1;overflow-y:auto;padding:12px}.jada-rp-content h4[data-v-0ec4cf5c]{font-size:11px;font-weight:700;color:#555;text-transform:uppercase;letter-spacing:.5px;margin:12px 0 8px}.jada-rp-content h4[data-v-0ec4cf5c]:first-child{margin-top:0}.jada-rp-server[data-v-0ec4cf5c]{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:13px}.jada-rp-dot[data-v-0ec4cf5c]{width:6px;height:6px;border-radius:50%}.jada-rp-dot.on[data-v-0ec4cf5c]{background:#4ade80}.jada-rp-dot.off[data-v-0ec4cf5c]{background:#f87171}.jada-rp-server-name[data-v-0ec4cf5c]{flex:1;color:#e8e8ef;text-transform:capitalize}.jada-rp-server-tools[data-v-0ec4cf5c]{color:#555;font-size:12px}.jada-rp-tool-call[data-v-0ec4cf5c]{display:flex;align-items:flex-start;gap:8px;padding:6px 0}.jada-rp-tc-icon[data-v-0ec4cf5c]{font-size:12px}.jada-rp-tc-icon.running[data-v-0ec4cf5c]{animation:pulse-0ec4cf5c 1s infinite}.jada-rp-tc-icon.error[data-v-0ec4cf5c]{opacity:.7}@keyframes pulse-0ec4cf5c{0%,to{opacity:1}50%{opacity:.4}}.jada-rp-tc-name[data-v-0ec4cf5c]{font-size:12px;font-family:SF Mono,Fira Code,monospace;color:#4ade80}.jada-rp-tc-time[data-v-0ec4cf5c]{font-size:10px;color:#444}.jada-rp-empty[data-v-0ec4cf5c]{font-size:12px;color:#444;padding:8px 0}.jada-rp-context-item[data-v-0ec4cf5c]{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.04)}.jada-rp-context-label[data-v-0ec4cf5c]{font-size:12px;color:#555}.jada-rp-context-value[data-v-0ec4cf5c]{font-size:12px;color:#e8e8ef;font-weight:600}.jada-rp-context-value.green[data-v-0ec4cf5c]{color:#4ade80}.jada-rp-context-value.red[data-v-0ec4cf5c]{color:#f87171}.jada-app[data-v-8cc98c50]{display:flex;height:100%;min-height:calc(100vh - 50px);background:#0d0d14;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:#e8e8ef;position:relative}.jada-sidebar[data-v-8cc98c50]{width:280px;min-width:280px;background:#111119;border-right:1px solid rgba(255,255,255,.06);display:flex;flex-direction:column;overflow-y:auto;z-index:100}.mobile .jada-sidebar[data-v-8cc98c50]{position:fixed;top:0;left:0;bottom:0;width:300px;z-index:1000;box-shadow:4px 0 24px #00000080}.jada-sidebar-header[data-v-8cc98c50]{padding:16px;border-bottom:1px solid rgba(255,255,255,.06);display:flex;align-items:center;justify-content:space-between}.jada-logo[data-v-8cc98c50]{display:flex;align-items:center;gap:10px}.jada-logo-svg[data-v-8cc98c50]{width:28px;height:28px}.jada-logo-text[data-v-8cc98c50]{font-size:17px;font-weight:700;color:#fff}.jada-new-chat-btn[data-v-8cc98c50]{padding:6px 14px;border-radius:8px;border:none;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.jada-new-chat-btn[data-v-8cc98c50]:hover{box-shadow:0 2px 10px #e9456066}.jada-ws-selector[data-v-8cc98c50]{display:flex;align-items:center;gap:8px;padding:10px 16px;margin:8px 12px;border-radius:10px;background:#ffffff0a;cursor:pointer;transition:background .2s}.jada-ws-selector[data-v-8cc98c50]:hover{background:#ffffff14}.jada-ws-dot[data-v-8cc98c50]{width:10px;height:10px;border-radius:50%;flex-shrink:0}.jada-ws-name[data-v-8cc98c50]{flex:1;font-size:13px;font-weight:600;color:#fff}.jada-ws-pin[data-v-8cc98c50]{font-size:12px}.jada-ws-arrow[data-v-8cc98c50]{font-size:10px;color:#8b8b9e}.jada-ws-dropdown[data-v-8cc98c50]{margin:0 12px 8px;background:#1a1a24;border:1px solid rgba(255,255,255,.08);border-radius:10px;overflow:hidden}.jada-ws-dropdown-item[data-v-8cc98c50]{display:flex;align-items:center;gap:8px;padding:8px 12px;font-size:13px;color:#8b8b9e;cursor:pointer;transition:all .15s}.jada-ws-dropdown-item[data-v-8cc98c50]:hover{background:#ffffff0d;color:#e8e8ef}.jada-ws-dropdown-item.active[data-v-8cc98c50]{background:#e9456026;color:#e94560}.jada-ws-dropdown-item.root[data-v-8cc98c50]{border-left:2px solid #0082c9}.jada-ws-count[data-v-8cc98c50]{margin-left:auto;font-size:11px;color:#555}.jada-nav[data-v-8cc98c50]{padding:8px}.jada-nav-item[data-v-8cc98c50]{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:8px;color:#8b8b9e;cursor:pointer;transition:all .15s;text-decoration:none;font-size:13px}.jada-nav-item[data-v-8cc98c50]:hover{color:#e8e8ef;background:#ffffff0a}.jada-nav-item.active[data-v-8cc98c50]{color:#fff;background:#e9456026}.jada-nav-icon[data-v-8cc98c50]{font-size:15px;width:20px;text-align:center}.jada-nav-label[data-v-8cc98c50]{font-weight:500}.jada-conv-list[data-v-8cc98c50]{flex:1;overflow-y:auto;padding:0 8px;border-top:1px solid rgba(255,255,255,.04);margin-top:4px}.jada-conv-section-label[data-v-8cc98c50]{font-size:11px;font-weight:600;color:#555;text-transform:uppercase;letter-spacing:.5px;padding:12px 12px 4px}.jada-conv-item[data-v-8cc98c50]{display:flex;align-items:flex-start;gap:10px;padding:8px 12px;border-radius:8px;cursor:pointer;transition:background .15s}.jada-conv-item[data-v-8cc98c50]:hover{background:#ffffff0a}.jada-conv-item.active[data-v-8cc98c50]{background:#e945601a}.jada-conv-icon[data-v-8cc98c50]{font-size:14px;margin-top:2px}.jada-conv-info[data-v-8cc98c50]{flex:1;min-width:0}.jada-conv-title[data-v-8cc98c50]{font-size:13px;font-weight:500;color:#e8e8ef;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.jada-conv-preview[data-v-8cc98c50]{font-size:11px;color:#555;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:2px}.jada-sidebar-footer[data-v-8cc98c50]{padding:12px 16px;border-top:1px solid rgba(255,255,255,.06);margin-top:auto}.jada-user-info[data-v-8cc98c50]{display:flex;align-items:center;gap:10px;padding:6px 0;cursor:pointer}.jada-user-info:hover .jada-user-name[data-v-8cc98c50]{color:#e94560}.jada-user-avatar[data-v-8cc98c50]{width:32px;height:32px;border-radius:8px;background:linear-gradient(135deg,#e94560,#c23152);color:#fff;font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0}.jada-user-avatar.small[data-v-8cc98c50]{width:28px;height:28px;font-size:11px}.jada-user-name[data-v-8cc98c50]{font-size:13px;font-weight:600;color:#e8e8ef;transition:color .15s}.jada-user-role[data-v-8cc98c50]{font-size:11px;color:#555}.jada-server-status[data-v-8cc98c50]{font-size:11px;color:#555;display:flex;align-items:center;gap:6px;margin-top:8px}.jada-status-dot[data-v-8cc98c50]{width:6px;height:6px;border-radius:50%}.jada-status-dot.online[data-v-8cc98c50]{background:#4ade80;box-shadow:0 0 6px #4ade80}.jada-status-dot.offline[data-v-8cc98c50]{background:#f87171}.jada-main[data-v-8cc98c50]{flex:1;overflow:hidden;display:flex;flex-direction:column;background:#16161f;min-width:0}.jada-mobile-header[data-v-8cc98c50]{display:flex;align-items:center;gap:12px;padding:10px 16px;border-bottom:1px solid rgba(255,255,255,.06);background:#111119}.jada-hamburger[data-v-8cc98c50]{background:none;border:none;color:#e8e8ef;font-size:20px;cursor:pointer;padding:4px}.jada-mobile-title[data-v-8cc98c50]{flex:1;font-size:16px;font-weight:600}.jada-overlay[data-v-8cc98c50]{position:fixed;inset:0;background:#00000080;z-index:999} +/*$vite$:1*/`,document.head.appendChild(_o);function un(e){const t=Object.create(null);for(const s of e.split(","))t[s]=1;return s=>s in t}const ee={},Ot=[],Ue=()=>{},Eo=()=>!1,ys=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),js=e=>e.startsWith("onUpdate:"),ge=Object.assign,fn=(e,t)=>{const s=e.indexOf(t);s>-1&&e.splice(s,1)},Ei=Object.prototype.hasOwnProperty,X=(e,t)=>Ei.call(e,t),V=Array.isArray,At=e=>Wt(e)==="[object Map]",So=e=>Wt(e)==="[object Set]",Co=e=>Wt(e)==="[object Date]",B=e=>typeof e=="function",ce=e=>typeof e=="string",ze=e=>typeof e=="symbol",Z=e=>e!==null&&typeof e=="object",Ro=e=>(Z(e)||B(e))&&B(e.then)&&B(e.catch),To=Object.prototype.toString,Wt=e=>To.call(e),Si=e=>Wt(e).slice(8,-1),ko=e=>Wt(e)==="[object Object]",pn=e=>ce(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,qt=un(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),_s=e=>{const t=Object.create(null);return(s=>t[s]||(t[s]=e(s)))},Ci=/-\w/g,ye=_s(e=>e.replace(Ci,t=>t.slice(1).toUpperCase())),Ri=/\B([A-Z])/g,bt=_s(e=>e.replace(Ri,"-$1").toLowerCase()),Es=_s(e=>e.charAt(0).toUpperCase()+e.slice(1)),hn=_s(e=>e?`on${Es(e)}`:""),ot=(e,t)=>!Object.is(e,t),Ss=(e,...t)=>{for(let s=0;s{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:o,value:s})},gn=e=>{const t=parseFloat(e);return isNaN(t)?e:t};let Ao;const Cs=()=>Ao||(Ao=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Le(e){if(V(e)){const t={};for(let s=0;s{if(s){const o=s.split(ki);o.length>1&&(t[o[0].trim()]=o[1].trim())}}),t}function H(e){let t="";if(ce(e))t=e;else if(V(e))for(let s=0;s!!(e&&e.__v_isRef===!0),T=e=>ce(e)?e:e==null?"":V(e)||Z(e)&&(e.toString===To||!B(e.toString))?No(e)?T(e.value):JSON.stringify(e,Po,2):String(e),Po=(e,t)=>No(t)?Po(e,t.value):At(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((s,[o,n],a)=>(s[bn(o,a)+" =>"]=n,s),{})}:So(t)?{[`Set(${t.size})`]:[...t.values()].map(s=>bn(s))}:ze(t)?bn(t):Z(t)&&!V(t)&&!ko(t)?String(t):t,bn=(e,t="")=>{var s;return ze(e)?`Symbol(${(s=e.description)!=null?s:t})`:e};let Ee;class Pi{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Ee,!t&&Ee&&(this.index=(Ee.scopes||(Ee.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,s;if(this.scopes)for(t=0,s=this.scopes.length;t0&&--this._on===0&&(Ee=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let s,o;for(s=0,o=this.effects.length;s0)return;if(Gt){let t=Gt;for(Gt=void 0;t;){const s=t.next;t.next=void 0,t.flags&=-9,t=s}}let e;for(;Kt;){let t=Kt;for(Kt=void 0;t;){const s=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(o){e||(e=o)}t=s}}if(e)throw e}function Mo(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Fo(e){let t,s=e.depsTail,o=s;for(;o;){const n=o.prevDep;o.version===-1?(o===s&&(s=n),jn(o),$i(o)):t=o,o.dep.activeLink=o.prevActiveLink,o.prevActiveLink=void 0,o=n}e.deps=t,e.depsTail=s}function yn(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Uo(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Uo(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===Jt)||(e.globalVersion=Jt,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!yn(e))))return;e.flags|=2;const t=e.dep,s=se,o=$e;se=e,$e=!0;try{Mo(e);const n=e.fn(e._value);(t.version===0||ot(n,e._value))&&(e.flags|=128,e._value=n,t.version++)}catch(n){throw t.version++,n}finally{se=s,$e=o,Fo(e),e.flags&=-3}}function jn(e,t=!1){const{dep:s,prevSub:o,nextSub:n}=e;if(o&&(o.nextSub=n,e.prevSub=void 0),n&&(n.prevSub=o,e.nextSub=void 0),s.subs===e&&(s.subs=o,!o&&s.computed)){s.computed.flags&=-5;for(let a=s.computed.deps;a;a=a.nextDep)jn(a,!0)}!t&&!--s.sc&&s.map&&s.map.delete(s.key)}function $i(e){const{prevDep:t,nextDep:s}=e;t&&(t.nextDep=s,e.prevDep=void 0),s&&(s.prevDep=t,e.nextDep=void 0)}let $e=!0;const zo=[];function Ve(){zo.push($e),$e=!1}function Be(){const e=zo.pop();$e=e===void 0?!0:e}function Vo(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const s=se;se=void 0;try{t()}finally{se=s}}}let Jt=0;class Di{constructor(t,s){this.sub=t,this.dep=s,this.version=s.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Bo{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!se||!$e||se===this.computed)return;let s=this.activeLink;if(s===void 0||s.sub!==se)s=this.activeLink=new Di(se,this),se.deps?(s.prevDep=se.depsTail,se.depsTail.nextDep=s,se.depsTail=s):se.deps=se.depsTail=s,Ho(s);else if(s.version===-1&&(s.version=this.version,s.nextDep)){const o=s.nextDep;o.prevDep=s.prevDep,s.prevDep&&(s.prevDep.nextDep=o),s.prevDep=se.depsTail,s.nextDep=void 0,se.depsTail.nextDep=s,se.depsTail=s,se.deps===s&&(se.deps=o)}return s}trigger(t){this.version++,Jt++,this.notify(t)}notify(t){xn();try{for(let s=this.subs;s;s=s.prevSub)s.sub.notify()&&s.sub.dep.notify()}finally{wn()}}}function Ho(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let o=t.deps;o;o=o.nextDep)Ho(o)}const s=e.dep.subs;s!==e&&(e.prevSub=s,s&&(s.nextSub=e)),e.dep.subs=e}}const _n=new WeakMap,jt=Symbol(""),En=Symbol(""),Xt=Symbol("");function me(e,t,s){if($e&&se){let o=_n.get(e);o||_n.set(e,o=new Map);let n=o.get(s);n||(o.set(s,n=new Bo),n.map=o,n.key=s),n.track()}}function rt(e,t,s,o,n,a){const r=_n.get(e);if(!r){Jt++;return}const i=c=>{c&&c.trigger()};if(xn(),t==="clear")r.forEach(i);else{const c=V(e),u=c&&pn(s);if(c&&s==="length"){const l=Number(o);r.forEach((p,v)=>{(v==="length"||v===Xt||!ze(v)&&v>=l)&&i(p)})}else switch((s!==void 0||r.has(void 0))&&i(r.get(s)),u&&i(r.get(Xt)),t){case"add":c?u&&i(r.get("length")):(i(r.get(jt)),At(e)&&i(r.get(En)));break;case"delete":c||(i(r.get(jt)),At(e)&&i(r.get(En)));break;case"set":At(e)&&i(r.get(jt));break}}wn()}function It(e){const t=Y(e);return t===e?t:(me(t,"iterate",Xt),De(e)?t:t.map(it))}function Rs(e){return me(e=Y(e),"iterate",Xt),e}function He(e,t){return vt(e)?Nt(_t(e)?it(t):t):it(t)}const Mi={__proto__:null,[Symbol.iterator](){return Sn(this,Symbol.iterator,e=>He(this,e))},concat(...e){return It(this).concat(...e.map(t=>V(t)?It(t):t))},entries(){return Sn(this,"entries",e=>(e[1]=He(this,e[1]),e))},every(e,t){return at(this,"every",e,t,void 0,arguments)},filter(e,t){return at(this,"filter",e,t,s=>s.map(o=>He(this,o)),arguments)},find(e,t){return at(this,"find",e,t,s=>He(this,s),arguments)},findIndex(e,t){return at(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return at(this,"findLast",e,t,s=>He(this,s),arguments)},findLastIndex(e,t){return at(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return at(this,"forEach",e,t,void 0,arguments)},includes(...e){return Cn(this,"includes",e)},indexOf(...e){return Cn(this,"indexOf",e)},join(e){return It(this).join(e)},lastIndexOf(...e){return Cn(this,"lastIndexOf",e)},map(e,t){return at(this,"map",e,t,void 0,arguments)},pop(){return Yt(this,"pop")},push(...e){return Yt(this,"push",e)},reduce(e,...t){return Wo(this,"reduce",e,t)},reduceRight(e,...t){return Wo(this,"reduceRight",e,t)},shift(){return Yt(this,"shift")},some(e,t){return at(this,"some",e,t,void 0,arguments)},splice(...e){return Yt(this,"splice",e)},toReversed(){return It(this).toReversed()},toSorted(e){return It(this).toSorted(e)},toSpliced(...e){return It(this).toSpliced(...e)},unshift(...e){return Yt(this,"unshift",e)},values(){return Sn(this,"values",e=>He(this,e))}};function Sn(e,t,s){const o=Rs(e),n=o[t]();return o!==e&&!De(e)&&(n._next=n.next,n.next=()=>{const a=n._next();return a.done||(a.value=s(a.value)),a}),n}const Fi=Array.prototype;function at(e,t,s,o,n,a){const r=Rs(e),i=r!==e&&!De(e),c=r[t];if(c!==Fi[t]){const p=c.apply(e,a);return i?it(p):p}let u=s;r!==e&&(i?u=function(p,v){return s.call(this,He(e,p),v,e)}:s.length>2&&(u=function(p,v){return s.call(this,p,v,e)}));const l=c.call(r,u,o);return i&&n?n(l):l}function Wo(e,t,s,o){const n=Rs(e),a=n!==e&&!De(e);let r=s,i=!1;n!==e&&(a?(i=o.length===0,r=function(u,l,p){return i&&(i=!1,u=He(e,u)),s.call(this,u,He(e,l),p,e)}):s.length>3&&(r=function(u,l,p){return s.call(this,u,l,p,e)}));const c=n[t](r,...o);return i?He(e,c):c}function Cn(e,t,s){const o=Y(e);me(o,"iterate",Xt);const n=o[t](...s);return(n===-1||n===!1)&&kn(s[0])?(s[0]=Y(s[0]),o[t](...s)):n}function Yt(e,t,s=[]){Ve(),xn();const o=Y(e)[t].apply(e,s);return wn(),Be(),o}const Ui=un("__proto__,__v_isRef,__isVue"),qo=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(ze));function zi(e){ze(e)||(e=String(e));const t=Y(this);return me(t,"has",e),t.hasOwnProperty(e)}class Ko{constructor(t=!1,s=!1){this._isReadonly=t,this._isShallow=s}get(t,s,o){if(s==="__v_skip")return t.__v_skip;const n=this._isReadonly,a=this._isShallow;if(s==="__v_isReactive")return!n;if(s==="__v_isReadonly")return n;if(s==="__v_isShallow")return a;if(s==="__v_raw")return o===(n?a?Zo:Qo:a?Yo:Xo).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(o)?t:void 0;const r=V(t);if(!n){let c;if(r&&(c=Mi[s]))return c;if(s==="hasOwnProperty")return zi}const i=Reflect.get(t,s,be(t)?t:o);if((ze(s)?qo.has(s):Ui(s))||(n||me(t,"get",s),a))return i;if(be(i)){const c=r&&pn(s)?i:i.value;return n&&Z(c)?Tn(c):c}return Z(i)?n?Tn(i):As(i):i}}class Go extends Ko{constructor(t=!1){super(!1,t)}set(t,s,o,n){let a=t[s];const r=V(t)&&pn(s);if(!this._isShallow){const u=vt(a);if(!De(o)&&!vt(o)&&(a=Y(a),o=Y(o)),!r&&be(a)&&!be(o))return u||(a.value=o),!0}const i=r?Number(s)e,Ts=e=>Reflect.getPrototypeOf(e);function qi(e,t,s){return function(...o){const n=this.__v_raw,a=Y(n),r=At(a),i=e==="entries"||e===Symbol.iterator&&r,c=e==="keys"&&r,u=n[e](...o),l=s?Rn:t?Nt:it;return!t&&me(a,"iterate",c?En:jt),ge(Object.create(u),{next(){const{value:p,done:v}=u.next();return v?{value:p,done:v}:{value:i?[l(p[0]),l(p[1])]:l(p),done:v}}})}}function ks(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function Ki(e,t){const s={get(n){const a=this.__v_raw,r=Y(a),i=Y(n);e||(ot(n,i)&&me(r,"get",n),me(r,"get",i));const{has:c}=Ts(r),u=t?Rn:e?Nt:it;if(c.call(r,n))return u(a.get(n));if(c.call(r,i))return u(a.get(i));a!==r&&a.get(n)},get size(){const n=this.__v_raw;return!e&&me(Y(n),"iterate",jt),n.size},has(n){const a=this.__v_raw,r=Y(a),i=Y(n);return e||(ot(n,i)&&me(r,"has",n),me(r,"has",i)),n===i?a.has(n):a.has(n)||a.has(i)},forEach(n,a){const r=this,i=r.__v_raw,c=Y(i),u=t?Rn:e?Nt:it;return!e&&me(c,"iterate",jt),i.forEach((l,p)=>n.call(a,u(l),u(p),r))}};return ge(s,e?{add:ks("add"),set:ks("set"),delete:ks("delete"),clear:ks("clear")}:{add(n){const a=Y(this),r=Ts(a),i=Y(n),c=!t&&!De(n)&&!vt(n)?i:n;return r.has.call(a,c)||ot(n,c)&&r.has.call(a,n)||ot(i,c)&&r.has.call(a,i)||(a.add(c),rt(a,"add",c,c)),this},set(n,a){!t&&!De(a)&&!vt(a)&&(a=Y(a));const r=Y(this),{has:i,get:c}=Ts(r);let u=i.call(r,n);u||(n=Y(n),u=i.call(r,n));const l=c.call(r,n);return r.set(n,a),u?ot(a,l)&&rt(r,"set",n,a):rt(r,"add",n,a),this},delete(n){const a=Y(this),{has:r,get:i}=Ts(a);let c=r.call(a,n);c||(n=Y(n),c=r.call(a,n)),i&&i.call(a,n);const u=a.delete(n);return c&&rt(a,"delete",n,void 0),u},clear(){const n=Y(this),a=n.size!==0,r=n.clear();return a&&rt(n,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(n=>{s[n]=qi(n,e,t)}),s}function Os(e,t){const s=Ki(e,t);return(o,n,a)=>n==="__v_isReactive"?!e:n==="__v_isReadonly"?e:n==="__v_raw"?o:Reflect.get(X(s,n)&&n in o?s:o,n,a)}const Gi={get:Os(!1,!1)},Ji={get:Os(!1,!0)},Xi={get:Os(!0,!1)},Yi={get:Os(!0,!0)},Xo=new WeakMap,Yo=new WeakMap,Qo=new WeakMap,Zo=new WeakMap;function Qi(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function Zi(e){return e.__v_skip||!Object.isExtensible(e)?0:Qi(Si(e))}function As(e){return vt(e)?e:Is(e,!1,Vi,Gi,Xo)}function el(e){return Is(e,!1,Hi,Ji,Yo)}function Tn(e){return Is(e,!0,Bi,Xi,Qo)}function gm(e){return Is(e,!0,Wi,Yi,Zo)}function Is(e,t,s,o,n){if(!Z(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const a=Zi(e);if(a===0)return e;const r=n.get(e);if(r)return r;const i=new Proxy(e,a===2?o:s);return n.set(e,i),i}function _t(e){return vt(e)?_t(e.__v_raw):!!(e&&e.__v_isReactive)}function vt(e){return!!(e&&e.__v_isReadonly)}function De(e){return!!(e&&e.__v_isShallow)}function kn(e){return e?!!e.__v_raw:!1}function Y(e){const t=e&&e.__v_raw;return t?Y(t):e}function tl(e){return!X(e,"__v_skip")&&Object.isExtensible(e)&&Oo(e,"__v_skip",!0),e}const it=e=>Z(e)?As(e):e,Nt=e=>Z(e)?Tn(e):e;function be(e){return e?e.__v_isRef===!0:!1}function sl(e){return be(e)?e.value:e}const nl={get:(e,t,s)=>t==="__v_raw"?e:sl(Reflect.get(e,t,s)),set:(e,t,s,o)=>{const n=e[t];return be(n)&&!be(s)?(n.value=s,!0):Reflect.set(e,t,s,o)}};function er(e){return _t(e)?e:new Proxy(e,nl)}class ol{constructor(t,s,o){this.fn=t,this.setter=s,this._value=void 0,this.dep=new Bo(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=Jt-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!s,this.isSSR=o}notify(){if(this.flags|=16,!(this.flags&8)&&se!==this)return Do(this,!0),!0}get value(){const t=this.dep.track();return Uo(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function rl(e,t,s=!1){let o,n;return B(e)?o=e:(o=e.get,n=e.set),new ol(o,n,s)}const Ns={},Ps=new WeakMap;let Et;function al(e,t=!1,s=Et){if(s){let o=Ps.get(s);o||Ps.set(s,o=[]),o.push(e)}}function il(e,t,s=ee){const{immediate:o,deep:n,once:a,scheduler:r,augmentJob:i,call:c}=s,u=A=>n?A:De(A)||n===!1||n===0?lt(A,1):lt(A);let l,p,v,R,x=!1,g=!1;if(be(e)?(p=()=>e.value,x=De(e)):_t(e)?(p=()=>u(e),x=!0):V(e)?(g=!0,x=e.some(A=>_t(A)||De(A)),p=()=>e.map(A=>{if(be(A))return A.value;if(_t(A))return u(A);if(B(A))return c?c(A,2):A()})):B(e)?t?p=c?()=>c(e,2):e:p=()=>{if(v){Ve();try{v()}finally{Be()}}const A=Et;Et=l;try{return c?c(e,3,[R]):e(R)}finally{Et=A}}:p=Ue,t&&n){const A=p,W=n===!0?1/0:n;p=()=>lt(A(),W)}const y=Li(),L=()=>{l.stop(),y&&y.active&&fn(y.effects,l)};if(a&&t){const A=t;t=(...W)=>{A(...W),L()}}let $=g?new Array(e.length).fill(Ns):Ns;const M=A=>{if(!(!(l.flags&1)||!l.dirty&&!A))if(t){const W=l.run();if(n||x||(g?W.some((fe,ne)=>ot(fe,$[ne])):ot(W,$))){v&&v();const fe=Et;Et=l;try{const ne=[W,$===Ns?void 0:g&&$[0]===Ns?[]:$,R];$=W,c?c(t,3,ne):t(...ne)}finally{Et=fe}}}else l.run()};return i&&i(M),l=new Lo(p),l.scheduler=r?()=>r(M,!1):M,R=A=>al(A,!1,l),v=l.onStop=()=>{const A=Ps.get(l);if(A){if(c)c(A,4);else for(const W of A)W();Ps.delete(l)}},t?o?M(!0):$=l.run():r?r(M.bind(null,!0),!0):l.run(),L.pause=l.pause.bind(l),L.resume=l.resume.bind(l),L.stop=L,L}function lt(e,t=1/0,s){if(t<=0||!Z(e)||e.__v_skip||(s=s||new Map,(s.get(e)||0)>=t))return e;if(s.set(e,t),t--,be(e))lt(e.value,t,s);else if(V(e))for(let o=0;o{lt(o,t,s)});else if(ko(e)){for(const o in e)lt(e[o],t,s);for(const o of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,o)&<(e[o],t,s)}return e}const Qt=[];let On=!1;function mm(e,...t){if(On)return;On=!0,Ve();const s=Qt.length?Qt[Qt.length-1].component:null,o=s&&s.appContext.config.warnHandler,n=ll();if(o)Pt(o,s,11,[e+t.map(a=>{var r,i;return(i=(r=a.toString)==null?void 0:r.call(a))!=null?i:JSON.stringify(a)}).join(""),s&&s.proxy,n.map(({vnode:a})=>`at <${Yr(s,a.type)}>`).join(` `),n]);else{const a=[`[Vue warn]: ${e}`,...t];n.length&&a.push(` `,...cl(n)),console.warn(...a)}Be(),On=!1}function ll(){let e=Qt[Qt.length-1];if(!e)return[];const t=[];for(;e;){const s=t[0];s&&s.vnode===e?s.recurseCount++:t.push({vnode:e,recurseCount:0});const o=e.component&&e.component.parent;e=o&&o.vnode}return t}function cl(e){const t=[];return e.forEach((s,o)=>{t.push(...o===0?[]:[` -`],...dl(s))}),t}function dl({vnode:e,recurseCount:t}){const s=t>0?`... (${t} recursive calls)`:"",o=e.component?e.component.parent==null:!1,n=` at <${Yr(e.component,e.type,o)}`,a=">"+s;return e.props?[n,...fl(e.props),a]:[n+a]}function fl(e){const t=[],s=Object.keys(e);return s.slice(0,3).forEach(o=>{t.push(...tr(o,e[o]))}),s.length>3&&t.push(" ..."),t}function tr(e,t,s){return ce(t)?(t=JSON.stringify(t),s?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?s?t:[`${e}=${t}`]:me(t)?(t=tr(e,Y(t.value),!0),s?t:[`${e}=Ref<`,t,">"]):B(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=Y(t),s?t:[`${e}=`,t])}function Pt(e,t,s,o){try{return o?e(...o):e()}catch(n){Ls(n,t,s)}}function We(e,t,s,o){if(B(e)){const n=Pt(e,t,s,o);return n&&Ro(n)&&n.catch(a=>{Ls(a,t,s)}),n}if(V(e)){const n=[];for(let a=0;a>>1,n=je[o],a=Zt(n);a=Zt(s)?je.push(e):je.splice(hl(t),0,e),e.flags|=1,nr()}}function nr(){$s||($s=sr.then(ar))}function gl(e){V(e)?Lt.push(...e):xt&&e.id===-1?xt.splice($t+1,0,e):e.flags&1||(Lt.push(e),e.flags|=1),nr()}function or(e,t,s=qe+1){for(;sZt(s)-Zt(o));if(Lt.length=0,xt){xt.push(...t);return}for(xt=t,$t=0;$te.id==null?e.flags&2?-1:1/0:e.id;function ar(e){try{for(qe=0;qe{o._d&&Vr(-1);const a=Ds(t);let r;try{r=e(...n)}finally{Ds(a),o._d&&Vr(1)}return r};return o._n=!0,o._c=!0,o._d=!0,o}function ct(e,t){if(Te===null)return e;const s=Gs(Te),o=e.dirs||(e.dirs=[]);for(let n=0;n1)return s&&B(t)?t.call(o&&o.proxy):t}}const vl=Symbol.for("v-scx"),xl=()=>Ms(vl);function In(e,t,s){return lr(e,t,s)}function lr(e,t,s=ee){const{immediate:o,deep:n,flush:a,once:r}=s,i=he({},s),c=t&&o||!t&&a!=="post";let f;if(ls){if(a==="sync"){const R=xl();f=R.__watcherHandles||(R.__watcherHandles=[])}else if(!c){const R=()=>{};return R.stop=Ue,R.resume=Ue,R.pause=Ue,R}}const l=be;i.call=(R,x,g)=>We(R,l,x,g);let p=!1;a==="post"?i.scheduler=R=>{Se(R,l&&l.suspense)}:a!=="sync"&&(p=!0,i.scheduler=(R,x)=>{x?R():An(R)}),i.augmentJob=R=>{t&&(R.flags|=4),p&&(R.flags|=2,l&&(R.id=l.uid,R.i=l))};const v=il(e,t,i);return ls&&(f?f.push(v):c&&v()),v}function wl(e,t,s){const o=this.proxy,n=ce(e)?e.includes(".")?cr(o,e):()=>o[e]:e.bind(o,o);let a;B(t)?a=t:(a=t.handler,s=t);const r=is(this),i=lr(n,a.bind(o),s);return r(),i}function cr(e,t){const s=t.split(".");return()=>{let o=e;for(let n=0;ne.__isTeleport,_l=Symbol("_leaveCb");function Nn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Nn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function dr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function fr(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const Fs=new WeakMap;function es(e,t,s,o,n=!1){if(V(e)){e.forEach((g,y)=>es(g,t&&(V(t)?t[y]:t),s,o,n));return}if(ts(o)&&!n){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&es(e,t,s,o.component.subTree);return}const a=o.shapeFlag&4?Gs(o.component):o.el,r=n?null:a,{i,r:c}=e,f=t&&t.r,l=i.refs===ee?i.refs={}:i.refs,p=i.setupState,v=Y(p),R=p===ee?Eo:g=>fr(l,g)?!1:X(v,g),x=(g,y)=>!(y&&fr(l,y));if(f!=null&&f!==c){if(ur(t),ce(f))l[f]=null,R(f)&&(p[f]=null);else if(me(f)){const g=t;x(f,g.k)&&(f.value=null),g.k&&(l[g.k]=null)}}if(B(c))Pt(c,i,12,[r,l]);else{const g=ce(c),y=me(c);if(g||y){const L=()=>{if(e.f){const $=g?R(c)?p[c]:l[c]:x()||!e.k?c.value:l[e.k];if(n)V($)&&un($,a);else if(V($))$.includes(a)||$.push(a);else if(g)l[c]=[a],R(c)&&(p[c]=l[c]);else{const M=[a];x(c,e.k)&&(c.value=M),e.k&&(l[e.k]=M)}}else g?(l[c]=r,R(c)&&(p[c]=r)):y&&(x(c,e.k)&&(c.value=r),e.k&&(l[e.k]=r))};if(r){const $=()=>{L(),Fs.delete(e)};$.id=-1,Fs.set(e,$),Se($,s)}else ur(e),L()}}}function ur(e){const t=Fs.get(e);t&&(t.flags|=8,Fs.delete(e))}Cs().requestIdleCallback,Cs().cancelIdleCallback;const ts=e=>!!e.type.__asyncLoader,pr=e=>e.type.__isKeepAlive;function El(e,t){hr(e,"a",t)}function Sl(e,t){hr(e,"da",t)}function hr(e,t,s=be){const o=e.__wdc||(e.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return e()});if(Us(t,o,s),s){let n=s.parent;for(;n&&n.parent;)pr(n.parent.vnode)&&Cl(o,t,s,n),n=n.parent}}function Cl(e,t,s,o){const n=Us(t,e,o,!0);gr(()=>{un(o[t],n)},s)}function Us(e,t,s=be,o=!1){if(s){const n=s[e]||(s[e]=[]),a=t.__weh||(t.__weh=(...r)=>{Ve();const i=is(s),c=We(t,s,e,r);return i(),Be(),c});return o?n.unshift(a):n.push(a),a}}const dt=e=>(t,s=be)=>{(!ls||e==="sp")&&Us(e,(...o)=>t(...o),s)},Rl=dt("bm"),Tl=dt("m"),kl=dt("bu"),Ol=dt("u"),Al=dt("bum"),gr=dt("um"),Il=dt("sp"),Nl=dt("rtg"),Pl=dt("rtc");function Ll(e,t=be){Us("ec",e,t)}const $l="components";function ft(e,t){return Ml($l,e,!0,t)||e}const Dl=Symbol.for("v-ndc");function Ml(e,t,s=!0,o=!1){const n=Te||be;if(n){const a=n.type;{const i=Xr(a,!1);if(i&&(i===t||i===ye(t)||i===Es(ye(t))))return a}const r=mr(n[e]||a[e],t)||mr(n.appContext[e],t);return!r&&o?a:r}}function mr(e,t){return e&&(e[t]||e[ye(t)]||e[Es(ye(t))])}function ae(e,t,s,o){let n;const a=s,r=V(e);if(r||ce(e)){const i=r&&_t(e);let c=!1,f=!1;i&&(c=!De(e),f=vt(e),e=Rs(e)),n=new Array(e.length);for(let l=0,p=e.length;lt(i,c,void 0,a));else{const i=Object.keys(e);n=new Array(i.length);for(let c=0,f=i.length;ce?Kr(e)?Gs(e):Pn(e.parent):null,ss=he(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Pn(e.parent),$root:e=>Pn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>wr(e),$forceUpdate:e=>e.f||(e.f=()=>{An(e.update)}),$nextTick:e=>e.n||(e.n=pl.bind(e.proxy)),$watch:e=>wl.bind(e)}),Ln=(e,t)=>e!==ee&&!e.__isScriptSetup&&X(e,t),Fl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:o,data:n,props:a,accessCache:r,type:i,appContext:c}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return o[t];case 2:return n[t];case 4:return s[t];case 3:return a[t]}else{if(Ln(o,t))return r[t]=1,o[t];if(n!==ee&&X(n,t))return r[t]=2,n[t];if(X(a,t))return r[t]=3,a[t];if(s!==ee&&X(s,t))return r[t]=4,s[t];$n&&(r[t]=0)}}const f=ss[t];let l,p;if(f)return t==="$attrs"&&ge(e.attrs,"get",""),f(e);if((l=i.__cssModules)&&(l=l[t]))return l;if(s!==ee&&X(s,t))return r[t]=4,s[t];if(p=c.config.globalProperties,X(p,t))return p[t]},set({_:e},t,s){const{data:o,setupState:n,ctx:a}=e;return Ln(n,t)?(n[t]=s,!0):o!==ee&&X(o,t)?(o[t]=s,!0):X(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:o,appContext:n,props:a,type:r}},i){let c;return!!(s[i]||e!==ee&&i[0]!=="$"&&X(e,i)||Ln(t,i)||X(a,i)||X(o,i)||X(ss,i)||X(n.config.globalProperties,i)||(c=r.__cssModules)&&c[i])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:X(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function br(e){return V(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let $n=!0;function Ul(e){const t=wr(e),s=e.proxy,o=e.ctx;$n=!1,t.beforeCreate&&vr(t.beforeCreate,e,"bc");const{data:n,computed:a,methods:r,watch:i,provide:c,inject:f,created:l,beforeMount:p,mounted:v,beforeUpdate:R,updated:x,activated:g,deactivated:y,beforeDestroy:L,beforeUnmount:$,destroyed:M,unmounted:I,render:J,renderTracked:xe,renderTriggered:le,errorCaptured:Pe,serverPrefetch:gt,expose:Qe,inheritAttrs:yt,components:mt,directives:Ze,filters:Fe}=t;if(f&&zl(f,o,null),r)for(const ne in r){const W=r[ne];B(W)&&(o[ne]=W.bind(s))}if(n){const ne=n.call(s,s);Z(ne)&&(e.data=As(ne))}if($n=!0,a)for(const ne in a){const W=a[ne],et=B(W)?W.bind(s,s):B(W.get)?W.get.bind(s,s):Ue,Vt=!B(W)&&B(W.set)?W.set.bind(s):Ue,we=Cc({get:et,set:Vt});Object.defineProperty(o,ne,{enumerable:!0,configurable:!0,get:()=>we.value,set:ue=>we.value=ue})}if(i)for(const ne in i)xr(i[ne],o,s,ne);if(c){const ne=B(c)?c.call(s):c;Reflect.ownKeys(ne).forEach(W=>{bl(W,ne[W])})}l&&vr(l,e,"c");function Q(ne,W){V(W)?W.forEach(et=>ne(et.bind(s))):W&&ne(W.bind(s))}if(Q(Rl,p),Q(Tl,v),Q(kl,R),Q(Ol,x),Q(El,g),Q(Sl,y),Q(Ll,Pe),Q(Pl,xe),Q(Nl,le),Q(Al,$),Q(gr,I),Q(Il,gt),V(Qe))if(Qe.length){const ne=e.exposed||(e.exposed={});Qe.forEach(W=>{Object.defineProperty(ne,W,{get:()=>s[W],set:et=>s[W]=et,enumerable:!0})})}else e.exposed||(e.exposed={});J&&e.render===Ue&&(e.render=J),yt!=null&&(e.inheritAttrs=yt),mt&&(e.components=mt),Ze&&(e.directives=Ze),gt&&dr(e)}function zl(e,t,s=Ue){V(e)&&(e=Dn(e));for(const o in e){const n=e[o];let a;Z(n)?"default"in n?a=Ms(n.from||o,n.default,!0):a=Ms(n.from||o):a=Ms(n),me(a)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:r=>a.value=r}):t[o]=a}}function vr(e,t,s){We(V(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,s)}function xr(e,t,s,o){let n=o.includes(".")?cr(s,o):()=>s[o];if(ce(e)){const a=t[e];B(a)&&In(n,a)}else if(B(e))In(n,e.bind(s));else if(Z(e))if(V(e))e.forEach(a=>xr(a,t,s,o));else{const a=B(e.handler)?e.handler.bind(s):t[e.handler];B(a)&&In(n,a,e)}}function wr(e){const t=e.type,{mixins:s,extends:o}=t,{mixins:n,optionsCache:a,config:{optionMergeStrategies:r}}=e.appContext,i=a.get(t);let c;return i?c=i:!n.length&&!s&&!o?c=t:(c={},n.length&&n.forEach(f=>zs(c,f,r,!0)),zs(c,t,r)),Z(t)&&a.set(t,c),c}function zs(e,t,s,o=!1){const{mixins:n,extends:a}=t;a&&zs(e,a,s,!0),n&&n.forEach(r=>zs(e,r,s,!0));for(const r in t)if(!(o&&r==="expose")){const i=Vl[r]||s&&s[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const Vl={data:yr,props:jr,emits:jr,methods:ns,computed:ns,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:ns,directives:ns,watch:Hl,provide:yr,inject:Bl};function yr(e,t){return t?e?function(){return he(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function Bl(e,t){return ns(Dn(e),Dn(t))}function Dn(e){if(V(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ye(t)}Modifiers`]||e[`${bt(t)}Modifiers`];function Gl(e,t,...s){if(e.isUnmounted)return;const o=e.vnode.props||ee;let n=s;const a=t.startsWith("update:"),r=a&&Kl(o,t.slice(7));r&&(r.trim&&(n=s.map(l=>ce(l)?l.trim():l)),r.number&&(n=s.map(gn)));let i,c=o[i=hn(t)]||o[i=hn(ye(t))];!c&&a&&(c=o[i=hn(bt(t))]),c&&We(c,e,6,n);const f=o[i+"Once"];if(f){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,We(f,e,6,n)}}const Jl=new WeakMap;function Er(e,t,s=!1){const o=s?Jl:t.emitsCache,n=o.get(e);if(n!==void 0)return n;const a=e.emits;let r={},i=!1;if(!B(e)){const c=f=>{const l=Er(f,t,!0);l&&(i=!0,he(r,l))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!a&&!i?(Z(e)&&o.set(e,null),null):(V(a)?a.forEach(c=>r[c]=null):he(r,a),Z(e)&&o.set(e,r),r)}function Vs(e,t){return!e||!ys(t)?!1:(t=t.slice(2).replace(/Once$/,""),X(e,t[0].toLowerCase()+t.slice(1))||X(e,bt(t))||X(e,t))}function bm(){}function Sr(e){const{type:t,vnode:s,proxy:o,withProxy:n,propsOptions:[a],slots:r,attrs:i,emit:c,render:f,renderCache:l,props:p,data:v,setupState:R,ctx:x,inheritAttrs:g}=e,y=Ds(e);let L,$;try{if(s.shapeFlag&4){const I=n||o,J=I;L=Je(f.call(J,I,l,p,R,v,x)),$=i}else{const I=t;L=Je(I.length>1?I(p,{attrs:i,slots:r,emit:c}):I(p,null)),$=t.props?i:Xl(i)}}catch(I){os.length=0,Ls(I,e,1),L=Ge(wt)}let M=L;if($&&g!==!1){const I=Object.keys($),{shapeFlag:J}=M;I.length&&J&7&&(a&&I.some(js)&&($=Yl($,a)),M=Mt(M,$,!1,!0))}return s.dirs&&(M=Mt(M,null,!1,!0),M.dirs=M.dirs?M.dirs.concat(s.dirs):s.dirs),s.transition&&Nn(M,s.transition),L=M,Ds(y),L}const Xl=e=>{let t;for(const s in e)(s==="class"||s==="style"||ys(s))&&((t||(t={}))[s]=e[s]);return t},Yl=(e,t)=>{const s={};for(const o in e)(!js(o)||!(o.slice(9)in t))&&(s[o]=e[o]);return s};function Ql(e,t,s){const{props:o,children:n,component:a}=e,{props:r,children:i,patchFlag:c}=t,f=a.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return o?Cr(o,r,f):!!r;if(c&8){const l=t.dynamicProps;for(let p=0;pObject.create(Tr),Or=e=>Object.getPrototypeOf(e)===Tr;function ec(e,t,s,o=!1){const n={},a=kr();e.propsDefaults=Object.create(null),Ar(e,t,n,a);for(const r in e.propsOptions[0])r in n||(n[r]=void 0);s?e.props=o?n:el(n):e.type.props?e.props=n:e.props=a,e.attrs=a}function tc(e,t,s,o){const{props:n,attrs:a,vnode:{patchFlag:r}}=e,i=Y(n),[c]=e.propsOptions;let f=!1;if((o||r>0)&&!(r&16)){if(r&8){const l=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[v,R]=Ir(p,t,!0);he(r,v),R&&i.push(...R)};!s&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}if(!a&&!c)return Z(e)&&o.set(e,Ot),Ot;if(V(a))for(let l=0;le==="_"||e==="_ctx"||e==="$stable",Un=e=>V(e)?e.map(Je):[Je(e)],nc=(e,t,s)=>{if(t._n)return t;const o=ml((...n)=>Un(t(...n)),s);return o._c=!1,o},Pr=(e,t,s)=>{const o=e._ctx;for(const n in e){if(Fn(n))continue;const a=e[n];if(B(a))t[n]=nc(n,a,o);else if(a!=null){const r=Un(a);t[n]=()=>r}}},Lr=(e,t)=>{const s=Un(t);e.slots.default=()=>s},$r=(e,t,s)=>{for(const o in t)(s||!Fn(o))&&(e[o]=t[o])},oc=(e,t,s)=>{const o=e.slots=kr();if(e.vnode.shapeFlag&32){const n=t._;n?($r(o,t,s),s&&Oo(o,"_",n,!0)):Pr(t,o)}else t&&Lr(e,t)},rc=(e,t,s)=>{const{vnode:o,slots:n}=e;let a=!0,r=ee;if(o.shapeFlag&32){const i=t._;i?s&&i===1?a=!1:$r(n,t,s):(a=!t.$stable,Pr(t,n)),r=t}else t&&(Lr(e,t),r={default:1});if(a)for(const i in n)!Fn(i)&&r[i]==null&&delete n[i]},Se=dc;function ac(e){return ic(e)}function ic(e,t){const s=Cs();s.__VUE__=!0;const{insert:o,remove:n,patchProp:a,createElement:r,createText:i,createComment:c,setText:f,setElementText:l,parentNode:p,nextSibling:v,setScopeId:R=Ue,insertStaticContent:x}=e,g=(u,h,b,C=null,j=null,E=null,N=void 0,A=null,O=!!h.dynamicChildren)=>{if(u===h)return;u&&!as(u,h)&&(C=dn(u),ue(u,j,E,!0),u=null),h.patchFlag===-2&&(O=!1,h.dynamicChildren=null);const{type:S,ref:F,shapeFlag:P}=h;switch(S){case Bs:y(u,h,b,C);break;case wt:L(u,h,b,C);break;case Hs:u==null&&$(h,b,C,N);break;case q:mt(u,h,b,C,j,E,N,A,O);break;default:P&1?J(u,h,b,C,j,E,N,A,O):P&6?Ze(u,h,b,C,j,E,N,A,O):(P&64||P&128)&&S.process(u,h,b,C,j,E,N,A,O,xs)}F!=null&&j?es(F,u&&u.ref,E,h||u,!h):F==null&&u&&u.ref!=null&&es(u.ref,null,E,u,!0)},y=(u,h,b,C)=>{if(u==null)o(h.el=i(h.children),b,C);else{const j=h.el=u.el;h.children!==u.children&&f(j,h.children)}},L=(u,h,b,C)=>{u==null?o(h.el=c(h.children||""),b,C):h.el=u.el},$=(u,h,b,C)=>{[u.el,u.anchor]=x(u.children,h,b,C,u.el,u.anchor)},M=({el:u,anchor:h},b,C)=>{let j;for(;u&&u!==h;)j=v(u),o(u,b,C),u=j;o(h,b,C)},I=({el:u,anchor:h})=>{let b;for(;u&&u!==h;)b=v(u),n(u),u=b;n(h)},J=(u,h,b,C,j,E,N,A,O)=>{if(h.type==="svg"?N="svg":h.type==="math"&&(N="mathml"),u==null)xe(h,b,C,j,E,N,A,O);else{const S=u.el&&u.el._isVueCE?u.el:null;try{S&&S._beginPatch(),gt(u,h,j,E,N,A,O)}finally{S&&S._endPatch()}}},xe=(u,h,b,C,j,E,N,A)=>{let O,S;const{props:F,shapeFlag:P,transition:D,dirs:z}=u;if(O=u.el=r(u.type,E,F&&F.is,F),P&8?l(O,u.children):P&16&&Pe(u.children,O,null,C,j,zn(u,E),N,A),z&&St(u,null,C,"created"),le(O,u,u.scopeId,N,C),F){for(const te in F)te!=="value"&&!qt(te)&&a(O,te,null,F[te],E,C);"value"in F&&a(O,"value",null,F.value,E),(S=F.onVnodeBeforeMount)&&Xe(S,C,u)}z&&St(u,null,C,"beforeMount");const G=lc(j,D);G&&D.beforeEnter(O),o(O,h,b),((S=F&&F.onVnodeMounted)||G||z)&&Se(()=>{S&&Xe(S,C,u),G&&D.enter(O),z&&St(u,null,C,"mounted")},j)},le=(u,h,b,C,j)=>{if(b&&R(u,b),C)for(let E=0;E{for(let S=O;S{const A=h.el=u.el;let{patchFlag:O,dynamicChildren:S,dirs:F}=h;O|=u.patchFlag&16;const P=u.props||ee,D=h.props||ee;let z;if(b&&Ct(b,!1),(z=D.onVnodeBeforeUpdate)&&Xe(z,b,h,u),F&&St(h,u,b,"beforeUpdate"),b&&Ct(b,!0),(P.innerHTML&&D.innerHTML==null||P.textContent&&D.textContent==null)&&l(A,""),S?Qe(u.dynamicChildren,S,A,b,C,zn(h,j),E):N||W(u,h,A,null,b,C,zn(h,j),E,!1),O>0){if(O&16)yt(A,P,D,b,j);else if(O&2&&P.class!==D.class&&a(A,"class",null,D.class,j),O&4&&a(A,"style",P.style,D.style,j),O&8){const G=h.dynamicProps;for(let te=0;te{z&&Xe(z,b,h,u),F&&St(h,u,b,"updated")},C)},Qe=(u,h,b,C,j,E,N)=>{for(let A=0;A{if(h!==b){if(h!==ee)for(const E in h)!qt(E)&&!(E in b)&&a(u,E,h[E],null,j,C);for(const E in b){if(qt(E))continue;const N=b[E],A=h[E];N!==A&&E!=="value"&&a(u,E,A,N,j,C)}"value"in b&&a(u,"value",h.value,b.value,j)}},mt=(u,h,b,C,j,E,N,A,O)=>{const S=h.el=u?u.el:i(""),F=h.anchor=u?u.anchor:i("");let{patchFlag:P,dynamicChildren:D,slotScopeIds:z}=h;z&&(A=A?A.concat(z):z),u==null?(o(S,b,C),o(F,b,C),Pe(h.children||[],b,F,j,E,N,A,O)):P>0&&P&64&&D&&u.dynamicChildren&&u.dynamicChildren.length===D.length?(Qe(u.dynamicChildren,D,b,j,E,N,A),(h.key!=null||j&&h===j.subTree)&&Dr(u,h,!0)):W(u,h,b,F,j,E,N,A,O)},Ze=(u,h,b,C,j,E,N,A,O)=>{h.slotScopeIds=A,u==null?h.shapeFlag&512?j.ctx.activate(h,b,C,N,O):Fe(h,b,C,j,E,N,O):bs(u,h,O)},Fe=(u,h,b,C,j,E,N)=>{const A=u.component=bc(u,C,j);if(pr(u)&&(A.ctx.renderer=xs),xc(A,!1,N),A.asyncDep){if(j&&j.registerDep(A,Q,N),!u.el){const O=A.subTree=Ge(wt);L(null,O,h,b),u.placeholder=O.el}}else Q(A,u,h,b,j,E,N)},bs=(u,h,b)=>{const C=h.component=u.component;if(Ql(u,h,b))if(C.asyncDep&&!C.asyncResolved){ne(C,h,b);return}else C.next=h,C.update();else h.el=u.el,C.vnode=h},Q=(u,h,b,C,j,E,N)=>{const A=()=>{if(u.isMounted){let{next:P,bu:D,u:z,parent:G,vnode:te}=u;{const st=Mr(u);if(st){P&&(P.el=te.el,ne(u,P,N)),st.asyncDep.then(()=>{Se(()=>{u.isUnmounted||S()},j)});return}}let oe=P,fe;Ct(u,!1),P?(P.el=te.el,ne(u,P,N)):P=te,D&&Ss(D),(fe=P.props&&P.props.onVnodeBeforeUpdate)&&Xe(fe,G,P,te),Ct(u,!0);const pe=Sr(u),tt=u.subTree;u.subTree=pe,g(tt,pe,p(tt.el),dn(tt),u,j,E),P.el=pe.el,oe===null&&Zl(u,pe.el),z&&Se(z,j),(fe=P.props&&P.props.onVnodeUpdated)&&Se(()=>Xe(fe,G,P,te),j)}else{let P;const{el:D,props:z}=h,{bm:G,m:te,parent:oe,root:fe,type:pe}=u,tt=ts(h);Ct(u,!1),G&&Ss(G),!tt&&(P=z&&z.onVnodeBeforeMount)&&Xe(P,oe,h),Ct(u,!0);{fe.ce&&fe.ce._hasShadowRoot()&&fe.ce._injectChildStyle(pe,u.parent?u.parent.type:void 0);const st=u.subTree=Sr(u);g(null,st,b,C,u,j,E),h.el=st.el}if(te&&Se(te,j),!tt&&(P=z&&z.onVnodeMounted)){const st=h;Se(()=>Xe(P,oe,st),j)}(h.shapeFlag&256||oe&&ts(oe.vnode)&&oe.vnode.shapeFlag&256)&&u.a&&Se(u.a,j),u.isMounted=!0,h=b=C=null}};u.scope.on();const O=u.effect=new Lo(A);u.scope.off();const S=u.update=O.run.bind(O),F=u.job=O.runIfDirty.bind(O);F.i=u,F.id=u.uid,O.scheduler=()=>An(F),Ct(u,!0),S()},ne=(u,h,b)=>{h.component=u;const C=u.vnode.props;u.vnode=h,u.next=null,tc(u,h.props,C,b),rc(u,h.children,b),Ve(),or(u),Be()},W=(u,h,b,C,j,E,N,A,O=!1)=>{const S=u&&u.children,F=u?u.shapeFlag:0,P=h.children,{patchFlag:D,shapeFlag:z}=h;if(D>0){if(D&128){Vt(S,P,b,C,j,E,N,A,O);return}else if(D&256){et(S,P,b,C,j,E,N,A,O);return}}z&8?(F&16&&vs(S,j,E),P!==S&&l(b,P)):F&16?z&16?Vt(S,P,b,C,j,E,N,A,O):vs(S,j,E,!0):(F&8&&l(b,""),z&16&&Pe(P,b,C,j,E,N,A,O))},et=(u,h,b,C,j,E,N,A,O)=>{u=u||Ot,h=h||Ot;const S=u.length,F=h.length,P=Math.min(S,F);let D;for(D=0;DF?vs(u,j,E,!0,!1,P):Pe(h,b,C,j,E,N,A,O,P)},Vt=(u,h,b,C,j,E,N,A,O)=>{let S=0;const F=h.length;let P=u.length-1,D=F-1;for(;S<=P&&S<=D;){const z=u[S],G=h[S]=O?ut(h[S]):Je(h[S]);if(as(z,G))g(z,G,b,null,j,E,N,A,O);else break;S++}for(;S<=P&&S<=D;){const z=u[P],G=h[D]=O?ut(h[D]):Je(h[D]);if(as(z,G))g(z,G,b,null,j,E,N,A,O);else break;P--,D--}if(S>P){if(S<=D){const z=D+1,G=zD)for(;S<=P;)ue(u[S],j,E,!0),S++;else{const z=S,G=S,te=new Map;for(S=G;S<=D;S++){const Ae=h[S]=O?ut(h[S]):Je(h[S]);Ae.key!=null&&te.set(Ae.key,S)}let oe,fe=0;const pe=D-G+1;let tt=!1,st=0;const ws=new Array(pe);for(S=0;S=pe){ue(Ae,j,E,!0);continue}let nt;if(Ae.key!=null)nt=te.get(Ae.key);else for(oe=G;oe<=D;oe++)if(ws[oe-G]===0&&as(Ae,h[oe])){nt=oe;break}nt===void 0?ue(Ae,j,E,!0):(ws[nt-G]=S+1,nt>=st?st=nt:tt=!0,g(Ae,h[nt],b,null,j,E,N,A,O),fe++)}const xi=tt?cc(ws):Ot;for(oe=xi.length-1,S=pe-1;S>=0;S--){const Ae=G+S,nt=h[Ae],wi=h[Ae+1],yi=Ae+1{const{el:E,type:N,transition:A,children:O,shapeFlag:S}=u;if(S&6){we(u.component.subTree,h,b,C);return}if(S&128){u.suspense.move(h,b,C);return}if(S&64){N.move(u,h,b,xs);return}if(N===q){o(E,h,b);for(let P=0;PA.enter(E),j);else{const{leave:P,delayLeave:D,afterLeave:z}=A,G=()=>{u.ctx.isUnmounted?n(E):o(E,h,b)},te=()=>{E._isLeaving&&E[_l](!0),P(E,()=>{G(),z&&z()})};D?D(E,G,te):te()}else o(E,h,b)},ue=(u,h,b,C=!1,j=!1)=>{const{type:E,props:N,ref:A,children:O,dynamicChildren:S,shapeFlag:F,patchFlag:P,dirs:D,cacheIndex:z,memo:G}=u;if(P===-2&&(j=!1),A!=null&&(Ve(),es(A,null,b,u,!0),Be()),z!=null&&(h.renderCache[z]=void 0),F&256){h.ctx.deactivate(u);return}const te=F&1&&D,oe=!ts(u);let fe;if(oe&&(fe=N&&N.onVnodeBeforeUnmount)&&Xe(fe,h,u),F&6)cn(u.component,b,C);else{if(F&128){u.suspense.unmount(b,C);return}te&&St(u,null,h,"beforeUnmount"),F&64?u.type.remove(u,h,b,xs,C):S&&!S.hasOnce&&(E!==q||P>0&&P&64)?vs(S,h,b,!1,!0):(E===q&&P&384||!j&&F&16)&&vs(O,h,b),C&&Bt(u)}const pe=G!=null&&z==null;(oe&&(fe=N&&N.onVnodeUnmounted)||te||pe)&&Se(()=>{fe&&Xe(fe,h,u),te&&St(u,null,h,"unmounted"),pe&&(u.el=null)},b)},Bt=u=>{const{type:h,el:b,anchor:C,transition:j}=u;if(h===q){Ht(b,C);return}if(h===Hs){I(u);return}const E=()=>{n(b),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(u.shapeFlag&1&&j&&!j.persisted){const{leave:N,delayLeave:A}=j,O=()=>N(b,E);A?A(u.el,E,O):O()}else E()},Ht=(u,h)=>{let b;for(;u!==h;)b=v(u),n(u),u=b;n(h)},cn=(u,h,b)=>{const{bum:C,scope:j,job:E,subTree:N,um:A,m:O,a:S}=u;Fr(O),Fr(S),C&&Ss(C),j.stop(),E&&(E.flags|=8,ue(N,u,h,b)),A&&Se(A,h),Se(()=>{u.isUnmounted=!0},h)},vs=(u,h,b,C=!1,j=!1,E=0)=>{for(let N=E;N{if(u.shapeFlag&6)return dn(u.component.subTree);if(u.shapeFlag&128)return u.suspense.next();const h=v(u.anchor||u.el),b=h&&h[yl];return b?v(b):h};let jo=!1;const vi=(u,h,b)=>{let C;u==null?h._vnode&&(ue(h._vnode,null,null,!0),C=h._vnode.component):g(h._vnode||null,u,h,null,null,null,b),h._vnode=u,jo||(jo=!0,or(C),rr(),jo=!1)},xs={p:g,um:ue,m:we,r:Bt,mt:Fe,mc:Pe,pc:W,pbc:Qe,n:dn,o:e};return{render:vi,hydrate:void 0,createApp:ql(vi)}}function zn({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Ct({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function lc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Dr(e,t,s=!1){const o=e.children,n=t.children;if(V(o)&&V(n))for(let a=0;a>1,e[s[i]]0&&(t[o]=s[a-1]),s[a]=o)}}for(a=s.length,r=s[a-1];a-- >0;)s[a]=r,r=t[r];return s}function Mr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Mr(t)}function Fr(e){if(e)for(let t=0;te.__isSuspense;function dc(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):gl(e)}const q=Symbol.for("v-fgt"),Bs=Symbol.for("v-txt"),wt=Symbol.for("v-cmt"),Hs=Symbol.for("v-stc"),os=[];let ke=null;function w(e=!1){os.push(ke=e?null:[])}function fc(){os.pop(),ke=os[os.length-1]||null}let rs=1;function Vr(e,t=!1){rs+=e,e<0&&ke&&t&&(ke.hasOnce=!0)}function Br(e){return e.dynamicChildren=rs>0?ke||Ot:null,fc(),rs>0&&ke&&ke.push(e),e}function _(e,t,s,o,n,a){return Br(d(e,t,s,o,n,a,!0))}function Ke(e,t,s,o,n){return Br(Ge(e,t,s,o,n,!0))}function Hr(e){return e?e.__v_isVNode===!0:!1}function as(e,t){return e.type===t.type&&e.key===t.key}const Wr=({key:e})=>e??null,Ws=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ce(e)||me(e)||B(e)?{i:Te,r:e,k:t,f:!!s}:e:null);function d(e,t=null,s=null,o=0,n=null,a=e===q?0:1,r=!1,i=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Wr(t),ref:t&&Ws(t),scopeId:ir,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:Te};return i?(Bn(c,s),a&128&&e.normalize(c)):s&&(c.shapeFlag|=ce(s)?8:16),rs>0&&!r&&ke&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&ke.push(c),c}const Ge=uc;function uc(e,t=null,s=null,o=0,n=null,a=!1){if((!e||e===Dl)&&(e=wt),Hr(e)){const i=Mt(e,t,!0);return s&&Bn(i,s),rs>0&&!a&&ke&&(i.shapeFlag&6?ke[ke.indexOf(e)]=i:ke.push(i)),i.patchFlag=-2,i}if(Sc(e)&&(e=e.__vccOpts),t){t=pc(t);let{class:i,style:c}=t;i&&!ce(i)&&(t.class=H(i)),Z(c)&&(kn(c)&&!V(c)&&(c=he({},c)),t.style=Le(c))}const r=ce(e)?1:zr(e)?128:jl(e)?64:Z(e)?4:B(e)?2:0;return d(e,t,s,o,n,r,a,!0)}function pc(e){return e?kn(e)||Or(e)?he({},e):e:null}function Mt(e,t,s=!1,o=!1){const{props:n,ref:a,patchFlag:r,children:i,transition:c}=e,f=t?hc(n||{},t):n,l={__v_isVNode:!0,__v_skip:!0,type:e.type,props:f,key:f&&Wr(f),ref:t&&t.ref?s&&a?V(a)?a.concat(Ws(t)):[a,Ws(t)]:Ws(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==q?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Mt(e.ssContent),ssFallback:e.ssFallback&&Mt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&o&&Nn(l,c.clone(l)),l}function qs(e=" ",t=0){return Ge(Bs,null,e,t)}function Vn(e,t){const s=Ge(Hs,null,e);return s.staticCount=t,s}function K(e="",t=!1){return t?(w(),Ke(wt,null,e)):Ge(wt,null,e)}function Je(e){return e==null||typeof e=="boolean"?Ge(wt):V(e)?Ge(q,null,e.slice()):Hr(e)?ut(e):Ge(Bs,null,String(e))}function ut(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Mt(e)}function Bn(e,t){let s=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(V(t))s=16;else if(typeof t=="object")if(o&65){const n=t.default;n&&(n._c&&(n._d=!1),Bn(e,n()),n._c&&(n._d=!0));return}else{s=32;const n=t._;!n&&!Or(t)?t._ctx=Te:n===3&&Te&&(Te.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else B(t)?(t={default:t,_ctx:Te},s=32):(t=String(t),o&64?(s=16,t=[qs(t)]):s=8);e.children=t,e.shapeFlag|=s}function hc(...e){const t={};for(let s=0;sbe||Te;let Ks,Hn;{const e=Cs(),t=(s,o)=>{let n;return(n=e[s])||(n=e[s]=[]),n.push(o),a=>{n.length>1?n.forEach(r=>r(a)):n[0](a)}};Ks=t("__VUE_INSTANCE_SETTERS__",s=>be=s),Hn=t("__VUE_SSR_SETTERS__",s=>ls=s)}const is=e=>{const t=be;return Ks(e),e.scope.on(),()=>{e.scope.off(),Ks(t)}},qr=()=>{be&&be.scope.off(),Ks(null)};function Kr(e){return e.vnode.shapeFlag&4}let ls=!1;function xc(e,t=!1,s=!1){t&&Hn(t);const{props:o,children:n}=e.vnode,a=Kr(e);ec(e,o,a,t),oc(e,n,s||t);const r=a?wc(e,t):void 0;return t&&Hn(!1),r}function wc(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fl);const{setup:o}=s;if(o){Ve();const n=e.setupContext=o.length>1?jc(e):null,a=is(e),r=Pt(o,e,0,[e.props,n]),i=Ro(r);if(Be(),a(),(i||e.sp)&&!ts(e)&&dr(e),i){if(r.then(qr,qr),t)return r.then(c=>{Gr(e,c)}).catch(c=>{Ls(c,e,0)});e.asyncDep=r}else Gr(e,r)}else Jr(e)}function Gr(e,t,s){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=er(t)),Jr(e)}function Jr(e,t,s){const o=e.type;e.render||(e.render=o.render||Ue);{const n=is(e);Ve();try{Ul(e)}finally{Be(),n()}}}const yc={get(e,t){return ge(e,"get",""),e[t]}};function jc(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,yc),slots:e.slots,emit:e.emit,expose:t}}function Gs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(er(tl(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in ss)return ss[s](e)},has(t,s){return s in t||s in ss}})):e.proxy}const _c=/(?:^|[-_])\w/g,Ec=e=>e.replace(_c,t=>t.toUpperCase()).replace(/[-_]/g,"");function Xr(e,t=!0){return B(e)?e.displayName||e.name:e.name||t&&e.__name}function Yr(e,t,s=!1){let o=Xr(t);if(!o&&t.__file){const n=t.__file.match(/([^/\\]+)\.\w+$/);n&&(o=n[1])}if(!o&&e){const n=a=>{for(const r in a)if(a[r]===t)return r};o=n(e.components)||e.parent&&n(e.parent.type.components)||n(e.appContext.components)}return o?Ec(o):s?"App":"Anonymous"}function Sc(e){return B(e)&&"__vccOpts"in e}const Cc=(e,t)=>rl(e,t,ls),Rc="3.5.32";let Wn;const Qr=typeof window<"u"&&window.trustedTypes;if(Qr)try{Wn=Qr.createPolicy("vue",{createHTML:e=>e})}catch{}const Zr=Wn?e=>Wn.createHTML(e):e=>e,Tc="http://www.w3.org/2000/svg",kc="http://www.w3.org/1998/Math/MathML",pt=typeof document<"u"?document:null,ea=pt&&pt.createElement("template"),Oc={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,o)=>{const n=t==="svg"?pt.createElementNS(Tc,e):t==="mathml"?pt.createElementNS(kc,e):s?pt.createElement(e,{is:s}):pt.createElement(e);return e==="select"&&o&&o.multiple!=null&&n.setAttribute("multiple",o.multiple),n},createText:e=>pt.createTextNode(e),createComment:e=>pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,o,n,a){const r=s?s.previousSibling:t.lastChild;if(n&&(n===a||n.nextSibling))for(;t.insertBefore(n.cloneNode(!0),s),!(n===a||!(n=n.nextSibling)););else{ea.innerHTML=Zr(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const i=ea.content;if(o==="svg"||o==="mathml"){const c=i.firstChild;for(;c.firstChild;)i.appendChild(c.firstChild);i.removeChild(c)}t.insertBefore(i,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Ac=Symbol("_vtc");function Ic(e,t,s){const o=e[Ac];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const ta=Symbol("_vod"),Nc=Symbol("_vsh"),Pc=Symbol(""),Lc=/(?:^|;)\s*display\s*:/;function $c(e,t,s){const o=e.style,n=ce(s);let a=!1;if(s&&!n){if(t)if(ce(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();s[i]==null&&Js(o,i,"")}else for(const r in t)s[r]==null&&Js(o,r,"");for(const r in s)r==="display"&&(a=!0),Js(o,r,s[r])}else if(n){if(t!==s){const r=o[Pc];r&&(s+=";"+r),o.cssText=s,a=Lc.test(s)}}else t&&e.removeAttribute("style");ta in e&&(e[ta]=a?o.display:"",e[Nc]&&(o.display="none"))}const sa=/\s*!important$/;function Js(e,t,s){if(V(s))s.forEach(o=>Js(e,t,o));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const o=Dc(e,t);sa.test(s)?e.setProperty(bt(o),s.replace(sa,""),"important"):e[o]=s}}const na=["Webkit","Moz","ms"],qn={};function Dc(e,t){const s=qn[t];if(s)return s;let o=ye(t);if(o!=="filter"&&o in e)return qn[t]=o;o=Es(o);for(let n=0;nKn||(zc.then(()=>Kn=0),Kn=Date.now());function Bc(e,t){const s=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=s.attached)return;We(Hc(o,s.value),t,5,[o])};return s.value=e,s.attached=Vc(),s}function Hc(e,t){if(V(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(o=>n=>!n._stopped&&o&&o(n))}else return t}const ca=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wc=(e,t,s,o,n,a)=>{const r=n==="svg";t==="class"?Ic(e,o,r):t==="style"?$c(e,s,o):ys(t)?js(t)||Fc(e,t,s,o,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):qc(e,t,o,r))?(aa(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ra(e,t,o,r,a,t!=="value")):e._isVueCE&&(Kc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ce(o)))?aa(e,ye(t),o,a,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),ra(e,t,o,r))};function qc(e,t,s,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&ca(t)&&B(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const n=e.tagName;if(n==="IMG"||n==="VIDEO"||n==="CANVAS"||n==="SOURCE")return!1}return ca(t)&&ce(s)?!1:t in e}function Kc(e,t){const s=e._def.props;if(!s)return!1;const o=ye(t);return Array.isArray(s)?s.some(n=>ye(n)===o):Object.keys(s).some(n=>ye(n)===o)}const da=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?s=>Ss(t,s):t};function Gc(e){e.target.composing=!0}function fa(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Gn=Symbol("_assign");function ua(e,t,s){return t&&(e=e.trim()),s&&(e=gn(e)),e}const ht={created(e,{modifiers:{lazy:t,trim:s,number:o}},n){e[Gn]=da(n);const a=o||n.props&&n.props.type==="number";Ft(e,t?"change":"input",r=>{r.target.composing||e[Gn](ua(e.value,s,a))}),(s||a)&&Ft(e,"change",()=>{e.value=ua(e.value,s,a)}),t||(Ft(e,"compositionstart",Gc),Ft(e,"compositionend",fa),Ft(e,"change",fa))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:o,trim:n,number:a}},r){if(e[Gn]=da(r),e.composing)return;const i=(a||e.type==="number")&&!/^0\d/.test(e.value)?gn(e.value):e.value,c=t??"";if(i===c)return;const f=e.getRootNode();(f instanceof Document||f instanceof ShadowRoot)&&f.activeElement===e&&e.type!=="range"&&(o&&t===s||n&&e.value.trim()===c)||(e.value=c)}},Jc=["ctrl","shift","alt","meta"],Xc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Jc.some(s=>e[`${s}Key`]&&!t.includes(s))},Jn=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),o=t.join(".");return s[o]||(s[o]=((n,...a)=>{for(let r=0;r{const s=e._withKeys||(e._withKeys={}),o=t.join(".");return s[o]||(s[o]=(n=>{if(!("key"in n))return;const a=bt(n.key);if(t.some(r=>r===a||Yc[r]===a))return e(n)}))},Qc=he({patchProp:Wc},Oc);let ha;function Zc(){return ha||(ha=ac(Qc))}const ed=((...e)=>{const t=Zc().createApp(...e),{mount:s}=t;return t.mount=o=>{const n=sd(o);if(!n)return;const a=t._component;!B(a)&&!a.render&&!a.template&&(a.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const r=s(n,!1,td(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),r},t});function td(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sd(e){return ce(e)?document.querySelector(e):e}function ga(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Xn,ma;function ba(){if(ma)return Xn;ma=1;var e={};return Xn=typeof process=="object"&&e&&e.NODE_DEBUG&&/\bsemver\b/i.test(e.NODE_DEBUG)?(...s)=>console.error("SEMVER",...s):()=>{},Xn}var Yn,va;function xa(){if(va)return Yn;va=1;const e="2.0.0",t=256,s=Number.MAX_SAFE_INTEGER||9007199254740991,o=16,n=t-6;return Yn={MAX_LENGTH:t,MAX_SAFE_COMPONENT_LENGTH:o,MAX_SAFE_BUILD_LENGTH:n,MAX_SAFE_INTEGER:s,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:e,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Yn}var Xs={exports:{}},wa;function nd(){return wa||(wa=1,(function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:o,MAX_LENGTH:n}=xa(),a=ba();t=e.exports={};const r=t.re=[],i=t.safeRe=[],c=t.src=[],f=t.safeSrc=[],l=t.t={};let p=0;const v="[a-zA-Z0-9-]",R=[["\\s",1],["\\d",n],[v,o]],x=y=>{for(const[L,$]of R)y=y.split(`${L}*`).join(`${L}{0,${$}}`).split(`${L}+`).join(`${L}{1,${$}}`);return y},g=(y,L,$)=>{const M=x(L),I=p++;a(y,I,L),l[y]=I,c[I]=L,f[I]=M,r[I]=new RegExp(L,$?"g":void 0),i[I]=new RegExp(M,$?"g":void 0)};g("NUMERICIDENTIFIER","0|[1-9]\\d*"),g("NUMERICIDENTIFIERLOOSE","\\d+"),g("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${v}*`),g("MAINVERSION",`(${c[l.NUMERICIDENTIFIER]})\\.(${c[l.NUMERICIDENTIFIER]})\\.(${c[l.NUMERICIDENTIFIER]})`),g("MAINVERSIONLOOSE",`(${c[l.NUMERICIDENTIFIERLOOSE]})\\.(${c[l.NUMERICIDENTIFIERLOOSE]})\\.(${c[l.NUMERICIDENTIFIERLOOSE]})`),g("PRERELEASEIDENTIFIER",`(?:${c[l.NONNUMERICIDENTIFIER]}|${c[l.NUMERICIDENTIFIER]})`),g("PRERELEASEIDENTIFIERLOOSE",`(?:${c[l.NONNUMERICIDENTIFIER]}|${c[l.NUMERICIDENTIFIERLOOSE]})`),g("PRERELEASE",`(?:-(${c[l.PRERELEASEIDENTIFIER]}(?:\\.${c[l.PRERELEASEIDENTIFIER]})*))`),g("PRERELEASELOOSE",`(?:-?(${c[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[l.PRERELEASEIDENTIFIERLOOSE]})*))`),g("BUILDIDENTIFIER",`${v}+`),g("BUILD",`(?:\\+(${c[l.BUILDIDENTIFIER]}(?:\\.${c[l.BUILDIDENTIFIER]})*))`),g("FULLPLAIN",`v?${c[l.MAINVERSION]}${c[l.PRERELEASE]}?${c[l.BUILD]}?`),g("FULL",`^${c[l.FULLPLAIN]}$`),g("LOOSEPLAIN",`[v=\\s]*${c[l.MAINVERSIONLOOSE]}${c[l.PRERELEASELOOSE]}?${c[l.BUILD]}?`),g("LOOSE",`^${c[l.LOOSEPLAIN]}$`),g("GTLT","((?:<|>)?=?)"),g("XRANGEIDENTIFIERLOOSE",`${c[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),g("XRANGEIDENTIFIER",`${c[l.NUMERICIDENTIFIER]}|x|X|\\*`),g("XRANGEPLAIN",`[v=\\s]*(${c[l.XRANGEIDENTIFIER]})(?:\\.(${c[l.XRANGEIDENTIFIER]})(?:\\.(${c[l.XRANGEIDENTIFIER]})(?:${c[l.PRERELEASE]})?${c[l.BUILD]}?)?)?`),g("XRANGEPLAINLOOSE",`[v=\\s]*(${c[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[l.XRANGEIDENTIFIERLOOSE]})(?:${c[l.PRERELEASELOOSE]})?${c[l.BUILD]}?)?)?`),g("XRANGE",`^${c[l.GTLT]}\\s*${c[l.XRANGEPLAIN]}$`),g("XRANGELOOSE",`^${c[l.GTLT]}\\s*${c[l.XRANGEPLAINLOOSE]}$`),g("COERCEPLAIN",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?`),g("COERCE",`${c[l.COERCEPLAIN]}(?:$|[^\\d])`),g("COERCEFULL",c[l.COERCEPLAIN]+`(?:${c[l.PRERELEASE]})?(?:${c[l.BUILD]})?(?:$|[^\\d])`),g("COERCERTL",c[l.COERCE],!0),g("COERCERTLFULL",c[l.COERCEFULL],!0),g("LONETILDE","(?:~>?)"),g("TILDETRIM",`(\\s*)${c[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",g("TILDE",`^${c[l.LONETILDE]}${c[l.XRANGEPLAIN]}$`),g("TILDELOOSE",`^${c[l.LONETILDE]}${c[l.XRANGEPLAINLOOSE]}$`),g("LONECARET","(?:\\^)"),g("CARETTRIM",`(\\s*)${c[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",g("CARET",`^${c[l.LONECARET]}${c[l.XRANGEPLAIN]}$`),g("CARETLOOSE",`^${c[l.LONECARET]}${c[l.XRANGEPLAINLOOSE]}$`),g("COMPARATORLOOSE",`^${c[l.GTLT]}\\s*(${c[l.LOOSEPLAIN]})$|^$`),g("COMPARATOR",`^${c[l.GTLT]}\\s*(${c[l.FULLPLAIN]})$|^$`),g("COMPARATORTRIM",`(\\s*)${c[l.GTLT]}\\s*(${c[l.LOOSEPLAIN]}|${c[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",g("HYPHENRANGE",`^\\s*(${c[l.XRANGEPLAIN]})\\s+-\\s+(${c[l.XRANGEPLAIN]})\\s*$`),g("HYPHENRANGELOOSE",`^\\s*(${c[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[l.XRANGEPLAINLOOSE]})\\s*$`),g("STAR","(<|>)?=?\\s*\\*"),g("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),g("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(Xs,Xs.exports)),Xs.exports}var Qn,ya;function od(){if(ya)return Qn;ya=1;const e=Object.freeze({loose:!0}),t=Object.freeze({});return Qn=o=>o?typeof o!="object"?e:o:t,Qn}var Zn,ja;function rd(){if(ja)return Zn;ja=1;const e=/^[0-9]+$/,t=(o,n)=>{if(typeof o=="number"&&typeof n=="number")return o===n?0:ot(n,o)},Zn}var eo,_a;function Ea(){if(_a)return eo;_a=1;const e=ba(),{MAX_LENGTH:t,MAX_SAFE_INTEGER:s}=xa(),{safeRe:o,t:n}=nd(),a=od(),{compareIdentifiers:r}=rd();class i{constructor(f,l){if(l=a(l),f instanceof i){if(f.loose===!!l.loose&&f.includePrerelease===!!l.includePrerelease)return f;f=f.version}else if(typeof f!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof f}".`);if(f.length>t)throw new TypeError(`version is longer than ${t} characters`);e("SemVer",f,l),this.options=l,this.loose=!!l.loose,this.includePrerelease=!!l.includePrerelease;const p=f.trim().match(l.loose?o[n.LOOSE]:o[n.FULL]);if(!p)throw new TypeError(`Invalid Version: ${f}`);if(this.raw=f,this.major=+p[1],this.minor=+p[2],this.patch=+p[3],this.major>s||this.major<0)throw new TypeError("Invalid major version");if(this.minor>s||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>s||this.patch<0)throw new TypeError("Invalid patch version");p[4]?this.prerelease=p[4].split(".").map(v=>{if(/^[0-9]+$/.test(v)){const R=+v;if(R>=0&&Rf.major?1:this.minorf.minor?1:this.patchf.patch?1:0}comparePre(f){if(f instanceof i||(f=new i(f,this.options)),this.prerelease.length&&!f.prerelease.length)return-1;if(!this.prerelease.length&&f.prerelease.length)return 1;if(!this.prerelease.length&&!f.prerelease.length)return 0;let l=0;do{const p=this.prerelease[l],v=f.prerelease[l];if(e("prerelease compare",l,p,v),p===void 0&&v===void 0)return 0;if(v===void 0)return 1;if(p===void 0)return-1;if(p===v)continue;return r(p,v)}while(++l)}compareBuild(f){f instanceof i||(f=new i(f,this.options));let l=0;do{const p=this.build[l],v=f.build[l];if(e("build compare",l,p,v),p===void 0&&v===void 0)return 0;if(v===void 0)return 1;if(p===void 0)return-1;if(p===v)continue;return r(p,v)}while(++l)}inc(f,l,p){if(f.startsWith("pre")){if(!l&&p===!1)throw new Error("invalid increment argument: identifier is empty");if(l){const v=`-${l}`.match(this.options.loose?o[n.PRERELEASELOOSE]:o[n.PRERELEASE]);if(!v||v[1]!==l)throw new Error(`invalid identifier: ${l}`)}}switch(f){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",l,p);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",l,p);break;case"prepatch":this.prerelease.length=0,this.inc("patch",l,p),this.inc("pre",l,p);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",l,p),this.inc("pre",l,p);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const v=Number(p)?1:0;if(this.prerelease.length===0)this.prerelease=[v];else{let R=this.prerelease.length;for(;--R>=0;)typeof this.prerelease[R]=="number"&&(this.prerelease[R]++,R=-2);if(R===-1){if(l===this.prerelease.join(".")&&p===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(v)}}if(l){let R=[l,v];p===!1&&(R=[l]),r(this.prerelease[0],l)===0?isNaN(this.prerelease[1])&&(this.prerelease=R):this.prerelease=R}break}default:throw new Error(`invalid increment argument: ${f}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return eo=i,eo}var to,Sa;function ad(){if(Sa)return to;Sa=1;const e=Ea();return to=(s,o)=>new e(s,o).major,to}var id=ad();const Ca=ga(id);var so,Ra;function ld(){if(Ra)return so;Ra=1;const e=Ea();return so=(s,o,n=!1)=>{if(s instanceof e)return s;try{return new e(s,o)}catch(a){if(!n)return null;throw a}},so}var no,Ta;function cd(){if(Ta)return no;Ta=1;const e=ld();return no=(s,o)=>{const n=e(s,o);return n?n.version:null},no}var dd=cd();const fd=ga(dd);class ud{bus;constructor(t){typeof t.getVersion!="function"||!fd(t.getVersion())?console.warn("Proxying an event bus with an unknown or invalid version"):Ca(t.getVersion())!==Ca(this.getVersion())&&console.warn("Proxying an event bus of version "+t.getVersion()+" with "+this.getVersion()),this.bus=t}getVersion(){return"3.3.3"}subscribe(t,s){this.bus.subscribe(t,s)}unsubscribe(t,s){this.bus.unsubscribe(t,s)}emit(t,...s){this.bus.emit(t,...s)}}class pd{handlers=new Map;getVersion(){return"3.3.3"}subscribe(t,s){this.handlers.set(t,(this.handlers.get(t)||[]).concat(s))}unsubscribe(t,s){this.handlers.set(t,(this.handlers.get(t)||[]).filter(o=>o!==s))}emit(t,...s){(this.handlers.get(t)||[]).forEach(n=>{try{n(s[0])}catch(a){console.error("could not invoke event listener",a)}})}}let cs=null;function hd(){return cs!==null?cs:typeof window>"u"?new Proxy({},{get:()=>()=>console.error("Window not available, EventBus can not be established!")}):(window.OC?._eventBus&&typeof window._nc_event_bus>"u"&&(console.warn("found old event bus instance at OC._eventBus. Update your version!"),window._nc_event_bus=window.OC._eventBus),typeof window?._nc_event_bus<"u"?cs=new ud(window._nc_event_bus):cs=window._nc_event_bus=new pd,cs)}function gd(e,t){hd().subscribe(e,t)}class Ys{static GLOBAL_SCOPE_VOLATILE="nextcloud_vol";static GLOBAL_SCOPE_PERSISTENT="nextcloud_per";scope;wrapped;constructor(t,s,o){this.scope=`${o?Ys.GLOBAL_SCOPE_PERSISTENT:Ys.GLOBAL_SCOPE_VOLATILE}_${btoa(t)}_`,this.wrapped=s}scopeKey(t){return`${this.scope}${t}`}setItem(t,s){this.wrapped.setItem(this.scopeKey(t),s)}getItem(t){return this.wrapped.getItem(this.scopeKey(t))}removeItem(t){this.wrapped.removeItem(this.scopeKey(t))}clear(){Object.keys(this.wrapped).filter(t=>t.startsWith(this.scope)).map(this.wrapped.removeItem.bind(this.wrapped))}}class md{appId;persisted=!1;clearedOnLogout=!1;constructor(t){this.appId=t}persist(t=!0){return this.persisted=t,this}clearOnLogout(t=!0){return this.clearedOnLogout=t,this}build(){return new Ys(this.appId,this.persisted?window.localStorage:window.sessionStorage,!this.clearedOnLogout)}}function bd(e){return new md(e)}let ds;const ka=[];function vd(){return ds===void 0&&(ds=document.head.dataset.requesttoken??null),ds}function xd(e){ka.push(e)}gd("csrf-token-update",e=>{ds=e.token,ka.forEach(t=>{try{t(ds)}catch(s){console.error("Error updating CSRF token observer",s)}})});bd("public").persist().build();function Oa(e,t){return function(){return e.apply(t,arguments)}}const{toString:wd}=Object.prototype,{getPrototypeOf:oo}=Object,{iterator:Qs,toStringTag:Aa}=Symbol,Zs=(e=>t=>{const s=wd.call(t);return e[s]||(e[s]=s.slice(8,-1).toLowerCase())})(Object.create(null)),Me=e=>(e=e.toLowerCase(),t=>Zs(t)===e),en=e=>t=>typeof t===e,{isArray:Ut}=Array,zt=en("undefined");function fs(e){return e!==null&&!zt(e)&&e.constructor!==null&&!zt(e.constructor)&&Ce(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ia=Me("ArrayBuffer");function yd(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ia(e.buffer),t}const jd=en("string"),Ce=en("function"),Na=en("number"),us=e=>e!==null&&typeof e=="object",_d=e=>e===!0||e===!1,tn=e=>{if(Zs(e)!=="object")return!1;const t=oo(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Aa in e)&&!(Qs in e)},Ed=e=>{if(!us(e)||fs(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Sd=Me("Date"),Cd=Me("File"),Rd=e=>!!(e&&typeof e.uri<"u"),Td=e=>e&&typeof e.getParts<"u",kd=Me("Blob"),Od=Me("FileList"),Ad=e=>us(e)&&Ce(e.pipe);function Id(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Pa=Id(),La=typeof Pa.FormData<"u"?Pa.FormData:void 0,Nd=e=>{let t;return e&&(La&&e instanceof La||Ce(e.append)&&((t=Zs(e))==="formdata"||t==="object"&&Ce(e.toString)&&e.toString()==="[object FormData]"))},Pd=Me("URLSearchParams"),[Ld,$d,Dd,Md]=["ReadableStream","Request","Response","Headers"].map(Me),Fd=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ps(e,t,{allOwnKeys:s=!1}={}){if(e===null||typeof e>"u")return;let o,n;if(typeof e!="object"&&(e=[e]),Ut(e))for(o=0,n=e.length;o0;)if(n=s[o],t===n.toLowerCase())return n;return null}const Rt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Da=e=>!zt(e)&&e!==Rt;function ro(){const{caseless:e,skipUndefined:t}=Da(this)&&this||{},s={},o=(n,a)=>{if(a==="__proto__"||a==="constructor"||a==="prototype")return;const r=e&&$a(s,a)||a;tn(s[r])&&tn(n)?s[r]=ro(s[r],n):tn(n)?s[r]=ro({},n):Ut(n)?s[r]=n.slice():(!t||!zt(n))&&(s[r]=n)};for(let n=0,a=arguments.length;n(ps(t,(n,a)=>{s&&Ce(n)?Object.defineProperty(e,a,{value:Oa(n,s),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,a,{value:n,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:o}),e),zd=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Vd=(e,t,s,o)=>{e.prototype=Object.create(t.prototype,o),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),s&&Object.assign(e.prototype,s)},Bd=(e,t,s,o)=>{let n,a,r;const i={};if(t=t||{},e==null)return t;do{for(n=Object.getOwnPropertyNames(e),a=n.length;a-- >0;)r=n[a],(!o||o(r,e,t))&&!i[r]&&(t[r]=e[r],i[r]=!0);e=s!==!1&&oo(e)}while(e&&(!s||s(e,t))&&e!==Object.prototype);return t},Hd=(e,t,s)=>{e=String(e),(s===void 0||s>e.length)&&(s=e.length),s-=t.length;const o=e.indexOf(t,s);return o!==-1&&o===s},Wd=e=>{if(!e)return null;if(Ut(e))return e;let t=e.length;if(!Na(t))return null;const s=new Array(t);for(;t-- >0;)s[t]=e[t];return s},qd=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&oo(Uint8Array)),Kd=(e,t)=>{const o=(e&&e[Qs]).call(e);let n;for(;(n=o.next())&&!n.done;){const a=n.value;t.call(e,a[0],a[1])}},Gd=(e,t)=>{let s;const o=[];for(;(s=e.exec(t))!==null;)o.push(s);return o},Jd=Me("HTMLFormElement"),Xd=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(s,o,n){return o.toUpperCase()+n}),Ma=(({hasOwnProperty:e})=>(t,s)=>e.call(t,s))(Object.prototype),Yd=Me("RegExp"),Fa=(e,t)=>{const s=Object.getOwnPropertyDescriptors(e),o={};ps(s,(n,a)=>{let r;(r=t(n,a,e))!==!1&&(o[a]=r||n)}),Object.defineProperties(e,o)},Qd=e=>{Fa(e,(t,s)=>{if(Ce(e)&&["arguments","caller","callee"].indexOf(s)!==-1)return!1;const o=e[s];if(Ce(o)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+s+"'")})}})},Zd=(e,t)=>{const s={},o=n=>{n.forEach(a=>{s[a]=!0})};return Ut(e)?o(e):o(String(e).split(t)),s},ef=()=>{},tf=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function sf(e){return!!(e&&Ce(e.append)&&e[Aa]==="FormData"&&e[Qs])}const nf=e=>{const t=new Array(10),s=(o,n)=>{if(us(o)){if(t.indexOf(o)>=0)return;if(fs(o))return o;if(!("toJSON"in o)){t[n]=o;const a=Ut(o)?[]:{};return ps(o,(r,i)=>{const c=s(r,n+1);!zt(c)&&(a[i]=c)}),t[n]=void 0,a}}return o};return s(e,0)},of=Me("AsyncFunction"),rf=e=>e&&(us(e)||Ce(e))&&Ce(e.then)&&Ce(e.catch),Ua=((e,t)=>e?setImmediate:t?((s,o)=>(Rt.addEventListener("message",({source:n,data:a})=>{n===Rt&&a===s&&o.length&&o.shift()()},!1),n=>{o.push(n),Rt.postMessage(s,"*")}))(`axios@${Math.random()}`,[]):s=>setTimeout(s))(typeof setImmediate=="function",Ce(Rt.postMessage)),af=typeof queueMicrotask<"u"?queueMicrotask.bind(Rt):typeof process<"u"&&process.nextTick||Ua,m={isArray:Ut,isArrayBuffer:Ia,isBuffer:fs,isFormData:Nd,isArrayBufferView:yd,isString:jd,isNumber:Na,isBoolean:_d,isObject:us,isPlainObject:tn,isEmptyObject:Ed,isReadableStream:Ld,isRequest:$d,isResponse:Dd,isHeaders:Md,isUndefined:zt,isDate:Sd,isFile:Cd,isReactNativeBlob:Rd,isReactNative:Td,isBlob:kd,isRegExp:Yd,isFunction:Ce,isStream:Ad,isURLSearchParams:Pd,isTypedArray:qd,isFileList:Od,forEach:ps,merge:ro,extend:Ud,trim:Fd,stripBOM:zd,inherits:Vd,toFlatObject:Bd,kindOf:Zs,kindOfTest:Me,endsWith:Hd,toArray:Wd,forEachEntry:Kd,matchAll:Gd,isHTMLForm:Jd,hasOwnProperty:Ma,hasOwnProp:Ma,reduceDescriptors:Fa,freezeMethods:Qd,toObjectSet:Zd,toCamelCase:Xd,noop:ef,toFiniteNumber:tf,findKey:$a,global:Rt,isContextDefined:Da,isSpecCompliantForm:sf,toJSONObject:nf,isAsyncFn:of,isThenable:rf,setImmediate:Ua,asap:af,isIterable:e=>e!=null&&Ce(e[Qs])};let U=class ji extends Error{static from(t,s,o,n,a,r){const i=new ji(t.message,s||t.code,o,n,a);return i.cause=t,i.name=t.name,t.status!=null&&i.status==null&&(i.status=t.status),r&&Object.assign(i,r),i}constructor(t,s,o,n,a){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,s&&(this.code=s),o&&(this.config=o),n&&(this.request=n),a&&(this.response=a,this.status=a.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:m.toJSONObject(this.config),code:this.code,status:this.status}}};U.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",U.ERR_BAD_OPTION="ERR_BAD_OPTION",U.ECONNABORTED="ECONNABORTED",U.ETIMEDOUT="ETIMEDOUT",U.ERR_NETWORK="ERR_NETWORK",U.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",U.ERR_DEPRECATED="ERR_DEPRECATED",U.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",U.ERR_BAD_REQUEST="ERR_BAD_REQUEST",U.ERR_CANCELED="ERR_CANCELED",U.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",U.ERR_INVALID_URL="ERR_INVALID_URL";const lf=null;function ao(e){return m.isPlainObject(e)||m.isArray(e)}function za(e){return m.endsWith(e,"[]")?e.slice(0,-2):e}function io(e,t,s){return e?e.concat(t).map(function(n,a){return n=za(n),!s&&a?"["+n+"]":n}).join(s?".":""):t}function cf(e){return m.isArray(e)&&!e.some(ao)}const df=m.toFlatObject(m,{},null,function(t){return/^is[A-Z]/.test(t)});function sn(e,t,s){if(!m.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,s=m.toFlatObject(s,{metaTokens:!0,dots:!1,indexes:!1},!1,function(g,y){return!m.isUndefined(y[g])});const o=s.metaTokens,n=s.visitor||l,a=s.dots,r=s.indexes,c=(s.Blob||typeof Blob<"u"&&Blob)&&m.isSpecCompliantForm(t);if(!m.isFunction(n))throw new TypeError("visitor must be a function");function f(x){if(x===null)return"";if(m.isDate(x))return x.toISOString();if(m.isBoolean(x))return x.toString();if(!c&&m.isBlob(x))throw new U("Blob is not supported. Use a Buffer instead.");return m.isArrayBuffer(x)||m.isTypedArray(x)?c&&typeof Blob=="function"?new Blob([x]):Buffer.from(x):x}function l(x,g,y){let L=x;if(m.isReactNative(t)&&m.isReactNativeBlob(x))return t.append(io(y,g,a),f(x)),!1;if(x&&!y&&typeof x=="object"){if(m.endsWith(g,"{}"))g=o?g:g.slice(0,-2),x=JSON.stringify(x);else if(m.isArray(x)&&cf(x)||(m.isFileList(x)||m.endsWith(g,"[]"))&&(L=m.toArray(x)))return g=za(g),L.forEach(function(M,I){!(m.isUndefined(M)||M===null)&&t.append(r===!0?io([g],I,a):r===null?g:g+"[]",f(M))}),!1}return ao(x)?!0:(t.append(io(y,g,a),f(x)),!1)}const p=[],v=Object.assign(df,{defaultVisitor:l,convertValue:f,isVisitable:ao});function R(x,g){if(!m.isUndefined(x)){if(p.indexOf(x)!==-1)throw Error("Circular reference detected in "+g.join("."));p.push(x),m.forEach(x,function(L,$){(!(m.isUndefined(L)||L===null)&&n.call(t,L,m.isString($)?$.trim():$,g,v))===!0&&R(L,g?g.concat($):[$])}),p.pop()}}if(!m.isObject(e))throw new TypeError("data must be an object");return R(e),t}function Va(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(o){return t[o]})}function lo(e,t){this._pairs=[],e&&sn(e,this,t)}const Ba=lo.prototype;Ba.append=function(t,s){this._pairs.push([t,s])},Ba.toString=function(t){const s=t?function(o){return t.call(this,o,Va)}:Va;return this._pairs.map(function(n){return s(n[0])+"="+s(n[1])},"").join("&")};function ff(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ha(e,t,s){if(!t)return e;const o=s&&s.encode||ff,n=m.isFunction(s)?{serialize:s}:s,a=n&&n.serialize;let r;if(a?r=a(t,n):r=m.isURLSearchParams(t)?t.toString():new lo(t,n).toString(o),r){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+r}return e}class Wa{constructor(){this.handlers=[]}use(t,s,o){return this.handlers.push({fulfilled:t,rejected:s,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){m.forEach(this.handlers,function(o){o!==null&&t(o)})}}const co={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},uf={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<"u"?URLSearchParams:lo,FormData:typeof FormData<"u"?FormData:null,Blob:typeof Blob<"u"?Blob:null},protocols:["http","https","file","blob","url","data"]},fo=typeof window<"u"&&typeof document<"u",uo=typeof navigator=="object"&&navigator||void 0,pf=fo&&(!uo||["ReactNative","NativeScript","NS"].indexOf(uo.product)<0),hf=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",gf=fo&&window.location.href||"http://localhost",ve={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:fo,hasStandardBrowserEnv:pf,hasStandardBrowserWebWorkerEnv:hf,navigator:uo,origin:gf},Symbol.toStringTag,{value:"Module"})),...uf};function mf(e,t){return sn(e,new ve.classes.URLSearchParams,{visitor:function(s,o,n,a){return ve.isNode&&m.isBuffer(s)?(this.append(o,s.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)},...t})}function bf(e){return m.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function vf(e){const t={},s=Object.keys(e);let o;const n=s.length;let a;for(o=0;o=s.length;return r=!r&&m.isArray(n)?n.length:r,c?(m.hasOwnProp(n,r)?n[r]=[n[r],o]:n[r]=o,!i):((!n[r]||!m.isObject(n[r]))&&(n[r]=[]),t(s,o,n[r],a)&&m.isArray(n[r])&&(n[r]=vf(n[r])),!i)}if(m.isFormData(e)&&m.isFunction(e.entries)){const s={};return m.forEachEntry(e,(o,n)=>{t(bf(o),n,s,0)}),s}return null}function xf(e,t,s){if(m.isString(e))try{return(t||JSON.parse)(e),m.trim(e)}catch(o){if(o.name!=="SyntaxError")throw o}return(s||JSON.stringify)(e)}const hs={transitional:co,adapter:["xhr","http","fetch"],transformRequest:[function(t,s){const o=s.getContentType()||"",n=o.indexOf("application/json")>-1,a=m.isObject(t);if(a&&m.isHTMLForm(t)&&(t=new FormData(t)),m.isFormData(t))return n?JSON.stringify(qa(t)):t;if(m.isArrayBuffer(t)||m.isBuffer(t)||m.isStream(t)||m.isFile(t)||m.isBlob(t)||m.isReadableStream(t))return t;if(m.isArrayBufferView(t))return t.buffer;if(m.isURLSearchParams(t))return s.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(a){if(o.indexOf("application/x-www-form-urlencoded")>-1)return mf(t,this.formSerializer).toString();if((i=m.isFileList(t))||o.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return sn(i?{"files[]":t}:t,c&&new c,this.formSerializer)}}return a||n?(s.setContentType("application/json",!1),xf(t)):t}],transformResponse:[function(t){const s=this.transitional||hs.transitional,o=s&&s.forcedJSONParsing,n=this.responseType==="json";if(m.isResponse(t)||m.isReadableStream(t))return t;if(t&&m.isString(t)&&(o&&!this.responseType||n)){const r=!(s&&s.silentJSONParsing)&&n;try{return JSON.parse(t,this.parseReviver)}catch(i){if(r)throw i.name==="SyntaxError"?U.from(i,U.ERR_BAD_RESPONSE,this,null,this.response):i}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:ve.classes.FormData,Blob:ve.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};m.forEach(["delete","get","head","post","put","patch"],e=>{hs.headers[e]={}});const wf=m.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),yf=e=>{const t={};let s,o,n;return e&&e.split(` -`).forEach(function(r){n=r.indexOf(":"),s=r.substring(0,n).trim().toLowerCase(),o=r.substring(n+1).trim(),!(!s||t[s]&&wf[s])&&(s==="set-cookie"?t[s]?t[s].push(o):t[s]=[o]:t[s]=t[s]?t[s]+", "+o:o)}),t},Ka=Symbol("internals"),jf=e=>!/[\r\n]/.test(e);function Ga(e,t){if(!(e===!1||e==null)){if(m.isArray(e)){e.forEach(s=>Ga(s,t));return}if(!jf(String(e)))throw new Error(`Invalid character in header content ["${t}"]`)}}function gs(e){return e&&String(e).trim().toLowerCase()}function _f(e){let t=e.length;for(;t>0;){const s=e.charCodeAt(t-1);if(s!==10&&s!==13)break;t-=1}return t===e.length?e:e.slice(0,t)}function nn(e){return e===!1||e==null?e:m.isArray(e)?e.map(nn):_f(String(e))}function Ef(e){const t=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=s.exec(e);)t[o[1]]=o[2];return t}const Sf=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function po(e,t,s,o,n){if(m.isFunction(o))return o.call(this,t,s);if(n&&(t=s),!!m.isString(t)){if(m.isString(o))return t.indexOf(o)!==-1;if(m.isRegExp(o))return o.test(t)}}function Cf(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,s,o)=>s.toUpperCase()+o)}function Rf(e,t){const s=m.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+s,{value:function(n,a,r){return this[o].call(this,t,n,a,r)},configurable:!0})})}let Re=class{constructor(t){t&&this.set(t)}set(t,s,o){const n=this;function a(i,c,f){const l=gs(c);if(!l)throw new Error("header name must be a non-empty string");const p=m.findKey(n,l);(!p||n[p]===void 0||f===!0||f===void 0&&n[p]!==!1)&&(Ga(i,c),n[p||c]=nn(i))}const r=(i,c)=>m.forEach(i,(f,l)=>a(f,l,c));if(m.isPlainObject(t)||t instanceof this.constructor)r(t,s);else if(m.isString(t)&&(t=t.trim())&&!Sf(t))r(yf(t),s);else if(m.isObject(t)&&m.isIterable(t)){let i={},c,f;for(const l of t){if(!m.isArray(l))throw TypeError("Object iterator must return a key-value pair");i[f=l[0]]=(c=i[f])?m.isArray(c)?[...c,l[1]]:[c,l[1]]:l[1]}r(i,s)}else t!=null&&a(s,t,o);return this}get(t,s){if(t=gs(t),t){const o=m.findKey(this,t);if(o){const n=this[o];if(!s)return n;if(s===!0)return Ef(n);if(m.isFunction(s))return s.call(this,n,o);if(m.isRegExp(s))return s.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,s){if(t=gs(t),t){const o=m.findKey(this,t);return!!(o&&this[o]!==void 0&&(!s||po(this,this[o],o,s)))}return!1}delete(t,s){const o=this;let n=!1;function a(r){if(r=gs(r),r){const i=m.findKey(o,r);i&&(!s||po(o,o[i],i,s))&&(delete o[i],n=!0)}}return m.isArray(t)?t.forEach(a):a(t),n}clear(t){const s=Object.keys(this);let o=s.length,n=!1;for(;o--;){const a=s[o];(!t||po(this,this[a],a,t,!0))&&(delete this[a],n=!0)}return n}normalize(t){const s=this,o={};return m.forEach(this,(n,a)=>{const r=m.findKey(o,a);if(r){s[r]=nn(n),delete s[a];return}const i=t?Cf(a):String(a).trim();i!==a&&delete s[a],s[i]=nn(n),o[i]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const s=Object.create(null);return m.forEach(this,(o,n)=>{o!=null&&o!==!1&&(s[n]=t&&m.isArray(o)?o.join(", "):o)}),s}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,s])=>t+": "+s).join(` -`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...s){const o=new this(t);return s.forEach(n=>o.set(n)),o}static accessor(t){const o=(this[Ka]=this[Ka]={accessors:{}}).accessors,n=this.prototype;function a(r){const i=gs(r);o[i]||(Rf(n,r),o[i]=!0)}return m.isArray(t)?t.forEach(a):a(t),this}};Re.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),m.reduceDescriptors(Re.prototype,({value:e},t)=>{let s=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(o){this[s]=o}}}),m.freezeMethods(Re);function ho(e,t){const s=this||hs,o=t||s,n=Re.from(o.headers);let a=o.data;return m.forEach(e,function(i){a=i.call(s,a,n.normalize(),t?t.status:void 0)}),n.normalize(),a}function Ja(e){return!!(e&&e.__CANCEL__)}let ms=class extends U{constructor(t,s,o){super(t??"canceled",U.ERR_CANCELED,s,o),this.name="CanceledError",this.__CANCEL__=!0}};function Xa(e,t,s){const o=s.config.validateStatus;!s.status||!o||o(s.status)?e(s):t(new U("Request failed with status code "+s.status,[U.ERR_BAD_REQUEST,U.ERR_BAD_RESPONSE][Math.floor(s.status/100)-4],s.config,s.request,s))}function Tf(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function kf(e,t){e=e||10;const s=new Array(e),o=new Array(e);let n=0,a=0,r;return t=t!==void 0?t:1e3,function(c){const f=Date.now(),l=o[a];r||(r=f),s[n]=c,o[n]=f;let p=a,v=0;for(;p!==n;)v+=s[p++],p=p%e;if(n=(n+1)%e,n===a&&(a=(a+1)%e),f-r{s=l,n=null,a&&(clearTimeout(a),a=null),e(...f)};return[(...f)=>{const l=Date.now(),p=l-s;p>=o?r(f,l):(n=f,a||(a=setTimeout(()=>{a=null,r(n)},o-p)))},()=>n&&r(n)]}const on=(e,t,s=3)=>{let o=0;const n=kf(50,250);return Of(a=>{const r=a.loaded,i=a.lengthComputable?a.total:void 0,c=r-o,f=n(c),l=r<=i;o=r;const p={loaded:r,total:i,progress:i?r/i:void 0,bytes:c,rate:f||void 0,estimated:f&&i&&l?(i-r)/f:void 0,event:a,lengthComputable:i!=null,[t?"download":"upload"]:!0};e(p)},s)},Ya=(e,t)=>{const s=e!=null;return[o=>t[0]({lengthComputable:s,total:e,loaded:o}),t[1]]},Qa=e=>(...t)=>m.asap(()=>e(...t)),Af=ve.hasStandardBrowserEnv?((e,t)=>s=>(s=new URL(s,ve.origin),e.protocol===s.protocol&&e.host===s.host&&(t||e.port===s.port)))(new URL(ve.origin),ve.navigator&&/(msie|trident)/i.test(ve.navigator.userAgent)):()=>!0,If=ve.hasStandardBrowserEnv?{write(e,t,s,o,n,a,r){if(typeof document>"u")return;const i=[`${e}=${encodeURIComponent(t)}`];m.isNumber(s)&&i.push(`expires=${new Date(s).toUTCString()}`),m.isString(o)&&i.push(`path=${o}`),m.isString(n)&&i.push(`domain=${n}`),a===!0&&i.push("secure"),m.isString(r)&&i.push(`SameSite=${r}`),document.cookie=i.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function Nf(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Pf(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Za(e,t,s){let o=!Nf(t);return e&&(o||s==!1)?Pf(e,t):t}const ei=e=>e instanceof Re?{...e}:e;function Tt(e,t){t=t||{};const s={};function o(f,l,p,v){return m.isPlainObject(f)&&m.isPlainObject(l)?m.merge.call({caseless:v},f,l):m.isPlainObject(l)?m.merge({},l):m.isArray(l)?l.slice():l}function n(f,l,p,v){if(m.isUndefined(l)){if(!m.isUndefined(f))return o(void 0,f,p,v)}else return o(f,l,p,v)}function a(f,l){if(!m.isUndefined(l))return o(void 0,l)}function r(f,l){if(m.isUndefined(l)){if(!m.isUndefined(f))return o(void 0,f)}else return o(void 0,l)}function i(f,l,p){if(p in t)return o(f,l);if(p in e)return o(void 0,f)}const c={url:a,method:a,data:a,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,withXSRFToken:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:i,headers:(f,l,p)=>n(ei(f),ei(l),p,!0)};return m.forEach(Object.keys({...e,...t}),function(l){if(l==="__proto__"||l==="constructor"||l==="prototype")return;const p=m.hasOwnProp(c,l)?c[l]:n,v=p(e[l],t[l],l);m.isUndefined(v)&&p!==i||(s[l]=v)}),s}const ti=e=>{const t=Tt({},e);let{data:s,withXSRFToken:o,xsrfHeaderName:n,xsrfCookieName:a,headers:r,auth:i}=t;if(t.headers=r=Re.from(r),t.url=Ha(Za(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),i&&r.set("Authorization","Basic "+btoa((i.username||"")+":"+(i.password?unescape(encodeURIComponent(i.password)):""))),m.isFormData(s)){if(ve.hasStandardBrowserEnv||ve.hasStandardBrowserWebWorkerEnv)r.setContentType(void 0);else if(m.isFunction(s.getHeaders)){const c=s.getHeaders(),f=["content-type","content-length"];Object.entries(c).forEach(([l,p])=>{f.includes(l.toLowerCase())&&r.set(l,p)})}}if(ve.hasStandardBrowserEnv&&(o&&m.isFunction(o)&&(o=o(t)),o||o!==!1&&Af(t.url))){const c=n&&a&&If.read(a);c&&r.set(n,c)}return t},Lf=typeof XMLHttpRequest<"u"&&function(e){return new Promise(function(s,o){const n=ti(e);let a=n.data;const r=Re.from(n.headers).normalize();let{responseType:i,onUploadProgress:c,onDownloadProgress:f}=n,l,p,v,R,x;function g(){R&&R(),x&&x(),n.cancelToken&&n.cancelToken.unsubscribe(l),n.signal&&n.signal.removeEventListener("abort",l)}let y=new XMLHttpRequest;y.open(n.method.toUpperCase(),n.url,!0),y.timeout=n.timeout;function L(){if(!y)return;const M=Re.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),J={data:!i||i==="text"||i==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:M,config:e,request:y};Xa(function(le){s(le),g()},function(le){o(le),g()},J),y=null}"onloadend"in y?y.onloadend=L:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(L)},y.onabort=function(){y&&(o(new U("Request aborted",U.ECONNABORTED,e,y)),y=null)},y.onerror=function(I){const J=I&&I.message?I.message:"Network Error",xe=new U(J,U.ERR_NETWORK,e,y);xe.event=I||null,o(xe),y=null},y.ontimeout=function(){let I=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const J=n.transitional||co;n.timeoutErrorMessage&&(I=n.timeoutErrorMessage),o(new U(I,J.clarifyTimeoutError?U.ETIMEDOUT:U.ECONNABORTED,e,y)),y=null},a===void 0&&r.setContentType(null),"setRequestHeader"in y&&m.forEach(r.toJSON(),function(I,J){y.setRequestHeader(J,I)}),m.isUndefined(n.withCredentials)||(y.withCredentials=!!n.withCredentials),i&&i!=="json"&&(y.responseType=n.responseType),f&&([v,x]=on(f,!0),y.addEventListener("progress",v)),c&&y.upload&&([p,R]=on(c),y.upload.addEventListener("progress",p),y.upload.addEventListener("loadend",R)),(n.cancelToken||n.signal)&&(l=M=>{y&&(o(!M||M.type?new ms(null,e,y):M),y.abort(),y=null)},n.cancelToken&&n.cancelToken.subscribe(l),n.signal&&(n.signal.aborted?l():n.signal.addEventListener("abort",l)));const $=Tf(n.url);if($&&ve.protocols.indexOf($)===-1){o(new U("Unsupported protocol "+$+":",U.ERR_BAD_REQUEST,e));return}y.send(a||null)})},$f=(e,t)=>{const{length:s}=e=e?e.filter(Boolean):[];if(t||s){let o=new AbortController,n;const a=function(f){if(!n){n=!0,i();const l=f instanceof Error?f:this.reason;o.abort(l instanceof U?l:new ms(l instanceof Error?l.message:l))}};let r=t&&setTimeout(()=>{r=null,a(new U(`timeout of ${t}ms exceeded`,U.ETIMEDOUT))},t);const i=()=>{e&&(r&&clearTimeout(r),r=null,e.forEach(f=>{f.unsubscribe?f.unsubscribe(a):f.removeEventListener("abort",a)}),e=null)};e.forEach(f=>f.addEventListener("abort",a));const{signal:c}=o;return c.unsubscribe=()=>m.asap(i),c}},Df=function*(e,t){let s=e.byteLength;if(s{const n=Mf(e,t);let a=0,r,i=c=>{r||(r=!0,o&&o(c))};return new ReadableStream({async pull(c){try{const{done:f,value:l}=await n.next();if(f){i(),c.close();return}let p=l.byteLength;if(s){let v=a+=p;s(v)}c.enqueue(new Uint8Array(l))}catch(f){throw i(f),f}},cancel(c){return i(c),n.return()}},{highWaterMark:2})},ni=64*1024,{isFunction:rn}=m,Uf=(({Request:e,Response:t})=>({Request:e,Response:t}))(m.global),{ReadableStream:oi,TextEncoder:ri}=m.global,ai=(e,...t)=>{try{return!!e(...t)}catch{return!1}},zf=e=>{e=m.merge.call({skipUndefined:!0},Uf,e);const{fetch:t,Request:s,Response:o}=e,n=t?rn(t):typeof fetch=="function",a=rn(s),r=rn(o);if(!n)return!1;const i=n&&rn(oi),c=n&&(typeof ri=="function"?(x=>g=>x.encode(g))(new ri):async x=>new Uint8Array(await new s(x).arrayBuffer())),f=a&&i&&ai(()=>{let x=!1;const g=new oi,y=new s(ve.origin,{body:g,method:"POST",get duplex(){return x=!0,"half"}}).headers.has("Content-Type");return g.cancel(),x&&!y}),l=r&&i&&ai(()=>m.isReadableStream(new o("").body)),p={stream:l&&(x=>x.body)};n&&["text","arrayBuffer","blob","formData","stream"].forEach(x=>{!p[x]&&(p[x]=(g,y)=>{let L=g&&g[x];if(L)return L.call(g);throw new U(`Response type '${x}' is not supported`,U.ERR_NOT_SUPPORT,y)})});const v=async x=>{if(x==null)return 0;if(m.isBlob(x))return x.size;if(m.isSpecCompliantForm(x))return(await new s(ve.origin,{method:"POST",body:x}).arrayBuffer()).byteLength;if(m.isArrayBufferView(x)||m.isArrayBuffer(x))return x.byteLength;if(m.isURLSearchParams(x)&&(x=x+""),m.isString(x))return(await c(x)).byteLength},R=async(x,g)=>{const y=m.toFiniteNumber(x.getContentLength());return y??v(g)};return async x=>{let{url:g,method:y,data:L,signal:$,cancelToken:M,timeout:I,onDownloadProgress:J,onUploadProgress:xe,responseType:le,headers:Pe,withCredentials:gt="same-origin",fetchOptions:Qe}=ti(x),yt=t||fetch;le=le?(le+"").toLowerCase():"text";let mt=$f([$,M&&M.toAbortSignal()],I),Ze=null;const Fe=mt&&mt.unsubscribe&&(()=>{mt.unsubscribe()});let bs;try{if(xe&&f&&y!=="get"&&y!=="head"&&(bs=await R(Pe,L))!==0){let we=new s(g,{method:"POST",body:L,duplex:"half"}),ue;if(m.isFormData(L)&&(ue=we.headers.get("content-type"))&&Pe.setContentType(ue),we.body){const[Bt,Ht]=Ya(bs,on(Qa(xe)));L=si(we.body,ni,Bt,Ht)}}m.isString(gt)||(gt=gt?"include":"omit");const Q=a&&"credentials"in s.prototype,ne={...Qe,signal:mt,method:y.toUpperCase(),headers:Pe.normalize().toJSON(),body:L,duplex:"half",credentials:Q?gt:void 0};Ze=a&&new s(g,ne);let W=await(a?yt(Ze,Qe):yt(g,ne));const et=l&&(le==="stream"||le==="response");if(l&&(J||et&&Fe)){const we={};["status","statusText","headers"].forEach(cn=>{we[cn]=W[cn]});const ue=m.toFiniteNumber(W.headers.get("content-length")),[Bt,Ht]=J&&Ya(ue,on(Qa(J),!0))||[];W=new o(si(W.body,ni,Bt,()=>{Ht&&Ht(),Fe&&Fe()}),we)}le=le||"text";let Vt=await p[m.findKey(p,le)||"text"](W,x);return!et&&Fe&&Fe(),await new Promise((we,ue)=>{Xa(we,ue,{data:Vt,headers:Re.from(W.headers),status:W.status,statusText:W.statusText,config:x,request:Ze})})}catch(Q){throw Fe&&Fe(),Q&&Q.name==="TypeError"&&/Load failed|fetch/i.test(Q.message)?Object.assign(new U("Network Error",U.ERR_NETWORK,x,Ze,Q&&Q.response),{cause:Q.cause||Q}):U.from(Q,Q&&Q.code,x,Ze,Q&&Q.response)}}},Vf=new Map,ii=e=>{let t=e&&e.env||{};const{fetch:s,Request:o,Response:n}=t,a=[o,n,s];let r=a.length,i=r,c,f,l=Vf;for(;i--;)c=a[i],f=l.get(c),f===void 0&&l.set(c,f=i?new Map:zf(t)),l=f;return f};ii();const go={http:lf,xhr:Lf,fetch:{get:ii}};m.forEach(go,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const li=e=>`- ${e}`,Bf=e=>m.isFunction(e)||e===null||e===!1;function Hf(e,t){e=m.isArray(e)?e:[e];const{length:s}=e;let o,n;const a={};for(let r=0;r`adapter ${c} `+(f===!1?"is not supported by the environment":"is not available in the build"));let i=s?r.length>1?`since : +`],...dl(s))}),t}function dl({vnode:e,recurseCount:t}){const s=t>0?`... (${t} recursive calls)`:"",o=e.component?e.component.parent==null:!1,n=` at <${Yr(e.component,e.type,o)}`,a=">"+s;return e.props?[n,...ul(e.props),a]:[n+a]}function ul(e){const t=[],s=Object.keys(e);return s.slice(0,3).forEach(o=>{t.push(...tr(o,e[o]))}),s.length>3&&t.push(" ..."),t}function tr(e,t,s){return ce(t)?(t=JSON.stringify(t),s?t:[`${e}=${t}`]):typeof t=="number"||typeof t=="boolean"||t==null?s?t:[`${e}=${t}`]:be(t)?(t=tr(e,Y(t.value),!0),s?t:[`${e}=Ref<`,t,">"]):B(t)?[`${e}=fn${t.name?`<${t.name}>`:""}`]:(t=Y(t),s?t:[`${e}=`,t])}function Pt(e,t,s,o){try{return o?e(...o):e()}catch(n){Ls(n,t,s)}}function We(e,t,s,o){if(B(e)){const n=Pt(e,t,s,o);return n&&Ro(n)&&n.catch(a=>{Ls(a,t,s)}),n}if(V(e)){const n=[];for(let a=0;a>>1,n=je[o],a=Zt(n);a=Zt(s)?je.push(e):je.splice(hl(t),0,e),e.flags|=1,nr()}}function nr(){$s||($s=sr.then(ar))}function gl(e){V(e)?Lt.push(...e):xt&&e.id===-1?xt.splice($t+1,0,e):e.flags&1||(Lt.push(e),e.flags|=1),nr()}function or(e,t,s=qe+1){for(;sZt(s)-Zt(o));if(Lt.length=0,xt){xt.push(...t);return}for(xt=t,$t=0;$te.id==null?e.flags&2?-1:1/0:e.id;function ar(e){try{for(qe=0;qe{o._d&&Vr(-1);const a=Ds(t);let r;try{r=e(...n)}finally{Ds(a),o._d&&Vr(1)}return r};return o._n=!0,o._c=!0,o._d=!0,o}function ct(e,t){if(Oe===null)return e;const s=Gs(Oe),o=e.dirs||(e.dirs=[]);for(let n=0;n1)return s&&B(t)?t.call(o&&o.proxy):t}}const vl=Symbol.for("v-scx"),xl=()=>Ms(vl);function In(e,t,s){return lr(e,t,s)}function lr(e,t,s=ee){const{immediate:o,deep:n,flush:a,once:r}=s,i=ge({},s),c=t&&o||!t&&a!=="post";let u;if(ls){if(a==="sync"){const R=xl();u=R.__watcherHandles||(R.__watcherHandles=[])}else if(!c){const R=()=>{};return R.stop=Ue,R.resume=Ue,R.pause=Ue,R}}const l=ve;i.call=(R,x,g)=>We(R,l,x,g);let p=!1;a==="post"?i.scheduler=R=>{Se(R,l&&l.suspense)}:a!=="sync"&&(p=!0,i.scheduler=(R,x)=>{x?R():An(R)}),i.augmentJob=R=>{t&&(R.flags|=4),p&&(R.flags|=2,l&&(R.id=l.uid,R.i=l))};const v=il(e,t,i);return ls&&(u?u.push(v):c&&v()),v}function wl(e,t,s){const o=this.proxy,n=ce(e)?e.includes(".")?cr(o,e):()=>o[e]:e.bind(o,o);let a;B(t)?a=t:(a=t.handler,s=t);const r=is(this),i=lr(n,a.bind(o),s);return r(),i}function cr(e,t){const s=t.split(".");return()=>{let o=e;for(let n=0;ne.__isTeleport,_l=Symbol("_leaveCb");function Nn(e,t){e.shapeFlag&6&&e.component?(e.transition=t,Nn(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function dr(e){e.ids=[e.ids[0]+e.ids[2]+++"-",0,0]}function ur(e,t){let s;return!!((s=Object.getOwnPropertyDescriptor(e,t))&&!s.configurable)}const Fs=new WeakMap;function es(e,t,s,o,n=!1){if(V(e)){e.forEach((g,y)=>es(g,t&&(V(t)?t[y]:t),s,o,n));return}if(ts(o)&&!n){o.shapeFlag&512&&o.type.__asyncResolved&&o.component.subTree.component&&es(e,t,s,o.component.subTree);return}const a=o.shapeFlag&4?Gs(o.component):o.el,r=n?null:a,{i,r:c}=e,u=t&&t.r,l=i.refs===ee?i.refs={}:i.refs,p=i.setupState,v=Y(p),R=p===ee?Eo:g=>ur(l,g)?!1:X(v,g),x=(g,y)=>!(y&&ur(l,y));if(u!=null&&u!==c){if(fr(t),ce(u))l[u]=null,R(u)&&(p[u]=null);else if(be(u)){const g=t;x(u,g.k)&&(u.value=null),g.k&&(l[g.k]=null)}}if(B(c))Pt(c,i,12,[r,l]);else{const g=ce(c),y=be(c);if(g||y){const L=()=>{if(e.f){const $=g?R(c)?p[c]:l[c]:x()||!e.k?c.value:l[e.k];if(n)V($)&&fn($,a);else if(V($))$.includes(a)||$.push(a);else if(g)l[c]=[a],R(c)&&(p[c]=l[c]);else{const M=[a];x(c,e.k)&&(c.value=M),e.k&&(l[e.k]=M)}}else g?(l[c]=r,R(c)&&(p[c]=r)):y&&(x(c,e.k)&&(c.value=r),e.k&&(l[e.k]=r))};if(r){const $=()=>{L(),Fs.delete(e)};$.id=-1,Fs.set(e,$),Se($,s)}else fr(e),L()}}}function fr(e){const t=Fs.get(e);t&&(t.flags|=8,Fs.delete(e))}Cs().requestIdleCallback,Cs().cancelIdleCallback;const ts=e=>!!e.type.__asyncLoader,pr=e=>e.type.__isKeepAlive;function El(e,t){hr(e,"a",t)}function Sl(e,t){hr(e,"da",t)}function hr(e,t,s=ve){const o=e.__wdc||(e.__wdc=()=>{let n=s;for(;n;){if(n.isDeactivated)return;n=n.parent}return e()});if(Us(t,o,s),s){let n=s.parent;for(;n&&n.parent;)pr(n.parent.vnode)&&Cl(o,t,s,n),n=n.parent}}function Cl(e,t,s,o){const n=Us(t,e,o,!0);gr(()=>{fn(o[t],n)},s)}function Us(e,t,s=ve,o=!1){if(s){const n=s[e]||(s[e]=[]),a=t.__weh||(t.__weh=(...r)=>{Ve();const i=is(s),c=We(t,s,e,r);return i(),Be(),c});return o?n.unshift(a):n.push(a),a}}const dt=e=>(t,s=ve)=>{(!ls||e==="sp")&&Us(e,(...o)=>t(...o),s)},Rl=dt("bm"),Tl=dt("m"),kl=dt("bu"),Ol=dt("u"),Al=dt("bum"),gr=dt("um"),Il=dt("sp"),Nl=dt("rtg"),Pl=dt("rtc");function Ll(e,t=ve){Us("ec",e,t)}const $l="components";function ut(e,t){return Ml($l,e,!0,t)||e}const Dl=Symbol.for("v-ndc");function Ml(e,t,s=!0,o=!1){const n=Oe||ve;if(n){const a=n.type;{const i=Xr(a,!1);if(i&&(i===t||i===ye(t)||i===Es(ye(t))))return a}const r=mr(n[e]||a[e],t)||mr(n.appContext[e],t);return!r&&o?a:r}}function mr(e,t){return e&&(e[t]||e[ye(t)]||e[Es(ye(t))])}function ie(e,t,s,o){let n;const a=s,r=V(e);if(r||ce(e)){const i=r&&_t(e);let c=!1,u=!1;i&&(c=!De(e),u=vt(e),e=Rs(e)),n=new Array(e.length);for(let l=0,p=e.length;lt(i,c,void 0,a));else{const i=Object.keys(e);n=new Array(i.length);for(let c=0,u=i.length;ce?Kr(e)?Gs(e):Pn(e.parent):null,ss=ge(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Pn(e.parent),$root:e=>Pn(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>wr(e),$forceUpdate:e=>e.f||(e.f=()=>{An(e.update)}),$nextTick:e=>e.n||(e.n=pl.bind(e.proxy)),$watch:e=>wl.bind(e)}),Ln=(e,t)=>e!==ee&&!e.__isScriptSetup&&X(e,t),Fl={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:s,setupState:o,data:n,props:a,accessCache:r,type:i,appContext:c}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return o[t];case 2:return n[t];case 4:return s[t];case 3:return a[t]}else{if(Ln(o,t))return r[t]=1,o[t];if(n!==ee&&X(n,t))return r[t]=2,n[t];if(X(a,t))return r[t]=3,a[t];if(s!==ee&&X(s,t))return r[t]=4,s[t];$n&&(r[t]=0)}}const u=ss[t];let l,p;if(u)return t==="$attrs"&&me(e.attrs,"get",""),u(e);if((l=i.__cssModules)&&(l=l[t]))return l;if(s!==ee&&X(s,t))return r[t]=4,s[t];if(p=c.config.globalProperties,X(p,t))return p[t]},set({_:e},t,s){const{data:o,setupState:n,ctx:a}=e;return Ln(n,t)?(n[t]=s,!0):o!==ee&&X(o,t)?(o[t]=s,!0):X(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(a[t]=s,!0)},has({_:{data:e,setupState:t,accessCache:s,ctx:o,appContext:n,props:a,type:r}},i){let c;return!!(s[i]||e!==ee&&i[0]!=="$"&&X(e,i)||Ln(t,i)||X(a,i)||X(o,i)||X(ss,i)||X(n.config.globalProperties,i)||(c=r.__cssModules)&&c[i])},defineProperty(e,t,s){return s.get!=null?e._.accessCache[t]=0:X(s,"value")&&this.set(e,t,s.value,null),Reflect.defineProperty(e,t,s)}};function br(e){return V(e)?e.reduce((t,s)=>(t[s]=null,t),{}):e}let $n=!0;function Ul(e){const t=wr(e),s=e.proxy,o=e.ctx;$n=!1,t.beforeCreate&&vr(t.beforeCreate,e,"bc");const{data:n,computed:a,methods:r,watch:i,provide:c,inject:u,created:l,beforeMount:p,mounted:v,beforeUpdate:R,updated:x,activated:g,deactivated:y,beforeDestroy:L,beforeUnmount:$,destroyed:M,unmounted:A,render:W,renderTracked:fe,renderTriggered:ne,errorCaptured:ke,serverPrefetch:gt,expose:Qe,inheritAttrs:yt,components:mt,directives:Ze,filters:Fe}=t;if(u&&zl(u,o,null),r)for(const oe in r){const q=r[oe];B(q)&&(o[oe]=q.bind(s))}if(n){const oe=n.call(s,s);Z(oe)&&(e.data=As(oe))}if($n=!0,a)for(const oe in a){const q=a[oe],et=B(q)?q.bind(s,s):B(q.get)?q.get.bind(s,s):Ue,Vt=!B(q)&&B(q.set)?q.set.bind(s):Ue,we=Cc({get:et,set:Vt});Object.defineProperty(o,oe,{enumerable:!0,configurable:!0,get:()=>we.value,set:pe=>we.value=pe})}if(i)for(const oe in i)xr(i[oe],o,s,oe);if(c){const oe=B(c)?c.call(s):c;Reflect.ownKeys(oe).forEach(q=>{bl(q,oe[q])})}l&&vr(l,e,"c");function Q(oe,q){V(q)?q.forEach(et=>oe(et.bind(s))):q&&oe(q.bind(s))}if(Q(Rl,p),Q(Tl,v),Q(kl,R),Q(Ol,x),Q(El,g),Q(Sl,y),Q(Ll,ke),Q(Pl,fe),Q(Nl,ne),Q(Al,$),Q(gr,A),Q(Il,gt),V(Qe))if(Qe.length){const oe=e.exposed||(e.exposed={});Qe.forEach(q=>{Object.defineProperty(oe,q,{get:()=>s[q],set:et=>s[q]=et,enumerable:!0})})}else e.exposed||(e.exposed={});W&&e.render===Ue&&(e.render=W),yt!=null&&(e.inheritAttrs=yt),mt&&(e.components=mt),Ze&&(e.directives=Ze),gt&&dr(e)}function zl(e,t,s=Ue){V(e)&&(e=Dn(e));for(const o in e){const n=e[o];let a;Z(n)?"default"in n?a=Ms(n.from||o,n.default,!0):a=Ms(n.from||o):a=Ms(n),be(a)?Object.defineProperty(t,o,{enumerable:!0,configurable:!0,get:()=>a.value,set:r=>a.value=r}):t[o]=a}}function vr(e,t,s){We(V(e)?e.map(o=>o.bind(t.proxy)):e.bind(t.proxy),t,s)}function xr(e,t,s,o){let n=o.includes(".")?cr(s,o):()=>s[o];if(ce(e)){const a=t[e];B(a)&&In(n,a)}else if(B(e))In(n,e.bind(s));else if(Z(e))if(V(e))e.forEach(a=>xr(a,t,s,o));else{const a=B(e.handler)?e.handler.bind(s):t[e.handler];B(a)&&In(n,a,e)}}function wr(e){const t=e.type,{mixins:s,extends:o}=t,{mixins:n,optionsCache:a,config:{optionMergeStrategies:r}}=e.appContext,i=a.get(t);let c;return i?c=i:!n.length&&!s&&!o?c=t:(c={},n.length&&n.forEach(u=>zs(c,u,r,!0)),zs(c,t,r)),Z(t)&&a.set(t,c),c}function zs(e,t,s,o=!1){const{mixins:n,extends:a}=t;a&&zs(e,a,s,!0),n&&n.forEach(r=>zs(e,r,s,!0));for(const r in t)if(!(o&&r==="expose")){const i=Vl[r]||s&&s[r];e[r]=i?i(e[r],t[r]):t[r]}return e}const Vl={data:yr,props:jr,emits:jr,methods:ns,computed:ns,beforeCreate:_e,created:_e,beforeMount:_e,mounted:_e,beforeUpdate:_e,updated:_e,beforeDestroy:_e,beforeUnmount:_e,destroyed:_e,unmounted:_e,activated:_e,deactivated:_e,errorCaptured:_e,serverPrefetch:_e,components:ns,directives:ns,watch:Hl,provide:yr,inject:Bl};function yr(e,t){return t?e?function(){return ge(B(e)?e.call(this,this):e,B(t)?t.call(this,this):t)}:t:e}function Bl(e,t){return ns(Dn(e),Dn(t))}function Dn(e){if(V(e)){const t={};for(let s=0;st==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${ye(t)}Modifiers`]||e[`${bt(t)}Modifiers`];function Gl(e,t,...s){if(e.isUnmounted)return;const o=e.vnode.props||ee;let n=s;const a=t.startsWith("update:"),r=a&&Kl(o,t.slice(7));r&&(r.trim&&(n=s.map(l=>ce(l)?l.trim():l)),r.number&&(n=s.map(gn)));let i,c=o[i=hn(t)]||o[i=hn(ye(t))];!c&&a&&(c=o[i=hn(bt(t))]),c&&We(c,e,6,n);const u=o[i+"Once"];if(u){if(!e.emitted)e.emitted={};else if(e.emitted[i])return;e.emitted[i]=!0,We(u,e,6,n)}}const Jl=new WeakMap;function Er(e,t,s=!1){const o=s?Jl:t.emitsCache,n=o.get(e);if(n!==void 0)return n;const a=e.emits;let r={},i=!1;if(!B(e)){const c=u=>{const l=Er(u,t,!0);l&&(i=!0,ge(r,l))};!s&&t.mixins.length&&t.mixins.forEach(c),e.extends&&c(e.extends),e.mixins&&e.mixins.forEach(c)}return!a&&!i?(Z(e)&&o.set(e,null),null):(V(a)?a.forEach(c=>r[c]=null):ge(r,a),Z(e)&&o.set(e,r),r)}function Vs(e,t){return!e||!ys(t)?!1:(t=t.slice(2).replace(/Once$/,""),X(e,t[0].toLowerCase()+t.slice(1))||X(e,bt(t))||X(e,t))}function bm(){}function Sr(e){const{type:t,vnode:s,proxy:o,withProxy:n,propsOptions:[a],slots:r,attrs:i,emit:c,render:u,renderCache:l,props:p,data:v,setupState:R,ctx:x,inheritAttrs:g}=e,y=Ds(e);let L,$;try{if(s.shapeFlag&4){const A=n||o,W=A;L=Je(u.call(W,A,l,p,R,v,x)),$=i}else{const A=t;L=Je(A.length>1?A(p,{attrs:i,slots:r,emit:c}):A(p,null)),$=t.props?i:Xl(i)}}catch(A){os.length=0,Ls(A,e,1),L=Ge(wt)}let M=L;if($&&g!==!1){const A=Object.keys($),{shapeFlag:W}=M;A.length&&W&7&&(a&&A.some(js)&&($=Yl($,a)),M=Mt(M,$,!1,!0))}return s.dirs&&(M=Mt(M,null,!1,!0),M.dirs=M.dirs?M.dirs.concat(s.dirs):s.dirs),s.transition&&Nn(M,s.transition),L=M,Ds(y),L}const Xl=e=>{let t;for(const s in e)(s==="class"||s==="style"||ys(s))&&((t||(t={}))[s]=e[s]);return t},Yl=(e,t)=>{const s={};for(const o in e)(!js(o)||!(o.slice(9)in t))&&(s[o]=e[o]);return s};function Ql(e,t,s){const{props:o,children:n,component:a}=e,{props:r,children:i,patchFlag:c}=t,u=a.emitsOptions;if(t.dirs||t.transition)return!0;if(s&&c>=0){if(c&1024)return!0;if(c&16)return o?Cr(o,r,u):!!r;if(c&8){const l=t.dynamicProps;for(let p=0;pObject.create(Tr),Or=e=>Object.getPrototypeOf(e)===Tr;function ec(e,t,s,o=!1){const n={},a=kr();e.propsDefaults=Object.create(null),Ar(e,t,n,a);for(const r in e.propsOptions[0])r in n||(n[r]=void 0);s?e.props=o?n:el(n):e.type.props?e.props=n:e.props=a,e.attrs=a}function tc(e,t,s,o){const{props:n,attrs:a,vnode:{patchFlag:r}}=e,i=Y(n),[c]=e.propsOptions;let u=!1;if((o||r>0)&&!(r&16)){if(r&8){const l=e.vnode.dynamicProps;for(let p=0;p{c=!0;const[v,R]=Ir(p,t,!0);ge(r,v),R&&i.push(...R)};!s&&t.mixins.length&&t.mixins.forEach(l),e.extends&&l(e.extends),e.mixins&&e.mixins.forEach(l)}if(!a&&!c)return Z(e)&&o.set(e,Ot),Ot;if(V(a))for(let l=0;le==="_"||e==="_ctx"||e==="$stable",Un=e=>V(e)?e.map(Je):[Je(e)],nc=(e,t,s)=>{if(t._n)return t;const o=ml((...n)=>Un(t(...n)),s);return o._c=!1,o},Pr=(e,t,s)=>{const o=e._ctx;for(const n in e){if(Fn(n))continue;const a=e[n];if(B(a))t[n]=nc(n,a,o);else if(a!=null){const r=Un(a);t[n]=()=>r}}},Lr=(e,t)=>{const s=Un(t);e.slots.default=()=>s},$r=(e,t,s)=>{for(const o in t)(s||!Fn(o))&&(e[o]=t[o])},oc=(e,t,s)=>{const o=e.slots=kr();if(e.vnode.shapeFlag&32){const n=t._;n?($r(o,t,s),s&&Oo(o,"_",n,!0)):Pr(t,o)}else t&&Lr(e,t)},rc=(e,t,s)=>{const{vnode:o,slots:n}=e;let a=!0,r=ee;if(o.shapeFlag&32){const i=t._;i?s&&i===1?a=!1:$r(n,t,s):(a=!t.$stable,Pr(t,n)),r=t}else t&&(Lr(e,t),r={default:1});if(a)for(const i in n)!Fn(i)&&r[i]==null&&delete n[i]},Se=dc;function ac(e){return ic(e)}function ic(e,t){const s=Cs();s.__VUE__=!0;const{insert:o,remove:n,patchProp:a,createElement:r,createText:i,createComment:c,setText:u,setElementText:l,parentNode:p,nextSibling:v,setScopeId:R=Ue,insertStaticContent:x}=e,g=(f,h,b,C=null,j=null,E=null,N=void 0,I=null,O=!!h.dynamicChildren)=>{if(f===h)return;f&&!as(f,h)&&(C=dn(f),pe(f,j,E,!0),f=null),h.patchFlag===-2&&(O=!1,h.dynamicChildren=null);const{type:S,ref:F,shapeFlag:P}=h;switch(S){case Bs:y(f,h,b,C);break;case wt:L(f,h,b,C);break;case Hs:f==null&&$(h,b,C,N);break;case K:mt(f,h,b,C,j,E,N,I,O);break;default:P&1?W(f,h,b,C,j,E,N,I,O):P&6?Ze(f,h,b,C,j,E,N,I,O):(P&64||P&128)&&S.process(f,h,b,C,j,E,N,I,O,xs)}F!=null&&j?es(F,f&&f.ref,E,h||f,!h):F==null&&f&&f.ref!=null&&es(f.ref,null,E,f,!0)},y=(f,h,b,C)=>{if(f==null)o(h.el=i(h.children),b,C);else{const j=h.el=f.el;h.children!==f.children&&u(j,h.children)}},L=(f,h,b,C)=>{f==null?o(h.el=c(h.children||""),b,C):h.el=f.el},$=(f,h,b,C)=>{[f.el,f.anchor]=x(f.children,h,b,C,f.el,f.anchor)},M=({el:f,anchor:h},b,C)=>{let j;for(;f&&f!==h;)j=v(f),o(f,b,C),f=j;o(h,b,C)},A=({el:f,anchor:h})=>{let b;for(;f&&f!==h;)b=v(f),n(f),f=b;n(h)},W=(f,h,b,C,j,E,N,I,O)=>{if(h.type==="svg"?N="svg":h.type==="math"&&(N="mathml"),f==null)fe(h,b,C,j,E,N,I,O);else{const S=f.el&&f.el._isVueCE?f.el:null;try{S&&S._beginPatch(),gt(f,h,j,E,N,I,O)}finally{S&&S._endPatch()}}},fe=(f,h,b,C,j,E,N,I)=>{let O,S;const{props:F,shapeFlag:P,transition:D,dirs:z}=f;if(O=f.el=r(f.type,E,F&&F.is,F),P&8?l(O,f.children):P&16&&ke(f.children,O,null,C,j,zn(f,E),N,I),z&&St(f,null,C,"created"),ne(O,f,f.scopeId,N,C),F){for(const te in F)te!=="value"&&!qt(te)&&a(O,te,null,F[te],E,C);"value"in F&&a(O,"value",null,F.value,E),(S=F.onVnodeBeforeMount)&&Xe(S,C,f)}z&&St(f,null,C,"beforeMount");const J=lc(j,D);J&&D.beforeEnter(O),o(O,h,b),((S=F&&F.onVnodeMounted)||J||z)&&Se(()=>{S&&Xe(S,C,f),J&&D.enter(O),z&&St(f,null,C,"mounted")},j)},ne=(f,h,b,C,j)=>{if(b&&R(f,b),C)for(let E=0;E{for(let S=O;S{const I=h.el=f.el;let{patchFlag:O,dynamicChildren:S,dirs:F}=h;O|=f.patchFlag&16;const P=f.props||ee,D=h.props||ee;let z;if(b&&Ct(b,!1),(z=D.onVnodeBeforeUpdate)&&Xe(z,b,h,f),F&&St(h,f,b,"beforeUpdate"),b&&Ct(b,!0),(P.innerHTML&&D.innerHTML==null||P.textContent&&D.textContent==null)&&l(I,""),S?Qe(f.dynamicChildren,S,I,b,C,zn(h,j),E):N||q(f,h,I,null,b,C,zn(h,j),E,!1),O>0){if(O&16)yt(I,P,D,b,j);else if(O&2&&P.class!==D.class&&a(I,"class",null,D.class,j),O&4&&a(I,"style",P.style,D.style,j),O&8){const J=h.dynamicProps;for(let te=0;te{z&&Xe(z,b,h,f),F&&St(h,f,b,"updated")},C)},Qe=(f,h,b,C,j,E,N)=>{for(let I=0;I{if(h!==b){if(h!==ee)for(const E in h)!qt(E)&&!(E in b)&&a(f,E,h[E],null,j,C);for(const E in b){if(qt(E))continue;const N=b[E],I=h[E];N!==I&&E!=="value"&&a(f,E,I,N,j,C)}"value"in b&&a(f,"value",h.value,b.value,j)}},mt=(f,h,b,C,j,E,N,I,O)=>{const S=h.el=f?f.el:i(""),F=h.anchor=f?f.anchor:i("");let{patchFlag:P,dynamicChildren:D,slotScopeIds:z}=h;z&&(I=I?I.concat(z):z),f==null?(o(S,b,C),o(F,b,C),ke(h.children||[],b,F,j,E,N,I,O)):P>0&&P&64&&D&&f.dynamicChildren&&f.dynamicChildren.length===D.length?(Qe(f.dynamicChildren,D,b,j,E,N,I),(h.key!=null||j&&h===j.subTree)&&Dr(f,h,!0)):q(f,h,b,F,j,E,N,I,O)},Ze=(f,h,b,C,j,E,N,I,O)=>{h.slotScopeIds=I,f==null?h.shapeFlag&512?j.ctx.activate(h,b,C,N,O):Fe(h,b,C,j,E,N,O):bs(f,h,O)},Fe=(f,h,b,C,j,E,N)=>{const I=f.component=bc(f,C,j);if(pr(f)&&(I.ctx.renderer=xs),xc(I,!1,N),I.asyncDep){if(j&&j.registerDep(I,Q,N),!f.el){const O=I.subTree=Ge(wt);L(null,O,h,b),f.placeholder=O.el}}else Q(I,f,h,b,j,E,N)},bs=(f,h,b)=>{const C=h.component=f.component;if(Ql(f,h,b))if(C.asyncDep&&!C.asyncResolved){oe(C,h,b);return}else C.next=h,C.update();else h.el=f.el,C.vnode=h},Q=(f,h,b,C,j,E,N)=>{const I=()=>{if(f.isMounted){let{next:P,bu:D,u:z,parent:J,vnode:te}=f;{const st=Mr(f);if(st){P&&(P.el=te.el,oe(f,P,N)),st.asyncDep.then(()=>{Se(()=>{f.isUnmounted||S()},j)});return}}let re=P,ue;Ct(f,!1),P?(P.el=te.el,oe(f,P,N)):P=te,D&&Ss(D),(ue=P.props&&P.props.onVnodeBeforeUpdate)&&Xe(ue,J,P,te),Ct(f,!0);const he=Sr(f),tt=f.subTree;f.subTree=he,g(tt,he,p(tt.el),dn(tt),f,j,E),P.el=he.el,re===null&&Zl(f,he.el),z&&Se(z,j),(ue=P.props&&P.props.onVnodeUpdated)&&Se(()=>Xe(ue,J,P,te),j)}else{let P;const{el:D,props:z}=h,{bm:J,m:te,parent:re,root:ue,type:he}=f,tt=ts(h);Ct(f,!1),J&&Ss(J),!tt&&(P=z&&z.onVnodeBeforeMount)&&Xe(P,re,h),Ct(f,!0);{ue.ce&&ue.ce._hasShadowRoot()&&ue.ce._injectChildStyle(he,f.parent?f.parent.type:void 0);const st=f.subTree=Sr(f);g(null,st,b,C,f,j,E),h.el=st.el}if(te&&Se(te,j),!tt&&(P=z&&z.onVnodeMounted)){const st=h;Se(()=>Xe(P,re,st),j)}(h.shapeFlag&256||re&&ts(re.vnode)&&re.vnode.shapeFlag&256)&&f.a&&Se(f.a,j),f.isMounted=!0,h=b=C=null}};f.scope.on();const O=f.effect=new Lo(I);f.scope.off();const S=f.update=O.run.bind(O),F=f.job=O.runIfDirty.bind(O);F.i=f,F.id=f.uid,O.scheduler=()=>An(F),Ct(f,!0),S()},oe=(f,h,b)=>{h.component=f;const C=f.vnode.props;f.vnode=h,f.next=null,tc(f,h.props,C,b),rc(f,h.children,b),Ve(),or(f),Be()},q=(f,h,b,C,j,E,N,I,O=!1)=>{const S=f&&f.children,F=f?f.shapeFlag:0,P=h.children,{patchFlag:D,shapeFlag:z}=h;if(D>0){if(D&128){Vt(S,P,b,C,j,E,N,I,O);return}else if(D&256){et(S,P,b,C,j,E,N,I,O);return}}z&8?(F&16&&vs(S,j,E),P!==S&&l(b,P)):F&16?z&16?Vt(S,P,b,C,j,E,N,I,O):vs(S,j,E,!0):(F&8&&l(b,""),z&16&&ke(P,b,C,j,E,N,I,O))},et=(f,h,b,C,j,E,N,I,O)=>{f=f||Ot,h=h||Ot;const S=f.length,F=h.length,P=Math.min(S,F);let D;for(D=0;DF?vs(f,j,E,!0,!1,P):ke(h,b,C,j,E,N,I,O,P)},Vt=(f,h,b,C,j,E,N,I,O)=>{let S=0;const F=h.length;let P=f.length-1,D=F-1;for(;S<=P&&S<=D;){const z=f[S],J=h[S]=O?ft(h[S]):Je(h[S]);if(as(z,J))g(z,J,b,null,j,E,N,I,O);else break;S++}for(;S<=P&&S<=D;){const z=f[P],J=h[D]=O?ft(h[D]):Je(h[D]);if(as(z,J))g(z,J,b,null,j,E,N,I,O);else break;P--,D--}if(S>P){if(S<=D){const z=D+1,J=zD)for(;S<=P;)pe(f[S],j,E,!0),S++;else{const z=S,J=S,te=new Map;for(S=J;S<=D;S++){const Ie=h[S]=O?ft(h[S]):Je(h[S]);Ie.key!=null&&te.set(Ie.key,S)}let re,ue=0;const he=D-J+1;let tt=!1,st=0;const ws=new Array(he);for(S=0;S=he){pe(Ie,j,E,!0);continue}let nt;if(Ie.key!=null)nt=te.get(Ie.key);else for(re=J;re<=D;re++)if(ws[re-J]===0&&as(Ie,h[re])){nt=re;break}nt===void 0?pe(Ie,j,E,!0):(ws[nt-J]=S+1,nt>=st?st=nt:tt=!0,g(Ie,h[nt],b,null,j,E,N,I,O),ue++)}const xi=tt?cc(ws):Ot;for(re=xi.length-1,S=he-1;S>=0;S--){const Ie=J+S,nt=h[Ie],wi=h[Ie+1],yi=Ie+1{const{el:E,type:N,transition:I,children:O,shapeFlag:S}=f;if(S&6){we(f.component.subTree,h,b,C);return}if(S&128){f.suspense.move(h,b,C);return}if(S&64){N.move(f,h,b,xs);return}if(N===K){o(E,h,b);for(let P=0;PI.enter(E),j);else{const{leave:P,delayLeave:D,afterLeave:z}=I,J=()=>{f.ctx.isUnmounted?n(E):o(E,h,b)},te=()=>{E._isLeaving&&E[_l](!0),P(E,()=>{J(),z&&z()})};D?D(E,J,te):te()}else o(E,h,b)},pe=(f,h,b,C=!1,j=!1)=>{const{type:E,props:N,ref:I,children:O,dynamicChildren:S,shapeFlag:F,patchFlag:P,dirs:D,cacheIndex:z,memo:J}=f;if(P===-2&&(j=!1),I!=null&&(Ve(),es(I,null,b,f,!0),Be()),z!=null&&(h.renderCache[z]=void 0),F&256){h.ctx.deactivate(f);return}const te=F&1&&D,re=!ts(f);let ue;if(re&&(ue=N&&N.onVnodeBeforeUnmount)&&Xe(ue,h,f),F&6)cn(f.component,b,C);else{if(F&128){f.suspense.unmount(b,C);return}te&&St(f,null,h,"beforeUnmount"),F&64?f.type.remove(f,h,b,xs,C):S&&!S.hasOnce&&(E!==K||P>0&&P&64)?vs(S,h,b,!1,!0):(E===K&&P&384||!j&&F&16)&&vs(O,h,b),C&&Bt(f)}const he=J!=null&&z==null;(re&&(ue=N&&N.onVnodeUnmounted)||te||he)&&Se(()=>{ue&&Xe(ue,h,f),te&&St(f,null,h,"unmounted"),he&&(f.el=null)},b)},Bt=f=>{const{type:h,el:b,anchor:C,transition:j}=f;if(h===K){Ht(b,C);return}if(h===Hs){A(f);return}const E=()=>{n(b),j&&!j.persisted&&j.afterLeave&&j.afterLeave()};if(f.shapeFlag&1&&j&&!j.persisted){const{leave:N,delayLeave:I}=j,O=()=>N(b,E);I?I(f.el,E,O):O()}else E()},Ht=(f,h)=>{let b;for(;f!==h;)b=v(f),n(f),f=b;n(h)},cn=(f,h,b)=>{const{bum:C,scope:j,job:E,subTree:N,um:I,m:O,a:S}=f;Fr(O),Fr(S),C&&Ss(C),j.stop(),E&&(E.flags|=8,pe(N,f,h,b)),I&&Se(I,h),Se(()=>{f.isUnmounted=!0},h)},vs=(f,h,b,C=!1,j=!1,E=0)=>{for(let N=E;N{if(f.shapeFlag&6)return dn(f.component.subTree);if(f.shapeFlag&128)return f.suspense.next();const h=v(f.anchor||f.el),b=h&&h[yl];return b?v(b):h};let jo=!1;const vi=(f,h,b)=>{let C;f==null?h._vnode&&(pe(h._vnode,null,null,!0),C=h._vnode.component):g(h._vnode||null,f,h,null,null,null,b),h._vnode=f,jo||(jo=!0,or(C),rr(),jo=!1)},xs={p:g,um:pe,m:we,r:Bt,mt:Fe,mc:ke,pc:q,pbc:Qe,n:dn,o:e};return{render:vi,hydrate:void 0,createApp:ql(vi)}}function zn({type:e,props:t},s){return s==="svg"&&e==="foreignObject"||s==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:s}function Ct({effect:e,job:t},s){s?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function lc(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function Dr(e,t,s=!1){const o=e.children,n=t.children;if(V(o)&&V(n))for(let a=0;a>1,e[s[i]]0&&(t[o]=s[a-1]),s[a]=o)}}for(a=s.length,r=s[a-1];a-- >0;)s[a]=r,r=t[r];return s}function Mr(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:Mr(t)}function Fr(e){if(e)for(let t=0;te.__isSuspense;function dc(e,t){t&&t.pendingBranch?V(e)?t.effects.push(...e):t.effects.push(e):gl(e)}const K=Symbol.for("v-fgt"),Bs=Symbol.for("v-txt"),wt=Symbol.for("v-cmt"),Hs=Symbol.for("v-stc"),os=[];let Ae=null;function w(e=!1){os.push(Ae=e?null:[])}function uc(){os.pop(),Ae=os[os.length-1]||null}let rs=1;function Vr(e,t=!1){rs+=e,e<0&&Ae&&t&&(Ae.hasOnce=!0)}function Br(e){return e.dynamicChildren=rs>0?Ae||Ot:null,uc(),rs>0&&Ae&&Ae.push(e),e}function _(e,t,s,o,n,a){return Br(d(e,t,s,o,n,a,!0))}function Ke(e,t,s,o,n){return Br(Ge(e,t,s,o,n,!0))}function Hr(e){return e?e.__v_isVNode===!0:!1}function as(e,t){return e.type===t.type&&e.key===t.key}const Wr=({key:e})=>e??null,Ws=({ref:e,ref_key:t,ref_for:s})=>(typeof e=="number"&&(e=""+e),e!=null?ce(e)||be(e)||B(e)?{i:Oe,r:e,k:t,f:!!s}:e:null);function d(e,t=null,s=null,o=0,n=null,a=e===K?0:1,r=!1,i=!1){const c={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&Wr(t),ref:t&&Ws(t),scopeId:ir,slotScopeIds:null,children:s,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:a,patchFlag:o,dynamicProps:n,dynamicChildren:null,appContext:null,ctx:Oe};return i?(Bn(c,s),a&128&&e.normalize(c)):s&&(c.shapeFlag|=ce(s)?8:16),rs>0&&!r&&Ae&&(c.patchFlag>0||a&6)&&c.patchFlag!==32&&Ae.push(c),c}const Ge=fc;function fc(e,t=null,s=null,o=0,n=null,a=!1){if((!e||e===Dl)&&(e=wt),Hr(e)){const i=Mt(e,t,!0);return s&&Bn(i,s),rs>0&&!a&&Ae&&(i.shapeFlag&6?Ae[Ae.indexOf(e)]=i:Ae.push(i)),i.patchFlag=-2,i}if(Sc(e)&&(e=e.__vccOpts),t){t=pc(t);let{class:i,style:c}=t;i&&!ce(i)&&(t.class=H(i)),Z(c)&&(kn(c)&&!V(c)&&(c=ge({},c)),t.style=Le(c))}const r=ce(e)?1:zr(e)?128:jl(e)?64:Z(e)?4:B(e)?2:0;return d(e,t,s,o,n,r,a,!0)}function pc(e){return e?kn(e)||Or(e)?ge({},e):e:null}function Mt(e,t,s=!1,o=!1){const{props:n,ref:a,patchFlag:r,children:i,transition:c}=e,u=t?hc(n||{},t):n,l={__v_isVNode:!0,__v_skip:!0,type:e.type,props:u,key:u&&Wr(u),ref:t&&t.ref?s&&a?V(a)?a.concat(Ws(t)):[a,Ws(t)]:Ws(t):a,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:i,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==K?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:c,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Mt(e.ssContent),ssFallback:e.ssFallback&&Mt(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return c&&o&&Nn(l,c.clone(l)),l}function qs(e=" ",t=0){return Ge(Bs,null,e,t)}function Vn(e,t){const s=Ge(Hs,null,e);return s.staticCount=t,s}function G(e="",t=!1){return t?(w(),Ke(wt,null,e)):Ge(wt,null,e)}function Je(e){return e==null||typeof e=="boolean"?Ge(wt):V(e)?Ge(K,null,e.slice()):Hr(e)?ft(e):Ge(Bs,null,String(e))}function ft(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Mt(e)}function Bn(e,t){let s=0;const{shapeFlag:o}=e;if(t==null)t=null;else if(V(t))s=16;else if(typeof t=="object")if(o&65){const n=t.default;n&&(n._c&&(n._d=!1),Bn(e,n()),n._c&&(n._d=!0));return}else{s=32;const n=t._;!n&&!Or(t)?t._ctx=Oe:n===3&&Oe&&(Oe.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else B(t)?(t={default:t,_ctx:Oe},s=32):(t=String(t),o&64?(s=16,t=[qs(t)]):s=8);e.children=t,e.shapeFlag|=s}function hc(...e){const t={};for(let s=0;sve||Oe;let Ks,Hn;{const e=Cs(),t=(s,o)=>{let n;return(n=e[s])||(n=e[s]=[]),n.push(o),a=>{n.length>1?n.forEach(r=>r(a)):n[0](a)}};Ks=t("__VUE_INSTANCE_SETTERS__",s=>ve=s),Hn=t("__VUE_SSR_SETTERS__",s=>ls=s)}const is=e=>{const t=ve;return Ks(e),e.scope.on(),()=>{e.scope.off(),Ks(t)}},qr=()=>{ve&&ve.scope.off(),Ks(null)};function Kr(e){return e.vnode.shapeFlag&4}let ls=!1;function xc(e,t=!1,s=!1){t&&Hn(t);const{props:o,children:n}=e.vnode,a=Kr(e);ec(e,o,a,t),oc(e,n,s||t);const r=a?wc(e,t):void 0;return t&&Hn(!1),r}function wc(e,t){const s=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,Fl);const{setup:o}=s;if(o){Ve();const n=e.setupContext=o.length>1?jc(e):null,a=is(e),r=Pt(o,e,0,[e.props,n]),i=Ro(r);if(Be(),a(),(i||e.sp)&&!ts(e)&&dr(e),i){if(r.then(qr,qr),t)return r.then(c=>{Gr(e,c)}).catch(c=>{Ls(c,e,0)});e.asyncDep=r}else Gr(e,r)}else Jr(e)}function Gr(e,t,s){B(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:Z(t)&&(e.setupState=er(t)),Jr(e)}function Jr(e,t,s){const o=e.type;e.render||(e.render=o.render||Ue);{const n=is(e);Ve();try{Ul(e)}finally{Be(),n()}}}const yc={get(e,t){return me(e,"get",""),e[t]}};function jc(e){const t=s=>{e.exposed=s||{}};return{attrs:new Proxy(e.attrs,yc),slots:e.slots,emit:e.emit,expose:t}}function Gs(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(er(tl(e.exposed)),{get(t,s){if(s in t)return t[s];if(s in ss)return ss[s](e)},has(t,s){return s in t||s in ss}})):e.proxy}const _c=/(?:^|[-_])\w/g,Ec=e=>e.replace(_c,t=>t.toUpperCase()).replace(/[-_]/g,"");function Xr(e,t=!0){return B(e)?e.displayName||e.name:e.name||t&&e.__name}function Yr(e,t,s=!1){let o=Xr(t);if(!o&&t.__file){const n=t.__file.match(/([^/\\]+)\.\w+$/);n&&(o=n[1])}if(!o&&e){const n=a=>{for(const r in a)if(a[r]===t)return r};o=n(e.components)||e.parent&&n(e.parent.type.components)||n(e.appContext.components)}return o?Ec(o):s?"App":"Anonymous"}function Sc(e){return B(e)&&"__vccOpts"in e}const Cc=(e,t)=>rl(e,t,ls),Rc="3.5.32";let Wn;const Qr=typeof window<"u"&&window.trustedTypes;if(Qr)try{Wn=Qr.createPolicy("vue",{createHTML:e=>e})}catch{}const Zr=Wn?e=>Wn.createHTML(e):e=>e,Tc="http://www.w3.org/2000/svg",kc="http://www.w3.org/1998/Math/MathML",pt=typeof document<"u"?document:null,ea=pt&&pt.createElement("template"),Oc={insert:(e,t,s)=>{t.insertBefore(e,s||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,s,o)=>{const n=t==="svg"?pt.createElementNS(Tc,e):t==="mathml"?pt.createElementNS(kc,e):s?pt.createElement(e,{is:s}):pt.createElement(e);return e==="select"&&o&&o.multiple!=null&&n.setAttribute("multiple",o.multiple),n},createText:e=>pt.createTextNode(e),createComment:e=>pt.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>pt.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,s,o,n,a){const r=s?s.previousSibling:t.lastChild;if(n&&(n===a||n.nextSibling))for(;t.insertBefore(n.cloneNode(!0),s),!(n===a||!(n=n.nextSibling)););else{ea.innerHTML=Zr(o==="svg"?`${e}`:o==="mathml"?`${e}`:e);const i=ea.content;if(o==="svg"||o==="mathml"){const c=i.firstChild;for(;c.firstChild;)i.appendChild(c.firstChild);i.removeChild(c)}t.insertBefore(i,s)}return[r?r.nextSibling:t.firstChild,s?s.previousSibling:t.lastChild]}},Ac=Symbol("_vtc");function Ic(e,t,s){const o=e[Ac];o&&(t=(t?[t,...o]:[...o]).join(" ")),t==null?e.removeAttribute("class"):s?e.setAttribute("class",t):e.className=t}const ta=Symbol("_vod"),Nc=Symbol("_vsh"),Pc=Symbol(""),Lc=/(?:^|;)\s*display\s*:/;function $c(e,t,s){const o=e.style,n=ce(s);let a=!1;if(s&&!n){if(t)if(ce(t))for(const r of t.split(";")){const i=r.slice(0,r.indexOf(":")).trim();s[i]==null&&Js(o,i,"")}else for(const r in t)s[r]==null&&Js(o,r,"");for(const r in s)r==="display"&&(a=!0),Js(o,r,s[r])}else if(n){if(t!==s){const r=o[Pc];r&&(s+=";"+r),o.cssText=s,a=Lc.test(s)}}else t&&e.removeAttribute("style");ta in e&&(e[ta]=a?o.display:"",e[Nc]&&(o.display="none"))}const sa=/\s*!important$/;function Js(e,t,s){if(V(s))s.forEach(o=>Js(e,t,o));else if(s==null&&(s=""),t.startsWith("--"))e.setProperty(t,s);else{const o=Dc(e,t);sa.test(s)?e.setProperty(bt(o),s.replace(sa,""),"important"):e[o]=s}}const na=["Webkit","Moz","ms"],qn={};function Dc(e,t){const s=qn[t];if(s)return s;let o=ye(t);if(o!=="filter"&&o in e)return qn[t]=o;o=Es(o);for(let n=0;nKn||(zc.then(()=>Kn=0),Kn=Date.now());function Bc(e,t){const s=o=>{if(!o._vts)o._vts=Date.now();else if(o._vts<=s.attached)return;We(Hc(o,s.value),t,5,[o])};return s.value=e,s.attached=Vc(),s}function Hc(e,t){if(V(t)){const s=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{s.call(e),e._stopped=!0},t.map(o=>n=>!n._stopped&&o&&o(n))}else return t}const ca=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,Wc=(e,t,s,o,n,a)=>{const r=n==="svg";t==="class"?Ic(e,o,r):t==="style"?$c(e,s,o):ys(t)?js(t)||Fc(e,t,s,o,a):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):qc(e,t,o,r))?(aa(e,t,o),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&ra(e,t,o,r,a,t!=="value")):e._isVueCE&&(Kc(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!ce(o)))?aa(e,ye(t),o,a,t):(t==="true-value"?e._trueValue=o:t==="false-value"&&(e._falseValue=o),ra(e,t,o,r))};function qc(e,t,s,o){if(o)return!!(t==="innerHTML"||t==="textContent"||t in e&&ca(t)&&B(s));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const n=e.tagName;if(n==="IMG"||n==="VIDEO"||n==="CANVAS"||n==="SOURCE")return!1}return ca(t)&&ce(s)?!1:t in e}function Kc(e,t){const s=e._def.props;if(!s)return!1;const o=ye(t);return Array.isArray(s)?s.some(n=>ye(n)===o):Object.keys(s).some(n=>ye(n)===o)}const da=e=>{const t=e.props["onUpdate:modelValue"]||!1;return V(t)?s=>Ss(t,s):t};function Gc(e){e.target.composing=!0}function ua(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Gn=Symbol("_assign");function fa(e,t,s){return t&&(e=e.trim()),s&&(e=gn(e)),e}const ht={created(e,{modifiers:{lazy:t,trim:s,number:o}},n){e[Gn]=da(n);const a=o||n.props&&n.props.type==="number";Ft(e,t?"change":"input",r=>{r.target.composing||e[Gn](fa(e.value,s,a))}),(s||a)&&Ft(e,"change",()=>{e.value=fa(e.value,s,a)}),t||(Ft(e,"compositionstart",Gc),Ft(e,"compositionend",ua),Ft(e,"change",ua))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:s,modifiers:{lazy:o,trim:n,number:a}},r){if(e[Gn]=da(r),e.composing)return;const i=(a||e.type==="number")&&!/^0\d/.test(e.value)?gn(e.value):e.value,c=t??"";if(i===c)return;const u=e.getRootNode();(u instanceof Document||u instanceof ShadowRoot)&&u.activeElement===e&&e.type!=="range"&&(o&&t===s||n&&e.value.trim()===c)||(e.value=c)}},Jc=["ctrl","shift","alt","meta"],Xc={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Jc.some(s=>e[`${s}Key`]&&!t.includes(s))},Jn=(e,t)=>{if(!e)return e;const s=e._withMods||(e._withMods={}),o=t.join(".");return s[o]||(s[o]=((n,...a)=>{for(let r=0;r{const s=e._withKeys||(e._withKeys={}),o=t.join(".");return s[o]||(s[o]=(n=>{if(!("key"in n))return;const a=bt(n.key);if(t.some(r=>r===a||Yc[r]===a))return e(n)}))},Qc=ge({patchProp:Wc},Oc);let ha;function Zc(){return ha||(ha=ac(Qc))}const ed=((...e)=>{const t=Zc().createApp(...e),{mount:s}=t;return t.mount=o=>{const n=sd(o);if(!n)return;const a=t._component;!B(a)&&!a.render&&!a.template&&(a.template=n.innerHTML),n.nodeType===1&&(n.textContent="");const r=s(n,!1,td(n));return n instanceof Element&&(n.removeAttribute("v-cloak"),n.setAttribute("data-v-app","")),r},t});function td(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function sd(e){return ce(e)?document.querySelector(e):e}function ga(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var Xn,ma;function ba(){if(ma)return Xn;ma=1;var e={};return Xn=typeof process=="object"&&e&&e.NODE_DEBUG&&/\bsemver\b/i.test(e.NODE_DEBUG)?(...s)=>console.error("SEMVER",...s):()=>{},Xn}var Yn,va;function xa(){if(va)return Yn;va=1;const e="2.0.0",t=256,s=Number.MAX_SAFE_INTEGER||9007199254740991,o=16,n=t-6;return Yn={MAX_LENGTH:t,MAX_SAFE_COMPONENT_LENGTH:o,MAX_SAFE_BUILD_LENGTH:n,MAX_SAFE_INTEGER:s,RELEASE_TYPES:["major","premajor","minor","preminor","patch","prepatch","prerelease"],SEMVER_SPEC_VERSION:e,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2},Yn}var Xs={exports:{}},wa;function nd(){return wa||(wa=1,(function(e,t){const{MAX_SAFE_COMPONENT_LENGTH:s,MAX_SAFE_BUILD_LENGTH:o,MAX_LENGTH:n}=xa(),a=ba();t=e.exports={};const r=t.re=[],i=t.safeRe=[],c=t.src=[],u=t.safeSrc=[],l=t.t={};let p=0;const v="[a-zA-Z0-9-]",R=[["\\s",1],["\\d",n],[v,o]],x=y=>{for(const[L,$]of R)y=y.split(`${L}*`).join(`${L}{0,${$}}`).split(`${L}+`).join(`${L}{1,${$}}`);return y},g=(y,L,$)=>{const M=x(L),A=p++;a(y,A,L),l[y]=A,c[A]=L,u[A]=M,r[A]=new RegExp(L,$?"g":void 0),i[A]=new RegExp(M,$?"g":void 0)};g("NUMERICIDENTIFIER","0|[1-9]\\d*"),g("NUMERICIDENTIFIERLOOSE","\\d+"),g("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${v}*`),g("MAINVERSION",`(${c[l.NUMERICIDENTIFIER]})\\.(${c[l.NUMERICIDENTIFIER]})\\.(${c[l.NUMERICIDENTIFIER]})`),g("MAINVERSIONLOOSE",`(${c[l.NUMERICIDENTIFIERLOOSE]})\\.(${c[l.NUMERICIDENTIFIERLOOSE]})\\.(${c[l.NUMERICIDENTIFIERLOOSE]})`),g("PRERELEASEIDENTIFIER",`(?:${c[l.NONNUMERICIDENTIFIER]}|${c[l.NUMERICIDENTIFIER]})`),g("PRERELEASEIDENTIFIERLOOSE",`(?:${c[l.NONNUMERICIDENTIFIER]}|${c[l.NUMERICIDENTIFIERLOOSE]})`),g("PRERELEASE",`(?:-(${c[l.PRERELEASEIDENTIFIER]}(?:\\.${c[l.PRERELEASEIDENTIFIER]})*))`),g("PRERELEASELOOSE",`(?:-?(${c[l.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${c[l.PRERELEASEIDENTIFIERLOOSE]})*))`),g("BUILDIDENTIFIER",`${v}+`),g("BUILD",`(?:\\+(${c[l.BUILDIDENTIFIER]}(?:\\.${c[l.BUILDIDENTIFIER]})*))`),g("FULLPLAIN",`v?${c[l.MAINVERSION]}${c[l.PRERELEASE]}?${c[l.BUILD]}?`),g("FULL",`^${c[l.FULLPLAIN]}$`),g("LOOSEPLAIN",`[v=\\s]*${c[l.MAINVERSIONLOOSE]}${c[l.PRERELEASELOOSE]}?${c[l.BUILD]}?`),g("LOOSE",`^${c[l.LOOSEPLAIN]}$`),g("GTLT","((?:<|>)?=?)"),g("XRANGEIDENTIFIERLOOSE",`${c[l.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`),g("XRANGEIDENTIFIER",`${c[l.NUMERICIDENTIFIER]}|x|X|\\*`),g("XRANGEPLAIN",`[v=\\s]*(${c[l.XRANGEIDENTIFIER]})(?:\\.(${c[l.XRANGEIDENTIFIER]})(?:\\.(${c[l.XRANGEIDENTIFIER]})(?:${c[l.PRERELEASE]})?${c[l.BUILD]}?)?)?`),g("XRANGEPLAINLOOSE",`[v=\\s]*(${c[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[l.XRANGEIDENTIFIERLOOSE]})(?:\\.(${c[l.XRANGEIDENTIFIERLOOSE]})(?:${c[l.PRERELEASELOOSE]})?${c[l.BUILD]}?)?)?`),g("XRANGE",`^${c[l.GTLT]}\\s*${c[l.XRANGEPLAIN]}$`),g("XRANGELOOSE",`^${c[l.GTLT]}\\s*${c[l.XRANGEPLAINLOOSE]}$`),g("COERCEPLAIN",`(^|[^\\d])(\\d{1,${s}})(?:\\.(\\d{1,${s}}))?(?:\\.(\\d{1,${s}}))?`),g("COERCE",`${c[l.COERCEPLAIN]}(?:$|[^\\d])`),g("COERCEFULL",c[l.COERCEPLAIN]+`(?:${c[l.PRERELEASE]})?(?:${c[l.BUILD]})?(?:$|[^\\d])`),g("COERCERTL",c[l.COERCE],!0),g("COERCERTLFULL",c[l.COERCEFULL],!0),g("LONETILDE","(?:~>?)"),g("TILDETRIM",`(\\s*)${c[l.LONETILDE]}\\s+`,!0),t.tildeTrimReplace="$1~",g("TILDE",`^${c[l.LONETILDE]}${c[l.XRANGEPLAIN]}$`),g("TILDELOOSE",`^${c[l.LONETILDE]}${c[l.XRANGEPLAINLOOSE]}$`),g("LONECARET","(?:\\^)"),g("CARETTRIM",`(\\s*)${c[l.LONECARET]}\\s+`,!0),t.caretTrimReplace="$1^",g("CARET",`^${c[l.LONECARET]}${c[l.XRANGEPLAIN]}$`),g("CARETLOOSE",`^${c[l.LONECARET]}${c[l.XRANGEPLAINLOOSE]}$`),g("COMPARATORLOOSE",`^${c[l.GTLT]}\\s*(${c[l.LOOSEPLAIN]})$|^$`),g("COMPARATOR",`^${c[l.GTLT]}\\s*(${c[l.FULLPLAIN]})$|^$`),g("COMPARATORTRIM",`(\\s*)${c[l.GTLT]}\\s*(${c[l.LOOSEPLAIN]}|${c[l.XRANGEPLAIN]})`,!0),t.comparatorTrimReplace="$1$2$3",g("HYPHENRANGE",`^\\s*(${c[l.XRANGEPLAIN]})\\s+-\\s+(${c[l.XRANGEPLAIN]})\\s*$`),g("HYPHENRANGELOOSE",`^\\s*(${c[l.XRANGEPLAINLOOSE]})\\s+-\\s+(${c[l.XRANGEPLAINLOOSE]})\\s*$`),g("STAR","(<|>)?=?\\s*\\*"),g("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$"),g("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")})(Xs,Xs.exports)),Xs.exports}var Qn,ya;function od(){if(ya)return Qn;ya=1;const e=Object.freeze({loose:!0}),t=Object.freeze({});return Qn=o=>o?typeof o!="object"?e:o:t,Qn}var Zn,ja;function rd(){if(ja)return Zn;ja=1;const e=/^[0-9]+$/,t=(o,n)=>{if(typeof o=="number"&&typeof n=="number")return o===n?0:ot(n,o)},Zn}var eo,_a;function Ea(){if(_a)return eo;_a=1;const e=ba(),{MAX_LENGTH:t,MAX_SAFE_INTEGER:s}=xa(),{safeRe:o,t:n}=nd(),a=od(),{compareIdentifiers:r}=rd();class i{constructor(u,l){if(l=a(l),u instanceof i){if(u.loose===!!l.loose&&u.includePrerelease===!!l.includePrerelease)return u;u=u.version}else if(typeof u!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof u}".`);if(u.length>t)throw new TypeError(`version is longer than ${t} characters`);e("SemVer",u,l),this.options=l,this.loose=!!l.loose,this.includePrerelease=!!l.includePrerelease;const p=u.trim().match(l.loose?o[n.LOOSE]:o[n.FULL]);if(!p)throw new TypeError(`Invalid Version: ${u}`);if(this.raw=u,this.major=+p[1],this.minor=+p[2],this.patch=+p[3],this.major>s||this.major<0)throw new TypeError("Invalid major version");if(this.minor>s||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>s||this.patch<0)throw new TypeError("Invalid patch version");p[4]?this.prerelease=p[4].split(".").map(v=>{if(/^[0-9]+$/.test(v)){const R=+v;if(R>=0&&Ru.major?1:this.minoru.minor?1:this.patchu.patch?1:0}comparePre(u){if(u instanceof i||(u=new i(u,this.options)),this.prerelease.length&&!u.prerelease.length)return-1;if(!this.prerelease.length&&u.prerelease.length)return 1;if(!this.prerelease.length&&!u.prerelease.length)return 0;let l=0;do{const p=this.prerelease[l],v=u.prerelease[l];if(e("prerelease compare",l,p,v),p===void 0&&v===void 0)return 0;if(v===void 0)return 1;if(p===void 0)return-1;if(p===v)continue;return r(p,v)}while(++l)}compareBuild(u){u instanceof i||(u=new i(u,this.options));let l=0;do{const p=this.build[l],v=u.build[l];if(e("build compare",l,p,v),p===void 0&&v===void 0)return 0;if(v===void 0)return 1;if(p===void 0)return-1;if(p===v)continue;return r(p,v)}while(++l)}inc(u,l,p){if(u.startsWith("pre")){if(!l&&p===!1)throw new Error("invalid increment argument: identifier is empty");if(l){const v=`-${l}`.match(this.options.loose?o[n.PRERELEASELOOSE]:o[n.PRERELEASE]);if(!v||v[1]!==l)throw new Error(`invalid identifier: ${l}`)}}switch(u){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",l,p);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",l,p);break;case"prepatch":this.prerelease.length=0,this.inc("patch",l,p),this.inc("pre",l,p);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",l,p),this.inc("pre",l,p);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{const v=Number(p)?1:0;if(this.prerelease.length===0)this.prerelease=[v];else{let R=this.prerelease.length;for(;--R>=0;)typeof this.prerelease[R]=="number"&&(this.prerelease[R]++,R=-2);if(R===-1){if(l===this.prerelease.join(".")&&p===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(v)}}if(l){let R=[l,v];p===!1&&(R=[l]),r(this.prerelease[0],l)===0?isNaN(this.prerelease[1])&&(this.prerelease=R):this.prerelease=R}break}default:throw new Error(`invalid increment argument: ${u}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}}return eo=i,eo}var to,Sa;function ad(){if(Sa)return to;Sa=1;const e=Ea();return to=(s,o)=>new e(s,o).major,to}var id=ad();const Ca=ga(id);var so,Ra;function ld(){if(Ra)return so;Ra=1;const e=Ea();return so=(s,o,n=!1)=>{if(s instanceof e)return s;try{return new e(s,o)}catch(a){if(!n)return null;throw a}},so}var no,Ta;function cd(){if(Ta)return no;Ta=1;const e=ld();return no=(s,o)=>{const n=e(s,o);return n?n.version:null},no}var dd=cd();const ud=ga(dd);class fd{bus;constructor(t){typeof t.getVersion!="function"||!ud(t.getVersion())?console.warn("Proxying an event bus with an unknown or invalid version"):Ca(t.getVersion())!==Ca(this.getVersion())&&console.warn("Proxying an event bus of version "+t.getVersion()+" with "+this.getVersion()),this.bus=t}getVersion(){return"3.3.3"}subscribe(t,s){this.bus.subscribe(t,s)}unsubscribe(t,s){this.bus.unsubscribe(t,s)}emit(t,...s){this.bus.emit(t,...s)}}class pd{handlers=new Map;getVersion(){return"3.3.3"}subscribe(t,s){this.handlers.set(t,(this.handlers.get(t)||[]).concat(s))}unsubscribe(t,s){this.handlers.set(t,(this.handlers.get(t)||[]).filter(o=>o!==s))}emit(t,...s){(this.handlers.get(t)||[]).forEach(n=>{try{n(s[0])}catch(a){console.error("could not invoke event listener",a)}})}}let cs=null;function hd(){return cs!==null?cs:typeof window>"u"?new Proxy({},{get:()=>()=>console.error("Window not available, EventBus can not be established!")}):(window.OC?._eventBus&&typeof window._nc_event_bus>"u"&&(console.warn("found old event bus instance at OC._eventBus. Update your version!"),window._nc_event_bus=window.OC._eventBus),typeof window?._nc_event_bus<"u"?cs=new fd(window._nc_event_bus):cs=window._nc_event_bus=new pd,cs)}function gd(e,t){hd().subscribe(e,t)}class Ys{static GLOBAL_SCOPE_VOLATILE="nextcloud_vol";static GLOBAL_SCOPE_PERSISTENT="nextcloud_per";scope;wrapped;constructor(t,s,o){this.scope=`${o?Ys.GLOBAL_SCOPE_PERSISTENT:Ys.GLOBAL_SCOPE_VOLATILE}_${btoa(t)}_`,this.wrapped=s}scopeKey(t){return`${this.scope}${t}`}setItem(t,s){this.wrapped.setItem(this.scopeKey(t),s)}getItem(t){return this.wrapped.getItem(this.scopeKey(t))}removeItem(t){this.wrapped.removeItem(this.scopeKey(t))}clear(){Object.keys(this.wrapped).filter(t=>t.startsWith(this.scope)).map(this.wrapped.removeItem.bind(this.wrapped))}}class md{appId;persisted=!1;clearedOnLogout=!1;constructor(t){this.appId=t}persist(t=!0){return this.persisted=t,this}clearOnLogout(t=!0){return this.clearedOnLogout=t,this}build(){return new Ys(this.appId,this.persisted?window.localStorage:window.sessionStorage,!this.clearedOnLogout)}}function bd(e){return new md(e)}let ds;const ka=[];function vd(){return ds===void 0&&(ds=document.head.dataset.requesttoken??null),ds}function xd(e){ka.push(e)}gd("csrf-token-update",e=>{ds=e.token,ka.forEach(t=>{try{t(ds)}catch(s){console.error("Error updating CSRF token observer",s)}})});bd("public").persist().build();function Oa(e,t){return function(){return e.apply(t,arguments)}}const{toString:wd}=Object.prototype,{getPrototypeOf:oo}=Object,{iterator:Qs,toStringTag:Aa}=Symbol,Zs=(e=>t=>{const s=wd.call(t);return e[s]||(e[s]=s.slice(8,-1).toLowerCase())})(Object.create(null)),Me=e=>(e=e.toLowerCase(),t=>Zs(t)===e),en=e=>t=>typeof t===e,{isArray:Ut}=Array,zt=en("undefined");function us(e){return e!==null&&!zt(e)&&e.constructor!==null&&!zt(e.constructor)&&Ce(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const Ia=Me("ArrayBuffer");function yd(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&Ia(e.buffer),t}const jd=en("string"),Ce=en("function"),Na=en("number"),fs=e=>e!==null&&typeof e=="object",_d=e=>e===!0||e===!1,tn=e=>{if(Zs(e)!=="object")return!1;const t=oo(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(Aa in e)&&!(Qs in e)},Ed=e=>{if(!fs(e)||us(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},Sd=Me("Date"),Cd=Me("File"),Rd=e=>!!(e&&typeof e.uri<"u"),Td=e=>e&&typeof e.getParts<"u",kd=Me("Blob"),Od=Me("FileList"),Ad=e=>fs(e)&&Ce(e.pipe);function Id(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Pa=Id(),La=typeof Pa.FormData<"u"?Pa.FormData:void 0,Nd=e=>{let t;return e&&(La&&e instanceof La||Ce(e.append)&&((t=Zs(e))==="formdata"||t==="object"&&Ce(e.toString)&&e.toString()==="[object FormData]"))},Pd=Me("URLSearchParams"),[Ld,$d,Dd,Md]=["ReadableStream","Request","Response","Headers"].map(Me),Fd=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function ps(e,t,{allOwnKeys:s=!1}={}){if(e===null||typeof e>"u")return;let o,n;if(typeof e!="object"&&(e=[e]),Ut(e))for(o=0,n=e.length;o0;)if(n=s[o],t===n.toLowerCase())return n;return null}const Rt=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,Da=e=>!zt(e)&&e!==Rt;function ro(){const{caseless:e,skipUndefined:t}=Da(this)&&this||{},s={},o=(n,a)=>{if(a==="__proto__"||a==="constructor"||a==="prototype")return;const r=e&&$a(s,a)||a;tn(s[r])&&tn(n)?s[r]=ro(s[r],n):tn(n)?s[r]=ro({},n):Ut(n)?s[r]=n.slice():(!t||!zt(n))&&(s[r]=n)};for(let n=0,a=arguments.length;n(ps(t,(n,a)=>{s&&Ce(n)?Object.defineProperty(e,a,{value:Oa(n,s),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,a,{value:n,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:o}),e),zd=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),Vd=(e,t,s,o)=>{e.prototype=Object.create(t.prototype,o),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),s&&Object.assign(e.prototype,s)},Bd=(e,t,s,o)=>{let n,a,r;const i={};if(t=t||{},e==null)return t;do{for(n=Object.getOwnPropertyNames(e),a=n.length;a-- >0;)r=n[a],(!o||o(r,e,t))&&!i[r]&&(t[r]=e[r],i[r]=!0);e=s!==!1&&oo(e)}while(e&&(!s||s(e,t))&&e!==Object.prototype);return t},Hd=(e,t,s)=>{e=String(e),(s===void 0||s>e.length)&&(s=e.length),s-=t.length;const o=e.indexOf(t,s);return o!==-1&&o===s},Wd=e=>{if(!e)return null;if(Ut(e))return e;let t=e.length;if(!Na(t))return null;const s=new Array(t);for(;t-- >0;)s[t]=e[t];return s},qd=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&oo(Uint8Array)),Kd=(e,t)=>{const o=(e&&e[Qs]).call(e);let n;for(;(n=o.next())&&!n.done;){const a=n.value;t.call(e,a[0],a[1])}},Gd=(e,t)=>{let s;const o=[];for(;(s=e.exec(t))!==null;)o.push(s);return o},Jd=Me("HTMLFormElement"),Xd=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(s,o,n){return o.toUpperCase()+n}),Ma=(({hasOwnProperty:e})=>(t,s)=>e.call(t,s))(Object.prototype),Yd=Me("RegExp"),Fa=(e,t)=>{const s=Object.getOwnPropertyDescriptors(e),o={};ps(s,(n,a)=>{let r;(r=t(n,a,e))!==!1&&(o[a]=r||n)}),Object.defineProperties(e,o)},Qd=e=>{Fa(e,(t,s)=>{if(Ce(e)&&["arguments","caller","callee"].indexOf(s)!==-1)return!1;const o=e[s];if(Ce(o)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+s+"'")})}})},Zd=(e,t)=>{const s={},o=n=>{n.forEach(a=>{s[a]=!0})};return Ut(e)?o(e):o(String(e).split(t)),s},eu=()=>{},tu=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function su(e){return!!(e&&Ce(e.append)&&e[Aa]==="FormData"&&e[Qs])}const nu=e=>{const t=new Array(10),s=(o,n)=>{if(fs(o)){if(t.indexOf(o)>=0)return;if(us(o))return o;if(!("toJSON"in o)){t[n]=o;const a=Ut(o)?[]:{};return ps(o,(r,i)=>{const c=s(r,n+1);!zt(c)&&(a[i]=c)}),t[n]=void 0,a}}return o};return s(e,0)},ou=Me("AsyncFunction"),ru=e=>e&&(fs(e)||Ce(e))&&Ce(e.then)&&Ce(e.catch),Ua=((e,t)=>e?setImmediate:t?((s,o)=>(Rt.addEventListener("message",({source:n,data:a})=>{n===Rt&&a===s&&o.length&&o.shift()()},!1),n=>{o.push(n),Rt.postMessage(s,"*")}))(`axios@${Math.random()}`,[]):s=>setTimeout(s))(typeof setImmediate=="function",Ce(Rt.postMessage)),au=typeof queueMicrotask<"u"?queueMicrotask.bind(Rt):typeof process<"u"&&process.nextTick||Ua,m={isArray:Ut,isArrayBuffer:Ia,isBuffer:us,isFormData:Nd,isArrayBufferView:yd,isString:jd,isNumber:Na,isBoolean:_d,isObject:fs,isPlainObject:tn,isEmptyObject:Ed,isReadableStream:Ld,isRequest:$d,isResponse:Dd,isHeaders:Md,isUndefined:zt,isDate:Sd,isFile:Cd,isReactNativeBlob:Rd,isReactNative:Td,isBlob:kd,isRegExp:Yd,isFunction:Ce,isStream:Ad,isURLSearchParams:Pd,isTypedArray:qd,isFileList:Od,forEach:ps,merge:ro,extend:Ud,trim:Fd,stripBOM:zd,inherits:Vd,toFlatObject:Bd,kindOf:Zs,kindOfTest:Me,endsWith:Hd,toArray:Wd,forEachEntry:Kd,matchAll:Gd,isHTMLForm:Jd,hasOwnProperty:Ma,hasOwnProp:Ma,reduceDescriptors:Fa,freezeMethods:Qd,toObjectSet:Zd,toCamelCase:Xd,noop:eu,toFiniteNumber:tu,findKey:$a,global:Rt,isContextDefined:Da,isSpecCompliantForm:su,toJSONObject:nu,isAsyncFn:ou,isThenable:ru,setImmediate:Ua,asap:au,isIterable:e=>e!=null&&Ce(e[Qs])};let U=class ji extends Error{static from(t,s,o,n,a,r){const i=new ji(t.message,s||t.code,o,n,a);return i.cause=t,i.name=t.name,t.status!=null&&i.status==null&&(i.status=t.status),r&&Object.assign(i,r),i}constructor(t,s,o,n,a){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,s&&(this.code=s),o&&(this.config=o),n&&(this.request=n),a&&(this.response=a,this.status=a.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:m.toJSONObject(this.config),code:this.code,status:this.status}}};U.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE",U.ERR_BAD_OPTION="ERR_BAD_OPTION",U.ECONNABORTED="ECONNABORTED",U.ETIMEDOUT="ETIMEDOUT",U.ERR_NETWORK="ERR_NETWORK",U.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS",U.ERR_DEPRECATED="ERR_DEPRECATED",U.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE",U.ERR_BAD_REQUEST="ERR_BAD_REQUEST",U.ERR_CANCELED="ERR_CANCELED",U.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT",U.ERR_INVALID_URL="ERR_INVALID_URL";const iu=null;function ao(e){return m.isPlainObject(e)||m.isArray(e)}function za(e){return m.endsWith(e,"[]")?e.slice(0,-2):e}function io(e,t,s){return e?e.concat(t).map(function(n,a){return n=za(n),!s&&a?"["+n+"]":n}).join(s?".":""):t}function lu(e){return m.isArray(e)&&!e.some(ao)}const cu=m.toFlatObject(m,{},null,function(t){return/^is[A-Z]/.test(t)});function sn(e,t,s){if(!m.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,s=m.toFlatObject(s,{metaTokens:!0,dots:!1,indexes:!1},!1,function(g,y){return!m.isUndefined(y[g])});const o=s.metaTokens,n=s.visitor||l,a=s.dots,r=s.indexes,c=(s.Blob||typeof Blob<"u"&&Blob)&&m.isSpecCompliantForm(t);if(!m.isFunction(n))throw new TypeError("visitor must be a function");function u(x){if(x===null)return"";if(m.isDate(x))return x.toISOString();if(m.isBoolean(x))return x.toString();if(!c&&m.isBlob(x))throw new U("Blob is not supported. Use a Buffer instead.");return m.isArrayBuffer(x)||m.isTypedArray(x)?c&&typeof Blob=="function"?new Blob([x]):Buffer.from(x):x}function l(x,g,y){let L=x;if(m.isReactNative(t)&&m.isReactNativeBlob(x))return t.append(io(y,g,a),u(x)),!1;if(x&&!y&&typeof x=="object"){if(m.endsWith(g,"{}"))g=o?g:g.slice(0,-2),x=JSON.stringify(x);else if(m.isArray(x)&&lu(x)||(m.isFileList(x)||m.endsWith(g,"[]"))&&(L=m.toArray(x)))return g=za(g),L.forEach(function(M,A){!(m.isUndefined(M)||M===null)&&t.append(r===!0?io([g],A,a):r===null?g:g+"[]",u(M))}),!1}return ao(x)?!0:(t.append(io(y,g,a),u(x)),!1)}const p=[],v=Object.assign(cu,{defaultVisitor:l,convertValue:u,isVisitable:ao});function R(x,g){if(!m.isUndefined(x)){if(p.indexOf(x)!==-1)throw Error("Circular reference detected in "+g.join("."));p.push(x),m.forEach(x,function(L,$){(!(m.isUndefined(L)||L===null)&&n.call(t,L,m.isString($)?$.trim():$,g,v))===!0&&R(L,g?g.concat($):[$])}),p.pop()}}if(!m.isObject(e))throw new TypeError("data must be an object");return R(e),t}function Va(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(o){return t[o]})}function lo(e,t){this._pairs=[],e&&sn(e,this,t)}const Ba=lo.prototype;Ba.append=function(t,s){this._pairs.push([t,s])},Ba.toString=function(t){const s=t?function(o){return t.call(this,o,Va)}:Va;return this._pairs.map(function(n){return s(n[0])+"="+s(n[1])},"").join("&")};function du(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Ha(e,t,s){if(!t)return e;const o=s&&s.encode||du,n=m.isFunction(s)?{serialize:s}:s,a=n&&n.serialize;let r;if(a?r=a(t,n):r=m.isURLSearchParams(t)?t.toString():new lo(t,n).toString(o),r){const i=e.indexOf("#");i!==-1&&(e=e.slice(0,i)),e+=(e.indexOf("?")===-1?"?":"&")+r}return e}class Wa{constructor(){this.handlers=[]}use(t,s,o){return this.handlers.push({fulfilled:t,rejected:s,synchronous:o?o.synchronous:!1,runWhen:o?o.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){m.forEach(this.handlers,function(o){o!==null&&t(o)})}}const co={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},uu={isBrowser:!0,classes:{URLSearchParams:typeof URLSearchParams<"u"?URLSearchParams:lo,FormData:typeof FormData<"u"?FormData:null,Blob:typeof Blob<"u"?Blob:null},protocols:["http","https","file","blob","url","data"]},uo=typeof window<"u"&&typeof document<"u",fo=typeof navigator=="object"&&navigator||void 0,fu=uo&&(!fo||["ReactNative","NativeScript","NS"].indexOf(fo.product)<0),pu=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",hu=uo&&window.location.href||"http://localhost",xe={...Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:uo,hasStandardBrowserEnv:fu,hasStandardBrowserWebWorkerEnv:pu,navigator:fo,origin:hu},Symbol.toStringTag,{value:"Module"})),...uu};function gu(e,t){return sn(e,new xe.classes.URLSearchParams,{visitor:function(s,o,n,a){return xe.isNode&&m.isBuffer(s)?(this.append(o,s.toString("base64")),!1):a.defaultVisitor.apply(this,arguments)},...t})}function mu(e){return m.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function bu(e){const t={},s=Object.keys(e);let o;const n=s.length;let a;for(o=0;o=s.length;return r=!r&&m.isArray(n)?n.length:r,c?(m.hasOwnProp(n,r)?n[r]=[n[r],o]:n[r]=o,!i):((!n[r]||!m.isObject(n[r]))&&(n[r]=[]),t(s,o,n[r],a)&&m.isArray(n[r])&&(n[r]=bu(n[r])),!i)}if(m.isFormData(e)&&m.isFunction(e.entries)){const s={};return m.forEachEntry(e,(o,n)=>{t(mu(o),n,s,0)}),s}return null}function vu(e,t,s){if(m.isString(e))try{return(t||JSON.parse)(e),m.trim(e)}catch(o){if(o.name!=="SyntaxError")throw o}return(s||JSON.stringify)(e)}const hs={transitional:co,adapter:["xhr","http","fetch"],transformRequest:[function(t,s){const o=s.getContentType()||"",n=o.indexOf("application/json")>-1,a=m.isObject(t);if(a&&m.isHTMLForm(t)&&(t=new FormData(t)),m.isFormData(t))return n?JSON.stringify(qa(t)):t;if(m.isArrayBuffer(t)||m.isBuffer(t)||m.isStream(t)||m.isFile(t)||m.isBlob(t)||m.isReadableStream(t))return t;if(m.isArrayBufferView(t))return t.buffer;if(m.isURLSearchParams(t))return s.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let i;if(a){if(o.indexOf("application/x-www-form-urlencoded")>-1)return gu(t,this.formSerializer).toString();if((i=m.isFileList(t))||o.indexOf("multipart/form-data")>-1){const c=this.env&&this.env.FormData;return sn(i?{"files[]":t}:t,c&&new c,this.formSerializer)}}return a||n?(s.setContentType("application/json",!1),vu(t)):t}],transformResponse:[function(t){const s=this.transitional||hs.transitional,o=s&&s.forcedJSONParsing,n=this.responseType==="json";if(m.isResponse(t)||m.isReadableStream(t))return t;if(t&&m.isString(t)&&(o&&!this.responseType||n)){const r=!(s&&s.silentJSONParsing)&&n;try{return JSON.parse(t,this.parseReviver)}catch(i){if(r)throw i.name==="SyntaxError"?U.from(i,U.ERR_BAD_RESPONSE,this,null,this.response):i}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:xe.classes.FormData,Blob:xe.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};m.forEach(["delete","get","head","post","put","patch"],e=>{hs.headers[e]={}});const xu=m.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),wu=e=>{const t={};let s,o,n;return e&&e.split(` +`).forEach(function(r){n=r.indexOf(":"),s=r.substring(0,n).trim().toLowerCase(),o=r.substring(n+1).trim(),!(!s||t[s]&&xu[s])&&(s==="set-cookie"?t[s]?t[s].push(o):t[s]=[o]:t[s]=t[s]?t[s]+", "+o:o)}),t},Ka=Symbol("internals"),yu=e=>!/[\r\n]/.test(e);function Ga(e,t){if(!(e===!1||e==null)){if(m.isArray(e)){e.forEach(s=>Ga(s,t));return}if(!yu(String(e)))throw new Error(`Invalid character in header content ["${t}"]`)}}function gs(e){return e&&String(e).trim().toLowerCase()}function ju(e){let t=e.length;for(;t>0;){const s=e.charCodeAt(t-1);if(s!==10&&s!==13)break;t-=1}return t===e.length?e:e.slice(0,t)}function nn(e){return e===!1||e==null?e:m.isArray(e)?e.map(nn):ju(String(e))}function _u(e){const t=Object.create(null),s=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let o;for(;o=s.exec(e);)t[o[1]]=o[2];return t}const Eu=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function po(e,t,s,o,n){if(m.isFunction(o))return o.call(this,t,s);if(n&&(t=s),!!m.isString(t)){if(m.isString(o))return t.indexOf(o)!==-1;if(m.isRegExp(o))return o.test(t)}}function Su(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,s,o)=>s.toUpperCase()+o)}function Cu(e,t){const s=m.toCamelCase(" "+t);["get","set","has"].forEach(o=>{Object.defineProperty(e,o+s,{value:function(n,a,r){return this[o].call(this,t,n,a,r)},configurable:!0})})}let Re=class{constructor(t){t&&this.set(t)}set(t,s,o){const n=this;function a(i,c,u){const l=gs(c);if(!l)throw new Error("header name must be a non-empty string");const p=m.findKey(n,l);(!p||n[p]===void 0||u===!0||u===void 0&&n[p]!==!1)&&(Ga(i,c),n[p||c]=nn(i))}const r=(i,c)=>m.forEach(i,(u,l)=>a(u,l,c));if(m.isPlainObject(t)||t instanceof this.constructor)r(t,s);else if(m.isString(t)&&(t=t.trim())&&!Eu(t))r(wu(t),s);else if(m.isObject(t)&&m.isIterable(t)){let i={},c,u;for(const l of t){if(!m.isArray(l))throw TypeError("Object iterator must return a key-value pair");i[u=l[0]]=(c=i[u])?m.isArray(c)?[...c,l[1]]:[c,l[1]]:l[1]}r(i,s)}else t!=null&&a(s,t,o);return this}get(t,s){if(t=gs(t),t){const o=m.findKey(this,t);if(o){const n=this[o];if(!s)return n;if(s===!0)return _u(n);if(m.isFunction(s))return s.call(this,n,o);if(m.isRegExp(s))return s.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,s){if(t=gs(t),t){const o=m.findKey(this,t);return!!(o&&this[o]!==void 0&&(!s||po(this,this[o],o,s)))}return!1}delete(t,s){const o=this;let n=!1;function a(r){if(r=gs(r),r){const i=m.findKey(o,r);i&&(!s||po(o,o[i],i,s))&&(delete o[i],n=!0)}}return m.isArray(t)?t.forEach(a):a(t),n}clear(t){const s=Object.keys(this);let o=s.length,n=!1;for(;o--;){const a=s[o];(!t||po(this,this[a],a,t,!0))&&(delete this[a],n=!0)}return n}normalize(t){const s=this,o={};return m.forEach(this,(n,a)=>{const r=m.findKey(o,a);if(r){s[r]=nn(n),delete s[a];return}const i=t?Su(a):String(a).trim();i!==a&&delete s[a],s[i]=nn(n),o[i]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const s=Object.create(null);return m.forEach(this,(o,n)=>{o!=null&&o!==!1&&(s[n]=t&&m.isArray(o)?o.join(", "):o)}),s}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,s])=>t+": "+s).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...s){const o=new this(t);return s.forEach(n=>o.set(n)),o}static accessor(t){const o=(this[Ka]=this[Ka]={accessors:{}}).accessors,n=this.prototype;function a(r){const i=gs(r);o[i]||(Cu(n,r),o[i]=!0)}return m.isArray(t)?t.forEach(a):a(t),this}};Re.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),m.reduceDescriptors(Re.prototype,({value:e},t)=>{let s=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(o){this[s]=o}}}),m.freezeMethods(Re);function ho(e,t){const s=this||hs,o=t||s,n=Re.from(o.headers);let a=o.data;return m.forEach(e,function(i){a=i.call(s,a,n.normalize(),t?t.status:void 0)}),n.normalize(),a}function Ja(e){return!!(e&&e.__CANCEL__)}let ms=class extends U{constructor(t,s,o){super(t??"canceled",U.ERR_CANCELED,s,o),this.name="CanceledError",this.__CANCEL__=!0}};function Xa(e,t,s){const o=s.config.validateStatus;!s.status||!o||o(s.status)?e(s):t(new U("Request failed with status code "+s.status,[U.ERR_BAD_REQUEST,U.ERR_BAD_RESPONSE][Math.floor(s.status/100)-4],s.config,s.request,s))}function Ru(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function Tu(e,t){e=e||10;const s=new Array(e),o=new Array(e);let n=0,a=0,r;return t=t!==void 0?t:1e3,function(c){const u=Date.now(),l=o[a];r||(r=u),s[n]=c,o[n]=u;let p=a,v=0;for(;p!==n;)v+=s[p++],p=p%e;if(n=(n+1)%e,n===a&&(a=(a+1)%e),u-r{s=l,n=null,a&&(clearTimeout(a),a=null),e(...u)};return[(...u)=>{const l=Date.now(),p=l-s;p>=o?r(u,l):(n=u,a||(a=setTimeout(()=>{a=null,r(n)},o-p)))},()=>n&&r(n)]}const on=(e,t,s=3)=>{let o=0;const n=Tu(50,250);return ku(a=>{const r=a.loaded,i=a.lengthComputable?a.total:void 0,c=r-o,u=n(c),l=r<=i;o=r;const p={loaded:r,total:i,progress:i?r/i:void 0,bytes:c,rate:u||void 0,estimated:u&&i&&l?(i-r)/u:void 0,event:a,lengthComputable:i!=null,[t?"download":"upload"]:!0};e(p)},s)},Ya=(e,t)=>{const s=e!=null;return[o=>t[0]({lengthComputable:s,total:e,loaded:o}),t[1]]},Qa=e=>(...t)=>m.asap(()=>e(...t)),Ou=xe.hasStandardBrowserEnv?((e,t)=>s=>(s=new URL(s,xe.origin),e.protocol===s.protocol&&e.host===s.host&&(t||e.port===s.port)))(new URL(xe.origin),xe.navigator&&/(msie|trident)/i.test(xe.navigator.userAgent)):()=>!0,Au=xe.hasStandardBrowserEnv?{write(e,t,s,o,n,a,r){if(typeof document>"u")return;const i=[`${e}=${encodeURIComponent(t)}`];m.isNumber(s)&&i.push(`expires=${new Date(s).toUTCString()}`),m.isString(o)&&i.push(`path=${o}`),m.isString(n)&&i.push(`domain=${n}`),a===!0&&i.push("secure"),m.isString(r)&&i.push(`SameSite=${r}`),document.cookie=i.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function Iu(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function Nu(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function Za(e,t,s){let o=!Iu(t);return e&&(o||s==!1)?Nu(e,t):t}const ei=e=>e instanceof Re?{...e}:e;function Tt(e,t){t=t||{};const s={};function o(u,l,p,v){return m.isPlainObject(u)&&m.isPlainObject(l)?m.merge.call({caseless:v},u,l):m.isPlainObject(l)?m.merge({},l):m.isArray(l)?l.slice():l}function n(u,l,p,v){if(m.isUndefined(l)){if(!m.isUndefined(u))return o(void 0,u,p,v)}else return o(u,l,p,v)}function a(u,l){if(!m.isUndefined(l))return o(void 0,l)}function r(u,l){if(m.isUndefined(l)){if(!m.isUndefined(u))return o(void 0,u)}else return o(void 0,l)}function i(u,l,p){if(p in t)return o(u,l);if(p in e)return o(void 0,u)}const c={url:a,method:a,data:a,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,withXSRFToken:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:i,headers:(u,l,p)=>n(ei(u),ei(l),p,!0)};return m.forEach(Object.keys({...e,...t}),function(l){if(l==="__proto__"||l==="constructor"||l==="prototype")return;const p=m.hasOwnProp(c,l)?c[l]:n,v=p(e[l],t[l],l);m.isUndefined(v)&&p!==i||(s[l]=v)}),s}const ti=e=>{const t=Tt({},e);let{data:s,withXSRFToken:o,xsrfHeaderName:n,xsrfCookieName:a,headers:r,auth:i}=t;if(t.headers=r=Re.from(r),t.url=Ha(Za(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),i&&r.set("Authorization","Basic "+btoa((i.username||"")+":"+(i.password?unescape(encodeURIComponent(i.password)):""))),m.isFormData(s)){if(xe.hasStandardBrowserEnv||xe.hasStandardBrowserWebWorkerEnv)r.setContentType(void 0);else if(m.isFunction(s.getHeaders)){const c=s.getHeaders(),u=["content-type","content-length"];Object.entries(c).forEach(([l,p])=>{u.includes(l.toLowerCase())&&r.set(l,p)})}}if(xe.hasStandardBrowserEnv&&(o&&m.isFunction(o)&&(o=o(t)),o||o!==!1&&Ou(t.url))){const c=n&&a&&Au.read(a);c&&r.set(n,c)}return t},Pu=typeof XMLHttpRequest<"u"&&function(e){return new Promise(function(s,o){const n=ti(e);let a=n.data;const r=Re.from(n.headers).normalize();let{responseType:i,onUploadProgress:c,onDownloadProgress:u}=n,l,p,v,R,x;function g(){R&&R(),x&&x(),n.cancelToken&&n.cancelToken.unsubscribe(l),n.signal&&n.signal.removeEventListener("abort",l)}let y=new XMLHttpRequest;y.open(n.method.toUpperCase(),n.url,!0),y.timeout=n.timeout;function L(){if(!y)return;const M=Re.from("getAllResponseHeaders"in y&&y.getAllResponseHeaders()),W={data:!i||i==="text"||i==="json"?y.responseText:y.response,status:y.status,statusText:y.statusText,headers:M,config:e,request:y};Xa(function(ne){s(ne),g()},function(ne){o(ne),g()},W),y=null}"onloadend"in y?y.onloadend=L:y.onreadystatechange=function(){!y||y.readyState!==4||y.status===0&&!(y.responseURL&&y.responseURL.indexOf("file:")===0)||setTimeout(L)},y.onabort=function(){y&&(o(new U("Request aborted",U.ECONNABORTED,e,y)),y=null)},y.onerror=function(A){const W=A&&A.message?A.message:"Network Error",fe=new U(W,U.ERR_NETWORK,e,y);fe.event=A||null,o(fe),y=null},y.ontimeout=function(){let A=n.timeout?"timeout of "+n.timeout+"ms exceeded":"timeout exceeded";const W=n.transitional||co;n.timeoutErrorMessage&&(A=n.timeoutErrorMessage),o(new U(A,W.clarifyTimeoutError?U.ETIMEDOUT:U.ECONNABORTED,e,y)),y=null},a===void 0&&r.setContentType(null),"setRequestHeader"in y&&m.forEach(r.toJSON(),function(A,W){y.setRequestHeader(W,A)}),m.isUndefined(n.withCredentials)||(y.withCredentials=!!n.withCredentials),i&&i!=="json"&&(y.responseType=n.responseType),u&&([v,x]=on(u,!0),y.addEventListener("progress",v)),c&&y.upload&&([p,R]=on(c),y.upload.addEventListener("progress",p),y.upload.addEventListener("loadend",R)),(n.cancelToken||n.signal)&&(l=M=>{y&&(o(!M||M.type?new ms(null,e,y):M),y.abort(),y=null)},n.cancelToken&&n.cancelToken.subscribe(l),n.signal&&(n.signal.aborted?l():n.signal.addEventListener("abort",l)));const $=Ru(n.url);if($&&xe.protocols.indexOf($)===-1){o(new U("Unsupported protocol "+$+":",U.ERR_BAD_REQUEST,e));return}y.send(a||null)})},Lu=(e,t)=>{const{length:s}=e=e?e.filter(Boolean):[];if(t||s){let o=new AbortController,n;const a=function(u){if(!n){n=!0,i();const l=u instanceof Error?u:this.reason;o.abort(l instanceof U?l:new ms(l instanceof Error?l.message:l))}};let r=t&&setTimeout(()=>{r=null,a(new U(`timeout of ${t}ms exceeded`,U.ETIMEDOUT))},t);const i=()=>{e&&(r&&clearTimeout(r),r=null,e.forEach(u=>{u.unsubscribe?u.unsubscribe(a):u.removeEventListener("abort",a)}),e=null)};e.forEach(u=>u.addEventListener("abort",a));const{signal:c}=o;return c.unsubscribe=()=>m.asap(i),c}},$u=function*(e,t){let s=e.byteLength;if(s{const n=Du(e,t);let a=0,r,i=c=>{r||(r=!0,o&&o(c))};return new ReadableStream({async pull(c){try{const{done:u,value:l}=await n.next();if(u){i(),c.close();return}let p=l.byteLength;if(s){let v=a+=p;s(v)}c.enqueue(new Uint8Array(l))}catch(u){throw i(u),u}},cancel(c){return i(c),n.return()}},{highWaterMark:2})},ni=64*1024,{isFunction:rn}=m,Fu=(({Request:e,Response:t})=>({Request:e,Response:t}))(m.global),{ReadableStream:oi,TextEncoder:ri}=m.global,ai=(e,...t)=>{try{return!!e(...t)}catch{return!1}},Uu=e=>{e=m.merge.call({skipUndefined:!0},Fu,e);const{fetch:t,Request:s,Response:o}=e,n=t?rn(t):typeof fetch=="function",a=rn(s),r=rn(o);if(!n)return!1;const i=n&&rn(oi),c=n&&(typeof ri=="function"?(x=>g=>x.encode(g))(new ri):async x=>new Uint8Array(await new s(x).arrayBuffer())),u=a&&i&&ai(()=>{let x=!1;const g=new oi,y=new s(xe.origin,{body:g,method:"POST",get duplex(){return x=!0,"half"}}).headers.has("Content-Type");return g.cancel(),x&&!y}),l=r&&i&&ai(()=>m.isReadableStream(new o("").body)),p={stream:l&&(x=>x.body)};n&&["text","arrayBuffer","blob","formData","stream"].forEach(x=>{!p[x]&&(p[x]=(g,y)=>{let L=g&&g[x];if(L)return L.call(g);throw new U(`Response type '${x}' is not supported`,U.ERR_NOT_SUPPORT,y)})});const v=async x=>{if(x==null)return 0;if(m.isBlob(x))return x.size;if(m.isSpecCompliantForm(x))return(await new s(xe.origin,{method:"POST",body:x}).arrayBuffer()).byteLength;if(m.isArrayBufferView(x)||m.isArrayBuffer(x))return x.byteLength;if(m.isURLSearchParams(x)&&(x=x+""),m.isString(x))return(await c(x)).byteLength},R=async(x,g)=>{const y=m.toFiniteNumber(x.getContentLength());return y??v(g)};return async x=>{let{url:g,method:y,data:L,signal:$,cancelToken:M,timeout:A,onDownloadProgress:W,onUploadProgress:fe,responseType:ne,headers:ke,withCredentials:gt="same-origin",fetchOptions:Qe}=ti(x),yt=t||fetch;ne=ne?(ne+"").toLowerCase():"text";let mt=Lu([$,M&&M.toAbortSignal()],A),Ze=null;const Fe=mt&&mt.unsubscribe&&(()=>{mt.unsubscribe()});let bs;try{if(fe&&u&&y!=="get"&&y!=="head"&&(bs=await R(ke,L))!==0){let we=new s(g,{method:"POST",body:L,duplex:"half"}),pe;if(m.isFormData(L)&&(pe=we.headers.get("content-type"))&&ke.setContentType(pe),we.body){const[Bt,Ht]=Ya(bs,on(Qa(fe)));L=si(we.body,ni,Bt,Ht)}}m.isString(gt)||(gt=gt?"include":"omit");const Q=a&&"credentials"in s.prototype,oe={...Qe,signal:mt,method:y.toUpperCase(),headers:ke.normalize().toJSON(),body:L,duplex:"half",credentials:Q?gt:void 0};Ze=a&&new s(g,oe);let q=await(a?yt(Ze,Qe):yt(g,oe));const et=l&&(ne==="stream"||ne==="response");if(l&&(W||et&&Fe)){const we={};["status","statusText","headers"].forEach(cn=>{we[cn]=q[cn]});const pe=m.toFiniteNumber(q.headers.get("content-length")),[Bt,Ht]=W&&Ya(pe,on(Qa(W),!0))||[];q=new o(si(q.body,ni,Bt,()=>{Ht&&Ht(),Fe&&Fe()}),we)}ne=ne||"text";let Vt=await p[m.findKey(p,ne)||"text"](q,x);return!et&&Fe&&Fe(),await new Promise((we,pe)=>{Xa(we,pe,{data:Vt,headers:Re.from(q.headers),status:q.status,statusText:q.statusText,config:x,request:Ze})})}catch(Q){throw Fe&&Fe(),Q&&Q.name==="TypeError"&&/Load failed|fetch/i.test(Q.message)?Object.assign(new U("Network Error",U.ERR_NETWORK,x,Ze,Q&&Q.response),{cause:Q.cause||Q}):U.from(Q,Q&&Q.code,x,Ze,Q&&Q.response)}}},zu=new Map,ii=e=>{let t=e&&e.env||{};const{fetch:s,Request:o,Response:n}=t,a=[o,n,s];let r=a.length,i=r,c,u,l=zu;for(;i--;)c=a[i],u=l.get(c),u===void 0&&l.set(c,u=i?new Map:Uu(t)),l=u;return u};ii();const go={http:iu,xhr:Pu,fetch:{get:ii}};m.forEach(go,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const li=e=>`- ${e}`,Vu=e=>m.isFunction(e)||e===null||e===!1;function Bu(e,t){e=m.isArray(e)?e:[e];const{length:s}=e;let o,n;const a={};for(let r=0;r`adapter ${c} `+(u===!1?"is not supported by the environment":"is not available in the build"));let i=s?r.length>1?`since : `+r.map(li).join(` -`):" "+li(r[0]):"as no adapter specified";throw new U("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return n}const ci={getAdapter:Hf,adapters:go};function mo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ms(null,e)}function di(e){return mo(e),e.headers=Re.from(e.headers),e.data=ho.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ci.getAdapter(e.adapter||hs.adapter,e)(e).then(function(o){return mo(e),o.data=ho.call(e,e.transformResponse,o),o.headers=Re.from(o.headers),o},function(o){return Ja(o)||(mo(e),o&&o.response&&(o.response.data=ho.call(e,e.transformResponse,o.response),o.response.headers=Re.from(o.response.headers))),Promise.reject(o)})}const fi="1.15.0",an={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{an[e]=function(o){return typeof o===e||"a"+(t<1?"n ":" ")+e}});const ui={};an.transitional=function(t,s,o){function n(a,r){return"[Axios v"+fi+"] Transitional option '"+a+"'"+r+(o?". "+o:"")}return(a,r,i)=>{if(t===!1)throw new U(n(r," has been removed"+(s?" in "+s:"")),U.ERR_DEPRECATED);return s&&!ui[r]&&(ui[r]=!0,console.warn(n(r," has been deprecated since v"+s+" and will be removed in the near future"))),t?t(a,r,i):!0}},an.spelling=function(t){return(s,o)=>(console.warn(`${o} is likely a misspelling of ${t}`),!0)};function Wf(e,t,s){if(typeof e!="object")throw new U("options must be an object",U.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let n=o.length;for(;n-- >0;){const a=o[n],r=t[a];if(r){const i=e[a],c=i===void 0||r(i,a,e);if(c!==!0)throw new U("option "+a+" must be "+c,U.ERR_BAD_OPTION_VALUE);continue}if(s!==!0)throw new U("Unknown option "+a,U.ERR_BAD_OPTION)}}const ln={assertOptions:Wf,validators:an},Ie=ln.validators;let kt=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Wa,response:new Wa}}async request(t,s){try{return await this._request(t,s)}catch(o){if(o instanceof Error){let n={};Error.captureStackTrace?Error.captureStackTrace(n):n=new Error;const a=(()=>{if(!n.stack)return"";const r=n.stack.indexOf(` +`):" "+li(r[0]):"as no adapter specified";throw new U("There is no suitable adapter to dispatch the request "+i,"ERR_NOT_SUPPORT")}return n}const ci={getAdapter:Bu,adapters:go};function mo(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ms(null,e)}function di(e){return mo(e),e.headers=Re.from(e.headers),e.data=ho.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),ci.getAdapter(e.adapter||hs.adapter,e)(e).then(function(o){return mo(e),o.data=ho.call(e,e.transformResponse,o),o.headers=Re.from(o.headers),o},function(o){return Ja(o)||(mo(e),o&&o.response&&(o.response.data=ho.call(e,e.transformResponse,o.response),o.response.headers=Re.from(o.response.headers))),Promise.reject(o)})}const ui="1.15.0",an={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{an[e]=function(o){return typeof o===e||"a"+(t<1?"n ":" ")+e}});const fi={};an.transitional=function(t,s,o){function n(a,r){return"[Axios v"+ui+"] Transitional option '"+a+"'"+r+(o?". "+o:"")}return(a,r,i)=>{if(t===!1)throw new U(n(r," has been removed"+(s?" in "+s:"")),U.ERR_DEPRECATED);return s&&!fi[r]&&(fi[r]=!0,console.warn(n(r," has been deprecated since v"+s+" and will be removed in the near future"))),t?t(a,r,i):!0}},an.spelling=function(t){return(s,o)=>(console.warn(`${o} is likely a misspelling of ${t}`),!0)};function Hu(e,t,s){if(typeof e!="object")throw new U("options must be an object",U.ERR_BAD_OPTION_VALUE);const o=Object.keys(e);let n=o.length;for(;n-- >0;){const a=o[n],r=t[a];if(r){const i=e[a],c=i===void 0||r(i,a,e);if(c!==!0)throw new U("option "+a+" must be "+c,U.ERR_BAD_OPTION_VALUE);continue}if(s!==!0)throw new U("Unknown option "+a,U.ERR_BAD_OPTION)}}const ln={assertOptions:Hu,validators:an},Ne=ln.validators;let kt=class{constructor(t){this.defaults=t||{},this.interceptors={request:new Wa,response:new Wa}}async request(t,s){try{return await this._request(t,s)}catch(o){if(o instanceof Error){let n={};Error.captureStackTrace?Error.captureStackTrace(n):n=new Error;const a=(()=>{if(!n.stack)return"";const r=n.stack.indexOf(` `);return r===-1?"":n.stack.slice(r+1)})();try{if(!o.stack)o.stack=a;else if(a){const r=a.indexOf(` `),i=r===-1?-1:a.indexOf(` `,r+1),c=i===-1?"":a.slice(i+1);String(o.stack).endsWith(c)||(o.stack+=` -`+a)}}catch{}}throw o}}_request(t,s){typeof t=="string"?(s=s||{},s.url=t):s=t||{},s=Tt(this.defaults,s);const{transitional:o,paramsSerializer:n,headers:a}=s;o!==void 0&&ln.assertOptions(o,{silentJSONParsing:Ie.transitional(Ie.boolean),forcedJSONParsing:Ie.transitional(Ie.boolean),clarifyTimeoutError:Ie.transitional(Ie.boolean),legacyInterceptorReqResOrdering:Ie.transitional(Ie.boolean)},!1),n!=null&&(m.isFunction(n)?s.paramsSerializer={serialize:n}:ln.assertOptions(n,{encode:Ie.function,serialize:Ie.function},!0)),s.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?s.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:s.allowAbsoluteUrls=!0),ln.assertOptions(s,{baseUrl:Ie.spelling("baseURL"),withXsrfToken:Ie.spelling("withXSRFToken")},!0),s.method=(s.method||this.defaults.method||"get").toLowerCase();let r=a&&m.merge(a.common,a[s.method]);a&&m.forEach(["delete","get","head","post","put","patch","common"],x=>{delete a[x]}),s.headers=Re.concat(r,a);const i=[];let c=!0;this.interceptors.request.forEach(function(g){if(typeof g.runWhen=="function"&&g.runWhen(s)===!1)return;c=c&&g.synchronous;const y=s.transitional||co;y&&y.legacyInterceptorReqResOrdering?i.unshift(g.fulfilled,g.rejected):i.push(g.fulfilled,g.rejected)});const f=[];this.interceptors.response.forEach(function(g){f.push(g.fulfilled,g.rejected)});let l,p=0,v;if(!c){const x=[di.bind(this),void 0];for(x.unshift(...i),x.push(...f),v=x.length,l=Promise.resolve(s);p{if(!o._listeners)return;let a=o._listeners.length;for(;a-- >0;)o._listeners[a](n);o._listeners=null}),this.promise.then=n=>{let a;const r=new Promise(i=>{o.subscribe(i),a=i}).then(n);return r.cancel=function(){o.unsubscribe(a)},r},t(function(a,r,i){o.reason||(o.reason=new ms(a,r,i),s(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const s=this._listeners.indexOf(t);s!==-1&&this._listeners.splice(s,1)}toAbortSignal(){const t=new AbortController,s=o=>{t.abort(o)};return this.subscribe(s),t.signal.unsubscribe=()=>this.unsubscribe(s),t.signal}static source(){let t;return{token:new _i(function(n){t=n}),cancel:t}}};function Kf(e){return function(s){return e.apply(null,s)}}function Gf(e){return m.isObject(e)&&e.isAxiosError===!0}const bo={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(bo).forEach(([e,t])=>{bo[t]=e});function pi(e){const t=new kt(e),s=Oa(kt.prototype.request,t);return m.extend(s,kt.prototype,t,{allOwnKeys:!0}),m.extend(s,t,null,{allOwnKeys:!0}),s.create=function(n){return pi(Tt(e,n))},s}const ie=pi(hs);ie.Axios=kt,ie.CanceledError=ms,ie.CancelToken=qf,ie.isCancel=Ja,ie.VERSION=fi,ie.toFormData=sn,ie.AxiosError=U,ie.Cancel=ie.CanceledError,ie.all=function(t){return Promise.all(t)},ie.spread=Kf,ie.isAxiosError=Gf,ie.mergeConfig=Tt,ie.AxiosHeaders=Re,ie.formToJSON=e=>qa(m.isHTMLForm(e)?new FormData(e):e),ie.getAdapter=ci.getAdapter,ie.HttpStatusCode=bo,ie.default=ie;const{Axios:Em,AxiosError:Sm,CanceledError:Cm,isCancel:Rm,CancelToken:Tm,VERSION:km,all:Om,Cancel:Am,isAxiosError:vo,spread:Im,toFormData:Nm,AxiosHeaders:Pm,HttpStatusCode:Lm,formToJSON:$m,getAdapter:Dm,mergeConfig:Mm}=ie,hi=(e,t,s)=>{const o=Object.assign({escape:!0},{}),n=function(a,r){return r=r||{},a.replace(/{([^{}]*)}/g,function(i,c){const f=r[c];return o.escape?encodeURIComponent(typeof f=="string"||typeof f=="number"?f.toString():i):typeof f=="string"||typeof f=="number"?f.toString():i})};return e.charAt(0)!=="/"&&(e="/"+e),n(e,{})},gi=(e,t,s)=>{const o=Object.assign({noRewrite:!1},{}),n=Jf();return window?.OC?.config?.modRewriteWorking===!0&&!o.noRewrite?n+hi(e):n+"/index.php"+hi(e)};function Jf(){let e=window._oc_webroot;if(typeof e>"u"){e=location.pathname;const t=e.indexOf("/index.php/");if(t!==-1)e=e.slice(0,t);else{const s=e.indexOf("/",1);e=e.slice(0,s>0?s:void 0)}}return e}const mi=ie.create({headers:{requesttoken:vd()??"","X-Requested-With":"XMLHttpRequest"}});xd(e=>{mi.defaults.headers.requesttoken=e});const re=Object.assign(mi,{CancelToken:ie.CancelToken,isCancel:ie.isCancel}),bi=Symbol("csrf-retry");function Xf(e){return async t=>{if(!vo(t))throw t;const{config:s,response:o,request:n}=t,a=n?.responseURL;if(s&&!s[bi]&&o?.status===412&&o?.data?.message==="CSRF check failed"){console.warn(`Request to ${a} failed because of a CSRF mismatch. Fetching a new token`);const{data:{token:r}}=await e.get(gi("/csrftoken"));return console.debug(`New request token ${r} fetched`),e.defaults.headers.requesttoken=r,e({...s,headers:{...s.headers,requesttoken:r},[bi]:!0})}throw t}}const xo=Symbol("retryDelay");function Yf(e){return async t=>{if(!vo(t))throw t;const{config:s,response:o,request:n}=t,a=n?.responseURL,r=o?.status,i=o?.headers;let c=typeof s?.[xo]=="number"?s?.[xo]:1;if(r===503&&i?.["x-nextcloud-maintenance-mode"]==="1"&&s?.retryIfMaintenanceMode){if(c*=2,c>32)throw console.error("Retry delay exceeded one minute, giving up.",{responseURL:a}),t;return console.warn(`Request to ${a} failed because of maintenance mode. Retrying in ${c}s`),await new Promise(f=>{setTimeout(f,c*1e3)}),e({...s,[xo]:c})}throw t}}async function Qf(e){if(vo(e)){const{config:t,response:s,request:o}=e,n=o?.responseURL;s?.status===401&&s?.data?.message==="Current user is not logged in"&&t?.reloadExpiredSession&&window?.location&&(console.error(`Request to ${n} failed because the user session expired. Reloading the page …`),window.location.reload())}throw e}re.interceptors.response.use(e=>e,Xf(re)),re.interceptors.response.use(e=>e,Yf(re)),re.interceptors.response.use(e=>e,Qf);const de=gi("/apps/jadaagent"),Ne={async getHealth(){return(await re.get(`${de}/api/health`)).data},async getHealthDetail(){return(await re.get(`${de}/api/health/detail`)).data},async sendMessage(e,t="main"){const s=Array.isArray(e)?{messages:e,conversation_id:t}:{message:e,conversation_id:t};return(await re.post(`${de}/api/chat`,s)).data},createSSEStream(e){const t=`${de}/api/chat/sse`,s=document.querySelector('meta[name="requesttoken"]')?.content||window.OC?.requestToken||"",o=new AbortController;return{promise:fetch(t,{method:"POST",headers:{"Content-Type":"application/json",requesttoken:s},body:JSON.stringify({messages:e}),signal:o.signal}),cancel:()=>o.abort()}},async getConversations(){return(await re.get(`${de}/api/conversations`)).data},async getConversation(e){return(await re.get(`${de}/api/conversations/${encodeURIComponent(e)}`)).data},async getConversationToolCalls(e){return(await re.get(`${de}/api/conversations/${encodeURIComponent(e)}/toolcalls`)).data},async getRecentToolCalls(){return(await re.get(`${de}/api/toolcalls/recent`)).data},async deleteConversation(e){return(await re.delete(`${de}/api/conversations/${encodeURIComponent(e)}`)).data},async reconnectMcp(e=null){return(await re.post(`${de}/api/reconnect`,e?{server:e}:{})).data},async getWorkspaces(){return(await re.get(`${de}/api/workspaces`)).data},async getWorkspace(e){return(await re.get(`${de}/api/workspaces/${encodeURIComponent(e)}`)).data},async createWorkspace(e){return(await re.post(`${de}/api/workspaces`,e)).data},async updateWorkspace(e,t){return(await re.put(`${de}/api/workspaces/${encodeURIComponent(e)}`,t)).data},async deleteWorkspace(e){return(await re.delete(`${de}/api/workspaces/${encodeURIComponent(e)}`)).data},async getUserProfile(){return(await re.get(`${de}/api/profile`)).data},async getSkills(){return(await re.get(`${de}/api/skills`)).data},async getModels(){return(await re.get(`${de}/api/models`)).data},async getSessions(){return(await re.get(`${de}/api/sessions`)).data},async getSettings(){return(await re.get(`${de}/api/settings`)).data},async saveSettings(e){return(await re.put(`${de}/api/settings`,e)).data}},k=As({currentView:"chat",workspaces:[],activeWorkspaceId:"nextcloud",conversations:[],activeConversationId:null,messages:[],healthy:!1,healthData:null,mcpServers:[],totalTools:0,modelName:"",recentToolCalls:[],userProfile:null,rightPanelTab:"tools",rightPanelOpen:!0,isMobile:!1,mobileSidebarOpen:!1}),wo=[{id:"nextcloud",name:"Nextcloud",color:"#0082c9",isRoot:!0,description:"Your home workspace — general Nextcloud operations, file management, calendar, contacts, email, and system administration.",tags:["files","calendar","contacts","admin"],chatCount:0,toolCalls:0,lastActive:null},{id:"kuse",name:"Kuse",color:"#e94560",isRoot:!1,description:"Kuse platform development — API integrations, MCP tool deployment, document management.",tags:["api","mcp","webhooks"],chatCount:0,toolCalls:0,lastActive:null},{id:"nomad-internet",name:"Nomad Internet",color:"#008061",isRoot:!1,description:"Customer support, billing, FreeScout helpdesk management, and Verizon integration.",tags:["support","billing","email"],chatCount:0,toolCalls:0,lastActive:null},{id:"garza-os",name:"GARZA OS",color:"#8b5cf6",isRoot:!1,description:"Infrastructure management — VPS, Docker containers, MCP servers, Railway deployments.",tags:["infra","docker","mcp","vps"],chatCount:0,toolCalls:0,lastActive:null},{id:"development",name:"Development",color:"#22c55e",isRoot:!1,description:"General software development — code reviews, debugging, Paperclip, Sim Studio.",tags:["code","review","deploy"],chatCount:0,toolCalls:0,lastActive:null},{id:"finance",name:"Finance",color:"#f59e0b",isRoot:!1,description:"Akaunting, Chargebee, invoicing, payment tracking, and financial reporting.",tags:["invoices","payments"],chatCount:0,toolCalls:0,lastActive:null},{id:"personal",name:"Personal",color:"#ec4899",isRoot:!1,description:"Personal tasks, notes, and miscellaneous items.",tags:["notes","tasks"],chatCount:0,toolCalls:0,lastActive:null}],Oe={async init(){k.isMobile=window.innerWidth<768,window.addEventListener("resize",()=>{k.isMobile=window.innerWidth<768});try{const e=await Ne.getWorkspaces();k.workspaces=Array.isArray(e)&&e.length>0?e:wo}catch{k.workspaces=wo}k.workspaces.find(e=>e.id==="nextcloud")||k.workspaces.unshift(wo[0]),await this.refreshHealth();try{k.userProfile=await Ne.getUserProfile()}catch{k.userProfile={uid:window.OC?.currentUser||"default",displayName:window.OC?.getCurrentUser?.()?.displayName||"User",email:""}}await this.loadConversations()},async refreshHealth(){try{const e=await Ne.getHealth();k.healthy=e?.ok===!0,k.healthData=e;const t=e?.mcpServers||e?.servers;t&&typeof t=="object"?(k.mcpServers=Object.entries(t).map(([s,o])=>({name:s,tools:o.tools||0,connected:o.status==="connected"||o.connected!==!1})),k.totalTools=k.mcpServers.reduce((s,o)=>s+o.tools,0)):e?.tools?k.totalTools=e.tools:e?.tool_count&&(k.totalTools=e.tool_count),e?.model_name&&(k.modelName=e.model_name)}catch{k.healthy=!1,k.healthData=null}},async loadConversations(){const t=`jada_${k.userProfile?.uid||window.OC?.currentUser||"default"}_conversations`;try{let s=JSON.parse(localStorage.getItem(t)||"[]");if(s.length===0){const o=JSON.parse(localStorage.getItem("jada_conversations")||"[]");o.length>0&&(s=o,localStorage.setItem(t,JSON.stringify(s)))}k.conversations=s}catch{k.conversations=[]}},setActiveWorkspace(e){k.activeWorkspaceId=e,k.activeConversationId=null,k.messages=[]},getActiveWorkspace(){return k.workspaces.find(e=>e.id===k.activeWorkspaceId)||k.workspaces[0]},startNewChat(){k.activeConversationId="conv-"+Date.now(),k.messages=[],k.currentView="chat"},navigate(e){k.currentView=e,k.isMobile&&(k.mobileSidebarOpen=!1)},addToolCall(e){k.recentToolCalls.unshift(e),k.recentToolCalls.length>20&&k.recentToolCalls.pop()},async loadRecentToolCalls(){try{const e=await Ne.getRecentToolCalls();e?.toolCalls&&Array.isArray(e.toolCalls)&&(k.recentToolCalls=e.toolCalls.map(t=>({name:t.name,status:t.status||"success",result:t.result||null,timestamp:t.timestamp?new Date(t.timestamp):new Date,conversationId:t.conversationId})))}catch{}}},Ye=(e,t)=>{const s=e.__vccOpts||e;for(const[o,n]of t)s[o]=n;return s},Zf={name:"ChatView",data(){return{store:k,messages:[],inputText:"",loading:!1,streamingText:"",streamingToolCalls:[],currentCancel:null,suggestions:["List my Nextcloud files","Check my calendar","Show my Proton Drive stats","List my Beeper chats","What tools do you have?","Check system status"]}},computed:{activeWsName(){return Oe.getActiveWorkspace().name},userName(){return k.userProfile?.displayName||"User"},userInitials(){const e=this.userName,t=e.split(" ");return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.substring(0,2).toUpperCase()}},watch:{"store.activeConversationId"(){this.loading||this.loadConversation()}},mounted(){k.activeConversationId&&this.loadConversation()},methods:{loadConversation(){k.activeConversationId&&this.loadFromLocalStorage(k.activeConversationId)},async handleSend(e){const t=e||this.inputText.trim();if(!t||this.loading)return;this.inputText="",this.messages.push({role:"user",content:t,timestamp:new Date}),this.scrollToBottom(),this.loading=!0,this.streamingText="",this.streamingToolCalls=[],k.activeConversationId||Oe.startNewChat();const s=k.activeConversationId;try{const o=this.messages.map(R=>({role:R.role,content:R.content})),{promise:n,cancel:a}=Ne.createSSEStream(o);this.currentCancel=a;const r=await n;if(!r.ok)throw new Error(`HTTP ${r.status}`);const i=r.body.getReader(),c=new TextDecoder;let f="",l="";const p=[];let v="";for(;;){const{done:R,value:x}=await i.read();if(R)break;f+=c.decode(x,{stream:!0});const g=f.split(` -`);f=g.pop()||"";for(const y of g){if(y.startsWith("event: ")){v=y.slice(7).trim();continue}if(!y.startsWith("data: "))continue;const L=y.slice(6).trim();if(L!=="[DONE]")try{const $=JSON.parse(L);if(v==="hermes.tool.progress"&&$.tool){const I=$.tool;p.push({name:I,status:"running",result:null}),this.streamingToolCalls=[...p],Oe.addToolCall({name:I,status:"running",timestamp:new Date}),v="";continue}v="";const M=$.choices?.[0]?.delta;M?.content&&(l+=M.content,this.streamingText=l),$.choices?.[0]?.finish_reason==="stop"&&(p.forEach(I=>{I.status==="running"&&(I.status="success")}),this.streamingToolCalls=[...p],k.recentToolCalls.forEach(I=>{I.status==="running"&&(I.status="success")}))}catch{v=""}}this.scrollToBottom()}this.messages.push({role:"assistant",content:l||this.streamingText||"(No response)",timestamp:new Date,toolCalls:p.length>0?p:void 0}),this.saveToLocalStorage(s)}catch(o){if(o.name==="AbortError"){this.saveToLocalStorage(s);return}try{const n=this.messages.map(r=>({role:r.role,content:r.content})),a=await Ne.sendMessage(n,s);this.messages.push({role:"assistant",content:a.response||a.message||JSON.stringify(a),timestamp:new Date})}catch(n){this.messages.push({role:"assistant",content:"Error: "+(n.response?.data?.error||n.message||"Failed to reach agent"),timestamp:new Date})}this.saveToLocalStorage(s)}finally{this.loading=!1,this.streamingText="",this.streamingToolCalls=[],this.currentCancel=null,this.scrollToBottom(),Oe.loadConversations()}},formatMessage(e){if(!e)return"";let t=e.replace(/&/g,"&").replace(//g,">");return t=t.replace(/```(\w*)\n?([\s\S]*?)```/g,"
$2
"),t=t.replace(/`([^`]+)`/g,"$1"),t=t.replace(/\*\*([^*]+)\*\*/g,"$1"),t=t.replace(new RegExp("(?$1"),t=t.replace(/^### (.+)$/gm,'$1'),t=t.replace(/^## (.+)$/gm,'$1'),t=t.replace(/^- (.+)$/gm,"• $1"),t=t.replace(/\n/g,"
"),t},formatTime(e){return e?new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):""},scrollToBottom(){this.$nextTick(()=>{const e=this.$refs.messagesEl;e&&(e.scrollTop=e.scrollHeight)})},autoResize(){const e=this.$refs.input;e&&(e.style.height="auto",e.style.height=Math.min(e.scrollHeight,120)+"px")},storagePrefix(){return`jada_${k.userProfile?.uid||window.OC?.currentUser||"default"}`},saveToLocalStorage(e){const t=e||k.activeConversationId;if(t)try{const s=this.storagePrefix(),o=`${s}_conv_${t}`,n={id:t,messages:this.messages,updatedAt:new Date().toISOString(),title:this.messages.find(f=>f.role==="user")?.content?.slice(0,60)||"New Chat"};localStorage.setItem(o,JSON.stringify(n));const a=`${s}_conversations`,r=JSON.parse(localStorage.getItem(a)||"[]"),i=r.findIndex(f=>f.id===n.id),c={id:n.id,title:n.title,updatedAt:n.updatedAt,workspace:k.activeWorkspaceId};i>=0?r[i]=c:r.unshift(c),r.length>50&&r.splice(50).forEach(l=>{try{localStorage.removeItem(`${s}_conv_${l.id}`)}catch{}}),localStorage.setItem(a,JSON.stringify(r)),k.conversations=r}catch{}},loadFromLocalStorage(e){const t=this.storagePrefix();this.messages=[];try{const s=localStorage.getItem(`${t}_conv_${e}`)||localStorage.getItem(`jada_conv_${e}`),o=s?JSON.parse(s):null;o?.messages&&(this.messages=o.messages.map(n=>({...n,timestamp:n.timestamp?new Date(n.timestamp):new Date})))}catch{}}},beforeUnmount(){this.currentCancel&&this.currentCancel()}},eu={class:"jada-chat"},tu={key:0,class:"jada-chat-empty"},su={class:"jada-suggestions"},nu=["onClick"],ou={key:1,class:"jada-chat-messages",ref:"messagesEl"},ru={class:"jada-msg-avatar"},au={key:0},iu={key:1},lu={class:"jada-msg-body"},cu={key:0,class:"jada-tool-calls"},du={class:"jada-tool-header"},fu={class:"jada-tool-icon"},uu={class:"jada-tool-name"},pu=["innerHTML"],hu={class:"jada-msg-meta"},gu={key:0},mu={key:0,class:"jada-msg assistant"},bu={class:"jada-msg-body"},vu={key:0,class:"jada-tool-calls"},xu={class:"jada-tool-header"},wu={class:"jada-tool-name"},yu=["innerHTML"],ju={key:2,class:"jada-typing"},_u={class:"jada-chat-input-area"},Eu={class:"jada-chat-input-row"},Su=["placeholder"],Cu=["disabled"],Ru={class:"jada-input-footer"},Tu={class:"jada-input-model"},ku={class:"jada-input-tools"},Ou={class:"jada-input-ws"};function Au(e,t,s,o,n,a){return w(),_("div",eu,[n.messages.length===0&&!n.loading?(w(),_("div",tu,[t[4]||(t[4]=Vn('
',1)),d("h2",null,"Hello, "+T(a.userName),1),d("p",null,T(n.store.totalTools)+" tools across "+T(n.store.mcpServers.length)+" servers. How can I help?",1),d("div",su,[(w(!0),_(q,null,ae(n.suggestions,r=>(w(),_("button",{key:r,class:"jada-chip",onClick:i=>a.handleSend(r)},T(r),9,nu))),128))])])):(w(),_("div",ou,[(w(!0),_(q,null,ae(n.messages,(r,i)=>(w(),_("div",{key:i,class:H(["jada-msg",r.role])},[d("div",ru,[r.role==="user"?(w(),_("span",au,T(a.userInitials),1)):(w(),_("span",iu,"J"))]),d("div",lu,[r.toolCalls&&r.toolCalls.length?(w(),_("div",cu,[(w(!0),_(q,null,ae(r.toolCalls,(c,f)=>(w(),_("div",{key:f,class:"jada-tool-call"},[d("div",du,[d("span",fu,T(c.status==="error"?"❌":c.status==="success"?"✅":"🔧"),1),d("span",uu,T(c.name),1)])]))),128))])):K("",!0),d("div",{class:"jada-msg-text",innerHTML:a.formatMessage(r.content)},null,8,pu),d("div",hu,[qs(T(a.formatTime(r.timestamp))+" ",1),r.toolCalls&&r.toolCalls.length?(w(),_("span",gu," · "+T(r.toolCalls.length)+" tool call"+T(r.toolCalls.length>1?"s":""),1)):K("",!0)])])],2))),128)),n.loading?(w(),_("div",mu,[t[6]||(t[6]=d("div",{class:"jada-msg-avatar"},[d("span",null,"J")],-1)),d("div",bu,[n.streamingToolCalls.length?(w(),_("div",vu,[(w(!0),_(q,null,ae(n.streamingToolCalls,(r,i)=>(w(),_("div",{key:i,class:"jada-tool-call"},[d("div",xu,[d("span",{class:H(["jada-tool-icon",r.status==="running"?"spinning":""])},T(r.status==="error"?"❌":r.status==="success"?"✅":"🔧"),3),d("span",wu,T(r.name),1)])]))),128))])):K("",!0),n.streamingText?(w(),_("div",{key:1,class:"jada-msg-text",innerHTML:a.formatMessage(n.streamingText)},null,8,yu)):(w(),_("div",ju,[...t[5]||(t[5]=[d("span",null,null,-1),d("span",null,null,-1),d("span",null,null,-1)])]))])])):K("",!0)],512)),d("div",_u,[d("div",Eu,[ct(d("textarea",{ref:"input","onUpdate:modelValue":t[0]||(t[0]=r=>n.inputText=r),class:"jada-chat-input",placeholder:"Message Jada about "+a.activeWsName+"...",rows:"1",onKeydown:t[1]||(t[1]=pa(Jn(r=>a.handleSend(),["exact","prevent"]),["enter"])),onInput:t[2]||(t[2]=(...r)=>a.autoResize&&a.autoResize(...r))},null,40,Su),[[ht,n.inputText]]),d("button",{class:"jada-send-btn",onClick:t[3]||(t[3]=r=>a.handleSend()),disabled:!n.inputText.trim()||n.loading},[...t[7]||(t[7]=[d("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[d("path",{d:"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"})],-1)])],8,Cu)]),d("div",Ru,[d("span",Tu,T(n.store.modelName||"Gemini 2.5 Flash"),1),d("span",ku,"· "+T(n.store.totalTools)+" tools",1),d("span",Ou,"· Workspace: "+T(a.activeWsName),1)])])])}const Iu=Ye(Zf,[["render",Au],["__scopeId","data-v-cff9a10a"]]),Nu={name:"WorkspacesView",data(){return{store:k,showCreate:!1,newWs:{name:"",description:"",color:"#e94560"},colorOptions:["#e94560","#0082c9","#008061","#8b5cf6","#22c55e","#f59e0b","#ec4899","#06b6d4","#f97316"]}},methods:{openWorkspace(e){Oe.setActiveWorkspace(e.id),k.currentView="workspace-detail"},async handleCreate(){if(!this.newWs.name.trim())return;const e={id:"ws-"+Date.now(),name:this.newWs.name.trim(),description:this.newWs.description.trim(),color:this.newWs.color,isRoot:!1,tags:[],chatCount:0,toolCalls:0,lastActive:null};try{await Ne.createWorkspace(e)}catch{}k.workspaces.push(e),this.showCreate=!1,this.newWs={name:"",description:"",color:"#e94560"}}}},Pu={class:"jada-workspaces"},Lu={class:"jada-ws-header"},$u={class:"jada-ws-grid"},Du=["onClick"],Mu={class:"jada-ws-card-header"},Fu={class:"jada-ws-card-name"},Uu={key:0,class:"jada-ws-card-badge"},zu={class:"jada-ws-card-desc"},Vu={class:"jada-ws-card-tags"},Bu={class:"jada-ws-card-stats"},Hu={class:"jada-modal"},Wu={class:"jada-form-group"},qu={class:"jada-form-group"},Ku={class:"jada-form-group"},Gu={class:"jada-color-options"},Ju=["onClick"],Xu={class:"jada-modal-actions"},Yu=["disabled"];function Qu(e,t,s,o,n,a){return w(),_("div",Pu,[d("div",Lu,[t[6]||(t[6]=d("h1",null,"Workspaces",-1)),d("button",{class:"jada-btn-primary",onClick:t[0]||(t[0]=r=>n.showCreate=!0)},"+ New Workspace")]),d("div",$u,[(w(!0),_(q,null,ae(n.store.workspaces,r=>(w(),_("div",{key:r.id,class:H(["jada-ws-card",{root:r.isRoot}]),onClick:i=>a.openWorkspace(r)},[d("div",Mu,[d("span",{class:"jada-ws-card-dot",style:Le({background:r.color})},null,4),d("span",Fu,T(r.name),1),r.isRoot?(w(),_("span",Uu,"HOME")):K("",!0)]),d("p",zu,T(r.description),1),d("div",Vu,[(w(!0),_(q,null,ae((r.tags||[]).slice(0,4),i=>(w(),_("span",{key:i,class:"jada-ws-tag"},T(i),1))),128))]),d("div",Bu,[d("span",null,T(r.chatCount||0)+" chats",1),t[7]||(t[7]=d("span",null,"·",-1)),d("span",null,T(r.toolCalls||0)+" tool calls",1)])],10,Du))),128))]),n.showCreate?(w(),_("div",{key:0,class:"jada-modal-overlay",onClick:t[5]||(t[5]=Jn(r=>n.showCreate=!1,["self"]))},[d("div",Hu,[t[11]||(t[11]=d("h3",null,"Create Workspace",-1)),d("div",Wu,[t[8]||(t[8]=d("label",null,"Name",-1)),ct(d("input",{"onUpdate:modelValue":t[1]||(t[1]=r=>n.newWs.name=r),placeholder:"e.g., Marketing"},null,512),[[ht,n.newWs.name]])]),d("div",qu,[t[9]||(t[9]=d("label",null,"Description",-1)),ct(d("textarea",{"onUpdate:modelValue":t[2]||(t[2]=r=>n.newWs.description=r),placeholder:"What is this workspace for?",rows:"3"},null,512),[[ht,n.newWs.description]])]),d("div",Ku,[t[10]||(t[10]=d("label",null,"Color",-1)),d("div",Gu,[(w(!0),_(q,null,ae(n.colorOptions,r=>(w(),_("button",{key:r,class:H(["jada-color-btn",{selected:n.newWs.color===r}]),style:Le({background:r}),onClick:i=>n.newWs.color=r},null,14,Ju))),128))])]),d("div",Xu,[d("button",{class:"jada-btn-secondary",onClick:t[3]||(t[3]=r=>n.showCreate=!1)},"Cancel"),d("button",{class:"jada-btn-primary",onClick:t[4]||(t[4]=(...r)=>a.handleCreate&&a.handleCreate(...r)),disabled:!n.newWs.name.trim()},"Create",8,Yu)])])])):K("",!0)])}const Zu=Ye(Nu,[["render",Qu],["__scopeId","data-v-4921a983"]]),ep={name:"WorkspaceDetailView",data(){return{store:k}},computed:{ws(){return Oe.getActiveWorkspace()},wsConversations(){return k.conversations.filter(e=>e.workspace===k.activeWorkspaceId).slice(0,10)}},methods:{startChat(){Oe.startNewChat()},openDocs(){k.currentView="document-editor"},openConversation(e){k.activeConversationId=e.id,k.currentView="chat"}}},tp={class:"jada-ws-detail"},sp={class:"jada-ws-detail-header"},np={class:"jada-ws-detail-title"},op={key:0,class:"jada-ws-badge"},rp={class:"jada-ws-detail-desc"},ap={class:"jada-ws-detail-stats"},ip={class:"jada-stat-card"},lp={class:"jada-stat-value"},cp={class:"jada-stat-card"},dp={class:"jada-stat-value"},fp={class:"jada-stat-card"},up={class:"jada-stat-value"},pp={class:"jada-ws-detail-actions"},hp={key:0,class:"jada-ws-conv-list"},gp=["onClick"],mp={class:"jada-conv-meta"},bp={class:"jada-conv-title"},vp={class:"jada-conv-time"},xp={key:1,class:"jada-ws-empty"};function wp(e,t,s,o,n,a){return w(),_("div",tp,[d("div",sp,[d("button",{class:"jada-back-btn",onClick:t[0]||(t[0]=r=>n.store.currentView="workspaces")},"← Workspaces"),d("div",np,[d("span",{class:"jada-ws-dot",style:Le({background:a.ws.color})},null,4),d("h1",null,T(a.ws.name),1),a.ws.isRoot?(w(),_("span",op,"HOME")):K("",!0)]),d("p",rp,T(a.ws.description),1)]),d("div",ap,[d("div",ip,[d("div",lp,T(a.ws.chatCount||0),1),t[3]||(t[3]=d("div",{class:"jada-stat-label"},"Conversations",-1))]),d("div",cp,[d("div",dp,T(a.ws.toolCalls||0),1),t[4]||(t[4]=d("div",{class:"jada-stat-label"},"Tool Calls",-1))]),d("div",fp,[d("div",up,T(a.ws.tags?.length||0),1),t[5]||(t[5]=d("div",{class:"jada-stat-label"},"Tags",-1))])]),d("div",pp,[d("button",{class:"jada-btn-primary",onClick:t[1]||(t[1]=(...r)=>a.startChat&&a.startChat(...r))},"Start Chat in "+T(a.ws.name),1),d("button",{class:"jada-btn-secondary",onClick:t[2]||(t[2]=(...r)=>a.openDocs&&a.openDocs(...r))},"Open Documents")]),t[7]||(t[7]=d("h3",null,"Recent Conversations",-1)),a.wsConversations.length?(w(),_("div",hp,[(w(!0),_(q,null,ae(a.wsConversations,r=>(w(),_("div",{key:r.id,class:"jada-ws-conv-item",onClick:i=>a.openConversation(r)},[t[6]||(t[6]=d("span",{class:"jada-conv-icon"},"💬",-1)),d("div",mp,[d("div",bp,T(r.title||r.id),1),d("div",vp,T(r.lastMessage||"No messages yet"),1)])],8,gp))),128))])):(w(),_("div",xp," No conversations in this workspace yet. Start one above. "))])}const yp=Ye(ep,[["render",wp],["__scopeId","data-v-fbdfa994"]]),jp={name:"DocumentEditorView",data(){return{store:k,activeDoc:"Untitled Document",editorContent:"",dirty:!1,aiInput:"",aiMessages:[],aiSuggestions:[],recentDocs:[{name:"Meeting Notes.md",modified:"2 hours ago"},{name:"Project Proposal.md",modified:"Yesterday"},{name:"API Documentation.md",modified:"3 days ago"}],quickActions:[{icon:"🔎",label:"Proofread",prompt:"Proofread this document and suggest corrections."},{icon:"📝",label:"Summarize",prompt:"Summarize this document in 3-5 bullet points."},{icon:"🌐",label:"Translate",prompt:"Translate this document to Spanish."},{icon:"💡",label:"Add Examples",prompt:"Add practical examples to illustrate the main points."},{icon:"💻",label:"From Code",prompt:"Generate documentation from the code in this document."}]}},methods:{openDoc(e){this.activeDoc=e.name,this.editorContent="",this.aiSuggestions=[]},applySuggestion(e){this.editorContent+=` +`+a)}}catch{}}throw o}}_request(t,s){typeof t=="string"?(s=s||{},s.url=t):s=t||{},s=Tt(this.defaults,s);const{transitional:o,paramsSerializer:n,headers:a}=s;o!==void 0&&ln.assertOptions(o,{silentJSONParsing:Ne.transitional(Ne.boolean),forcedJSONParsing:Ne.transitional(Ne.boolean),clarifyTimeoutError:Ne.transitional(Ne.boolean),legacyInterceptorReqResOrdering:Ne.transitional(Ne.boolean)},!1),n!=null&&(m.isFunction(n)?s.paramsSerializer={serialize:n}:ln.assertOptions(n,{encode:Ne.function,serialize:Ne.function},!0)),s.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?s.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:s.allowAbsoluteUrls=!0),ln.assertOptions(s,{baseUrl:Ne.spelling("baseURL"),withXsrfToken:Ne.spelling("withXSRFToken")},!0),s.method=(s.method||this.defaults.method||"get").toLowerCase();let r=a&&m.merge(a.common,a[s.method]);a&&m.forEach(["delete","get","head","post","put","patch","common"],x=>{delete a[x]}),s.headers=Re.concat(r,a);const i=[];let c=!0;this.interceptors.request.forEach(function(g){if(typeof g.runWhen=="function"&&g.runWhen(s)===!1)return;c=c&&g.synchronous;const y=s.transitional||co;y&&y.legacyInterceptorReqResOrdering?i.unshift(g.fulfilled,g.rejected):i.push(g.fulfilled,g.rejected)});const u=[];this.interceptors.response.forEach(function(g){u.push(g.fulfilled,g.rejected)});let l,p=0,v;if(!c){const x=[di.bind(this),void 0];for(x.unshift(...i),x.push(...u),v=x.length,l=Promise.resolve(s);p{if(!o._listeners)return;let a=o._listeners.length;for(;a-- >0;)o._listeners[a](n);o._listeners=null}),this.promise.then=n=>{let a;const r=new Promise(i=>{o.subscribe(i),a=i}).then(n);return r.cancel=function(){o.unsubscribe(a)},r},t(function(a,r,i){o.reason||(o.reason=new ms(a,r,i),s(o.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const s=this._listeners.indexOf(t);s!==-1&&this._listeners.splice(s,1)}toAbortSignal(){const t=new AbortController,s=o=>{t.abort(o)};return this.subscribe(s),t.signal.unsubscribe=()=>this.unsubscribe(s),t.signal}static source(){let t;return{token:new _i(function(n){t=n}),cancel:t}}};function qu(e){return function(s){return e.apply(null,s)}}function Ku(e){return m.isObject(e)&&e.isAxiosError===!0}const bo={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(bo).forEach(([e,t])=>{bo[t]=e});function pi(e){const t=new kt(e),s=Oa(kt.prototype.request,t);return m.extend(s,kt.prototype,t,{allOwnKeys:!0}),m.extend(s,t,null,{allOwnKeys:!0}),s.create=function(n){return pi(Tt(e,n))},s}const le=pi(hs);le.Axios=kt,le.CanceledError=ms,le.CancelToken=Wu,le.isCancel=Ja,le.VERSION=ui,le.toFormData=sn,le.AxiosError=U,le.Cancel=le.CanceledError,le.all=function(t){return Promise.all(t)},le.spread=qu,le.isAxiosError=Ku,le.mergeConfig=Tt,le.AxiosHeaders=Re,le.formToJSON=e=>qa(m.isHTMLForm(e)?new FormData(e):e),le.getAdapter=ci.getAdapter,le.HttpStatusCode=bo,le.default=le;const{Axios:Em,AxiosError:Sm,CanceledError:Cm,isCancel:Rm,CancelToken:Tm,VERSION:km,all:Om,Cancel:Am,isAxiosError:vo,spread:Im,toFormData:Nm,AxiosHeaders:Pm,HttpStatusCode:Lm,formToJSON:$m,getAdapter:Dm,mergeConfig:Mm}=le,hi=(e,t,s)=>{const o=Object.assign({escape:!0},{}),n=function(a,r){return r=r||{},a.replace(/{([^{}]*)}/g,function(i,c){const u=r[c];return o.escape?encodeURIComponent(typeof u=="string"||typeof u=="number"?u.toString():i):typeof u=="string"||typeof u=="number"?u.toString():i})};return e.charAt(0)!=="/"&&(e="/"+e),n(e,{})},gi=(e,t,s)=>{const o=Object.assign({noRewrite:!1},{}),n=Gu();return window?.OC?.config?.modRewriteWorking===!0&&!o.noRewrite?n+hi(e):n+"/index.php"+hi(e)};function Gu(){let e=window._oc_webroot;if(typeof e>"u"){e=location.pathname;const t=e.indexOf("/index.php/");if(t!==-1)e=e.slice(0,t);else{const s=e.indexOf("/",1);e=e.slice(0,s>0?s:void 0)}}return e}const mi=le.create({headers:{requesttoken:vd()??"","X-Requested-With":"XMLHttpRequest"}});xd(e=>{mi.defaults.headers.requesttoken=e});const ae=Object.assign(mi,{CancelToken:le.CancelToken,isCancel:le.isCancel}),bi=Symbol("csrf-retry");function Ju(e){return async t=>{if(!vo(t))throw t;const{config:s,response:o,request:n}=t,a=n?.responseURL;if(s&&!s[bi]&&o?.status===412&&o?.data?.message==="CSRF check failed"){console.warn(`Request to ${a} failed because of a CSRF mismatch. Fetching a new token`);const{data:{token:r}}=await e.get(gi("/csrftoken"));return console.debug(`New request token ${r} fetched`),e.defaults.headers.requesttoken=r,e({...s,headers:{...s.headers,requesttoken:r},[bi]:!0})}throw t}}const xo=Symbol("retryDelay");function Xu(e){return async t=>{if(!vo(t))throw t;const{config:s,response:o,request:n}=t,a=n?.responseURL,r=o?.status,i=o?.headers;let c=typeof s?.[xo]=="number"?s?.[xo]:1;if(r===503&&i?.["x-nextcloud-maintenance-mode"]==="1"&&s?.retryIfMaintenanceMode){if(c*=2,c>32)throw console.error("Retry delay exceeded one minute, giving up.",{responseURL:a}),t;return console.warn(`Request to ${a} failed because of maintenance mode. Retrying in ${c}s`),await new Promise(u=>{setTimeout(u,c*1e3)}),e({...s,[xo]:c})}throw t}}async function Yu(e){if(vo(e)){const{config:t,response:s,request:o}=e,n=o?.responseURL;s?.status===401&&s?.data?.message==="Current user is not logged in"&&t?.reloadExpiredSession&&window?.location&&(console.error(`Request to ${n} failed because the user session expired. Reloading the page …`),window.location.reload())}throw e}ae.interceptors.response.use(e=>e,Ju(ae)),ae.interceptors.response.use(e=>e,Xu(ae)),ae.interceptors.response.use(e=>e,Yu);const de=gi("/apps/jadaagent"),Pe={async getHealth(){return(await ae.get(`${de}/api/health`)).data},async getHealthDetail(){return(await ae.get(`${de}/api/health/detail`)).data},async sendMessage(e,t="main"){const s=Array.isArray(e)?{messages:e,conversation_id:t}:{message:e,conversation_id:t};return(await ae.post(`${de}/api/chat`,s)).data},createSSEStream(e){const t=`${de}/api/chat/sse`,s=document.querySelector('meta[name="requesttoken"]')?.content||window.OC?.requestToken||"",o=new AbortController;return{promise:fetch(t,{method:"POST",headers:{"Content-Type":"application/json",requesttoken:s},body:JSON.stringify({messages:e}),signal:o.signal}),cancel:()=>o.abort()}},async getConversations(){return(await ae.get(`${de}/api/conversations`)).data},async getConversation(e){return(await ae.get(`${de}/api/conversations/${encodeURIComponent(e)}`)).data},async getConversationToolCalls(e){return(await ae.get(`${de}/api/conversations/${encodeURIComponent(e)}/toolcalls`)).data},async getRecentToolCalls(){return(await ae.get(`${de}/api/toolcalls/recent`)).data},async deleteConversation(e){return(await ae.delete(`${de}/api/conversations/${encodeURIComponent(e)}`)).data},async reconnectMcp(e=null){return(await ae.post(`${de}/api/reconnect`,e?{server:e}:{})).data},async getWorkspaces(){return(await ae.get(`${de}/api/workspaces`)).data},async getWorkspace(e){return(await ae.get(`${de}/api/workspaces/${encodeURIComponent(e)}`)).data},async createWorkspace(e){return(await ae.post(`${de}/api/workspaces`,e)).data},async updateWorkspace(e,t){return(await ae.put(`${de}/api/workspaces/${encodeURIComponent(e)}`,t)).data},async deleteWorkspace(e){return(await ae.delete(`${de}/api/workspaces/${encodeURIComponent(e)}`)).data},async getUserProfile(){return(await ae.get(`${de}/api/profile`)).data},async getSkills(){return(await ae.get(`${de}/api/skills`)).data},async getModels(){return(await ae.get(`${de}/api/models`)).data},async getSessions(){return(await ae.get(`${de}/api/sessions`)).data},async getSettings(){return(await ae.get(`${de}/api/settings`)).data},async saveSettings(e){return(await ae.put(`${de}/api/settings`,e)).data}},k=As({currentView:"chat",workspaces:[],activeWorkspaceId:"nextcloud",conversations:[],activeConversationId:null,messages:[],healthy:!1,healthData:null,mcpServers:[],totalTools:0,modelName:"",recentToolCalls:[],userProfile:null,rightPanelTab:"tools",rightPanelOpen:!0,isMobile:!1,mobileSidebarOpen:!1}),wo=[{id:"nextcloud",name:"Nextcloud",color:"#0082c9",isRoot:!0,description:"Your home workspace — general Nextcloud operations, file management, calendar, contacts, email, and system administration.",tags:["files","calendar","contacts","admin"],chatCount:0,toolCalls:0,lastActive:null},{id:"kuse",name:"Kuse",color:"#e94560",isRoot:!1,description:"Kuse platform development — API integrations, MCP tool deployment, document management.",tags:["api","mcp","webhooks"],chatCount:0,toolCalls:0,lastActive:null},{id:"nomad-internet",name:"Nomad Internet",color:"#008061",isRoot:!1,description:"Customer support, billing, FreeScout helpdesk management, and Verizon integration.",tags:["support","billing","email"],chatCount:0,toolCalls:0,lastActive:null},{id:"garza-os",name:"GARZA OS",color:"#8b5cf6",isRoot:!1,description:"Infrastructure management — VPS, Docker containers, MCP servers, Railway deployments.",tags:["infra","docker","mcp","vps"],chatCount:0,toolCalls:0,lastActive:null},{id:"development",name:"Development",color:"#22c55e",isRoot:!1,description:"General software development — code reviews, debugging, Paperclip, Sim Studio.",tags:["code","review","deploy"],chatCount:0,toolCalls:0,lastActive:null},{id:"finance",name:"Finance",color:"#f59e0b",isRoot:!1,description:"Akaunting, Chargebee, invoicing, payment tracking, and financial reporting.",tags:["invoices","payments"],chatCount:0,toolCalls:0,lastActive:null},{id:"personal",name:"Personal",color:"#ec4899",isRoot:!1,description:"Personal tasks, notes, and miscellaneous items.",tags:["notes","tasks"],chatCount:0,toolCalls:0,lastActive:null}],Te={async init(){k.isMobile=window.innerWidth<768,window.addEventListener("resize",()=>{k.isMobile=window.innerWidth<768});try{const e=await Pe.getWorkspaces();k.workspaces=Array.isArray(e)&&e.length>0?e:wo}catch{k.workspaces=wo}k.workspaces.find(e=>e.id==="nextcloud")||k.workspaces.unshift(wo[0]),await this.refreshHealth();try{k.userProfile=await Pe.getUserProfile()}catch{k.userProfile={uid:window.OC?.currentUser||"default",displayName:window.OC?.getCurrentUser?.()?.displayName||"User",email:""}}await this.loadConversations()},async refreshHealth(){try{const e=await Pe.getHealth();k.healthy=e?.ok===!0,k.healthData=e;const t=e?.mcpServers||e?.servers;t&&typeof t=="object"?(k.mcpServers=Object.entries(t).map(([s,o])=>({name:s,tools:o.tools||0,connected:o.status==="connected"||o.connected!==!1})),k.totalTools=k.mcpServers.reduce((s,o)=>s+o.tools,0)):e?.tools?k.totalTools=e.tools:e?.tool_count&&(k.totalTools=e.tool_count),e?.model_name&&(k.modelName=e.model_name)}catch{k.healthy=!1,k.healthData=null}},async loadConversations(){const t=`jada_${k.userProfile?.uid||window.OC?.currentUser||"default"}_conversations`;try{let s=JSON.parse(localStorage.getItem(t)||"[]");if(s.length===0){const o=JSON.parse(localStorage.getItem("jada_conversations")||"[]");o.length>0&&(s=o,localStorage.setItem(t,JSON.stringify(s)))}k.conversations=s}catch{k.conversations=[]}},setActiveWorkspace(e){k.activeWorkspaceId=e,k.activeConversationId=null,k.messages=[]},getActiveWorkspace(){return k.workspaces.find(e=>e.id===k.activeWorkspaceId)||k.workspaces[0]},startNewChat(){k.activeConversationId="conv-"+Date.now(),k.messages=[],k.currentView="chat"},navigate(e){k.currentView=e,k.isMobile&&(k.mobileSidebarOpen=!1)},addToolCall(e){k.recentToolCalls.unshift(e),k.recentToolCalls.length>20&&k.recentToolCalls.pop()},async loadRecentToolCalls(){try{const e=await Pe.getRecentToolCalls();e?.toolCalls&&Array.isArray(e.toolCalls)&&(k.recentToolCalls=e.toolCalls.map(t=>({name:t.name,status:t.status||"success",result:t.result||null,timestamp:t.timestamp?new Date(t.timestamp):new Date,conversationId:t.conversationId})))}catch{}}},Ye=(e,t)=>{const s=e.__vccOpts||e;for(const[o,n]of t)s[o]=n;return s},Qu={name:"ChatView",data(){return{store:k,messages:[],inputText:"",loading:!1,streamingText:"",streamingToolCalls:[],currentCancel:null,suggestions:["List my Nextcloud files","Check my calendar","Show my Proton Drive stats","List my Beeper chats","What tools do you have?","Check system status"]}},computed:{activeWsName(){return Te.getActiveWorkspace().name},userName(){return k.userProfile?.displayName||"User"},userInitials(){const e=this.userName,t=e.split(" ");return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.substring(0,2).toUpperCase()}},watch:{"store.activeConversationId"(){this.loading||this.loadConversation()}},mounted(){k.activeConversationId&&this.loadConversation()},methods:{loadConversation(){k.activeConversationId&&this.loadFromLocalStorage(k.activeConversationId)},async handleSend(e){const t=e||this.inputText.trim();if(!t||this.loading)return;this.inputText="",this.messages.push({role:"user",content:t,timestamp:new Date}),this.scrollToBottom(),this.loading=!0,this.streamingText="",this.streamingToolCalls=[],k.activeConversationId||Te.startNewChat();const s=k.activeConversationId;try{const o=this.messages.map(R=>({role:R.role,content:R.content})),{promise:n,cancel:a}=Pe.createSSEStream(o);this.currentCancel=a;const r=await n;if(!r.ok)throw new Error(`HTTP ${r.status}`);const i=r.body.getReader(),c=new TextDecoder;let u="",l="";const p=[];let v="";for(;;){const{done:R,value:x}=await i.read();if(R)break;u+=c.decode(x,{stream:!0});const g=u.split(` +`);u=g.pop()||"";for(const y of g){if(y.startsWith("event: ")){v=y.slice(7).trim();continue}if(!y.startsWith("data: "))continue;const L=y.slice(6).trim();if(L!=="[DONE]")try{const $=JSON.parse(L);if(v==="hermes.tool.progress"&&$.tool){const A=$.tool;p.push({name:A,status:"running",result:null}),this.streamingToolCalls=[...p],Te.addToolCall({name:A,status:"running",timestamp:new Date}),v="";continue}v="";const M=$.choices?.[0]?.delta;if(M?.tool_calls){for(const A of M.tool_calls){const W=A.function?.name;if(!W)continue;const fe=W.replace(/_mcp_.+$/,""),ne=A.id||W;p.find(ke=>ke.callId===ne)||(p.push({name:fe,callId:ne,status:"running",result:null}),Te.addToolCall({name:fe,status:"running",timestamp:new Date}))}this.streamingToolCalls=[...p]}M?.content&&(l+=M.content,this.streamingText=l),$.choices?.[0]?.finish_reason==="stop"&&(p.forEach(A=>{A.status==="running"&&(A.status="success")}),this.streamingToolCalls=[...p],k.recentToolCalls.forEach(A=>{A.status==="running"&&(A.status="success")}))}catch{v=""}}this.scrollToBottom()}this.messages.push({role:"assistant",content:l||this.streamingText||"(No response)",timestamp:new Date,toolCalls:p.length>0?p:void 0}),this.saveToLocalStorage(s)}catch(o){if(o.name==="AbortError"){this.saveToLocalStorage(s);return}try{const n=this.messages.map(r=>({role:r.role,content:r.content})),a=await Pe.sendMessage(n,s);this.messages.push({role:"assistant",content:a.response||a.message||JSON.stringify(a),timestamp:new Date})}catch(n){this.messages.push({role:"assistant",content:"Error: "+(n.response?.data?.error||n.message||"Failed to reach agent"),timestamp:new Date})}this.saveToLocalStorage(s)}finally{this.loading=!1,this.streamingText="",this.streamingToolCalls=[],this.currentCancel=null,this.scrollToBottom(),Te.loadConversations()}},formatMessage(e){if(!e)return"";let t=e.replace(/&/g,"&").replace(//g,">");return t=t.replace(/```(\w*)\n?([\s\S]*?)```/g,"
$2
"),t=t.replace(/`([^`]+)`/g,"$1"),t=t.replace(/\*\*([^*]+)\*\*/g,"$1"),t=t.replace(new RegExp("(?$1"),t=t.replace(/^### (.+)$/gm,'$1'),t=t.replace(/^## (.+)$/gm,'$1'),t=t.replace(/^- (.+)$/gm,"• $1"),t=t.replace(/\n/g,"
"),t},formatTime(e){return e?new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):""},scrollToBottom(){this.$nextTick(()=>{const e=this.$refs.messagesEl;e&&(e.scrollTop=e.scrollHeight)})},autoResize(){const e=this.$refs.input;e&&(e.style.height="auto",e.style.height=Math.min(e.scrollHeight,120)+"px")},storagePrefix(){return`jada_${k.userProfile?.uid||window.OC?.currentUser||"default"}`},saveToLocalStorage(e){const t=e||k.activeConversationId;if(t)try{const s=this.storagePrefix(),o=`${s}_conv_${t}`,n={id:t,messages:this.messages,updatedAt:new Date().toISOString(),title:this.messages.find(u=>u.role==="user")?.content?.slice(0,60)||"New Chat"};localStorage.setItem(o,JSON.stringify(n));const a=`${s}_conversations`,r=JSON.parse(localStorage.getItem(a)||"[]"),i=r.findIndex(u=>u.id===n.id),c={id:n.id,title:n.title,updatedAt:n.updatedAt,workspace:k.activeWorkspaceId};i>=0?r[i]=c:r.unshift(c),r.length>50&&r.splice(50).forEach(l=>{try{localStorage.removeItem(`${s}_conv_${l.id}`)}catch{}}),localStorage.setItem(a,JSON.stringify(r)),k.conversations=r}catch{}},loadFromLocalStorage(e){const t=this.storagePrefix();this.messages=[];try{const s=localStorage.getItem(`${t}_conv_${e}`)||localStorage.getItem(`jada_conv_${e}`),o=s?JSON.parse(s):null;o?.messages&&(this.messages=o.messages.map(n=>({...n,timestamp:n.timestamp?new Date(n.timestamp):new Date})))}catch{}}},beforeUnmount(){this.currentCancel&&this.currentCancel()}},Zu={class:"jada-chat"},ef={key:0,class:"jada-chat-empty"},tf={class:"jada-suggestions"},sf=["onClick"],nf={key:1,class:"jada-chat-messages",ref:"messagesEl"},of={class:"jada-msg-avatar"},rf={key:0},af={key:1},lf={class:"jada-msg-body"},cf={key:0,class:"jada-tool-calls"},df={class:"jada-tool-header"},uf={class:"jada-tool-icon"},ff={class:"jada-tool-name"},pf=["innerHTML"],hf={class:"jada-msg-meta"},gf={key:0},mf={key:0,class:"jada-msg assistant"},bf={class:"jada-msg-body"},vf={key:0,class:"jada-tool-calls"},xf={class:"jada-tool-header"},wf={class:"jada-tool-name"},yf=["innerHTML"],jf={key:2,class:"jada-typing"},_f={class:"jada-chat-input-area"},Ef={class:"jada-chat-input-row"},Sf=["placeholder"],Cf=["disabled"],Rf={class:"jada-input-footer"},Tf={class:"jada-input-model"},kf={class:"jada-input-tools"},Of={class:"jada-input-ws"};function Af(e,t,s,o,n,a){return w(),_("div",Zu,[n.messages.length===0&&!n.loading?(w(),_("div",ef,[t[4]||(t[4]=Vn('
',1)),d("h2",null,"Hello, "+T(a.userName),1),d("p",null,T(n.store.totalTools)+" tools across "+T(n.store.mcpServers.length)+" servers. How can I help?",1),d("div",tf,[(w(!0),_(K,null,ie(n.suggestions,r=>(w(),_("button",{key:r,class:"jada-chip",onClick:i=>a.handleSend(r)},T(r),9,sf))),128))])])):(w(),_("div",nf,[(w(!0),_(K,null,ie(n.messages,(r,i)=>(w(),_("div",{key:i,class:H(["jada-msg",r.role])},[d("div",of,[r.role==="user"?(w(),_("span",rf,T(a.userInitials),1)):(w(),_("span",af,"J"))]),d("div",lf,[r.toolCalls&&r.toolCalls.length?(w(),_("div",cf,[(w(!0),_(K,null,ie(r.toolCalls,(c,u)=>(w(),_("div",{key:u,class:"jada-tool-call"},[d("div",df,[d("span",uf,T(c.status==="error"?"❌":c.status==="success"?"✅":"🔧"),1),d("span",ff,T(c.name),1)])]))),128))])):G("",!0),d("div",{class:"jada-msg-text",innerHTML:a.formatMessage(r.content)},null,8,pf),d("div",hf,[qs(T(a.formatTime(r.timestamp))+" ",1),r.toolCalls&&r.toolCalls.length?(w(),_("span",gf," · "+T(r.toolCalls.length)+" tool call"+T(r.toolCalls.length>1?"s":""),1)):G("",!0)])])],2))),128)),n.loading?(w(),_("div",mf,[t[6]||(t[6]=d("div",{class:"jada-msg-avatar"},[d("span",null,"J")],-1)),d("div",bf,[n.streamingToolCalls.length?(w(),_("div",vf,[(w(!0),_(K,null,ie(n.streamingToolCalls,(r,i)=>(w(),_("div",{key:i,class:"jada-tool-call"},[d("div",xf,[d("span",{class:H(["jada-tool-icon",r.status==="running"?"spinning":""])},T(r.status==="error"?"❌":r.status==="success"?"✅":"🔧"),3),d("span",wf,T(r.name),1)])]))),128))])):G("",!0),n.streamingText?(w(),_("div",{key:1,class:"jada-msg-text",innerHTML:a.formatMessage(n.streamingText)},null,8,yf)):(w(),_("div",jf,[...t[5]||(t[5]=[d("span",null,null,-1),d("span",null,null,-1),d("span",null,null,-1)])]))])])):G("",!0)],512)),d("div",_f,[d("div",Ef,[ct(d("textarea",{ref:"input","onUpdate:modelValue":t[0]||(t[0]=r=>n.inputText=r),class:"jada-chat-input",placeholder:"Message Jada about "+a.activeWsName+"...",rows:"1",onKeydown:t[1]||(t[1]=pa(Jn(r=>a.handleSend(),["exact","prevent"]),["enter"])),onInput:t[2]||(t[2]=(...r)=>a.autoResize&&a.autoResize(...r))},null,40,Sf),[[ht,n.inputText]]),d("button",{class:"jada-send-btn",onClick:t[3]||(t[3]=r=>a.handleSend()),disabled:!n.inputText.trim()||n.loading},[...t[7]||(t[7]=[d("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":"2"},[d("path",{d:"M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z"})],-1)])],8,Cf)]),d("div",Rf,[d("span",Tf,T(n.store.modelName||"Gemini 2.5 Flash"),1),d("span",kf,"· "+T(n.store.totalTools)+" tools",1),d("span",Of,"· Workspace: "+T(a.activeWsName),1)])])])}const If=Ye(Qu,[["render",Af],["__scopeId","data-v-05da0b92"]]),Nf={name:"WorkspacesView",data(){return{store:k,showCreate:!1,newWs:{name:"",description:"",color:"#e94560"},colorOptions:["#e94560","#0082c9","#008061","#8b5cf6","#22c55e","#f59e0b","#ec4899","#06b6d4","#f97316"]}},methods:{openWorkspace(e){Te.setActiveWorkspace(e.id),k.currentView="workspace-detail"},async handleCreate(){if(!this.newWs.name.trim())return;const e={id:"ws-"+Date.now(),name:this.newWs.name.trim(),description:this.newWs.description.trim(),color:this.newWs.color,isRoot:!1,tags:[],chatCount:0,toolCalls:0,lastActive:null};try{await Pe.createWorkspace(e)}catch{}k.workspaces.push(e),this.showCreate=!1,this.newWs={name:"",description:"",color:"#e94560"}}}},Pf={class:"jada-workspaces"},Lf={class:"jada-ws-header"},$f={class:"jada-ws-grid"},Df=["onClick"],Mf={class:"jada-ws-card-header"},Ff={class:"jada-ws-card-name"},Uf={key:0,class:"jada-ws-card-badge"},zf={class:"jada-ws-card-desc"},Vf={class:"jada-ws-card-tags"},Bf={class:"jada-ws-card-stats"},Hf={class:"jada-modal"},Wf={class:"jada-form-group"},qf={class:"jada-form-group"},Kf={class:"jada-form-group"},Gf={class:"jada-color-options"},Jf=["onClick"],Xf={class:"jada-modal-actions"},Yf=["disabled"];function Qf(e,t,s,o,n,a){return w(),_("div",Pf,[d("div",Lf,[t[6]||(t[6]=d("h1",null,"Workspaces",-1)),d("button",{class:"jada-btn-primary",onClick:t[0]||(t[0]=r=>n.showCreate=!0)},"+ New Workspace")]),d("div",$f,[(w(!0),_(K,null,ie(n.store.workspaces,r=>(w(),_("div",{key:r.id,class:H(["jada-ws-card",{root:r.isRoot}]),onClick:i=>a.openWorkspace(r)},[d("div",Mf,[d("span",{class:"jada-ws-card-dot",style:Le({background:r.color})},null,4),d("span",Ff,T(r.name),1),r.isRoot?(w(),_("span",Uf,"HOME")):G("",!0)]),d("p",zf,T(r.description),1),d("div",Vf,[(w(!0),_(K,null,ie((r.tags||[]).slice(0,4),i=>(w(),_("span",{key:i,class:"jada-ws-tag"},T(i),1))),128))]),d("div",Bf,[d("span",null,T(r.chatCount||0)+" chats",1),t[7]||(t[7]=d("span",null,"·",-1)),d("span",null,T(r.toolCalls||0)+" tool calls",1)])],10,Df))),128))]),n.showCreate?(w(),_("div",{key:0,class:"jada-modal-overlay",onClick:t[5]||(t[5]=Jn(r=>n.showCreate=!1,["self"]))},[d("div",Hf,[t[11]||(t[11]=d("h3",null,"Create Workspace",-1)),d("div",Wf,[t[8]||(t[8]=d("label",null,"Name",-1)),ct(d("input",{"onUpdate:modelValue":t[1]||(t[1]=r=>n.newWs.name=r),placeholder:"e.g., Marketing"},null,512),[[ht,n.newWs.name]])]),d("div",qf,[t[9]||(t[9]=d("label",null,"Description",-1)),ct(d("textarea",{"onUpdate:modelValue":t[2]||(t[2]=r=>n.newWs.description=r),placeholder:"What is this workspace for?",rows:"3"},null,512),[[ht,n.newWs.description]])]),d("div",Kf,[t[10]||(t[10]=d("label",null,"Color",-1)),d("div",Gf,[(w(!0),_(K,null,ie(n.colorOptions,r=>(w(),_("button",{key:r,class:H(["jada-color-btn",{selected:n.newWs.color===r}]),style:Le({background:r}),onClick:i=>n.newWs.color=r},null,14,Jf))),128))])]),d("div",Xf,[d("button",{class:"jada-btn-secondary",onClick:t[3]||(t[3]=r=>n.showCreate=!1)},"Cancel"),d("button",{class:"jada-btn-primary",onClick:t[4]||(t[4]=(...r)=>a.handleCreate&&a.handleCreate(...r)),disabled:!n.newWs.name.trim()},"Create",8,Yf)])])])):G("",!0)])}const Zf=Ye(Nf,[["render",Qf],["__scopeId","data-v-4921a983"]]),ep={name:"WorkspaceDetailView",data(){return{store:k}},computed:{ws(){return Te.getActiveWorkspace()},wsConversations(){return k.conversations.filter(e=>e.workspace===k.activeWorkspaceId).slice(0,10)}},methods:{startChat(){Te.startNewChat()},openDocs(){k.currentView="document-editor"},openConversation(e){k.activeConversationId=e.id,k.currentView="chat"}}},tp={class:"jada-ws-detail"},sp={class:"jada-ws-detail-header"},np={class:"jada-ws-detail-title"},op={key:0,class:"jada-ws-badge"},rp={class:"jada-ws-detail-desc"},ap={class:"jada-ws-detail-stats"},ip={class:"jada-stat-card"},lp={class:"jada-stat-value"},cp={class:"jada-stat-card"},dp={class:"jada-stat-value"},up={class:"jada-stat-card"},fp={class:"jada-stat-value"},pp={class:"jada-ws-detail-actions"},hp={key:0,class:"jada-ws-conv-list"},gp=["onClick"],mp={class:"jada-conv-meta"},bp={class:"jada-conv-title"},vp={class:"jada-conv-time"},xp={key:1,class:"jada-ws-empty"};function wp(e,t,s,o,n,a){return w(),_("div",tp,[d("div",sp,[d("button",{class:"jada-back-btn",onClick:t[0]||(t[0]=r=>n.store.currentView="workspaces")},"← Workspaces"),d("div",np,[d("span",{class:"jada-ws-dot",style:Le({background:a.ws.color})},null,4),d("h1",null,T(a.ws.name),1),a.ws.isRoot?(w(),_("span",op,"HOME")):G("",!0)]),d("p",rp,T(a.ws.description),1)]),d("div",ap,[d("div",ip,[d("div",lp,T(a.ws.chatCount||0),1),t[3]||(t[3]=d("div",{class:"jada-stat-label"},"Conversations",-1))]),d("div",cp,[d("div",dp,T(a.ws.toolCalls||0),1),t[4]||(t[4]=d("div",{class:"jada-stat-label"},"Tool Calls",-1))]),d("div",up,[d("div",fp,T(a.ws.tags?.length||0),1),t[5]||(t[5]=d("div",{class:"jada-stat-label"},"Tags",-1))])]),d("div",pp,[d("button",{class:"jada-btn-primary",onClick:t[1]||(t[1]=(...r)=>a.startChat&&a.startChat(...r))},"Start Chat in "+T(a.ws.name),1),d("button",{class:"jada-btn-secondary",onClick:t[2]||(t[2]=(...r)=>a.openDocs&&a.openDocs(...r))},"Open Documents")]),t[7]||(t[7]=d("h3",null,"Recent Conversations",-1)),a.wsConversations.length?(w(),_("div",hp,[(w(!0),_(K,null,ie(a.wsConversations,r=>(w(),_("div",{key:r.id,class:"jada-ws-conv-item",onClick:i=>a.openConversation(r)},[t[6]||(t[6]=d("span",{class:"jada-conv-icon"},"💬",-1)),d("div",mp,[d("div",bp,T(r.title||r.id),1),d("div",vp,T(r.lastMessage||"No messages yet"),1)])],8,gp))),128))])):(w(),_("div",xp," No conversations in this workspace yet. Start one above. "))])}const yp=Ye(ep,[["render",wp],["__scopeId","data-v-fbdfa994"]]),jp={name:"DocumentEditorView",data(){return{store:k,activeDoc:"Untitled Document",editorContent:"",dirty:!1,aiInput:"",aiMessages:[],aiSuggestions:[],recentDocs:[{name:"Meeting Notes.md",modified:"2 hours ago"},{name:"Project Proposal.md",modified:"Yesterday"},{name:"API Documentation.md",modified:"3 days ago"}],quickActions:[{icon:"🔎",label:"Proofread",prompt:"Proofread this document and suggest corrections."},{icon:"📝",label:"Summarize",prompt:"Summarize this document in 3-5 bullet points."},{icon:"🌐",label:"Translate",prompt:"Translate this document to Spanish."},{icon:"💡",label:"Add Examples",prompt:"Add practical examples to illustrate the main points."},{icon:"💻",label:"From Code",prompt:"Generate documentation from the code in this document."}]}},methods:{openDoc(e){this.activeDoc=e.name,this.editorContent="",this.aiSuggestions=[]},applySuggestion(e){this.editorContent+=` `+e.text,this.aiSuggestions=this.aiSuggestions.filter(t=>t!==e)},async handleQuickAction(e){this.aiInput=e.prompt,await this.handleAiSend()},async handleAiSend(){const e=this.aiInput.trim();if(!e)return;this.aiInput="",this.aiMessages.push({role:"user",content:e});const t=`[Document Editor — ${this.activeDoc}] Document content: ${this.editorContent||"(empty)"} -User request: ${e}`;try{const s=await Ne.sendMessage(t),o=s.response||s.message||JSON.stringify(s);this.aiMessages.push({role:"assistant",content:o}),this.aiSuggestions.push({text:o})}catch(s){this.aiMessages.push({role:"assistant",content:"Error: "+(s.message||"Failed to reach agent")})}}}},_p={class:"jada-doc-editor"},Ep={class:"jada-doc-sidebar"},Sp=["onClick"],Cp={class:"jada-doc-item-info"},Rp={class:"jada-doc-item-name"},Tp={class:"jada-doc-item-meta"},kp={class:"jada-doc-center"},Op={class:"jada-doc-toolbar"},Ap={class:"jada-doc-filename"},Ip={class:"jada-doc-content"},Np={key:0,class:"jada-doc-suggestions"},Pp={class:"jada-doc-suggestion-text"},Lp={class:"jada-doc-suggestion-actions"},$p=["onClick"],Dp=["onClick"],Mp={class:"jada-doc-ai-panel"},Fp={class:"jada-doc-quick-actions"},Up=["onClick"],zp={class:"jada-doc-ai-messages"},Vp={class:"jada-doc-ai-msg-text"},Bp={class:"jada-doc-ai-input-row"},Hp=["disabled"];function Wp(e,t,s,o,n,a){return w(),_("div",_p,[d("div",Ep,[t[6]||(t[6]=d("h4",null,"Documents",-1)),t[7]||(t[7]=d("div",{class:"jada-doc-section-label"},"Recent",-1)),(w(!0),_(q,null,ae(n.recentDocs,r=>(w(),_("div",{key:r.name,class:H(["jada-doc-item",{active:n.activeDoc===r.name}]),onClick:i=>a.openDoc(r)},[t[5]||(t[5]=d("span",{class:"jada-doc-icon"},"📄",-1)),d("div",Cp,[d("div",Rp,T(r.name),1),d("div",Tp,T(r.modified||"Just now"),1)])],10,Sp))),128)),t[8]||(t[8]=d("div",{class:"jada-doc-section-label"},"Nextcloud Files",-1)),t[9]||(t[9]=d("div",{class:"jada-doc-tree-hint"}," Files from your Nextcloud instance will appear here. Use the chat to ask Jada to find or create documents. ",-1))]),d("div",kp,[d("div",Op,[d("span",Ap,T(n.activeDoc||"Untitled Document"),1),t[10]||(t[10]=d("div",{class:"jada-doc-toolbar-actions"},[d("button",{class:"jada-doc-tb-btn",title:"Save"},"💾"),d("button",{class:"jada-doc-tb-btn",title:"Download"},"📥")],-1))]),d("div",Ip,[ct(d("textarea",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.editorContent=r),class:"jada-doc-textarea",placeholder:"Start writing or ask Jada to generate content...",onInput:t[1]||(t[1]=r=>n.dirty=!0)},null,544),[[ht,n.editorContent]]),n.aiSuggestions.length?(w(),_("div",Np,[(w(!0),_(q,null,ae(n.aiSuggestions,(r,i)=>(w(),_("div",{key:i,class:"jada-doc-suggestion"},[t[11]||(t[11]=d("div",{class:"jada-doc-suggestion-header"},[d("span",{class:"jada-doc-suggestion-icon"},"✨"),d("span",null,"AI Suggestion")],-1)),d("div",Pp,T(r.text),1),d("div",Lp,[d("button",{class:"jada-doc-apply-btn",onClick:c=>a.applySuggestion(r)},"Apply",8,$p),d("button",{class:"jada-doc-dismiss-btn",onClick:c=>n.aiSuggestions.splice(i,1)},"Dismiss",8,Dp)])]))),128))])):K("",!0)])]),d("div",Mp,[t[12]||(t[12]=d("h4",null,"AI Document Assistant",-1)),t[13]||(t[13]=d("p",{class:"jada-doc-ai-hint"},"Ask Jada to help edit, proofread, summarize, or translate this document.",-1)),d("div",Fp,[(w(!0),_(q,null,ae(n.quickActions,r=>(w(),_("button",{key:r.label,class:"jada-doc-action-btn",onClick:i=>a.handleQuickAction(r)},T(r.icon)+" "+T(r.label),9,Up))),128))]),d("div",zp,[(w(!0),_(q,null,ae(n.aiMessages,(r,i)=>(w(),_("div",{key:i,class:H(["jada-doc-ai-msg",r.role])},[d("div",Vp,T(r.content),1)],2))),128))]),d("div",Bp,[ct(d("input",{"onUpdate:modelValue":t[2]||(t[2]=r=>n.aiInput=r),class:"jada-doc-ai-input",placeholder:"Ask Jada to edit this document...",onKeydown:t[3]||(t[3]=pa(Jn((...r)=>a.handleAiSend&&a.handleAiSend(...r),["prevent"]),["enter"]))},null,544),[[ht,n.aiInput]]),d("button",{class:"jada-doc-ai-send",onClick:t[4]||(t[4]=(...r)=>a.handleAiSend&&a.handleAiSend(...r)),disabled:!n.aiInput.trim()},"➤",8,Hp)])])])}const qp=Ye(jp,[["render",Wp],["__scopeId","data-v-fa97b8c8"]]),Kp={name:"ToolExplorerView",data(){return{store:k,searchQuery:"",selectedServer:null,toolsList:[]}},computed:{filteredTools(){let e=this.toolsList;if(this.selectedServer&&(e=e.filter(t=>t.server===this.selectedServer)),this.searchQuery.trim()){const t=this.searchQuery.toLowerCase();e=e.filter(s=>s.name.toLowerCase().includes(t)||(s.description||"").toLowerCase().includes(t))}return e}},async mounted(){await this.loadTools()},methods:{async loadTools(){try{const e=await Ne.getHealthDetail();if(e?.tools)this.toolsList=e.tools.map(t=>({name:t.name||t,description:t.description||"",server:t.server||this.inferServer(t.name||t)}));else if(e?.servers){const t=[];for(const[s,o]of Object.entries(e.servers)){const n=o.tools||0;for(let a=0;a({name:t.name||t,description:t.description||"",server:"local"})))}catch{this.toolsList=[]}}},inferServer(e){return e.startsWith("nextcloud__")?"nextcloud":e.startsWith("kuse__")?"kuse":e.startsWith("composio__")?"composio":e.startsWith("rube__")?"rube":e.startsWith("vault__")?"vault":e.startsWith("protonmail__")?"protonmail":"unknown"},serverColor(e){return{nextcloud:"#0082c9",kuse:"#e94560",composio:"#8b5cf6",rube:"#22c55e",vault:"#f59e0b",protonmail:"#6d4aff"}[e]||"#555"}}},Gp={class:"jada-tools"},Jp={class:"jada-tools-header"},Xp={class:"jada-tools-search"},Yp={class:"jada-tools-filters"},Qp=["onClick"],Zp={class:"jada-tools-grid"},eh={class:"jada-tool-card-header"},th={class:"jada-tool-card-name"},sh={class:"jada-tool-card-desc"},nh={class:"jada-tool-card-server"},oh={key:0,class:"jada-tools-empty"},rh={key:1,class:"jada-tools-empty"};function ah(e,t,s,o,n,a){return w(),_("div",Gp,[d("div",Jp,[t[2]||(t[2]=d("h1",null,"Tool Explorer",-1)),d("div",Xp,[ct(d("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.searchQuery=r),placeholder:"Search tools...",class:"jada-tools-input"},null,512),[[ht,n.searchQuery]])])]),d("div",Yp,[d("button",{class:H(["jada-filter-btn",{active:n.selectedServer===null}]),onClick:t[1]||(t[1]=r=>n.selectedServer=null)},"All ("+T(n.store.totalTools)+")",3),(w(!0),_(q,null,ae(n.store.mcpServers,r=>(w(),_("button",{key:r.name,class:H(["jada-filter-btn",{active:n.selectedServer===r.name}]),onClick:i=>n.selectedServer=r.name},T(r.name)+" ("+T(r.tools)+")",11,Qp))),128))]),d("div",Zp,[(w(!0),_(q,null,ae(a.filteredTools,r=>(w(),_("div",{key:r.name,class:"jada-tool-card"},[d("div",eh,[t[3]||(t[3]=d("span",{class:"jada-tool-card-icon"},"🔧",-1)),d("span",th,T(r.name),1)]),d("p",sh,T(r.description||"No description"),1),d("div",nh,[d("span",{class:"jada-tool-server-dot",style:Le({background:a.serverColor(r.server)})},null,4),qs(" "+T(r.server),1)])]))),128))]),!a.filteredTools.length&&n.searchQuery?(w(),_("div",oh,' No tools matching "'+T(n.searchQuery)+'" ',1)):K("",!0),n.toolsList.length?K("",!0):(w(),_("div",rh," Tool data will be available when the agent is connected. Check the health endpoint. "))])}const ih=Ye(Kp,[["render",ah],["__scopeId","data-v-55629294"]]),lh={name:"SearchView",data(){return{store:k,query:"",results:[],recentSearches:["nextcloud files","calendar events","kuse documents"]}},mounted(){this.$nextTick(()=>this.$refs.searchInput?.focus())},methods:{handleSearch(){const e=this.query.toLowerCase().trim();if(!e){this.results=[];return}const t=[];for(const s of k.conversations){const o=s.title||s.id||"";o.toLowerCase().includes(e)&&t.push({type:"chat",title:o,preview:s.lastMessage||"Conversation",data:s})}for(const s of k.recentToolCalls)s.name.toLowerCase().includes(e)&&t.push({type:"tool",title:s.name,preview:`Called at ${new Date(s.timestamp).toLocaleTimeString()}`,data:s});for(const s of k.workspaces)(s.name.toLowerCase().includes(e)||(s.description||"").toLowerCase().includes(e))&&t.push({type:"workspace",title:s.name,preview:s.description||"",data:s});this.results=t},openResult(e){e.type==="chat"?(k.activeConversationId=e.data.id,k.currentView="chat"):e.type==="workspace"?(k.activeWorkspaceId=e.data.id,k.currentView="workspace-detail"):e.type==="tool"&&(k.currentView="tool-explorer")}}},ch={class:"jada-search"},dh={class:"jada-search-bar"},fh={key:0,class:"jada-search-results"},uh={class:"jada-search-result-count"},ph=["onClick"],hh={class:"jada-search-result-info"},gh={class:"jada-search-result-title"},mh=["innerHTML"],bh={key:0,class:"jada-search-empty"},vh={key:1,class:"jada-search-empty-state"},xh={class:"jada-search-recent"},wh=["onClick"];function yh(e,t,s,o,n,a){return w(),_("div",ch,[t[5]||(t[5]=d("div",{class:"jada-search-header"},[d("h1",null,"Search")],-1)),d("div",dh,[t[2]||(t[2]=d("span",{class:"jada-search-icon"},"🔍",-1)),ct(d("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.query=r),class:"jada-search-input",placeholder:"Search conversations, tools, files...",onInput:t[1]||(t[1]=(...r)=>a.handleSearch&&a.handleSearch(...r)),ref:"searchInput"},null,544),[[ht,n.query]])]),n.query.trim()?(w(),_("div",fh,[d("div",uh,T(n.results.length)+' results for "'+T(n.query)+'"',1),(w(!0),_(q,null,ae(n.results,(r,i)=>(w(),_("div",{key:i,class:"jada-search-result",onClick:c=>a.openResult(r)},[d("span",{class:H(["jada-search-type",r.type])},T(r.type),3),d("div",hh,[d("div",gh,T(r.title),1),d("div",{class:"jada-search-result-preview",innerHTML:r.preview},null,8,mh)])],8,ph))),128)),n.results.length?K("",!0):(w(),_("div",bh," No results found. Try a different search term. "))])):(w(),_("div",vh,[t[4]||(t[4]=d("p",null,"Search across your conversations, tool calls, and files.",-1)),d("div",xh,[t[3]||(t[3]=d("div",{class:"jada-search-recent-label"},"Recent Searches",-1)),(w(!0),_(q,null,ae(n.recentSearches,r=>(w(),_("div",{key:r,class:"jada-search-recent-item",onClick:i=>{n.query=r,a.handleSearch()}}," 🔍 "+T(r),9,wh))),128))])]))])}const jh=Ye(lh,[["render",yh],["__scopeId","data-v-48c69005"]]),_h={name:"SettingsView",data(){return{store:k,activeSection:"general",settings:{openclaw_url:"",openclaw_token:""},autoExecute:!0,perUserIsolation:!0,saving:!1,statusMsg:"",statusOk:!1,sections:[{id:"general",label:"General"},{id:"mcp",label:"MCP Servers"},{id:"workspaces",label:"Workspaces"},{id:"about",label:"About"}]}},async mounted(){try{const e=await Ne.getSettings();this.settings={...this.settings,...e}}catch{}},methods:{async handleSave(){this.saving=!0,this.statusMsg="";try{await Ne.saveSettings(this.settings),this.statusMsg="Saved",this.statusOk=!0}catch(e){this.statusMsg="Failed: "+(e.message||"Unknown"),this.statusOk=!1}finally{this.saving=!1}}}},Eh={class:"jada-settings"},Sh={class:"jada-settings-grid"},Ch={class:"jada-settings-nav"},Rh=["onClick"],Th={class:"jada-settings-content"},kh={key:0,class:"jada-settings-section"},Oh={class:"jada-form-group"},Ah={class:"jada-form-group"},Ih={class:"jada-form-group"},Nh={class:"jada-toggle-row"},Ph={class:"jada-form-group"},Lh={class:"jada-toggle-row"},$h=["disabled"],Dh={key:1,class:"jada-settings-section"},Mh={class:"jada-mcp-list"},Fh={class:"jada-mcp-info"},Uh={class:"jada-mcp-name"},zh={class:"jada-mcp-tools"},Vh={key:0,class:"jada-mcp-empty"},Bh={class:"jada-mcp-total"},Hh={key:2,class:"jada-settings-section"},Wh={class:"jada-ws-setting-name"},qh={key:0,class:"jada-ws-badge"},Kh={class:"jada-ws-setting-count"},Gh={key:3,class:"jada-settings-section"},Jh={class:"jada-about-grid"},Xh={class:"jada-about-row"},Yh={class:"jada-about-row"},Qh={class:"jada-about-value"};function Zh(e,t,s,o,n,a){return w(),_("div",Eh,[t[22]||(t[22]=d("h1",null,"Settings",-1)),d("div",Sh,[d("div",Ch,[(w(!0),_(q,null,ae(n.sections,r=>(w(),_("a",{key:r.id,class:H(["jada-settings-nav-item",{active:n.activeSection===r.id}]),onClick:i=>n.activeSection=r.id},T(r.label),11,Rh))),128))]),d("div",Th,[n.activeSection==="general"?(w(),_("div",kh,[t[13]||(t[13]=d("h2",null,"General",-1)),d("div",Oh,[t[5]||(t[5]=d("label",null,"Agent Backend URL",-1)),ct(d("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.settings.openclaw_url=r),placeholder:"https://jada-api.garzaos.online"},null,512),[[ht,n.settings.openclaw_url]])]),d("div",Ah,[t[6]||(t[6]=d("label",null,"API Token",-1)),ct(d("input",{"onUpdate:modelValue":t[1]||(t[1]=r=>n.settings.openclaw_token=r),type:"password",placeholder:"Bearer token"},null,512),[[ht,n.settings.openclaw_token]])]),d("div",Ih,[t[9]||(t[9]=d("label",null,"Auto-execute tool calls",-1)),d("div",Nh,[t[8]||(t[8]=d("span",{class:"jada-toggle-label"},"Allow agent to execute tools without confirmation",-1)),d("button",{class:H(["jada-toggle",{on:n.autoExecute}]),onClick:t[2]||(t[2]=r=>n.autoExecute=!n.autoExecute)},[...t[7]||(t[7]=[d("span",{class:"jada-toggle-knob"},null,-1)])],2)])]),d("div",Ph,[t[12]||(t[12]=d("label",null,"Per-user chat isolation",-1)),d("div",Lh,[t[11]||(t[11]=d("span",{class:"jada-toggle-label"},"Each Nextcloud user gets isolated chat history",-1)),d("button",{class:H(["jada-toggle",{on:n.perUserIsolation}]),onClick:t[3]||(t[3]=r=>n.perUserIsolation=!n.perUserIsolation)},[...t[10]||(t[10]=[d("span",{class:"jada-toggle-knob"},null,-1)])],2)])]),d("button",{class:"jada-btn-primary",onClick:t[4]||(t[4]=(...r)=>a.handleSave&&a.handleSave(...r)),disabled:n.saving},T(n.saving?"Saving...":"Save Settings"),9,$h),n.statusMsg?(w(),_("span",{key:0,class:H(["jada-status-msg",n.statusOk?"ok":"err"])},T(n.statusMsg),3)):K("",!0)])):K("",!0),n.activeSection==="mcp"?(w(),_("div",Dh,[t[14]||(t[14]=d("h2",null,"MCP Servers",-1)),t[15]||(t[15]=d("p",{class:"jada-hint"},"Connected MCP servers that provide tools to the agent.",-1)),d("div",Mh,[(w(!0),_(q,null,ae(n.store.mcpServers,r=>(w(),_("div",{key:r.name,class:"jada-mcp-item"},[d("span",{class:H(["jada-mcp-dot",r.connected?"on":"off"])},null,2),d("div",Fh,[d("div",Uh,T(r.name),1),d("div",zh,T(r.tools)+" tools",1)]),d("span",{class:H(["jada-mcp-status",r.connected?"on":"off"])},T(r.connected?"Connected":"Disconnected"),3)]))),128)),n.store.mcpServers.length?K("",!0):(w(),_("div",Vh," No MCP servers connected. Configure the backend URL above. "))]),d("div",Bh," Total: "+T(n.store.totalTools)+" tools across "+T(n.store.mcpServers.length)+" servers ",1)])):K("",!0),n.activeSection==="workspaces"?(w(),_("div",Hh,[t[16]||(t[16]=d("h2",null,"Workspaces",-1)),t[17]||(t[17]=d("p",{class:"jada-hint"},"Manage your workspace configuration. Nextcloud is always the root workspace.",-1)),(w(!0),_(q,null,ae(n.store.workspaces,r=>(w(),_("div",{key:r.id,class:"jada-ws-setting-item"},[d("span",{class:"jada-ws-dot",style:Le({background:r.color})},null,4),d("span",Wh,T(r.name),1),r.isRoot?(w(),_("span",qh,"HOME")):K("",!0),d("span",Kh,T(r.chatCount||0)+" chats",1)]))),128))])):K("",!0),n.activeSection==="about"?(w(),_("div",Gh,[t[21]||(t[21]=d("h2",null,"About",-1)),d("div",Jh,[t[20]||(t[20]=Vn('
App Version0.2.0
Agent BackendHermes (Jada API)
',2)),d("div",Xh,[t[18]||(t[18]=d("span",{class:"jada-about-label"},"Agent Status",-1)),d("span",{class:H(["jada-about-value",n.store.healthy?"green":"red"])},T(n.store.healthy?"Online":"Offline"),3)]),d("div",Yh,[t[19]||(t[19]=d("span",{class:"jada-about-label"},"Tools",-1)),d("span",Qh,T(n.store.totalTools),1)])])])):K("",!0)])])])}const eg=Ye(_h,[["render",Zh],["__scopeId","data-v-26717cb5"]]),tg={name:"UserProfileView",data(){return{store:k}},computed:{userName(){return k.userProfile?.displayName||k.userProfile?.uid||"User"},userInitials(){const e=this.userName,t=e.split(" ");return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.substring(0,2).toUpperCase()}}},sg={class:"jada-profile"},ng={class:"jada-profile-header"},og={class:"jada-profile-avatar"},rg={class:"jada-profile-info"},ag={class:"jada-profile-email"},ig={class:"jada-profile-stats"},lg={class:"jada-profile-stat"},cg={class:"jada-profile-stat-value"},dg={class:"jada-profile-stat"},fg={class:"jada-profile-stat-value"},ug={class:"jada-profile-stat"},pg={class:"jada-profile-stat-value"},hg={class:"jada-profile-section"},gg={class:"jada-profile-ws-name"},mg={key:0,class:"jada-profile-ws-badge"},bg={class:"jada-profile-section"},vg={class:"jada-profile-users"},xg={class:"jada-profile-user-item current"},wg={class:"jada-profile-user-avatar"},yg={class:"jada-profile-user-name"};function jg(e,t,s,o,n,a){return w(),_("div",sg,[d("div",ng,[d("div",og,T(a.userInitials),1),d("div",rg,[d("h1",null,T(a.userName),1),t[0]||(t[0]=d("div",{class:"jada-profile-role"},"Admin · Nextcloud Owner",-1)),d("div",ag,T(n.store.userProfile?.email||""),1)])]),d("div",ig,[d("div",lg,[d("div",cg,T(n.store.conversations.length),1),t[1]||(t[1]=d("div",{class:"jada-profile-stat-label"},"Conversations",-1))]),d("div",dg,[d("div",fg,T(n.store.recentToolCalls.length),1),t[2]||(t[2]=d("div",{class:"jada-profile-stat-label"},"Tool Calls",-1))]),d("div",ug,[d("div",pg,T(n.store.workspaces.length),1),t[3]||(t[3]=d("div",{class:"jada-profile-stat-label"},"Workspaces",-1))])]),d("div",hg,[t[5]||(t[5]=d("h3",null,"Workspace Memberships",-1)),(w(!0),_(q,null,ae(n.store.workspaces,r=>(w(),_("div",{key:r.id,class:"jada-profile-ws-item"},[d("span",{class:"jada-ws-dot",style:Le({background:r.color})},null,4),d("span",gg,T(r.name),1),r.isRoot?(w(),_("span",mg,"HOME")):K("",!0),t[4]||(t[4]=d("span",{class:"jada-profile-ws-role"},"Owner",-1))]))),128))]),t[9]||(t[9]=d("div",{class:"jada-profile-section"},[d("h3",null,"Multi-User Isolation"),d("div",{class:"jada-profile-info-box"},[d("p",null,"Each Nextcloud user gets isolated chat history and workspace configuration."),d("ul",null,[d("li",null,"Private conversations per user"),d("li",null,"Per-user workspace preferences"),d("li",null,"Agent authenticates via each user's own app password"),d("li",null,"Admin can view all workspaces")])])],-1)),d("div",bg,[t[7]||(t[7]=d("h3",null,"Nextcloud Users with Jada Access",-1)),d("div",vg,[d("div",xg,[d("div",wg,T(a.userInitials),1),d("div",null,[d("div",yg,T(a.userName),1),t[6]||(t[6]=d("div",{class:"jada-profile-user-role"},"Admin (You)",-1))])])]),t[8]||(t[8]=d("button",{class:"jada-btn-secondary",style:{"margin-top":"12px"}},"+ Invite Nextcloud User",-1))])])}const _g=Ye(tg,[["render",jg],["__scopeId","data-v-67e64c3b"]]),Eg={name:"RightPanel",data(){return{store:k}},computed:{activeWs(){return Oe.getActiveWorkspace()}},methods:{formatTime(e){return e?new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):""},statusIcon(e){return e==="running"?"⏳":e==="error"?"❌":"✅"}}},Sg={class:"jada-right-panel"},Cg={class:"jada-rp-tabs"},Rg={key:0,class:"jada-rp-content"},Tg={class:"jada-rp-server-name"},kg={class:"jada-rp-server-tools"},Og={key:0,class:"jada-rp-empty"},Ag={class:"jada-rp-tc-info"},Ig={class:"jada-rp-tc-name"},Ng={class:"jada-rp-tc-time"},Pg={key:1,class:"jada-rp-empty"},Lg={key:1,class:"jada-rp-content"},$g={key:2,class:"jada-rp-content"},Dg={class:"jada-rp-context-item"},Mg={class:"jada-rp-context-value"},Fg={class:"jada-rp-context-item"},Ug={class:"jada-rp-context-value"},zg={class:"jada-rp-context-item"};function Vg(e,t,s,o,n,a){return w(),_("div",Sg,[d("div",Cg,[d("button",{class:H(["jada-rp-tab",{active:n.store.rightPanelTab==="tools"}]),onClick:t[0]||(t[0]=r=>n.store.rightPanelTab="tools")},"Tools",2),d("button",{class:H(["jada-rp-tab",{active:n.store.rightPanelTab==="files"}]),onClick:t[1]||(t[1]=r=>n.store.rightPanelTab="files")},"Files",2),d("button",{class:H(["jada-rp-tab",{active:n.store.rightPanelTab==="context"}]),onClick:t[2]||(t[2]=r=>n.store.rightPanelTab="context")},"Context",2)]),n.store.rightPanelTab==="tools"?(w(),_("div",Rg,[t[3]||(t[3]=d("h4",null,"MCP Servers",-1)),(w(!0),_(q,null,ae(n.store.mcpServers,r=>(w(),_("div",{key:r.name,class:"jada-rp-server"},[d("span",{class:H(["jada-rp-dot",r.connected?"on":"off"])},null,2),d("span",Tg,T(r.name),1),d("span",kg,T(r.tools),1)]))),128)),n.store.mcpServers.length?K("",!0):(w(),_("div",Og,"No servers connected")),t[4]||(t[4]=d("h4",null,"Recent Tool Calls",-1)),(w(!0),_(q,null,ae(n.store.recentToolCalls.slice(0,12),r=>(w(),_("div",{key:r.name+r.timestamp,class:"jada-rp-tool-call"},[d("span",{class:H(["jada-rp-tc-icon",r.status||"success"])},T(a.statusIcon(r.status)),3),d("div",Ag,[d("div",Ig,T(r.name),1),d("div",Ng,T(a.formatTime(r.timestamp)),1)])]))),128)),n.store.recentToolCalls.length?K("",!0):(w(),_("div",Pg,"No recent tool calls"))])):K("",!0),n.store.rightPanelTab==="files"?(w(),_("div",Lg,[...t[5]||(t[5]=[d("h4",null,"Workspace Files",-1),d("div",{class:"jada-rp-empty"}," Files from the active workspace will appear here when the agent accesses them. ",-1)])])):K("",!0),n.store.rightPanelTab==="context"?(w(),_("div",$g,[t[9]||(t[9]=d("h4",null,"Workspace Context",-1)),d("div",Dg,[t[6]||(t[6]=d("span",{class:"jada-rp-context-label"},"Active Workspace",-1)),d("span",Mg,T(a.activeWs.name),1)]),d("div",Fg,[t[7]||(t[7]=d("span",{class:"jada-rp-context-label"},"Total Tools",-1)),d("span",Ug,T(n.store.totalTools),1)]),d("div",zg,[t[8]||(t[8]=d("span",{class:"jada-rp-context-label"},"Agent Status",-1)),d("span",{class:H(["jada-rp-context-value",n.store.healthy?"green":"red"])},T(n.store.healthy?"Online":"Offline"),3)])])):K("",!0)])}const Bg={name:"App",components:{ChatView:Iu,WorkspacesView:Zu,WorkspaceDetailView:yp,DocumentEditorView:qp,ToolExplorerView:ih,SearchView:jh,SettingsView:eg,UserProfileView:_g,RightPanel:Ye(Eg,[["render",Vg],["__scopeId","data-v-0ec4cf5c"]])},data(){return{store:k,actions:Oe,wsDropdownOpen:!1}},computed:{activeWs(){return Oe.getActiveWorkspace()},userName(){return k.userProfile?.displayName||k.userProfile?.uid||"User"},userInitials(){const e=this.userName,t=e.split(" ");return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.substring(0,2).toUpperCase()},filteredConversations(){return k.conversations.filter(e=>!k.activeWorkspaceId||e.workspace===k.activeWorkspaceId||!e.workspace).slice(0,20)},viewTitle(){return{chat:"Chat",workspaces:"Workspaces","workspace-detail":this.activeWs.name,"document-editor":"Documents","tool-explorer":"Tools",search:"Search",settings:"Settings",profile:"Profile"}[k.currentView]||"Jada AI"}},async mounted(){await Oe.init(),this.healthInterval=setInterval(()=>Oe.refreshHealth(),3e4)},beforeUnmount(){clearInterval(this.healthInterval)},methods:{selectWorkspace(e){Oe.setActiveWorkspace(e),this.wsDropdownOpen=!1},openConversation(e){k.activeConversationId=e.id,k.currentView="chat"}}},Hg={key:0,class:"jada-sidebar"},Wg={class:"jada-sidebar-header"},qg={class:"jada-ws-name"},Kg={key:0,class:"jada-ws-pin"},Gg={key:0,class:"jada-ws-dropdown"},Jg=["onClick"],Xg={key:0,class:"jada-ws-pin"},Yg={class:"jada-ws-count"},Qg={class:"jada-nav"},Zg={key:1,class:"jada-conv-list"},em=["onClick"],tm={class:"jada-conv-info"},sm={class:"jada-conv-title"},nm={class:"jada-conv-preview"},om={class:"jada-sidebar-footer"},rm={class:"jada-user-avatar"},am={class:"jada-user-meta"},im={class:"jada-user-name"},lm={class:"jada-server-status"},cm={class:"jada-main"},dm={key:0,class:"jada-mobile-header"},fm={class:"jada-mobile-title"};function um(e,t,s,o,n,a){const r=ft("ChatView"),i=ft("WorkspacesView"),c=ft("WorkspaceDetailView"),f=ft("DocumentEditorView"),l=ft("ToolExplorerView"),p=ft("SearchView"),v=ft("SettingsView"),R=ft("UserProfileView"),x=ft("RightPanel");return w(),_("div",{class:H(["jada-app",{mobile:n.store.isMobile}])},[!n.store.isMobile||n.store.mobileSidebarOpen?(w(),_("div",Hg,[d("div",Wg,[t[12]||(t[12]=Vn('',1)),d("button",{class:"jada-new-chat-btn",onClick:t[0]||(t[0]=g=>n.actions.startNewChat())},"+ New Chat")]),d("div",{class:"jada-ws-selector",onClick:t[1]||(t[1]=g=>n.wsDropdownOpen=!n.wsDropdownOpen)},[d("span",{class:"jada-ws-dot",style:Le({background:a.activeWs.color})},null,4),d("span",qg,T(a.activeWs.name),1),a.activeWs.isRoot?(w(),_("span",Kg,"📌")):K("",!0),t[13]||(t[13]=d("span",{class:"jada-ws-arrow"},"▾",-1))]),n.wsDropdownOpen?(w(),_("div",Gg,[(w(!0),_(q,null,ae(n.store.workspaces,g=>(w(),_("div",{key:g.id,class:H(["jada-ws-dropdown-item",{active:g.id===n.store.activeWorkspaceId,root:g.isRoot}]),onClick:y=>a.selectWorkspace(g.id)},[d("span",{class:"jada-ws-dot",style:Le({background:g.color})},null,4),d("span",null,T(g.name),1),g.isRoot?(w(),_("span",Xg,"📌")):K("",!0),d("span",Yg,T(g.chatCount||0),1)],10,Jg))),128))])):K("",!0),d("nav",Qg,[d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="chat"}]),onClick:t[2]||(t[2]=g=>n.actions.navigate("chat"))},[...t[14]||(t[14]=[d("span",{class:"jada-nav-icon"},"💬",-1),d("span",{class:"jada-nav-label"},"Chat",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="workspaces"}]),onClick:t[3]||(t[3]=g=>n.actions.navigate("workspaces"))},[...t[15]||(t[15]=[d("span",{class:"jada-nav-icon"},"📁",-1),d("span",{class:"jada-nav-label"},"Workspaces",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="document-editor"}]),onClick:t[4]||(t[4]=g=>n.actions.navigate("document-editor"))},[...t[16]||(t[16]=[d("span",{class:"jada-nav-icon"},"📄",-1),d("span",{class:"jada-nav-label"},"Documents",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="tool-explorer"}]),onClick:t[5]||(t[5]=g=>n.actions.navigate("tool-explorer"))},[...t[17]||(t[17]=[d("span",{class:"jada-nav-icon"},"🔧",-1),d("span",{class:"jada-nav-label"},"Tools",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="search"}]),onClick:t[6]||(t[6]=g=>n.actions.navigate("search"))},[...t[18]||(t[18]=[d("span",{class:"jada-nav-icon"},"🔍",-1),d("span",{class:"jada-nav-label"},"Search",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="settings"}]),onClick:t[7]||(t[7]=g=>n.actions.navigate("settings"))},[...t[19]||(t[19]=[d("span",{class:"jada-nav-icon"},"⚙",-1),d("span",{class:"jada-nav-label"},"Settings",-1)])],2)]),n.store.currentView==="chat"?(w(),_("div",Zg,[t[21]||(t[21]=d("div",{class:"jada-conv-section-label"},"Today",-1)),(w(!0),_(q,null,ae(a.filteredConversations,g=>(w(),_("div",{key:g.id,class:H(["jada-conv-item",{active:g.id===n.store.activeConversationId}]),onClick:y=>a.openConversation(g)},[t[20]||(t[20]=d("span",{class:"jada-conv-icon"},"💬",-1)),d("div",tm,[d("div",sm,T(g.title||g.id),1),d("div",nm,T(g.lastMessage||""),1)])],10,em))),128))])):K("",!0),d("div",om,[d("div",{class:"jada-user-info",onClick:t[8]||(t[8]=g=>n.actions.navigate("profile"))},[d("div",rm,T(a.userInitials),1),d("div",am,[d("div",im,T(a.userName),1),t[22]||(t[22]=d("div",{class:"jada-user-role"},"Admin",-1))])]),d("div",lm,[d("span",{class:H(["jada-status-dot",n.store.healthy?"online":"offline"])},null,2),qs(" "+T(n.store.mcpServers.length)+" servers · "+T(n.store.totalTools)+" tools ",1)])])])):K("",!0),d("div",cm,[n.store.isMobile?(w(),_("div",dm,[d("button",{class:"jada-hamburger",onClick:t[9]||(t[9]=g=>n.store.mobileSidebarOpen=!n.store.mobileSidebarOpen)},"☰"),d("span",fm,T(a.viewTitle),1),d("div",{class:"jada-user-avatar small",onClick:t[10]||(t[10]=g=>n.actions.navigate("profile"))},T(a.userInitials),1)])):K("",!0),n.store.currentView==="chat"?(w(),Ke(r,{key:1})):n.store.currentView==="workspaces"?(w(),Ke(i,{key:2})):n.store.currentView==="workspace-detail"?(w(),Ke(c,{key:3})):n.store.currentView==="document-editor"?(w(),Ke(f,{key:4})):n.store.currentView==="tool-explorer"?(w(),Ke(l,{key:5})):n.store.currentView==="search"?(w(),Ke(p,{key:6})):n.store.currentView==="settings"?(w(),Ke(v,{key:7})):n.store.currentView==="profile"?(w(),Ke(R,{key:8})):K("",!0)]),!n.store.isMobile&&n.store.currentView==="chat"&&n.store.rightPanelOpen?(w(),Ke(x,{key:1})):K("",!0),n.store.isMobile&&n.store.mobileSidebarOpen?(w(),_("div",{key:2,class:"jada-overlay",onClick:t[11]||(t[11]=g=>n.store.mobileSidebarOpen=!1)})):K("",!0)],2)}const pm=Ye(Bg,[["render",um],["__scopeId","data-v-8cc98c50"]]),yo=document.getElementById("jada-agent-app");yo&&(yo.style.cssText="width:100%!important;flex:1 1 100%!important;min-width:0;height:calc(100vh - 50px);margin:0;padding:0;background:#0d0d14;",ed(pm).mount(yo))})(); +User request: ${e}`;try{const s=await Pe.sendMessage(t),o=s.response||s.message||JSON.stringify(s);this.aiMessages.push({role:"assistant",content:o}),this.aiSuggestions.push({text:o})}catch(s){this.aiMessages.push({role:"assistant",content:"Error: "+(s.message||"Failed to reach agent")})}}}},_p={class:"jada-doc-editor"},Ep={class:"jada-doc-sidebar"},Sp=["onClick"],Cp={class:"jada-doc-item-info"},Rp={class:"jada-doc-item-name"},Tp={class:"jada-doc-item-meta"},kp={class:"jada-doc-center"},Op={class:"jada-doc-toolbar"},Ap={class:"jada-doc-filename"},Ip={class:"jada-doc-content"},Np={key:0,class:"jada-doc-suggestions"},Pp={class:"jada-doc-suggestion-text"},Lp={class:"jada-doc-suggestion-actions"},$p=["onClick"],Dp=["onClick"],Mp={class:"jada-doc-ai-panel"},Fp={class:"jada-doc-quick-actions"},Up=["onClick"],zp={class:"jada-doc-ai-messages"},Vp={class:"jada-doc-ai-msg-text"},Bp={class:"jada-doc-ai-input-row"},Hp=["disabled"];function Wp(e,t,s,o,n,a){return w(),_("div",_p,[d("div",Ep,[t[6]||(t[6]=d("h4",null,"Documents",-1)),t[7]||(t[7]=d("div",{class:"jada-doc-section-label"},"Recent",-1)),(w(!0),_(K,null,ie(n.recentDocs,r=>(w(),_("div",{key:r.name,class:H(["jada-doc-item",{active:n.activeDoc===r.name}]),onClick:i=>a.openDoc(r)},[t[5]||(t[5]=d("span",{class:"jada-doc-icon"},"📄",-1)),d("div",Cp,[d("div",Rp,T(r.name),1),d("div",Tp,T(r.modified||"Just now"),1)])],10,Sp))),128)),t[8]||(t[8]=d("div",{class:"jada-doc-section-label"},"Nextcloud Files",-1)),t[9]||(t[9]=d("div",{class:"jada-doc-tree-hint"}," Files from your Nextcloud instance will appear here. Use the chat to ask Jada to find or create documents. ",-1))]),d("div",kp,[d("div",Op,[d("span",Ap,T(n.activeDoc||"Untitled Document"),1),t[10]||(t[10]=d("div",{class:"jada-doc-toolbar-actions"},[d("button",{class:"jada-doc-tb-btn",title:"Save"},"💾"),d("button",{class:"jada-doc-tb-btn",title:"Download"},"📥")],-1))]),d("div",Ip,[ct(d("textarea",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.editorContent=r),class:"jada-doc-textarea",placeholder:"Start writing or ask Jada to generate content...",onInput:t[1]||(t[1]=r=>n.dirty=!0)},null,544),[[ht,n.editorContent]]),n.aiSuggestions.length?(w(),_("div",Np,[(w(!0),_(K,null,ie(n.aiSuggestions,(r,i)=>(w(),_("div",{key:i,class:"jada-doc-suggestion"},[t[11]||(t[11]=d("div",{class:"jada-doc-suggestion-header"},[d("span",{class:"jada-doc-suggestion-icon"},"✨"),d("span",null,"AI Suggestion")],-1)),d("div",Pp,T(r.text),1),d("div",Lp,[d("button",{class:"jada-doc-apply-btn",onClick:c=>a.applySuggestion(r)},"Apply",8,$p),d("button",{class:"jada-doc-dismiss-btn",onClick:c=>n.aiSuggestions.splice(i,1)},"Dismiss",8,Dp)])]))),128))])):G("",!0)])]),d("div",Mp,[t[12]||(t[12]=d("h4",null,"AI Document Assistant",-1)),t[13]||(t[13]=d("p",{class:"jada-doc-ai-hint"},"Ask Jada to help edit, proofread, summarize, or translate this document.",-1)),d("div",Fp,[(w(!0),_(K,null,ie(n.quickActions,r=>(w(),_("button",{key:r.label,class:"jada-doc-action-btn",onClick:i=>a.handleQuickAction(r)},T(r.icon)+" "+T(r.label),9,Up))),128))]),d("div",zp,[(w(!0),_(K,null,ie(n.aiMessages,(r,i)=>(w(),_("div",{key:i,class:H(["jada-doc-ai-msg",r.role])},[d("div",Vp,T(r.content),1)],2))),128))]),d("div",Bp,[ct(d("input",{"onUpdate:modelValue":t[2]||(t[2]=r=>n.aiInput=r),class:"jada-doc-ai-input",placeholder:"Ask Jada to edit this document...",onKeydown:t[3]||(t[3]=pa(Jn((...r)=>a.handleAiSend&&a.handleAiSend(...r),["prevent"]),["enter"]))},null,544),[[ht,n.aiInput]]),d("button",{class:"jada-doc-ai-send",onClick:t[4]||(t[4]=(...r)=>a.handleAiSend&&a.handleAiSend(...r)),disabled:!n.aiInput.trim()},"➤",8,Hp)])])])}const qp=Ye(jp,[["render",Wp],["__scopeId","data-v-fa97b8c8"]]),Kp={name:"ToolExplorerView",data(){return{store:k,searchQuery:"",selectedServer:null,toolsList:[]}},computed:{filteredTools(){let e=this.toolsList;if(this.selectedServer&&(e=e.filter(t=>t.server===this.selectedServer)),this.searchQuery.trim()){const t=this.searchQuery.toLowerCase();e=e.filter(s=>s.name.toLowerCase().includes(t)||(s.description||"").toLowerCase().includes(t))}return e}},async mounted(){await this.loadTools()},methods:{async loadTools(){try{const e=await Pe.getHealthDetail();if(e?.tools)this.toolsList=e.tools.map(t=>({name:t.name||t,description:t.description||"",server:t.server||this.inferServer(t.name||t)}));else if(e?.servers){const t=[];for(const[s,o]of Object.entries(e.servers)){const n=o.tools||0;for(let a=0;a({name:t.name||t,description:t.description||"",server:"local"})))}catch{this.toolsList=[]}}},inferServer(e){return e.startsWith("nextcloud__")?"nextcloud":e.startsWith("kuse__")?"kuse":e.startsWith("composio__")?"composio":e.startsWith("rube__")?"rube":e.startsWith("vault__")?"vault":e.startsWith("protonmail__")?"protonmail":"unknown"},serverColor(e){return{nextcloud:"#0082c9",kuse:"#e94560",composio:"#8b5cf6",rube:"#22c55e",vault:"#f59e0b",protonmail:"#6d4aff"}[e]||"#555"}}},Gp={class:"jada-tools"},Jp={class:"jada-tools-header"},Xp={class:"jada-tools-search"},Yp={class:"jada-tools-filters"},Qp=["onClick"],Zp={class:"jada-tools-grid"},eh={class:"jada-tool-card-header"},th={class:"jada-tool-card-name"},sh={class:"jada-tool-card-desc"},nh={class:"jada-tool-card-server"},oh={key:0,class:"jada-tools-empty"},rh={key:1,class:"jada-tools-empty"};function ah(e,t,s,o,n,a){return w(),_("div",Gp,[d("div",Jp,[t[2]||(t[2]=d("h1",null,"Tool Explorer",-1)),d("div",Xp,[ct(d("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.searchQuery=r),placeholder:"Search tools...",class:"jada-tools-input"},null,512),[[ht,n.searchQuery]])])]),d("div",Yp,[d("button",{class:H(["jada-filter-btn",{active:n.selectedServer===null}]),onClick:t[1]||(t[1]=r=>n.selectedServer=null)},"All ("+T(n.store.totalTools)+")",3),(w(!0),_(K,null,ie(n.store.mcpServers,r=>(w(),_("button",{key:r.name,class:H(["jada-filter-btn",{active:n.selectedServer===r.name}]),onClick:i=>n.selectedServer=r.name},T(r.name)+" ("+T(r.tools)+")",11,Qp))),128))]),d("div",Zp,[(w(!0),_(K,null,ie(a.filteredTools,r=>(w(),_("div",{key:r.name,class:"jada-tool-card"},[d("div",eh,[t[3]||(t[3]=d("span",{class:"jada-tool-card-icon"},"🔧",-1)),d("span",th,T(r.name),1)]),d("p",sh,T(r.description||"No description"),1),d("div",nh,[d("span",{class:"jada-tool-server-dot",style:Le({background:a.serverColor(r.server)})},null,4),qs(" "+T(r.server),1)])]))),128))]),!a.filteredTools.length&&n.searchQuery?(w(),_("div",oh,' No tools matching "'+T(n.searchQuery)+'" ',1)):G("",!0),n.toolsList.length?G("",!0):(w(),_("div",rh," Tool data will be available when the agent is connected. Check the health endpoint. "))])}const ih=Ye(Kp,[["render",ah],["__scopeId","data-v-55629294"]]),lh={name:"SearchView",data(){return{store:k,query:"",results:[],recentSearches:["nextcloud files","calendar events","kuse documents"]}},mounted(){this.$nextTick(()=>this.$refs.searchInput?.focus())},methods:{handleSearch(){const e=this.query.toLowerCase().trim();if(!e){this.results=[];return}const t=[];for(const s of k.conversations){const o=s.title||s.id||"";o.toLowerCase().includes(e)&&t.push({type:"chat",title:o,preview:s.lastMessage||"Conversation",data:s})}for(const s of k.recentToolCalls)s.name.toLowerCase().includes(e)&&t.push({type:"tool",title:s.name,preview:`Called at ${new Date(s.timestamp).toLocaleTimeString()}`,data:s});for(const s of k.workspaces)(s.name.toLowerCase().includes(e)||(s.description||"").toLowerCase().includes(e))&&t.push({type:"workspace",title:s.name,preview:s.description||"",data:s});this.results=t},openResult(e){e.type==="chat"?(k.activeConversationId=e.data.id,k.currentView="chat"):e.type==="workspace"?(k.activeWorkspaceId=e.data.id,k.currentView="workspace-detail"):e.type==="tool"&&(k.currentView="tool-explorer")}}},ch={class:"jada-search"},dh={class:"jada-search-bar"},uh={key:0,class:"jada-search-results"},fh={class:"jada-search-result-count"},ph=["onClick"],hh={class:"jada-search-result-info"},gh={class:"jada-search-result-title"},mh=["innerHTML"],bh={key:0,class:"jada-search-empty"},vh={key:1,class:"jada-search-empty-state"},xh={class:"jada-search-recent"},wh=["onClick"];function yh(e,t,s,o,n,a){return w(),_("div",ch,[t[5]||(t[5]=d("div",{class:"jada-search-header"},[d("h1",null,"Search")],-1)),d("div",dh,[t[2]||(t[2]=d("span",{class:"jada-search-icon"},"🔍",-1)),ct(d("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.query=r),class:"jada-search-input",placeholder:"Search conversations, tools, files...",onInput:t[1]||(t[1]=(...r)=>a.handleSearch&&a.handleSearch(...r)),ref:"searchInput"},null,544),[[ht,n.query]])]),n.query.trim()?(w(),_("div",uh,[d("div",fh,T(n.results.length)+' results for "'+T(n.query)+'"',1),(w(!0),_(K,null,ie(n.results,(r,i)=>(w(),_("div",{key:i,class:"jada-search-result",onClick:c=>a.openResult(r)},[d("span",{class:H(["jada-search-type",r.type])},T(r.type),3),d("div",hh,[d("div",gh,T(r.title),1),d("div",{class:"jada-search-result-preview",innerHTML:r.preview},null,8,mh)])],8,ph))),128)),n.results.length?G("",!0):(w(),_("div",bh," No results found. Try a different search term. "))])):(w(),_("div",vh,[t[4]||(t[4]=d("p",null,"Search across your conversations, tool calls, and files.",-1)),d("div",xh,[t[3]||(t[3]=d("div",{class:"jada-search-recent-label"},"Recent Searches",-1)),(w(!0),_(K,null,ie(n.recentSearches,r=>(w(),_("div",{key:r,class:"jada-search-recent-item",onClick:i=>{n.query=r,a.handleSearch()}}," 🔍 "+T(r),9,wh))),128))])]))])}const jh=Ye(lh,[["render",yh],["__scopeId","data-v-48c69005"]]),_h={name:"SettingsView",data(){return{store:k,activeSection:"general",settings:{openclaw_url:"",openclaw_token:""},autoExecute:!0,perUserIsolation:!0,saving:!1,statusMsg:"",statusOk:!1,sections:[{id:"general",label:"General"},{id:"mcp",label:"MCP Servers"},{id:"workspaces",label:"Workspaces"},{id:"about",label:"About"}]}},async mounted(){try{const e=await Pe.getSettings();this.settings={...this.settings,...e}}catch{}},methods:{async handleSave(){this.saving=!0,this.statusMsg="";try{await Pe.saveSettings(this.settings),this.statusMsg="Saved",this.statusOk=!0}catch(e){this.statusMsg="Failed: "+(e.message||"Unknown"),this.statusOk=!1}finally{this.saving=!1}}}},Eh={class:"jada-settings"},Sh={class:"jada-settings-grid"},Ch={class:"jada-settings-nav"},Rh=["onClick"],Th={class:"jada-settings-content"},kh={key:0,class:"jada-settings-section"},Oh={class:"jada-form-group"},Ah={class:"jada-form-group"},Ih={class:"jada-form-group"},Nh={class:"jada-toggle-row"},Ph={class:"jada-form-group"},Lh={class:"jada-toggle-row"},$h=["disabled"],Dh={key:1,class:"jada-settings-section"},Mh={class:"jada-mcp-list"},Fh={class:"jada-mcp-info"},Uh={class:"jada-mcp-name"},zh={class:"jada-mcp-tools"},Vh={key:0,class:"jada-mcp-empty"},Bh={class:"jada-mcp-total"},Hh={key:2,class:"jada-settings-section"},Wh={class:"jada-ws-setting-name"},qh={key:0,class:"jada-ws-badge"},Kh={class:"jada-ws-setting-count"},Gh={key:3,class:"jada-settings-section"},Jh={class:"jada-about-grid"},Xh={class:"jada-about-row"},Yh={class:"jada-about-row"},Qh={class:"jada-about-value"};function Zh(e,t,s,o,n,a){return w(),_("div",Eh,[t[22]||(t[22]=d("h1",null,"Settings",-1)),d("div",Sh,[d("div",Ch,[(w(!0),_(K,null,ie(n.sections,r=>(w(),_("a",{key:r.id,class:H(["jada-settings-nav-item",{active:n.activeSection===r.id}]),onClick:i=>n.activeSection=r.id},T(r.label),11,Rh))),128))]),d("div",Th,[n.activeSection==="general"?(w(),_("div",kh,[t[13]||(t[13]=d("h2",null,"General",-1)),d("div",Oh,[t[5]||(t[5]=d("label",null,"Agent Backend URL",-1)),ct(d("input",{"onUpdate:modelValue":t[0]||(t[0]=r=>n.settings.openclaw_url=r),placeholder:"https://jada-api.garzaos.online"},null,512),[[ht,n.settings.openclaw_url]])]),d("div",Ah,[t[6]||(t[6]=d("label",null,"API Token",-1)),ct(d("input",{"onUpdate:modelValue":t[1]||(t[1]=r=>n.settings.openclaw_token=r),type:"password",placeholder:"Bearer token"},null,512),[[ht,n.settings.openclaw_token]])]),d("div",Ih,[t[9]||(t[9]=d("label",null,"Auto-execute tool calls",-1)),d("div",Nh,[t[8]||(t[8]=d("span",{class:"jada-toggle-label"},"Allow agent to execute tools without confirmation",-1)),d("button",{class:H(["jada-toggle",{on:n.autoExecute}]),onClick:t[2]||(t[2]=r=>n.autoExecute=!n.autoExecute)},[...t[7]||(t[7]=[d("span",{class:"jada-toggle-knob"},null,-1)])],2)])]),d("div",Ph,[t[12]||(t[12]=d("label",null,"Per-user chat isolation",-1)),d("div",Lh,[t[11]||(t[11]=d("span",{class:"jada-toggle-label"},"Each Nextcloud user gets isolated chat history",-1)),d("button",{class:H(["jada-toggle",{on:n.perUserIsolation}]),onClick:t[3]||(t[3]=r=>n.perUserIsolation=!n.perUserIsolation)},[...t[10]||(t[10]=[d("span",{class:"jada-toggle-knob"},null,-1)])],2)])]),d("button",{class:"jada-btn-primary",onClick:t[4]||(t[4]=(...r)=>a.handleSave&&a.handleSave(...r)),disabled:n.saving},T(n.saving?"Saving...":"Save Settings"),9,$h),n.statusMsg?(w(),_("span",{key:0,class:H(["jada-status-msg",n.statusOk?"ok":"err"])},T(n.statusMsg),3)):G("",!0)])):G("",!0),n.activeSection==="mcp"?(w(),_("div",Dh,[t[14]||(t[14]=d("h2",null,"MCP Servers",-1)),t[15]||(t[15]=d("p",{class:"jada-hint"},"Connected MCP servers that provide tools to the agent.",-1)),d("div",Mh,[(w(!0),_(K,null,ie(n.store.mcpServers,r=>(w(),_("div",{key:r.name,class:"jada-mcp-item"},[d("span",{class:H(["jada-mcp-dot",r.connected?"on":"off"])},null,2),d("div",Fh,[d("div",Uh,T(r.name),1),d("div",zh,T(r.tools)+" tools",1)]),d("span",{class:H(["jada-mcp-status",r.connected?"on":"off"])},T(r.connected?"Connected":"Disconnected"),3)]))),128)),n.store.mcpServers.length?G("",!0):(w(),_("div",Vh," No MCP servers connected. Configure the backend URL above. "))]),d("div",Bh," Total: "+T(n.store.totalTools)+" tools across "+T(n.store.mcpServers.length)+" servers ",1)])):G("",!0),n.activeSection==="workspaces"?(w(),_("div",Hh,[t[16]||(t[16]=d("h2",null,"Workspaces",-1)),t[17]||(t[17]=d("p",{class:"jada-hint"},"Manage your workspace configuration. Nextcloud is always the root workspace.",-1)),(w(!0),_(K,null,ie(n.store.workspaces,r=>(w(),_("div",{key:r.id,class:"jada-ws-setting-item"},[d("span",{class:"jada-ws-dot",style:Le({background:r.color})},null,4),d("span",Wh,T(r.name),1),r.isRoot?(w(),_("span",qh,"HOME")):G("",!0),d("span",Kh,T(r.chatCount||0)+" chats",1)]))),128))])):G("",!0),n.activeSection==="about"?(w(),_("div",Gh,[t[21]||(t[21]=d("h2",null,"About",-1)),d("div",Jh,[t[20]||(t[20]=Vn('
App Version0.2.0
Agent BackendHermes (Jada API)
',2)),d("div",Xh,[t[18]||(t[18]=d("span",{class:"jada-about-label"},"Agent Status",-1)),d("span",{class:H(["jada-about-value",n.store.healthy?"green":"red"])},T(n.store.healthy?"Online":"Offline"),3)]),d("div",Yh,[t[19]||(t[19]=d("span",{class:"jada-about-label"},"Tools",-1)),d("span",Qh,T(n.store.totalTools),1)])])])):G("",!0)])])])}const eg=Ye(_h,[["render",Zh],["__scopeId","data-v-26717cb5"]]),tg={name:"UserProfileView",data(){return{store:k}},computed:{userName(){return k.userProfile?.displayName||k.userProfile?.uid||"User"},userInitials(){const e=this.userName,t=e.split(" ");return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.substring(0,2).toUpperCase()}}},sg={class:"jada-profile"},ng={class:"jada-profile-header"},og={class:"jada-profile-avatar"},rg={class:"jada-profile-info"},ag={class:"jada-profile-email"},ig={class:"jada-profile-stats"},lg={class:"jada-profile-stat"},cg={class:"jada-profile-stat-value"},dg={class:"jada-profile-stat"},ug={class:"jada-profile-stat-value"},fg={class:"jada-profile-stat"},pg={class:"jada-profile-stat-value"},hg={class:"jada-profile-section"},gg={class:"jada-profile-ws-name"},mg={key:0,class:"jada-profile-ws-badge"},bg={class:"jada-profile-section"},vg={class:"jada-profile-users"},xg={class:"jada-profile-user-item current"},wg={class:"jada-profile-user-avatar"},yg={class:"jada-profile-user-name"};function jg(e,t,s,o,n,a){return w(),_("div",sg,[d("div",ng,[d("div",og,T(a.userInitials),1),d("div",rg,[d("h1",null,T(a.userName),1),t[0]||(t[0]=d("div",{class:"jada-profile-role"},"Admin · Nextcloud Owner",-1)),d("div",ag,T(n.store.userProfile?.email||""),1)])]),d("div",ig,[d("div",lg,[d("div",cg,T(n.store.conversations.length),1),t[1]||(t[1]=d("div",{class:"jada-profile-stat-label"},"Conversations",-1))]),d("div",dg,[d("div",ug,T(n.store.recentToolCalls.length),1),t[2]||(t[2]=d("div",{class:"jada-profile-stat-label"},"Tool Calls",-1))]),d("div",fg,[d("div",pg,T(n.store.workspaces.length),1),t[3]||(t[3]=d("div",{class:"jada-profile-stat-label"},"Workspaces",-1))])]),d("div",hg,[t[5]||(t[5]=d("h3",null,"Workspace Memberships",-1)),(w(!0),_(K,null,ie(n.store.workspaces,r=>(w(),_("div",{key:r.id,class:"jada-profile-ws-item"},[d("span",{class:"jada-ws-dot",style:Le({background:r.color})},null,4),d("span",gg,T(r.name),1),r.isRoot?(w(),_("span",mg,"HOME")):G("",!0),t[4]||(t[4]=d("span",{class:"jada-profile-ws-role"},"Owner",-1))]))),128))]),t[9]||(t[9]=d("div",{class:"jada-profile-section"},[d("h3",null,"Multi-User Isolation"),d("div",{class:"jada-profile-info-box"},[d("p",null,"Each Nextcloud user gets isolated chat history and workspace configuration."),d("ul",null,[d("li",null,"Private conversations per user"),d("li",null,"Per-user workspace preferences"),d("li",null,"Agent authenticates via each user's own app password"),d("li",null,"Admin can view all workspaces")])])],-1)),d("div",bg,[t[7]||(t[7]=d("h3",null,"Nextcloud Users with Jada Access",-1)),d("div",vg,[d("div",xg,[d("div",wg,T(a.userInitials),1),d("div",null,[d("div",yg,T(a.userName),1),t[6]||(t[6]=d("div",{class:"jada-profile-user-role"},"Admin (You)",-1))])])]),t[8]||(t[8]=d("button",{class:"jada-btn-secondary",style:{"margin-top":"12px"}},"+ Invite Nextcloud User",-1))])])}const _g=Ye(tg,[["render",jg],["__scopeId","data-v-67e64c3b"]]),Eg={name:"RightPanel",data(){return{store:k}},computed:{activeWs(){return Te.getActiveWorkspace()}},methods:{formatTime(e){return e?new Date(e).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):""},statusIcon(e){return e==="running"?"⏳":e==="error"?"❌":"✅"}}},Sg={class:"jada-right-panel"},Cg={class:"jada-rp-tabs"},Rg={key:0,class:"jada-rp-content"},Tg={class:"jada-rp-server-name"},kg={class:"jada-rp-server-tools"},Og={key:0,class:"jada-rp-empty"},Ag={class:"jada-rp-tc-info"},Ig={class:"jada-rp-tc-name"},Ng={class:"jada-rp-tc-time"},Pg={key:1,class:"jada-rp-empty"},Lg={key:1,class:"jada-rp-content"},$g={key:2,class:"jada-rp-content"},Dg={class:"jada-rp-context-item"},Mg={class:"jada-rp-context-value"},Fg={class:"jada-rp-context-item"},Ug={class:"jada-rp-context-value"},zg={class:"jada-rp-context-item"};function Vg(e,t,s,o,n,a){return w(),_("div",Sg,[d("div",Cg,[d("button",{class:H(["jada-rp-tab",{active:n.store.rightPanelTab==="tools"}]),onClick:t[0]||(t[0]=r=>n.store.rightPanelTab="tools")},"Tools",2),d("button",{class:H(["jada-rp-tab",{active:n.store.rightPanelTab==="files"}]),onClick:t[1]||(t[1]=r=>n.store.rightPanelTab="files")},"Files",2),d("button",{class:H(["jada-rp-tab",{active:n.store.rightPanelTab==="context"}]),onClick:t[2]||(t[2]=r=>n.store.rightPanelTab="context")},"Context",2)]),n.store.rightPanelTab==="tools"?(w(),_("div",Rg,[t[3]||(t[3]=d("h4",null,"MCP Servers",-1)),(w(!0),_(K,null,ie(n.store.mcpServers,r=>(w(),_("div",{key:r.name,class:"jada-rp-server"},[d("span",{class:H(["jada-rp-dot",r.connected?"on":"off"])},null,2),d("span",Tg,T(r.name),1),d("span",kg,T(r.tools),1)]))),128)),n.store.mcpServers.length?G("",!0):(w(),_("div",Og,"No servers connected")),t[4]||(t[4]=d("h4",null,"Recent Tool Calls",-1)),(w(!0),_(K,null,ie(n.store.recentToolCalls.slice(0,12),r=>(w(),_("div",{key:r.name+r.timestamp,class:"jada-rp-tool-call"},[d("span",{class:H(["jada-rp-tc-icon",r.status||"success"])},T(a.statusIcon(r.status)),3),d("div",Ag,[d("div",Ig,T(r.name),1),d("div",Ng,T(a.formatTime(r.timestamp)),1)])]))),128)),n.store.recentToolCalls.length?G("",!0):(w(),_("div",Pg,"No recent tool calls"))])):G("",!0),n.store.rightPanelTab==="files"?(w(),_("div",Lg,[...t[5]||(t[5]=[d("h4",null,"Workspace Files",-1),d("div",{class:"jada-rp-empty"}," Files from the active workspace will appear here when the agent accesses them. ",-1)])])):G("",!0),n.store.rightPanelTab==="context"?(w(),_("div",$g,[t[9]||(t[9]=d("h4",null,"Workspace Context",-1)),d("div",Dg,[t[6]||(t[6]=d("span",{class:"jada-rp-context-label"},"Active Workspace",-1)),d("span",Mg,T(a.activeWs.name),1)]),d("div",Fg,[t[7]||(t[7]=d("span",{class:"jada-rp-context-label"},"Total Tools",-1)),d("span",Ug,T(n.store.totalTools),1)]),d("div",zg,[t[8]||(t[8]=d("span",{class:"jada-rp-context-label"},"Agent Status",-1)),d("span",{class:H(["jada-rp-context-value",n.store.healthy?"green":"red"])},T(n.store.healthy?"Online":"Offline"),3)])])):G("",!0)])}const Bg={name:"App",components:{ChatView:If,WorkspacesView:Zf,WorkspaceDetailView:yp,DocumentEditorView:qp,ToolExplorerView:ih,SearchView:jh,SettingsView:eg,UserProfileView:_g,RightPanel:Ye(Eg,[["render",Vg],["__scopeId","data-v-0ec4cf5c"]])},data(){return{store:k,actions:Te,wsDropdownOpen:!1}},computed:{activeWs(){return Te.getActiveWorkspace()},userName(){return k.userProfile?.displayName||k.userProfile?.uid||"User"},userInitials(){const e=this.userName,t=e.split(" ");return t.length>=2?(t[0][0]+t[1][0]).toUpperCase():e.substring(0,2).toUpperCase()},filteredConversations(){return k.conversations.filter(e=>!k.activeWorkspaceId||e.workspace===k.activeWorkspaceId||!e.workspace).slice(0,20)},viewTitle(){return{chat:"Chat",workspaces:"Workspaces","workspace-detail":this.activeWs.name,"document-editor":"Documents","tool-explorer":"Tools",search:"Search",settings:"Settings",profile:"Profile"}[k.currentView]||"Jada AI"}},async mounted(){await Te.init(),this.healthInterval=setInterval(()=>Te.refreshHealth(),3e4)},beforeUnmount(){clearInterval(this.healthInterval)},methods:{selectWorkspace(e){Te.setActiveWorkspace(e),this.wsDropdownOpen=!1},openConversation(e){k.activeConversationId=e.id,k.currentView="chat"}}},Hg={key:0,class:"jada-sidebar"},Wg={class:"jada-sidebar-header"},qg={class:"jada-ws-name"},Kg={key:0,class:"jada-ws-pin"},Gg={key:0,class:"jada-ws-dropdown"},Jg=["onClick"],Xg={key:0,class:"jada-ws-pin"},Yg={class:"jada-ws-count"},Qg={class:"jada-nav"},Zg={key:1,class:"jada-conv-list"},em=["onClick"],tm={class:"jada-conv-info"},sm={class:"jada-conv-title"},nm={class:"jada-conv-preview"},om={class:"jada-sidebar-footer"},rm={class:"jada-user-avatar"},am={class:"jada-user-meta"},im={class:"jada-user-name"},lm={class:"jada-server-status"},cm={class:"jada-main"},dm={key:0,class:"jada-mobile-header"},um={class:"jada-mobile-title"};function fm(e,t,s,o,n,a){const r=ut("ChatView"),i=ut("WorkspacesView"),c=ut("WorkspaceDetailView"),u=ut("DocumentEditorView"),l=ut("ToolExplorerView"),p=ut("SearchView"),v=ut("SettingsView"),R=ut("UserProfileView"),x=ut("RightPanel");return w(),_("div",{class:H(["jada-app",{mobile:n.store.isMobile}])},[!n.store.isMobile||n.store.mobileSidebarOpen?(w(),_("div",Hg,[d("div",Wg,[t[12]||(t[12]=Vn('',1)),d("button",{class:"jada-new-chat-btn",onClick:t[0]||(t[0]=g=>n.actions.startNewChat())},"+ New Chat")]),d("div",{class:"jada-ws-selector",onClick:t[1]||(t[1]=g=>n.wsDropdownOpen=!n.wsDropdownOpen)},[d("span",{class:"jada-ws-dot",style:Le({background:a.activeWs.color})},null,4),d("span",qg,T(a.activeWs.name),1),a.activeWs.isRoot?(w(),_("span",Kg,"📌")):G("",!0),t[13]||(t[13]=d("span",{class:"jada-ws-arrow"},"▾",-1))]),n.wsDropdownOpen?(w(),_("div",Gg,[(w(!0),_(K,null,ie(n.store.workspaces,g=>(w(),_("div",{key:g.id,class:H(["jada-ws-dropdown-item",{active:g.id===n.store.activeWorkspaceId,root:g.isRoot}]),onClick:y=>a.selectWorkspace(g.id)},[d("span",{class:"jada-ws-dot",style:Le({background:g.color})},null,4),d("span",null,T(g.name),1),g.isRoot?(w(),_("span",Xg,"📌")):G("",!0),d("span",Yg,T(g.chatCount||0),1)],10,Jg))),128))])):G("",!0),d("nav",Qg,[d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="chat"}]),onClick:t[2]||(t[2]=g=>n.actions.navigate("chat"))},[...t[14]||(t[14]=[d("span",{class:"jada-nav-icon"},"💬",-1),d("span",{class:"jada-nav-label"},"Chat",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="workspaces"}]),onClick:t[3]||(t[3]=g=>n.actions.navigate("workspaces"))},[...t[15]||(t[15]=[d("span",{class:"jada-nav-icon"},"📁",-1),d("span",{class:"jada-nav-label"},"Workspaces",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="document-editor"}]),onClick:t[4]||(t[4]=g=>n.actions.navigate("document-editor"))},[...t[16]||(t[16]=[d("span",{class:"jada-nav-icon"},"📄",-1),d("span",{class:"jada-nav-label"},"Documents",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="tool-explorer"}]),onClick:t[5]||(t[5]=g=>n.actions.navigate("tool-explorer"))},[...t[17]||(t[17]=[d("span",{class:"jada-nav-icon"},"🔧",-1),d("span",{class:"jada-nav-label"},"Tools",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="search"}]),onClick:t[6]||(t[6]=g=>n.actions.navigate("search"))},[...t[18]||(t[18]=[d("span",{class:"jada-nav-icon"},"🔍",-1),d("span",{class:"jada-nav-label"},"Search",-1)])],2),d("a",{class:H(["jada-nav-item",{active:n.store.currentView==="settings"}]),onClick:t[7]||(t[7]=g=>n.actions.navigate("settings"))},[...t[19]||(t[19]=[d("span",{class:"jada-nav-icon"},"⚙",-1),d("span",{class:"jada-nav-label"},"Settings",-1)])],2)]),n.store.currentView==="chat"?(w(),_("div",Zg,[t[21]||(t[21]=d("div",{class:"jada-conv-section-label"},"Today",-1)),(w(!0),_(K,null,ie(a.filteredConversations,g=>(w(),_("div",{key:g.id,class:H(["jada-conv-item",{active:g.id===n.store.activeConversationId}]),onClick:y=>a.openConversation(g)},[t[20]||(t[20]=d("span",{class:"jada-conv-icon"},"💬",-1)),d("div",tm,[d("div",sm,T(g.title||g.id),1),d("div",nm,T(g.lastMessage||""),1)])],10,em))),128))])):G("",!0),d("div",om,[d("div",{class:"jada-user-info",onClick:t[8]||(t[8]=g=>n.actions.navigate("profile"))},[d("div",rm,T(a.userInitials),1),d("div",am,[d("div",im,T(a.userName),1),t[22]||(t[22]=d("div",{class:"jada-user-role"},"Admin",-1))])]),d("div",lm,[d("span",{class:H(["jada-status-dot",n.store.healthy?"online":"offline"])},null,2),qs(" "+T(n.store.mcpServers.length)+" servers · "+T(n.store.totalTools)+" tools ",1)])])])):G("",!0),d("div",cm,[n.store.isMobile?(w(),_("div",dm,[d("button",{class:"jada-hamburger",onClick:t[9]||(t[9]=g=>n.store.mobileSidebarOpen=!n.store.mobileSidebarOpen)},"☰"),d("span",um,T(a.viewTitle),1),d("div",{class:"jada-user-avatar small",onClick:t[10]||(t[10]=g=>n.actions.navigate("profile"))},T(a.userInitials),1)])):G("",!0),n.store.currentView==="chat"?(w(),Ke(r,{key:1})):n.store.currentView==="workspaces"?(w(),Ke(i,{key:2})):n.store.currentView==="workspace-detail"?(w(),Ke(c,{key:3})):n.store.currentView==="document-editor"?(w(),Ke(u,{key:4})):n.store.currentView==="tool-explorer"?(w(),Ke(l,{key:5})):n.store.currentView==="search"?(w(),Ke(p,{key:6})):n.store.currentView==="settings"?(w(),Ke(v,{key:7})):n.store.currentView==="profile"?(w(),Ke(R,{key:8})):G("",!0)]),!n.store.isMobile&&n.store.currentView==="chat"&&n.store.rightPanelOpen?(w(),Ke(x,{key:1})):G("",!0),n.store.isMobile&&n.store.mobileSidebarOpen?(w(),_("div",{key:2,class:"jada-overlay",onClick:t[11]||(t[11]=g=>n.store.mobileSidebarOpen=!1)})):G("",!0)],2)}const pm=Ye(Bg,[["render",fm],["__scopeId","data-v-8cc98c50"]]),yo=document.getElementById("jada-agent-app");yo&&(yo.style.cssText="width:100%!important;flex:1 1 100%!important;min-width:0;height:calc(100vh - 50px);margin:0;padding:0;background:#0d0d14;",ed(pm).mount(yo))})(); diff --git a/lib/Controller/AgentController.php b/lib/Controller/AgentController.php index 63586cf..3354fce 100644 --- a/lib/Controller/AgentController.php +++ b/lib/Controller/AgentController.php @@ -12,13 +12,11 @@ use OCP\IUserSession; /** - * Thin proxy controller for Hermes backend. + * Thin proxy controller for LibreChat backend. * - * Hermes is the authoritative owner of conversation state, user scoping, - * tool call tracking, and session management. PHP's only job is to: - * 1. Verify Nextcloud authentication (handled by the framework) - * 2. Forward the user's identity via X-Nextcloud-User / X-Nextcloud-Name - * 3. Pipe the request/response through without transformation + * Uses two auth modes: + * - API key auth for Agents API (chat completions, models) + * - JWT auth for internal APIs (conversations, messages, search, tags, etc.) */ class AgentController extends Controller { private OpenClawService $openClaw; @@ -35,10 +33,6 @@ public function __construct( $this->userSession = $userSession; } - /** - * Get the current Nextcloud user identity headers. - * These are sent to Hermes so it can scope everything to the user. - */ private function getUserHeaders(): array { $user = $this->userSession->getUser(); $uid = $user ? $user->getUID() : 'anonymous'; @@ -49,19 +43,20 @@ private function getUserHeaders(): array { ]; } + // ─── Health ────────────────────────────────────────────────────────── + /** * @NoAdminRequired - * - * Health check — queries Hermes Agent /v1/models to verify it's alive. */ public function health(): JSONResponse { - $result = $this->openClaw->get('/v1/models', $this->getUserHeaders()); + $apiPath = $this->openClaw->getApiPath(); + $result = $this->openClaw->get($apiPath . '/models', $this->getUserHeaders()); $models = $result['data'] ?? []; - $isOk = !isset($result['error']); + $isOk = !isset($result['error']) && count($models) > 0; + + $agentName = $models[0]['name'] ?? 'Jada'; + $provider = $models[0]['provider'] ?? 'Gemini'; - // Hermes Agent manages MCP servers internally via config.yaml. - // Report the configured servers so the UI can display tool/server counts. - // Active MCP servers (composio and proton-unified disabled for perf) $mcpServers = [ 'nextcloud' => ['tools' => 118, 'status' => 'connected'], ]; @@ -69,26 +64,22 @@ public function health(): JSONResponse { return new JSONResponse([ 'ok' => $isOk, 'status' => $isOk ? 'ok' : 'error', - 'engine' => 'hermes-agent', - 'model_name' => 'Gemini 2.5 Flash', + 'engine' => 'librechat', + 'model_name' => $provider . ' (via LibreChat)', 'models' => count($models), 'servers' => $mcpServers, 'tool_count' => 118, ]); } - /** - * @NoAdminRequired - */ + /** @NoAdminRequired */ public function healthDetail(): JSONResponse { return $this->health(); } - /** - * @NoAdminRequired - * - * Non-streaming chat fallback via Hermes Agent OpenAI-compatible API. - */ + // ─── Chat ──────────────────────────────────────────────────────────── + + /** @NoAdminRequired */ public function chat(): JSONResponse { $message = $this->request->getParam('message', ''); $messages = $this->request->getParam('messages', null); @@ -97,8 +88,9 @@ public function chat(): JSONResponse { ? $this->sanitizeMessages($messages) : [['role' => 'user', 'content' => $message]]; - $result = $this->openClaw->post('/v1/chat/completions', [ - 'model' => 'hermes-agent', + $apiPath = $this->openClaw->getApiPath(); + $result = $this->openClaw->post($apiPath . '/chat/completions', [ + 'model' => 'agent_jada_nextcloud', 'messages' => $chatMessages, 'stream' => false, ], $this->getUserHeaders()); @@ -108,8 +100,6 @@ public function chat(): JSONResponse { $response = $result['choices'][0]['message']['content']; } elseif (isset($result['error'])) { $response = 'Error: ' . ($result['error']['message'] ?? json_encode($result['error'])); - } elseif (isset($result['raw'])) { - $response = $result['raw']; } return new JSONResponse([ @@ -119,21 +109,16 @@ public function chat(): JSONResponse { ]); } - /** - * @NoAdminRequired - * - * SSE passthrough to Hermes Agent OpenAI-compatible streaming API. - * Hermes handles context management, tool execution, and compression natively. - */ + /** @NoAdminRequired */ public function chatSSE(): void { $message = $this->request->getParam('message', ''); $messages = $this->request->getParam('messages', null); + $conversationId = $this->request->getParam('conversationId', null); $chatMessages = (is_array($messages) && count($messages) > 0) ? $this->sanitizeMessages($messages) : [['role' => 'user', 'content' => $message]]; - // Disable output buffering for real-time streaming while (ob_get_level()) { ob_end_clean(); } @@ -144,15 +129,20 @@ public function chatSSE(): void { header('Connection: keep-alive'); header('X-Accel-Buffering: no'); - $url = $this->openClaw->getBaseUrl() . '/v1/chat/completions'; + $apiPath = $this->openClaw->getApiPath(); + $url = $this->openClaw->getBaseUrl() . $apiPath . '/chat/completions'; $token = $this->openClaw->getApiToken(); $userHeaders = $this->getUserHeaders(); - $payload = json_encode([ - 'model' => 'hermes-agent', + $payloadData = [ + 'model' => 'agent_jada_nextcloud', 'messages' => $chatMessages, 'stream' => true, - ]); + ]; + if ($conversationId !== null) { + $payloadData['conversationId'] = $conversationId; + } + $payload = json_encode($payloadData); $ch = curl_init(); curl_setopt_array($ch, [ @@ -189,84 +179,272 @@ public function chatSSE(): void { exit; } - /** - * @NoAdminRequired - * - * List conversations — served from localStorage on the frontend now. - * Returns empty array since Hermes Agent manages sessions internally. - */ + // ─── Conversations (LibreChat /api/convos) ─────────────────────────── + + /** @NoAdminRequired */ public function getConversations(): JSONResponse { - return new JSONResponse(['conversations' => []]); + $limit = (int) $this->request->getParam('limit', '25'); + $cursor = $this->request->getParam('cursor', ''); + $isArchived = $this->request->getParam('isArchived', ''); + $tags = $this->request->getParam('tags', ''); + $search = $this->request->getParam('search', ''); + $sortBy = $this->request->getParam('sortBy', 'updatedAt'); + $sortDirection = $this->request->getParam('sortDirection', 'desc'); + + $params = http_build_query(array_filter([ + 'limit' => $limit, + 'cursor' => $cursor, + 'isArchived' => $isArchived, + 'tags' => $tags, + 'search' => $search, + 'sortBy' => $sortBy, + 'sortDirection' => $sortDirection, + ], fn($v) => $v !== '' && $v !== 0)); + + $result = $this->openClaw->jwtGet('/api/convos?' . $params); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ + /** @NoAdminRequired */ public function getConversation(string $id): JSONResponse { - return new JSONResponse(['messages' => [], 'toolCalls' => []]); + $result = $this->openClaw->jwtGet('/api/convos/' . urlencode($id)); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ - public function getConversationToolCalls(string $id): JSONResponse { - return new JSONResponse(['toolCalls' => []]); + /** @NoAdminRequired */ + public function deleteConversation(string $id): JSONResponse { + $result = $this->openClaw->jwtPost('/api/convos/clear', [ + 'arg' => ['conversationId' => $id], + ]); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ - public function getRecentToolCalls(): JSONResponse { - return new JSONResponse(['toolCalls' => []]); + /** @NoAdminRequired */ + public function updateConversation(): JSONResponse { + $conversationId = $this->request->getParam('conversationId', ''); + $title = $this->request->getParam('title', ''); + $result = $this->openClaw->jwtPost('/api/convos/update', [ + 'arg' => ['conversationId' => $conversationId, 'title' => $title], + ]); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ - public function deleteConversation(string $id): JSONResponse { - return new JSONResponse(['deleted' => true]); + /** @NoAdminRequired */ + public function archiveConversation(): JSONResponse { + $conversationId = $this->request->getParam('conversationId', ''); + $isArchived = $this->request->getParam('isArchived', true); + $result = $this->openClaw->jwtPost('/api/convos/archive', [ + 'arg' => ['conversationId' => $conversationId, 'isArchived' => $isArchived], + ]); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ - public function reconnect(): JSONResponse { - // Hermes Agent handles MCP reconnection internally - return new JSONResponse(['status' => 'ok']); + /** @NoAdminRequired */ + public function genTitle(string $id): JSONResponse { + $result = $this->openClaw->jwtGet('/api/convos/gen_title/' . urlencode($id)); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ - public function getSkills(): JSONResponse { - return new JSONResponse($this->openClaw->get('/api/v1/skills', $this->getUserHeaders())); + // ─── Messages (LibreChat /api/messages) ────────────────────────────── + + /** @NoAdminRequired */ + public function getMessages(): JSONResponse { + $conversationId = $this->request->getParam('conversationId', ''); + $search = $this->request->getParam('search', ''); + $cursor = $this->request->getParam('cursor', ''); + $pageSize = $this->request->getParam('pageSize', '25'); + $sortBy = $this->request->getParam('sortBy', 'createdAt'); + $sortDirection = $this->request->getParam('sortDirection', 'asc'); + + $params = http_build_query(array_filter([ + 'conversationId' => $conversationId, + 'search' => $search, + 'cursor' => $cursor, + 'pageSize' => $pageSize, + 'sortBy' => $sortBy, + 'sortDirection' => $sortDirection, + ], fn($v) => $v !== '')); + + $result = $this->openClaw->jwtGet('/api/messages?' . $params); + return new JSONResponse($result); } - /** - * @NoAdminRequired - */ + /** @NoAdminRequired */ + public function getConversationMessages(string $id): JSONResponse { + $result = $this->openClaw->jwtGet('/api/messages/' . urlencode($id)); + return new JSONResponse($result); + } + + // ─── Search (via /api/messages?search=) ────────────────────────────── + + /** @NoAdminRequired */ + public function searchMessages(): JSONResponse { + $query = $this->request->getParam('q', ''); + $cursor = $this->request->getParam('cursor', ''); + $pageSize = $this->request->getParam('pageSize', '25'); + + $params = http_build_query(array_filter([ + 'search' => $query, + 'cursor' => $cursor, + 'pageSize' => $pageSize, + ], fn($v) => $v !== '')); + + $result = $this->openClaw->jwtGet('/api/messages?' . $params); + return new JSONResponse($result); + } + + // ─── Tags (LibreChat /api/tags) ────────────────────────────────────── + + /** @NoAdminRequired */ + public function getTags(): JSONResponse { + $result = $this->openClaw->jwtGet('/api/tags'); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function addTag(): JSONResponse { + $conversationId = $this->request->getParam('conversationId', ''); + $tag = $this->request->getParam('tag', ''); + $result = $this->openClaw->jwtPost('/api/tags', [ + 'conversationId' => $conversationId, + 'tag' => $tag, + ]); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function removeTag(): JSONResponse { + $conversationId = $this->request->getParam('conversationId', ''); + $tag = $this->request->getParam('tag', ''); + $result = $this->openClaw->jwtDelete('/api/tags?' . http_build_query([ + 'conversationId' => $conversationId, + 'tag' => $tag, + ])); + return new JSONResponse($result); + } + + // ─── Sharing (LibreChat /api/share) ────────────────────────────────── + + /** @NoAdminRequired */ + public function getSharedLinks(): JSONResponse { + $result = $this->openClaw->jwtGet('/api/share'); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function createShareLink(): JSONResponse { + $conversationId = $this->request->getParam('conversationId', ''); + $result = $this->openClaw->jwtPost('/api/share', [ + 'conversationId' => $conversationId, + ]); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function deleteShareLink(string $id): JSONResponse { + $result = $this->openClaw->jwtDelete('/api/share/' . urlencode($id)); + return new JSONResponse($result); + } + + // ─── Memories (LibreChat /api/memories) ────────────────────────────── + + /** @NoAdminRequired */ + public function getMemories(): JSONResponse { + $result = $this->openClaw->jwtGet('/api/memories'); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function deleteMemory(string $id): JSONResponse { + $result = $this->openClaw->jwtDelete('/api/memories/' . urlencode($id)); + return new JSONResponse($result); + } + + // ─── Presets (LibreChat /api/presets) ───────────────────────────────── + + /** @NoAdminRequired */ + public function getPresets(): JSONResponse { + $result = $this->openClaw->jwtGet('/api/presets'); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function createPreset(): JSONResponse { + $data = json_decode(file_get_contents('php://input'), true) ?? []; + $result = $this->openClaw->jwtPost('/api/presets', $data); + return new JSONResponse($result); + } + + /** @NoAdminRequired */ + public function deletePreset(string $id): JSONResponse { + $result = $this->openClaw->jwtPost('/api/presets/delete', [ + 'arg' => ['_id' => $id], + ]); + return new JSONResponse($result); + } + + // ─── Models & Skills ───────────────────────────────────────────────── + + /** @NoAdminRequired */ public function getModels(): JSONResponse { - return new JSONResponse($this->openClaw->get('/api/v1/models', $this->getUserHeaders())); + $apiPath = $this->openClaw->getApiPath(); + return new JSONResponse($this->openClaw->get($apiPath . '/models', $this->getUserHeaders())); } - /** - * Admin only — returns config which may contain sensitive data. - */ + /** @NoAdminRequired */ + public function getSkills(): JSONResponse { + return new JSONResponse(['skills' => []]); + } + + /** Admin only */ public function getConfig(): JSONResponse { - return new JSONResponse($this->openClaw->get('/api/v1/config', $this->getUserHeaders())); + return new JSONResponse(['engine' => 'librechat', 'message' => 'Configuration managed via LibreChat admin UI']); } - /** - * Admin only — returns session data. - */ + /** Admin only */ public function getSessions(): JSONResponse { - return new JSONResponse($this->openClaw->get('/api/v1/sessions', $this->getUserHeaders())); + return new JSONResponse(['sessions' => []]); } - /** - * Sanitize a client-supplied messages array: only allow 'user' and 'assistant' - * roles and strip anything else to prevent prompt injection. - */ + /** @NoAdminRequired */ + public function reconnect(): JSONResponse { + return new JSONResponse(['status' => 'ok']); + } + + // ─── Tool Calls (from conversation messages) ───────────────────────── + + /** @NoAdminRequired */ + public function getConversationToolCalls(string $id): JSONResponse { + // Tool calls are embedded in messages — extract them + $messages = $this->openClaw->jwtGet('/api/messages/' . urlencode($id)); + $toolCalls = []; + if (is_array($messages)) { + foreach ($messages as $msg) { + if (!is_array($msg)) continue; + $content = $msg['content'] ?? []; + if (is_array($content)) { + foreach ($content as $part) { + if (is_array($part) && ($part['type'] ?? '') === 'tool_call') { + $toolCalls[] = [ + 'name' => $part['name'] ?? 'unknown', + 'status' => ($part['error'] ?? false) ? 'error' : 'success', + 'timestamp' => $msg['createdAt'] ?? null, + ]; + } + } + } + } + } + return new JSONResponse(['toolCalls' => $toolCalls]); + } + + /** @NoAdminRequired */ + public function getRecentToolCalls(): JSONResponse { + return new JSONResponse(['toolCalls' => []]); + } + + // ─── Helpers ───────────────────────────────────────────────────────── + private function sanitizeMessages(array $messages): array { $allowed = ['user', 'assistant']; $clean = []; diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php index 0e8e5e4..ebaa5a5 100644 --- a/lib/Controller/SettingsController.php +++ b/lib/Controller/SettingsController.php @@ -8,17 +8,21 @@ use OCP\AppFramework\Http\JSONResponse; use OCP\IConfig; use OCP\IRequest; +use OCP\Security\ICredentialsManager; class SettingsController extends Controller { private IConfig $config; + private ICredentialsManager $credentials; public function __construct( string $appName, IRequest $request, - IConfig $config + IConfig $config, + ICredentialsManager $credentials ) { parent::__construct($appName, $request); $this->config = $config; + $this->credentials = $credentials; } /** @@ -26,8 +30,10 @@ public function __construct( */ public function getSettings(): JSONResponse { return new JSONResponse([ - 'openclaw_url' => $this->config->getAppValue('jadaagent', 'openclaw_url', 'http://localhost:18789'), + 'openclaw_url' => $this->config->getAppValue('jadaagent', 'openclaw_url', 'http://LibreChat:3080'), 'openclaw_token' => $this->config->getAppValue('jadaagent', 'openclaw_token', '') ? '••••••••' : '', + 'librechat_service_email' => $this->config->getAppValue('jadaagent', 'librechat_service_email', 'jada@nextcloud.local'), + 'librechat_service_password' => ($this->credentials->retrieve('', 'jadaagent/librechat_service_password') || $this->config->getAppValue('jadaagent', 'librechat_service_password', '')) ? '••••••••' : '', ]); } @@ -71,6 +77,23 @@ public function saveSettings(): JSONResponse { $this->config->deleteAppValue('jadaagent', 'openclaw_token'); } + // LibreChat service account credentials + $serviceEmail = $this->request->getParam('librechat_service_email', ''); + $servicePassword = $this->request->getParam('librechat_service_password', ''); + + if ($serviceEmail !== '' && $serviceEmail !== '••••••••') { + $this->config->setAppValue('jadaagent', 'librechat_service_email', $serviceEmail); + } + if ($servicePassword !== '' && $servicePassword !== '••••••••') { + // Store securely via ICredentialsManager (encrypted at rest) + $this->credentials->store('', 'jadaagent/librechat_service_password', $servicePassword); + // Remove any legacy plaintext copy + $this->config->deleteAppValue('jadaagent', 'librechat_service_password'); + // Clear cached JWT so next request re-authenticates with new credentials + $this->config->deleteAppValue('jadaagent', 'librechat_jwt'); + $this->config->deleteAppValue('jadaagent', 'librechat_jwt_at'); + } + return new JSONResponse(['status' => 'ok']); } } diff --git a/lib/Service/OpenClawService.php b/lib/Service/OpenClawService.php index c65ae06..6ea4a99 100644 --- a/lib/Service/OpenClawService.php +++ b/lib/Service/OpenClawService.php @@ -5,23 +5,33 @@ namespace OCA\JadaAgent\Service; use OCP\IConfig; +use OCP\Security\ICredentialsManager; use Psr\Log\LoggerInterface; /** - * HTTP client for communicating with the Hermes backend. + * HTTP client for communicating with the LibreChat backend. * - * This is a thin transport layer — all business logic lives in Hermes. - * Extra headers (like X-Nextcloud-User) are forwarded to every request - * so Hermes can scope operations to the authenticated user. + * Supports two auth modes: + * - API key (Bearer token) for the Agents API (/api/agents/v1/*) + * - JWT (session token) for internal APIs (/api/convos, /api/messages, etc.) + * + * JWT tokens are obtained via /api/auth/login and cached in Nextcloud's + * app config with a TTL. They auto-refresh when expired. */ class OpenClawService { - private const DEFAULT_URL = 'http://localhost:18789'; + private const DEFAULT_URL = 'http://LibreChat:3080'; + private const DEFAULT_API_PATH = '/api/agents/v1'; + private const JWT_TTL_SECONDS = 840; // 14 minutes (JWT expires in 15) + private const DEFAULT_SERVICE_EMAIL = 'jada@nextcloud.local'; private IConfig $config; + private ICredentialsManager $credentials; private LoggerInterface $logger; + private ?string $jwtCache = null; - public function __construct(IConfig $config, LoggerInterface $logger) { + public function __construct(IConfig $config, ICredentialsManager $credentials, LoggerInterface $logger) { $this->config = $config; + $this->credentials = $credentials; $this->logger = $logger; } @@ -37,26 +47,90 @@ public function getApiToken(): string { } /** - * Make a GET request. + * Get the LibreChat OpenAI-compatible API base path. + */ + public function getApiPath(): string { + return self::DEFAULT_API_PATH; + } + + /** + * Get a valid JWT token for LibreChat's internal APIs. + * Caches the token in Nextcloud app config with TTL. + */ + public function getJwtToken(): string { + // Check in-memory cache first + if ($this->jwtCache !== null) { + return $this->jwtCache; + } + + // Check persisted cache + $cached = $this->config->getAppValue('jadaagent', 'librechat_jwt', ''); + $cachedAt = (int) $this->config->getAppValue('jadaagent', 'librechat_jwt_at', '0'); + if ($cached !== '' && (time() - $cachedAt) < self::JWT_TTL_SECONDS) { + $this->jwtCache = $cached; + return $cached; + } + + // Login to get fresh token + $token = $this->loginForJwt(); + if ($token !== '') { + $this->jwtCache = $token; + $this->config->setAppValue('jadaagent', 'librechat_jwt', $token); + $this->config->setAppValue('jadaagent', 'librechat_jwt_at', (string) time()); + } + + return $token; + } + + /** + * Make a GET request using API key auth. */ public function get(string $path, array $extraHeaders = []): array { return $this->request('GET', $path, null, $extraHeaders); } /** - * Make a POST request. + * Make a POST request using API key auth. */ public function post(string $path, array $data = [], array $extraHeaders = []): array { return $this->request('POST', $path, $data, $extraHeaders); } /** - * Make a DELETE request. + * Make a DELETE request using API key auth. */ public function delete(string $path, array $extraHeaders = []): array { return $this->request('DELETE', $path, null, $extraHeaders); } + /** + * Make a GET request using JWT auth (for internal LibreChat APIs). + */ + public function jwtGet(string $path, array $extraHeaders = []): array { + return $this->request('GET', $path, null, $extraHeaders, true); + } + + /** + * Make a POST request using JWT auth. + */ + public function jwtPost(string $path, array $data = [], array $extraHeaders = []): array { + return $this->request('POST', $path, $data, $extraHeaders, true); + } + + /** + * Make a DELETE request using JWT auth. + */ + public function jwtDelete(string $path, array $extraHeaders = []): array { + return $this->request('DELETE', $path, null, $extraHeaders, true); + } + + /** + * Make a PUT request using JWT auth. + */ + public function jwtPut(string $path, array $data = [], array $extraHeaders = []): array { + return $this->request('PUT', $path, $data, $extraHeaders, true); + } + /** * Check if the backend is reachable and healthy. */ @@ -69,13 +143,73 @@ public function isHealthy(): bool { } } + /** + * Login to LibreChat and obtain a JWT token. + * Credentials are read from Nextcloud app config (set via admin settings). + */ + private function loginForJwt(): string { + $email = $this->config->getAppValue('jadaagent', 'librechat_service_email', self::DEFAULT_SERVICE_EMAIL); + $password = $this->credentials->retrieve('', 'jadaagent/librechat_service_password'); + if ($password === null || $password === '') { + // Fallback: migrate from plaintext appconfig if present + $legacy = $this->config->getAppValue('jadaagent', 'librechat_service_password', ''); + if ($legacy !== '') { + $password = $legacy; + // Migrate to secure storage and remove plaintext + $this->credentials->store('', 'jadaagent/librechat_service_password', $legacy); + $this->config->deleteAppValue('jadaagent', 'librechat_service_password'); + } + } + $password = (string) $password; + if ($password === '') { + $this->logger->error('LibreChat service password not configured — set it in Jada Agent admin settings'); + return ''; + } + + $url = $this->getBaseUrl() . '/api/auth/login'; + $payload = json_encode([ + 'email' => $email, + 'password' => $password, + ]); + + $ch = curl_init(); + curl_setopt_array($ch, [ + CURLOPT_URL => $url, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_TIMEOUT => 10, + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $payload, + CURLOPT_HTTPHEADER => [ + 'Content-Type: application/json', + 'Accept: application/json', + ], + CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, + ]); + + $response = curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + + if ($response === false || $httpCode !== 200) { + $this->logger->error('LibreChat JWT login failed', [ + 'httpCode' => $httpCode, + 'response' => substr((string) $response, 0, 200), + ]); + return ''; + } + + $decoded = json_decode($response, true); + return $decoded['token'] ?? ''; + } + /** * Internal HTTP request method using curl. - * Forwards auth token + any extra headers (e.g. user identity) to Hermes. + * + * @param bool $useJwt If true, use JWT auth instead of API key auth. */ - private function request(string $method, string $path, ?array $data = null, array $extraHeaders = []): array { + private function request(string $method, string $path, ?array $data = null, array $extraHeaders = [], bool $useJwt = false): array { $url = $this->getBaseUrl() . $path; - $token = $this->getApiToken(); + $token = $useJwt ? $this->getJwtToken() : $this->getApiToken(); $headers = array_filter([ 'Content-Type: application/json', @@ -83,7 +217,6 @@ private function request(string $method, string $path, ?array $data = null, arra $token ? 'Authorization: Bearer ' . $token : null, ]); - // Append extra headers (e.g. X-Nextcloud-User, X-Nextcloud-Name) foreach ($extraHeaders as $name => $value) { $headers[] = $name . ': ' . $value; } @@ -105,6 +238,11 @@ private function request(string $method, string $path, ?array $data = null, arra } } elseif ($method === 'DELETE') { $opts[CURLOPT_CUSTOMREQUEST] = 'DELETE'; + } elseif ($method === 'PUT') { + $opts[CURLOPT_CUSTOMREQUEST] = 'PUT'; + if ($data !== null) { + $opts[CURLOPT_POSTFIELDS] = json_encode($data); + } } curl_setopt_array($ch, $opts); @@ -115,7 +253,7 @@ private function request(string $method, string $path, ?array $data = null, arra curl_close($ch); if ($response === false) { - $this->logger->error('Hermes request failed', [ + $this->logger->error('LibreChat request failed', [ 'url' => $url, 'method' => $method, 'error' => $error, @@ -123,13 +261,49 @@ private function request(string $method, string $path, ?array $data = null, arra return ['error' => 'Connection failed: ' . $error, 'status' => 0]; } + // Handle 401 with JWT — token may have expired, clear cache and retry once + if ($httpCode === 401 && $useJwt) { + $this->jwtCache = null; + $this->config->deleteAppValue('jadaagent', 'librechat_jwt'); + $this->config->deleteAppValue('jadaagent', 'librechat_jwt_at'); + // Retry with fresh JWT (getJwtToken() will re-login) + $freshToken = $this->getJwtToken(); + if ($freshToken === '') { + return ['error' => 'JWT re-authentication failed', 'status' => 401]; + } + // One-shot retry — don't recurse to avoid infinite loop + $authIndex = array_search('Authorization: Bearer ' . $token, $headers); + if ($authIndex !== false) { + $headers[$authIndex] = 'Authorization: Bearer ' . $freshToken; + } else { + $headers[] = 'Authorization: Bearer ' . $freshToken; + } + $ch2 = curl_init(); + $opts[CURLOPT_HTTPHEADER] = $headers; + curl_setopt_array($ch2, $opts); + $response = curl_exec($ch2); + $httpCode = curl_getinfo($ch2, CURLINFO_HTTP_CODE); + curl_close($ch2); + if ($response === false) { + return ['error' => 'JWT retry request failed', 'status' => 0]; + } + $decoded = json_decode($response, true); + if ($decoded === null) { + return ['error' => 'JWT retry failed', 'status' => $httpCode]; + } + if (is_array($decoded) && !array_is_list($decoded)) { + $decoded['_http_status'] = $httpCode; + } + return is_array($decoded) ? $decoded : ['raw' => $decoded, 'status' => $httpCode]; + } + $decoded = json_decode($response, true); if ($decoded === null && $httpCode >= 200 && $httpCode < 300) { return ['raw' => $response, 'status' => $httpCode]; } if ($decoded === null) { - return ['error' => 'Invalid response from Hermes', 'raw' => substr($response, 0, 500), 'status' => $httpCode]; + return ['error' => 'Invalid response from backend', 'raw' => substr($response, 0, 500), 'status' => $httpCode]; } if (is_array($decoded) && !array_is_list($decoded)) { diff --git a/lib/Settings/AdminSettings.php b/lib/Settings/AdminSettings.php index 5c67fcc..b5336d4 100644 --- a/lib/Settings/AdminSettings.php +++ b/lib/Settings/AdminSettings.php @@ -6,19 +6,24 @@ use OCP\AppFramework\Http\TemplateResponse; use OCP\IConfig; +use OCP\Security\ICredentialsManager; use OCP\Settings\ISettings; class AdminSettings implements ISettings { private IConfig $config; + private ICredentialsManager $credentials; - public function __construct(IConfig $config) { + public function __construct(IConfig $config, ICredentialsManager $credentials) { $this->config = $config; + $this->credentials = $credentials; } public function getForm(): TemplateResponse { $params = [ - 'openclaw_url' => $this->config->getAppValue('jadaagent', 'openclaw_url', 'http://localhost:18789'), + 'openclaw_url' => $this->config->getAppValue('jadaagent', 'openclaw_url', 'http://LibreChat:3080'), 'openclaw_token' => $this->config->getAppValue('jadaagent', 'openclaw_token', '') ? '••••••••' : '', + 'librechat_service_email' => $this->config->getAppValue('jadaagent', 'librechat_service_email', 'jada@nextcloud.local'), + 'librechat_service_password' => ($this->credentials->retrieve('', 'jadaagent/librechat_service_password') || $this->config->getAppValue('jadaagent', 'librechat_service_password', '')) ? '••••••••' : '', ]; return new TemplateResponse('jadaagent', 'admin', $params); } diff --git a/src/App.vue b/src/App.vue index 2ef9fe8..4c631da 100644 --- a/src/App.vue +++ b/src/App.vue @@ -66,19 +66,25 @@
- -
- 💬 -
-
{{ conv.title || conv.id }}
-
{{ conv.lastMessage || '' }}
+
Loading...
+
+ +
+ {{ conv.isArchived ? '🗃' : '💬' }} +
+
{{ conv.title || 'New Conversation' }}
+
{{ formatRelativeTime(conv.updatedAt) }}
+
+
+ Load more... +
@@ -169,10 +175,25 @@ export default { if (parts.length >= 2) return (parts[0][0] + parts[1][0]).toUpperCase() return name.substring(0, 2).toUpperCase() }, - filteredConversations() { - return store.conversations.filter(c => - !store.activeWorkspaceId || c.workspace === store.activeWorkspaceId || !c.workspace - ).slice(0, 20) + groupedConversations() { + const now = new Date() + const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()) + const yesterday = new Date(today - 86400000) + const weekAgo = new Date(today - 7 * 86400000) + + const groups = {} + for (const conv of store.conversations) { + const d = new Date(conv.updatedAt || conv.createdAt) + let label + if (d >= today) label = 'Today' + else if (d >= yesterday) label = 'Yesterday' + else if (d >= weekAgo) label = 'This Week' + else label = 'Older' + + if (!groups[label]) groups[label] = [] + groups[label].push(conv) + } + return groups }, viewTitle() { const titles = { @@ -201,8 +222,21 @@ export default { this.wsDropdownOpen = false }, openConversation(conv) { - store.activeConversationId = conv.id - store.currentView = 'chat' + actions.selectConversation(conv.id) + }, + formatRelativeTime(dateStr) { + if (!dateStr) return '' + const d = new Date(dateStr) + const now = new Date() + const diffMs = now - d + const diffMin = Math.floor(diffMs / 60000) + if (diffMin < 1) return 'just now' + if (diffMin < 60) return `${diffMin}m ago` + const diffHr = Math.floor(diffMin / 60) + if (diffHr < 24) return `${diffHr}h ago` + const diffDay = Math.floor(diffHr / 24) + if (diffDay < 7) return `${diffDay}d ago` + return d.toLocaleDateString([], { month: 'short', day: 'numeric' }) }, }, } @@ -454,15 +488,34 @@ export default { text-overflow: ellipsis; } -.jada-conv-preview { +.jada-conv-time { font-size: 11px; color: #555; white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; margin-top: 2px; } +.jada-conv-loading { + text-align: center; + padding: 16px; + font-size: 12px; + color: #555; +} + +.jada-conv-load-more { + text-align: center; + padding: 10px; + font-size: 12px; + color: #e94560; + cursor: pointer; + border-radius: 8px; + transition: background 0.15s; +} + +.jada-conv-load-more:hover { + background: rgba(233, 69, 96, 0.1); +} + /* ─── Sidebar footer ─── */ .jada-sidebar-footer { padding: 12px 16px; diff --git a/src/api.js b/src/api.js index 0f1afaa..bda08e4 100644 --- a/src/api.js +++ b/src/api.js @@ -4,6 +4,8 @@ import { generateUrl } from '@nextcloud/router' const baseUrl = generateUrl('/apps/jadaagent') export default { + // ─── Health ────────────────────────────────────────────────────────── + async getHealth() { const res = await axios.get(`${baseUrl}/api/health`) return res.data @@ -14,8 +16,9 @@ export default { return res.data }, + // ─── Chat ──────────────────────────────────────────────────────────── + async sendMessage(messages, conversationId = 'main') { - // Accept either a full messages array or a single string for backward compat const payload = Array.isArray(messages) ? { messages, conversation_id: conversationId } : { message: messages, conversation_id: conversationId } @@ -24,23 +27,27 @@ export default { }, /** - * Open an SSE stream to the Hermes Agent backend (OpenAI-compatible). + * Open an SSE stream to the LibreChat backend (OpenAI-compatible). * @param {Array} messages - Full conversation history [{role, content}, ...] + * @param {string} [conversationId] - Optional conversation ID for persistence * @returns {{ promise: Promise, cancel: Function }} */ - createSSEStream(messages) { + createSSEStream(messages, conversationId = null) { const url = `${baseUrl}/api/chat/sse` const csrfToken = document.querySelector('meta[name="requesttoken"]')?.content || window.OC?.requestToken || '' const controller = new AbortController() + const body = { messages } + if (conversationId) body.conversationId = conversationId + const promise = fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'requesttoken': csrfToken, }, - body: JSON.stringify({ messages }), + body: JSON.stringify(body), signal: controller.signal, }) @@ -50,8 +57,10 @@ export default { } }, - async getConversations() { - const res = await axios.get(`${baseUrl}/api/conversations`) + // ─── Conversations (server-side via LibreChat) ─────────────────────── + + async getConversations(params = {}) { + const res = await axios.get(`${baseUrl}/api/conversations`, { params }) return res.data }, @@ -60,6 +69,38 @@ export default { return res.data }, + async deleteConversation(id) { + const res = await axios.delete(`${baseUrl}/api/conversations/${encodeURIComponent(id)}`) + return res.data + }, + + async updateConversation(conversationId, title) { + const res = await axios.post(`${baseUrl}/api/conversations/update`, { conversationId, title }) + return res.data + }, + + async archiveConversation(conversationId, isArchived = true) { + const res = await axios.post(`${baseUrl}/api/conversations/archive`, { conversationId, isArchived }) + return res.data + }, + + async genTitle(conversationId) { + const res = await axios.get(`${baseUrl}/api/conversations/${encodeURIComponent(conversationId)}/gen-title`) + return res.data + }, + + // ─── Messages (server-side via LibreChat) ──────────────────────────── + + async getMessages(params = {}) { + const res = await axios.get(`${baseUrl}/api/messages`, { params }) + return res.data + }, + + async getConversationMessages(conversationId) { + const res = await axios.get(`${baseUrl}/api/messages/${encodeURIComponent(conversationId)}`) + return res.data + }, + async getConversationToolCalls(id) { const res = await axios.get(`${baseUrl}/api/conversations/${encodeURIComponent(id)}/toolcalls`) return res.data @@ -70,45 +111,80 @@ export default { return res.data }, - async deleteConversation(id) { - const res = await axios.delete(`${baseUrl}/api/conversations/${encodeURIComponent(id)}`) + // ─── Search ────────────────────────────────────────────────────────── + + async search(query, params = {}) { + const res = await axios.get(`${baseUrl}/api/search`, { params: { q: query, ...params } }) return res.data }, - async reconnectMcp(server = null) { - const res = await axios.post(`${baseUrl}/api/reconnect`, server ? { server } : {}) + // ─── Tags ──────────────────────────────────────────────────────────── + + async getTags() { + const res = await axios.get(`${baseUrl}/api/tags`) return res.data }, - // Workspace API - async getWorkspaces() { - const res = await axios.get(`${baseUrl}/api/workspaces`) + async addTag(conversationId, tag) { + const res = await axios.post(`${baseUrl}/api/tags`, { conversationId, tag }) return res.data }, - async getWorkspace(id) { - const res = await axios.get(`${baseUrl}/api/workspaces/${encodeURIComponent(id)}`) + async removeTag(conversationId, tag) { + const res = await axios.delete(`${baseUrl}/api/tags`, { data: { conversationId, tag } }) return res.data }, - async createWorkspace(data) { - const res = await axios.post(`${baseUrl}/api/workspaces`, data) + // ─── Sharing ───────────────────────────────────────────────────────── + + async getSharedLinks() { + const res = await axios.get(`${baseUrl}/api/share`) return res.data }, - async updateWorkspace(id, data) { - const res = await axios.put(`${baseUrl}/api/workspaces/${encodeURIComponent(id)}`, data) + async createShareLink(conversationId) { + const res = await axios.post(`${baseUrl}/api/share`, { conversationId }) return res.data }, - async deleteWorkspace(id) { - const res = await axios.delete(`${baseUrl}/api/workspaces/${encodeURIComponent(id)}`) + async deleteShareLink(id) { + const res = await axios.delete(`${baseUrl}/api/share/${encodeURIComponent(id)}`) return res.data }, - // User profile - async getUserProfile() { - const res = await axios.get(`${baseUrl}/api/profile`) + // ─── Memories ──────────────────────────────────────────────────────── + + async getMemories() { + const res = await axios.get(`${baseUrl}/api/memories`) + return res.data + }, + + async deleteMemory(id) { + const res = await axios.delete(`${baseUrl}/api/memories/${encodeURIComponent(id)}`) + return res.data + }, + + // ─── Presets ───────────────────────────────────────────────────────── + + async getPresets() { + const res = await axios.get(`${baseUrl}/api/presets`) + return res.data + }, + + async createPreset(data) { + const res = await axios.post(`${baseUrl}/api/presets`, data) + return res.data + }, + + async deletePreset(id) { + const res = await axios.delete(`${baseUrl}/api/presets/${encodeURIComponent(id)}`) + return res.data + }, + + // ─── MCP / Legacy ──────────────────────────────────────────────────── + + async reconnectMcp(server = null) { + const res = await axios.post(`${baseUrl}/api/reconnect`, server ? { server } : {}) return res.data }, @@ -127,6 +203,40 @@ export default { return res.data }, + // ─── Workspaces ────────────────────────────────────────────────────── + + async getWorkspaces() { + const res = await axios.get(`${baseUrl}/api/workspaces`) + return res.data + }, + + async getWorkspace(id) { + const res = await axios.get(`${baseUrl}/api/workspaces/${encodeURIComponent(id)}`) + return res.data + }, + + async createWorkspace(data) { + const res = await axios.post(`${baseUrl}/api/workspaces`, data) + return res.data + }, + + async updateWorkspace(id, data) { + const res = await axios.put(`${baseUrl}/api/workspaces/${encodeURIComponent(id)}`, data) + return res.data + }, + + async deleteWorkspace(id) { + const res = await axios.delete(`${baseUrl}/api/workspaces/${encodeURIComponent(id)}`) + return res.data + }, + + // ─── User ──────────────────────────────────────────────────────────── + + async getUserProfile() { + const res = await axios.get(`${baseUrl}/api/profile`) + return res.data + }, + async getSettings() { const res = await axios.get(`${baseUrl}/api/settings`) return res.data diff --git a/src/components/ChatView.vue b/src/components/ChatView.vue index e4a4f34..b0a0e34 100644 --- a/src/components/ChatView.vue +++ b/src/components/ChatView.vue @@ -39,7 +39,7 @@
- {{ formatTime(msg.timestamp) }} + {{ formatTime(msg.timestamp || msg.createdAt) }} · {{ msg.toolCalls.length }} tool call{{ msg.toolCalls.length > 1 ? 's' : '' }}
@@ -109,13 +109,14 @@ export default { streamingText: '', streamingToolCalls: [], currentCancel: null, + skipNextWatcherLoad: false, suggestions: [ 'List my Nextcloud files', 'Check my calendar', - 'Show my Proton Drive stats', - 'List my Beeper chats', + 'Show my contacts', 'What tools do you have?', 'Check system status', + 'Search my documents', ], } }, @@ -134,25 +135,42 @@ export default { }, }, watch: { - 'store.activeConversationId'() { - // Don't reload while actively sending — startNewChat() triggers this - // watcher mid-send, and loadFromLocalStorage() would wipe the - // just-added user message for brand-new conversations. + 'store.activeConversationId'(newId) { + if (this.skipNextWatcherLoad) { + this.skipNextWatcherLoad = false + return + } if (!this.loading) { - this.loadConversation() + if (newId) { + this.loadServerMessages(newId) + } else { + this.messages = [] + } } }, }, mounted() { if (store.activeConversationId) { - this.loadConversation() + this.loadServerMessages(store.activeConversationId) } }, methods: { - loadConversation() { - if (!store.activeConversationId) return - // Load from localStorage (Hermes Agent doesn't serve conversation history) - this.loadFromLocalStorage(store.activeConversationId) + async loadServerMessages(conversationId) { + if (!conversationId) return + this.messages = [] + try { + const serverMessages = await api.getConversationMessages(conversationId) + if (Array.isArray(serverMessages)) { + this.messages = serverMessages.map(m => ({ + role: m.isCreatedByUser ? 'user' : 'assistant', + content: typeof m.text === 'string' ? m.text : (m.content || ''), + timestamp: m.createdAt, + messageId: m.messageId, + })) + } + } catch (e) { + console.error('Failed to load messages from server:', e) + } }, async handleSend(text) { @@ -163,27 +181,22 @@ export default { this.messages.push({ role: 'user', content: message, - timestamp: new Date(), + timestamp: new Date().toISOString(), }) this.scrollToBottom() this.loading = true this.streamingText = '' this.streamingToolCalls = [] - if (!store.activeConversationId) { - actions.startNewChat() - } - // Capture conversation ID now — the user may switch conversations - // during streaming, and we must persist under the original ID. - const conversationId = store.activeConversationId + // For new conversations, don't set an ID yet — LibreChat will create one + const conversationId = store.activeConversationId || null try { - // Build full message history for Hermes Agent (OpenAI format) const allMessages = this.messages.map(m => ({ role: m.role, content: m.content, })) - const { promise, cancel } = api.createSSEStream(allMessages) + const { promise, cancel } = api.createSSEStream(allMessages, conversationId) this.currentCancel = cancel const response = await promise @@ -196,6 +209,7 @@ export default { let buffer = '' let fullText = '' const toolCalls = [] + let newConversationId = null let currentEvent = '' while (true) { @@ -207,7 +221,6 @@ export default { buffer = lines.pop() || '' for (const line of lines) { - // Track SSE event type (Hermes sends "event: hermes.tool.progress") if (line.startsWith('event: ')) { currentEvent = line.slice(7).trim() continue @@ -219,7 +232,12 @@ export default { try { const parsed = JSON.parse(data) - // Hermes tool progress events + // Extract conversation ID from response if present + if (parsed.conversationId && !newConversationId) { + newConversationId = parsed.conversationId + } + + // Legacy Hermes tool progress events if (currentEvent === 'hermes.tool.progress' && parsed.tool) { const toolName = parsed.tool toolCalls.push({ name: toolName, status: 'running', result: null }) @@ -230,26 +248,38 @@ export default { } currentEvent = '' - // OpenAI chat completions streaming format (Hermes Agent) + // OpenAI chat completions streaming format const delta = parsed.choices?.[0]?.delta + + if (delta?.tool_calls) { + for (const tc of delta.tool_calls) { + const rawName = tc.function?.name + if (!rawName) continue + const displayName = rawName.replace(/_mcp_.+$/, '') + const callId = tc.id || rawName + if (!toolCalls.find(t => t.callId === callId)) { + toolCalls.push({ name: displayName, callId, status: 'running', result: null }) + actions.addToolCall({ name: displayName, status: 'running', timestamp: new Date() }) + } + } + this.streamingToolCalls = [...toolCalls] + } + if (delta?.content) { fullText += delta.content this.streamingText = fullText } - // Check for finish_reason to mark tools as complete - // (outside delta check — final chunk may lack delta field) + if (parsed.choices?.[0]?.finish_reason === 'stop') { toolCalls.forEach(tc => { if (tc.status === 'running') tc.status = 'success' }) this.streamingToolCalls = [...toolCalls] - // Also update right panel store entries store.recentToolCalls.forEach(tc => { if (tc.status === 'running') tc.status = 'success' }) } } catch { - // Ignore unparseable lines currentEvent = '' } } @@ -260,69 +290,56 @@ export default { this.messages.push({ role: 'assistant', content: fullText || this.streamingText || '(No response)', - timestamp: new Date(), + timestamp: new Date().toISOString(), toolCalls: toolCalls.length > 0 ? toolCalls : undefined, }) - // Save conversation to localStorage AFTER assistant message is added - this.saveToLocalStorage(conversationId) - } catch (err) { - if (err.name === 'AbortError') { - this.saveToLocalStorage(conversationId) - return + + // If LibreChat created a new conversation, track it + if (newConversationId) { + this.skipNextWatcherLoad = true + store.activeConversationId = newConversationId } - // Fallback to non-streaming — send full history for context + } catch (err) { + if (err.name === 'AbortError') return try { const allMessages = this.messages.map(m => ({ role: m.role, content: m.content })) const result = await api.sendMessage(allMessages, conversationId) this.messages.push({ role: 'assistant', content: result.response || result.message || JSON.stringify(result), - timestamp: new Date(), + timestamp: new Date().toISOString(), }) } catch (fallbackErr) { this.messages.push({ role: 'assistant', content: 'Error: ' + (fallbackErr.response?.data?.error || fallbackErr.message || 'Failed to reach agent'), - timestamp: new Date(), + timestamp: new Date().toISOString(), }) } - // Save conversation in error/fallback paths too - this.saveToLocalStorage(conversationId) } finally { this.loading = false this.streamingText = '' this.streamingToolCalls = [] this.currentCancel = null this.scrollToBottom() - // Refresh conversation list in sidebar + // Refresh conversation list from server actions.loadConversations() - // Note: do NOT call loadRecentToolCalls() here — it fetches from - // the backend which returns an empty stub, wiping in-memory - // tool calls accumulated during streaming. } }, formatMessage(text) { if (!text) return '' - // Escape HTML let html = text .replace(/&/g, '&') .replace(//g, '>') - // Markdown: code blocks (``` ... ```) html = html.replace(/```(\w*)\n?([\s\S]*?)```/g, '
$2
') - // Markdown: inline code html = html.replace(/`([^`]+)`/g, '$1') - // Markdown: bold html = html.replace(/\*\*([^*]+)\*\*/g, '$1') - // Markdown: italic (single * or _) html = html.replace(/(?$1') - // Markdown: headings (## or ###) html = html.replace(/^### (.+)$/gm, '$1') html = html.replace(/^## (.+)$/gm, '$1') - // Markdown: unordered list items html = html.replace(/^- (.+)$/gm, '• $1') - // Newlines html = html.replace(/\n/g, '
') return html }, @@ -345,76 +362,6 @@ export default { el.style.height = 'auto' el.style.height = Math.min(el.scrollHeight, 120) + 'px' }, - - /** Get user-scoped localStorage key prefix to prevent cross-user data leaks */ - storagePrefix() { - const uid = store.userProfile?.uid || window.OC?.currentUser || 'default' - return `jada_${uid}` - }, - - /** Save current conversation to localStorage for persistence across reloads */ - saveToLocalStorage(conversationId) { - const convId = conversationId || store.activeConversationId - if (!convId) return - try { - const prefix = this.storagePrefix() - const convKey = `${prefix}_conv_${convId}` - const data = { - id: convId, - messages: this.messages, - updatedAt: new Date().toISOString(), - title: this.messages.find(m => m.role === 'user')?.content?.slice(0, 60) || 'New Chat', - } - localStorage.setItem(convKey, JSON.stringify(data)) - - // Update conversation list index - const indexKey = `${prefix}_conversations` - const index = JSON.parse(localStorage.getItem(indexKey) || '[]') - const existing = index.findIndex(c => c.id === data.id) - const entry = { id: data.id, title: data.title, updatedAt: data.updatedAt, workspace: store.activeWorkspaceId } - if (existing >= 0) { - index[existing] = entry - } else { - index.unshift(entry) - } - // Keep last 50 conversations, clean up orphaned data - if (index.length > 50) { - const removed = index.splice(50) - removed.forEach(c => { - try { localStorage.removeItem(`${prefix}_conv_${c.id}`) } catch {} - }) - } - localStorage.setItem(indexKey, JSON.stringify(index)) - - // Update store sidebar - store.conversations = index - } catch { - // localStorage full or unavailable — ignore - } - }, - - /** Load conversation from localStorage */ - loadFromLocalStorage(conversationId) { - const prefix = this.storagePrefix() - // Always clear messages first — the watcher's if(!this.loading) guard - // already prevents this from running during handleSend(), so clearing - // is safe here and necessary for "+ New Chat" to start fresh. - this.messages = [] - try { - // Try user-scoped key first, fall back to legacy unscoped key - const raw = localStorage.getItem(`${prefix}_conv_${conversationId}`) - || localStorage.getItem(`jada_conv_${conversationId}`) - const data = raw ? JSON.parse(raw) : null - if (data?.messages) { - this.messages = data.messages.map(m => ({ - ...m, - timestamp: m.timestamp ? new Date(m.timestamp) : new Date(), - })) - } - } catch { - // Corrupt data — ignore - } - }, }, beforeUnmount() { @@ -429,6 +376,7 @@ export default { flex-direction: column; height: 100%; min-height: 0; + overflow: hidden; } /* ─── Empty state ─── */ @@ -643,7 +591,9 @@ export default { /* ─── Input area ─── */ .jada-chat-input-area { padding: 12px 24px 16px; + padding-bottom: calc(16px + env(safe-area-inset-bottom, 0px)); border-top: 1px solid rgba(255,255,255,0.06); + flex-shrink: 0; } .jada-chat-input-row { @@ -712,4 +662,15 @@ export default { font-size: 11px; color: #444; } + +/* ─── Mobile ─── */ +@media (max-width: 768px) { + .jada-chat-input-area { + padding: 8px 12px 12px; + padding-bottom: calc(12px + env(safe-area-inset-bottom, 0px)); + } + .jada-chat-messages { + padding: 12px 12px; + } +} diff --git a/src/components/SearchView.vue b/src/components/SearchView.vue index 700e3ef..46777f5 100644 --- a/src/components/SearchView.vue +++ b/src/components/SearchView.vue @@ -8,42 +8,54 @@ +
-
{{ results.length }} results for "{{ query }}"
+
+ {{ totalResults }} results for "{{ query }}" + ({{ serverResults.length }} from server) +
+ + +
+ message +
+
{{ r.sender || (r.isCreatedByUser ? 'You' : 'Jada') }}
+
{{ truncate(r.text, 120) }}
+
{{ formatDate(r.createdAt) }}
+
+
-
+ +
{{ r.type }}
{{ r.title }}
-
+
{{ r.preview }}
-
+
No results found. Try a different search term.
-

Search across your conversations, tool calls, and files.

-
-
Recent Searches
-
- 🔍 {{ term }} -
-
+

Full-text search across all conversations and messages.

+

Powered by MeiliSearch — searches message content server-side.

@@ -163,6 +207,19 @@ export default { .jada-search-input::placeholder { color: #444; } +.jada-search-spinner { + width: 16px; + height: 16px; + border: 2px solid rgba(233, 69, 96, 0.3); + border-top-color: #e94560; + border-radius: 50%; + animation: spin 0.6s linear infinite; +} + +@keyframes spin { + to { transform: rotate(360deg); } +} + .jada-search-result-count { font-size: 12px; color: #555; @@ -195,6 +252,7 @@ export default { .jada-search-type.chat { background: rgba(233, 69, 96, 0.15); color: #e94560; } .jada-search-type.tool { background: rgba(74, 222, 128, 0.15); color: #4ade80; } .jada-search-type.workspace { background: rgba(139, 92, 246, 0.15); color: #8b5cf6; } +.jada-search-type.message { background: rgba(59, 130, 246, 0.15); color: #3b82f6; } .jada-search-type.document { background: rgba(59, 130, 246, 0.15); color: #3b82f6; } .jada-search-result-title { @@ -209,6 +267,12 @@ export default { color: #555; } +.jada-search-result-meta { + font-size: 11px; + color: #444; + margin-top: 2px; +} + .jada-search-empty { text-align: center; padding: 32px; @@ -221,31 +285,9 @@ export default { color: #555; } -.jada-search-recent { - margin-top: 24px; - text-align: left; -} - -.jada-search-recent-label { - font-size: 11px; - font-weight: 700; +.jada-search-hint { + font-size: 12px; color: #444; - text-transform: uppercase; - letter-spacing: 0.5px; - margin-bottom: 8px; -} - -.jada-search-recent-item { - padding: 8px 12px; - border-radius: 8px; - font-size: 13px; - color: #8b8b9e; - cursor: pointer; - transition: background 0.15s; -} - -.jada-search-recent-item:hover { - background: rgba(255,255,255,0.04); - color: #e8e8ef; + margin-top: 8px; } diff --git a/src/store.js b/src/store.js index 597e97c..57b21fc 100644 --- a/src/store.js +++ b/src/store.js @@ -3,20 +3,23 @@ import api from './api.js' /** * Global reactive store for workspace state, conversations, and user profile. - * Shared across all components via provide/inject or direct import. + * Conversations are now persisted server-side via LibreChat's API. */ export const store = reactive({ - // Current view: 'chat' | 'workspaces' | 'workspace-detail' | 'document-editor' | 'tool-explorer' | 'search' | 'settings' | 'profile' + // Current view currentView: 'chat', // Workspace state workspaces: [], activeWorkspaceId: 'nextcloud', - // Conversation state + // Conversation state (server-side via LibreChat) conversations: [], activeConversationId: null, messages: [], + conversationsCursor: null, + hasMoreConversations: false, + conversationsLoading: false, // Health & tools healthy: false, @@ -26,6 +29,23 @@ export const store = reactive({ modelName: '', recentToolCalls: [], + // Tags (server-side via LibreChat) + tags: [], + + // Search + searchResults: [], + searchLoading: false, + + // Sharing + sharedLinks: [], + + // Memories + memories: [], + memoryStats: { totalTokens: 0, charLimit: 10000 }, + + // Presets + presets: [], + // User userProfile: null, @@ -134,20 +154,15 @@ export const actions = { store.workspaces = DEFAULT_WORKSPACES } - // Always ensure Nextcloud root workspace exists if (!store.workspaces.find(w => w.id === 'nextcloud')) { store.workspaces.unshift(DEFAULT_WORKSPACES[0]) } - // Load health await this.refreshHealth() - // Load user profile BEFORE conversations — loadConversations() uses - // store.userProfile.uid to build the localStorage key prefix. try { store.userProfile = await api.getUserProfile() } catch { - // Profile endpoint may not exist yet — use Nextcloud user info store.userProfile = { uid: window.OC?.currentUser || 'default', displayName: window.OC?.getCurrentUser?.()?.displayName || 'User', @@ -155,23 +170,19 @@ export const actions = { } } - // Load conversations for active workspace (after userProfile so key prefix is correct) + // Load conversations from LibreChat server await this.loadConversations() - // Note: loadRecentToolCalls() removed — backend now returns empty stub - // since conversation state moved to localStorage. Tool calls are - // accumulated in-memory during streaming via addToolCall(). + // Load tags + await this.loadTags() }, async refreshHealth() { try { const data = await api.getHealth() - // Hermes Agent returns model list from /v1/models via PHP proxy - // Accept any non-error response as healthy store.healthy = data?.ok === true store.healthData = data - // Extract MCP server info if available const servers = data?.mcpServers || data?.servers if (servers && typeof servers === 'object') { store.mcpServers = Object.entries(servers).map(([name, info]) => ({ @@ -195,31 +206,290 @@ export const actions = { } }, - async loadConversations() { - // Load conversation list from localStorage (Hermes Agent manages sessions internally) - // Use user-scoped key to prevent cross-user data leaks on shared origins + // ─── Server-side conversations ─────────────────────────────────────── + + async loadConversations(append = false) { + if (store.conversationsLoading) return + store.conversationsLoading = true + + try { + const params = { limit: 25 } + if (append && store.conversationsCursor) { + params.cursor = store.conversationsCursor + } + + const result = await api.getConversations(params) + const convos = (result?.conversations || []).map(c => ({ + id: c.conversationId || c._id, + title: c.title || 'New Conversation', + updatedAt: c.updatedAt || c.createdAt, + createdAt: c.createdAt, + endpoint: c.endpoint, + model: c.model, + tags: c.tags || [], + isArchived: c.isArchived || false, + })) + + if (append) { + store.conversations.push(...convos) + } else { + store.conversations = convos + } + + store.conversationsCursor = result?.nextCursor || null + store.hasMoreConversations = !!result?.nextCursor + } catch (e) { + console.error('Failed to load conversations from server:', e) + // Fallback to localStorage for backward compat during migration + this.loadConversationsFromLocalStorage() + } finally { + store.conversationsLoading = false + } + }, + + loadConversationsFromLocalStorage() { const uid = store.userProfile?.uid || window.OC?.currentUser || 'default' const scopedKey = `jada_${uid}_conversations` try { - let index = JSON.parse(localStorage.getItem(scopedKey) || '[]') - // Migrate legacy unscoped data on first load - if (index.length === 0) { - const legacy = JSON.parse(localStorage.getItem('jada_conversations') || '[]') - if (legacy.length > 0) { - index = legacy - localStorage.setItem(scopedKey, JSON.stringify(index)) - } - } - store.conversations = index + store.conversations = JSON.parse(localStorage.getItem(scopedKey) || '[]') } catch { store.conversations = [] } }, + async loadConversationMessages(conversationId) { + if (!conversationId) return + try { + const messages = await api.getConversationMessages(conversationId) + if (Array.isArray(messages)) { + store.messages = messages.map(m => ({ + role: m.isCreatedByUser ? 'user' : 'assistant', + content: typeof m.text === 'string' ? m.text : (m.content || ''), + messageId: m.messageId, + parentMessageId: m.parentMessageId, + createdAt: m.createdAt, + sender: m.sender, + })) + } else { + store.messages = [] + } + } catch (e) { + console.error('Failed to load messages:', e) + store.messages = [] + } + }, + + async selectConversation(conversationId) { + store.activeConversationId = conversationId + store.messages = [] + store.recentToolCalls = [] + // Don't call loadConversationMessages here — ChatView's watcher on + // activeConversationId already triggers loadServerMessages(), so calling + // it here would cause a duplicate API request. + store.currentView = 'chat' + }, + + async deleteConversation(conversationId) { + try { + await api.deleteConversation(conversationId) + store.conversations = store.conversations.filter(c => c.id !== conversationId) + if (store.activeConversationId === conversationId) { + store.activeConversationId = null + store.messages = [] + } + } catch (e) { + console.error('Failed to delete conversation:', e) + } + }, + + async updateConversationTitle(conversationId, title) { + try { + await api.updateConversation(conversationId, title) + const conv = store.conversations.find(c => c.id === conversationId) + if (conv) conv.title = title + } catch (e) { + console.error('Failed to update conversation title:', e) + } + }, + + async archiveConversation(conversationId) { + try { + await api.archiveConversation(conversationId, true) + store.conversations = store.conversations.filter(c => c.id !== conversationId) + if (store.activeConversationId === conversationId) { + store.activeConversationId = null + store.messages = [] + } + } catch (e) { + console.error('Failed to archive conversation:', e) + } + }, + + async generateTitle(conversationId) { + try { + const result = await api.genTitle(conversationId) + if (result?.title) { + const conv = store.conversations.find(c => c.id === conversationId) + if (conv) conv.title = result.title + } + return result + } catch (e) { + console.error('Failed to generate title:', e) + } + }, + + // ─── Tags ──────────────────────────────────────────────────────────── + + async loadTags() { + try { + const tags = await api.getTags() + store.tags = Array.isArray(tags) ? tags : [] + } catch { + store.tags = [] + } + }, + + async tagConversation(conversationId, tag) { + try { + await api.addTag(conversationId, tag) + const conv = store.conversations.find(c => c.id === conversationId) + if (conv && !conv.tags.includes(tag)) conv.tags.push(tag) + await this.loadTags() + } catch (e) { + console.error('Failed to tag conversation:', e) + } + }, + + async untagConversation(conversationId, tag) { + try { + await api.removeTag(conversationId, tag) + const conv = store.conversations.find(c => c.id === conversationId) + if (conv) conv.tags = conv.tags.filter(t => t !== tag) + await this.loadTags() + } catch (e) { + console.error('Failed to untag conversation:', e) + } + }, + + // ─── Search ────────────────────────────────────────────────────────── + + async searchMessages(query) { + if (!query || query.trim().length < 2) { + store.searchResults = [] + return + } + store.searchLoading = true + try { + const result = await api.search(query) + store.searchResults = (result?.messages || []).map(m => ({ + messageId: m.messageId, + conversationId: m.conversationId, + text: m.text || m.content || '', + sender: m.sender, + isCreatedByUser: m.isCreatedByUser, + createdAt: m.createdAt, + })) + } catch (e) { + console.error('Search failed:', e) + store.searchResults = [] + } finally { + store.searchLoading = false + } + }, + + // ─── Sharing ───────────────────────────────────────────────────────── + + async loadSharedLinks() { + try { + const result = await api.getSharedLinks() + store.sharedLinks = result?.links || [] + } catch { + store.sharedLinks = [] + } + }, + + async shareConversation(conversationId) { + try { + const result = await api.createShareLink(conversationId) + await this.loadSharedLinks() + return result + } catch (e) { + console.error('Failed to share conversation:', e) + } + }, + + async deleteShareLink(id) { + try { + await api.deleteShareLink(id) + store.sharedLinks = store.sharedLinks.filter(l => l._id !== id) + } catch (e) { + console.error('Failed to delete share link:', e) + } + }, + + // ─── Memories ──────────────────────────────────────────────────────── + + async loadMemories() { + try { + const result = await api.getMemories() + store.memories = result?.memories || [] + store.memoryStats = { + totalTokens: result?.totalTokens || 0, + charLimit: result?.charLimit || 10000, + usagePercentage: result?.usagePercentage || null, + } + } catch { + store.memories = [] + } + }, + + async deleteMemory(id) { + try { + await api.deleteMemory(id) + store.memories = store.memories.filter(m => m._id !== id) + } catch (e) { + console.error('Failed to delete memory:', e) + } + }, + + // ─── Presets ───────────────────────────────────────────────────────── + + async loadPresets() { + try { + const result = await api.getPresets() + store.presets = Array.isArray(result) ? result : [] + } catch { + store.presets = [] + } + }, + + async createPreset(data) { + try { + const result = await api.createPreset(data) + await this.loadPresets() + return result + } catch (e) { + console.error('Failed to create preset:', e) + } + }, + + async deletePreset(id) { + try { + await api.deletePreset(id) + store.presets = store.presets.filter(p => p._id !== id) + } catch (e) { + console.error('Failed to delete preset:', e) + } + }, + + // ─── Navigation ────────────────────────────────────────────────────── + setActiveWorkspace(id) { store.activeWorkspaceId = id store.activeConversationId = null store.messages = [] + // Reload conversations filtered by tag if workspace has a tag mapping + this.loadConversations() }, getActiveWorkspace() { @@ -227,8 +497,9 @@ export const actions = { }, startNewChat() { - store.activeConversationId = 'conv-' + Date.now() + store.activeConversationId = null store.messages = [] + store.recentToolCalls = [] store.currentView = 'chat' }, @@ -259,7 +530,7 @@ export const actions = { })) } } catch { - // Backend may not support this yet — keep empty + // keep empty } }, } diff --git a/templates/admin.php b/templates/admin.php index d68332a..3d90abe 100644 --- a/templates/admin.php +++ b/templates/admin.php @@ -4,19 +4,32 @@ ?>
-

t('Jada Agent — OpenClaw Settings')); ?>

-

t('Configure the connection to your OpenClaw instance.')); ?>

+

t('Jada Agent — LibreChat Settings')); ?>

+

t('Configure the connection to your LibreChat backend.')); ?>

- + + placeholder="http://LibreChat:3080" /> - + + placeholder="sk-..." /> + +

t('Service Account (JWT Auth)')); ?>

+

t('Used for server-side conversations, search, tags, and other internal APIs.')); ?>

+ + + + + +