coding-tool-x 3.3.1 → 3.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/web/assets/{Analytics-BskCbia_.js → Analytics-DtR00OYP.js} +1 -1
- package/dist/web/assets/{ConfigTemplates-B4X3rgfY.js → ConfigTemplates-DWiSFOp5.js} +1 -1
- package/dist/web/assets/Home-BsSioaaB.css +1 -0
- package/dist/web/assets/Home-DUu2mGb6.js +1 -0
- package/dist/web/assets/{PluginManager-D_LoULGH.js → PluginManager-DsJ1KtNr.js} +1 -1
- package/dist/web/assets/{ProjectList-DiV4Qwa1.js → ProjectList-CzTJaBJb.js} +1 -1
- package/dist/web/assets/{SessionList-B24o0wiX.js → SessionList-D1ovPZ0I.js} +1 -1
- package/dist/web/assets/{SkillManager-B9Rnuaig.js → SkillManager-DqpDTc2c.js} +1 -1
- package/dist/web/assets/{WorkspaceManager-BkL2l5J9.js → WorkspaceManager-Dj28-3G5.js} +1 -1
- package/dist/web/assets/index-CaKktouI.js +2 -0
- package/dist/web/assets/{index-C5j22icm.css → index-DZjDFGqR.css} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/src/server/api/codex-proxy.js +81 -38
- package/src/server/api/config-export.js +4 -4
- package/src/server/api/gemini-proxy.js +81 -36
- package/src/server/api/opencode-proxy.js +60 -13
- package/src/server/api/proxy.js +37 -4
- package/src/server/services/channels.js +6 -6
- package/src/server/services/codex-channels.js +18 -9
- package/src/server/services/codex-settings-manager.js +18 -0
- package/src/server/services/config-export-service.js +8 -4
- package/src/server/services/gemini-channels.js +19 -11
- package/src/server/services/gemini-settings-manager.js +14 -0
- package/src/server/services/mcp-service.js +40 -15
- package/src/server/services/opencode-channels.js +18 -0
- package/src/server/services/opencode-sessions.js +25 -1
- package/src/server/services/opencode-settings-manager.js +16 -0
- package/dist/web/assets/Home-DHYMMKOU.js +0 -1
- package/dist/web/assets/Home-DuPOICVF.css +0 -1
- package/dist/web/assets/index-ZttxvTKw.js +0 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{d as t,t as e,A as n,l as i,Q as r,f as o,g as a,w as s,B as l,h as u,i as h,v as c,aa as p,N as d,r as f,c as g,o as v,a as y,W as m,X as _,F as x,$ as w,a0 as b,Y as S,p as M,_ as T,L as C}from"./vue-vendor-DET08QYg.js";import{_ as I,D,E as k,F as A}from"./index-
|
|
1
|
+
import{d as t,t as e,A as n,l as i,Q as r,f as o,g as a,w as s,B as l,h as u,i as h,v as c,aa as p,N as d,r as f,c as g,o as v,a as y,W as m,X as _,F as x,$ as w,a0 as b,Y as S,p as M,_ as T,L as C}from"./vue-vendor-DET08QYg.js";import{_ as I,D,E as k,F as A}from"./index-CaKktouI.js";import{$ as P,k as L,B as O,N as R,F as z,g as E}from"./naive-ui-CxpuzdjU.js";import{a2 as N,aA as B,aB as F}from"./icons-B29onFfZ.js";import"./markdown-C9MYpaSi.js";import"./vendors-DMjSfzlv.js";
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as s,B as a}from"./index-
|
|
1
|
+
import{_ as s,B as a}from"./index-CaKktouI.js";import{c as e,o,X as r,Y as t,N as i}from"./vue-vendor-DET08QYg.js";import{K as d}from"./naive-ui-CxpuzdjU.js";import"./vendors-DMjSfzlv.js";import"./markdown-C9MYpaSi.js";import"./icons-B29onFfZ.js";const m={class:"config-templates-page"},p=s({__name:"ConfigTemplates",setup:s=>(s,p)=>(o(),e("div",m,[r(i(d),{title:"配置模版管理",bordered:!1},{default:t(()=>[r(a,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-a6c39fe5"]]);export{p as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.channel-column[data-v-5d6d05f9]{display:flex;flex-direction:column;height:100%;min-height:0;background:var(--gradient-card);border:1px solid var(--border-primary);border-radius:8px;overflow:hidden;box-shadow:var(--shadow-sm)}.channel-header[data-v-5d6d05f9]{display:flex;align-items:center;gap:10px;padding:12px 14px;background:var(--bg-primary);position:relative}.drag-handle[data-v-5d6d05f9]{cursor:grab;color:var(--text-tertiary);display:flex;align-items:center;padding:4px;margin:-4px 0 -4px -4px;border-radius:4px;transition:all .2s}.drag-handle[data-v-5d6d05f9]:hover{color:var(--text-secondary);background:var(--bg-tertiary)}.drag-handle[data-v-5d6d05f9]:active{cursor:grabbing}.channel-header[data-v-5d6d05f9]:after{content:"";position:absolute;bottom:0;left:14px;right:14px;height:2px;border-radius:1px}.channel-header.claude[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(24,160,88,.08) 0%,transparent 100%)}.channel-header.claude[data-v-5d6d05f9]:after{background:linear-gradient(90deg,#18a058,#18a0584d)}.channel-header.codex[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(59,130,246,.08) 0%,transparent 100%)}.channel-header.codex[data-v-5d6d05f9]:after{background:linear-gradient(90deg,#3b82f6,#3b82f64d)}.channel-header.gemini[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(168,85,247,.08) 0%,transparent 100%)}.channel-header.gemini[data-v-5d6d05f9]:after{background:linear-gradient(90deg,#a855f7,#a855f74d)}.channel-header.opencode[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(234,88,12,.08) 0%,transparent 100%)}.channel-header.opencode[data-v-5d6d05f9]:after{background:linear-gradient(90deg,#ea580c,#ea580c4d)}.header-icon[data-v-5d6d05f9]{width:32px;height:32px;border-radius:6px;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px #0000001a}.channel-header.claude .header-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#18a058,#15803d);color:#fff}.channel-header.codex .header-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff}.channel-header.gemini .header-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#a855f7,#9333ea);color:#fff}.channel-header.opencode .header-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#ea580c,#c2410c);color:#fff}.channel-title[data-v-5d6d05f9]{font-size:15px;font-weight:700;margin:0;color:var(--text-primary);letter-spacing:.3px}.channel-content[data-v-5d6d05f9]{flex:1;min-height:0;overflow:hidden;padding:10px;display:flex;flex-direction:column;gap:8px}.card[data-v-5d6d05f9]{background:var(--bg-primary);border:1px solid var(--border-primary);border-radius:8px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 12px #0000000d;position:relative}.card[data-v-5d6d05f9]:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent,rgba(255,255,255,.1),transparent);opacity:0;transition:opacity .3s ease}.card[data-v-5d6d05f9]:hover{box-shadow:0 6px 20px #0000001a;border-color:var(--border-secondary)}.card[data-v-5d6d05f9]:hover:before{opacity:1}.card.clickable[data-v-5d6d05f9]{cursor:pointer}.card.clickable[data-v-5d6d05f9]:hover{border-color:#18a058;transform:translateY(-2px);box-shadow:0 8px 24px #18a0582e}.card.clickable[data-v-5d6d05f9]:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(135deg,rgba(24,160,88,.02) 0%,transparent 100%);opacity:0;transition:opacity .3s ease;pointer-events:none}.card.clickable[data-v-5d6d05f9]:hover:after{opacity:1}.card-header[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px;padding:10px 12px;background:linear-gradient(180deg,var(--bg-secondary) 0%,var(--bg-primary) 100%);border-bottom:1px solid var(--border-primary);position:relative;min-height:24px}.card-header.compact[data-v-5d6d05f9]{padding:8px 12px}.card-header .n-icon[data-v-5d6d05f9]{color:var(--text-tertiary);transition:color .2s ease}.card:hover .card-header .n-icon[data-v-5d6d05f9]{color:var(--text-secondary)}.card-title[data-v-5d6d05f9]{font-size:11px;font-weight:700;margin:0;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.8px}.runtime-badge[data-v-5d6d05f9]{display:inline-flex;align-items:center;padding:3px 8px;margin-left:8px;font-size:10px;font-weight:600;color:#10b981;background:linear-gradient(135deg,#10b9811a,#34d3991a);border:1px solid rgba(16,185,129,.2);border-radius:4px;white-space:nowrap;animation:pulse-runtime-5d6d05f9 2s ease-in-out infinite}@keyframes pulse-runtime-5d6d05f9{0%,to{opacity:1;transform:scale(1)}50%{opacity:.8;transform:scale(.98)}}.card-body[data-v-5d6d05f9]{padding:12px;background:var(--bg-primary)}.card-body.compact[data-v-5d6d05f9]{padding:10px 12px}.proxy-control[data-v-5d6d05f9]{display:flex;justify-content:space-between;align-items:center;gap:16px}.proxy-info[data-v-5d6d05f9]{display:flex;flex-direction:column;gap:4px}.proxy-info-row[data-v-5d6d05f9]{display:flex;align-items:center;justify-content:space-between}.proxy-status[data-v-5d6d05f9]{display:flex;align-items:center;gap:6px}.proxy-port[data-v-5d6d05f9]{font-size:11px;color:var(--text-secondary);margin-left:6px}.channel-selector[data-v-5d6d05f9]{display:flex;align-items:center;padding:4px 8px;background:linear-gradient(135deg,var(--bg-secondary) 0%,var(--bg-tertiary) 100%);border:1px solid var(--border-primary);border-radius:4px;color:var(--text-secondary);transition:all .2s ease}.channel-selector[data-v-5d6d05f9]:hover{background:var(--hover-bg);border-color:var(--border-secondary);color:var(--text-primary)}.channel-selector[data-v-5d6d05f9]:disabled{opacity:.5;cursor:not-allowed}.channel-name[data-v-5d6d05f9]{font-size:11px;font-weight:500;max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-dot[data-v-5d6d05f9]{width:8px;height:8px;border-radius:50%;background:var(--border-secondary);transition:all .3s ease}.status-dot.active[data-v-5d6d05f9]{background:#18a058;box-shadow:0 0 8px #18a05880}.quick-stats[data-v-5d6d05f9]{display:flex;gap:16px;padding:4px 0}.stat-item[data-v-5d6d05f9]{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:4px 0}.stat-divider[data-v-5d6d05f9]{width:1px;background:linear-gradient(180deg,transparent 0%,var(--border-primary) 50%,transparent 100%)}.quick-access-list[data-v-5d6d05f9]{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.access-card[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:6px;background:var(--bg-secondary);border:1px solid var(--border-color);transition:all .3s cubic-bezier(.4,0,.2,1);position:relative;min-height:52px;overflow:hidden}.access-card[data-v-5d6d05f9]:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;transition:opacity .3s ease;pointer-events:none}.access-icon[data-v-5d6d05f9]{width:32px;height:32px;border-radius:5px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .3s ease}.access-content[data-v-5d6d05f9]{display:flex;flex-direction:column;gap:4px;flex:1}.access-card-projects .access-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#6366f126,#8b5cf626);color:#6366f1}.access-card-projects[data-v-5d6d05f9]:before{background:linear-gradient(135deg,#6366f114,#8b5cf614)}.access-card-projects:hover .access-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#6366f140,#8b5cf640);transform:scale(1.1) rotate(-5deg)}.access-card-sessions .access-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#10b98126,#05966926);color:#10b981}.access-card-sessions[data-v-5d6d05f9]:before{background:linear-gradient(135deg,#10b98114,#05966914)}.access-card-sessions:hover .access-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#10b98140,#05966940);transform:scale(1.1) rotate(5deg)}.access-card-goto .access-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#f59e0b26,#fb923c26);color:#f59e0b}.access-card-goto[data-v-5d6d05f9]:before{background:linear-gradient(135deg,#f59e0b14,#fb923c14)}.access-card-goto:hover .access-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#f59e0b40,#fb923c40);transform:scale(1.1) translate(3px)}.access-card.clickable[data-v-5d6d05f9]:hover{transform:translateY(-2px);box-shadow:0 8px 20px #0000001a;border-color:var(--border-secondary)}.access-card.clickable[data-v-5d6d05f9]:hover:before{opacity:1}.access-card.clickable[data-v-5d6d05f9]:active{transform:translateY(0)}.access-label[data-v-5d6d05f9]{display:block;font-size:10px;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px}.access-value[data-v-5d6d05f9]{display:block;font-size:18px;font-weight:800;color:var(--text-primary);line-height:1}.access-goto[data-v-5d6d05f9]{display:block;font-size:12px;font-weight:700;color:var(--text-primary);line-height:1.2;white-space:nowrap}.stats-inline[data-v-5d6d05f9]{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.stats-inline.stats-3col[data-v-5d6d05f9]{grid-template-columns:repeat(3,1fr)}.stat-inline-item[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px;padding:10px;background:var(--bg-secondary);border-radius:6px;border:1px solid var(--border-primary);transition:all .2s ease}.stat-inline-item[data-v-5d6d05f9]:hover{border-color:var(--border-secondary);background:var(--hover-bg)}.stat-icon-dot[data-v-5d6d05f9]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.stat-icon-dot.requests[data-v-5d6d05f9]{background:#3b82f6;box-shadow:0 0 6px #3b82f680}.stat-icon-dot.tokens[data-v-5d6d05f9]{background:#18a058;box-shadow:0 0 6px #18a05880}.stat-icon-dot.cost[data-v-5d6d05f9]{background:#f59e0b;box-shadow:0 0 6px #f59e0b80}.stat-info[data-v-5d6d05f9]{display:flex;flex-direction:column;gap:1px;min-width:0}.stat-label[data-v-5d6d05f9]{font-size:10px;color:var(--text-tertiary);font-weight:500;text-transform:uppercase;letter-spacing:.2px}.stat-value[data-v-5d6d05f9]{font-size:16px;font-weight:700;color:var(--text-primary);line-height:1.2;transition:all .3s ease}.stat-value.animating[data-v-5d6d05f9]{animation:numberChange-5d6d05f9 .6s ease}@keyframes numberChange-5d6d05f9{0%{transform:translateY(-6px);opacity:.5}50%{transform:translateY(0);opacity:1;color:var(--primary-color)}to{transform:translateY(0);opacity:1}}.stats-card[data-v-5d6d05f9],.chart-card[data-v-5d6d05f9]{border-left:2px solid transparent}.stats-card-claude[data-v-5d6d05f9],.chart-card[data-v-5d6d05f9]:has(+.stats-card-claude),.card[data-v-5d6d05f9]:has(.panel-card):nth-child(4){border-left-color:#18a058}.chart-card.chart-card-claude[data-v-5d6d05f9]{border-left-color:#18a058}.stats-card-codex[data-v-5d6d05f9],.chart-card[data-v-5d6d05f9]:has(+.stats-card-codex),.card[data-v-5d6d05f9]:has(.panel-card):nth-child(4){border-left-color:#3b82f6}.chart-card.chart-card-codex[data-v-5d6d05f9]{border-left-color:#3b82f6}.stats-card-gemini[data-v-5d6d05f9],.chart-card[data-v-5d6d05f9]:has(+.stats-card-gemini),.card[data-v-5d6d05f9]:has(.panel-card):nth-child(4){border-left-color:#a855f7}.chart-card.chart-card-gemini[data-v-5d6d05f9]{border-left-color:#a855f7}.stats-card-opencode[data-v-5d6d05f9],.chart-card[data-v-5d6d05f9]:has(+.stats-card-opencode),.card[data-v-5d6d05f9]:has(.panel-card):nth-child(4){border-left-color:#ea580c}.chart-card.chart-card-opencode[data-v-5d6d05f9]{border-left-color:#ea580c}.chart-card[data-v-5d6d05f9]{padding:0;overflow:hidden}.chart-card[data-v-5d6d05f9] .panel-card{border:none;border-radius:0;box-shadow:none;background:transparent}.stat-requests .stat-value[data-v-5d6d05f9]{color:#3b82f6}.stat-input .stat-value[data-v-5d6d05f9]{color:#18a058}.stat-output .stat-value[data-v-5d6d05f9]{color:#f59e0b}.token-label[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px}.token-dot[data-v-5d6d05f9]{width:8px;height:8px;border-radius:50%}.logs-card[data-v-5d6d05f9]{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;border:1px solid var(--border-primary);border-radius:6px}.logs-card-body[data-v-5d6d05f9]{flex:1;min-height:0;display:flex;flex-direction:column;padding:0}.logs-card .card-header[data-v-5d6d05f9]{background:linear-gradient(135deg,var(--bg-secondary) 0%,var(--bg-tertiary) 100%)}.logs-table-wrapper[data-v-5d6d05f9]{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary)}.logs-table-header[data-v-5d6d05f9]{display:flex;padding:10px 12px;background:linear-gradient(180deg,var(--bg-tertiary) 0%,var(--bg-secondary) 100%);border-bottom:2px solid var(--border-primary);font-size:11px;font-weight:700;color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.6px;flex-shrink:0}.logs-header-claude .log-col[data-v-5d6d05f9]{color:#18a058b3;font-weight:600}.logs-header-codex .log-col[data-v-5d6d05f9]{color:#3b82f6b3;font-weight:600}.logs-header-gemini .log-col[data-v-5d6d05f9]{color:#a855f7b3;font-weight:600}.logs-header-opencode .log-col[data-v-5d6d05f9]{color:#ea580cb3;font-weight:600}[data-theme=dark] .logs-header-claude .log-col[data-v-5d6d05f9]{color:#34d399a6}[data-theme=dark] .logs-header-codex .log-col[data-v-5d6d05f9]{color:#60a5faa6}[data-theme=dark] .logs-header-gemini .log-col[data-v-5d6d05f9]{color:#c084fca6}[data-theme=dark] .logs-header-opencode .log-col[data-v-5d6d05f9]{color:#fb923ca6}.logs-container[data-v-5d6d05f9]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden}.logs-container[data-v-5d6d05f9]::-webkit-scrollbar{width:4px}.logs-container[data-v-5d6d05f9]::-webkit-scrollbar-thumb{background:#18a0584d;border-radius:2px}.logs-container[data-v-5d6d05f9]::-webkit-scrollbar-thumb:hover{background:#18a05880}.empty-logs[data-v-5d6d05f9]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;color:var(--text-tertiary);min-height:200px;text-align:center}.log-row[data-v-5d6d05f9]{display:flex;align-items:center;padding:10px 12px;min-height:40px;border-bottom:1px solid var(--border-primary);font-size:12px;transition:all .2s ease;background:var(--bg-primary);position:relative}.log-row[data-v-5d6d05f9]:nth-child(2n){background:var(--bg-secondary)}.log-row[data-v-5d6d05f9]:hover{background:var(--hover-bg);transform:translate(2px)}.log-row.new-log[data-v-5d6d05f9]{animation:newLogPulse-5d6d05f9 4.5s cubic-bezier(.25,.46,.45,.94) forwards;border-left:3px solid #18a058}@keyframes newLogPulse-5d6d05f9{0%{background:linear-gradient(90deg,#18a05826,#18a0580f);box-shadow:0 0 8px #18a05833}5%{background:linear-gradient(90deg,#18a0582e,#18a05814);box-shadow:0 0 12px 1px #18a05840}15%{background:linear-gradient(90deg,#18a05829,#18a05812);box-shadow:0 0 10px 1px #18a05833}30%{background:linear-gradient(90deg,#18a0581f,#18a0580d);box-shadow:0 0 6px #18a05826}50%{background:linear-gradient(90deg,#18a05814,#18a05808);box-shadow:0 0 4px #18a0581a}70%{background:linear-gradient(90deg,#18a0580a,#18a05804);box-shadow:0 0 2px #18a0580f}85%{background:linear-gradient(90deg,#18a05805,#18a05802);box-shadow:0 0 1px #18a05808}to{background:transparent;box-shadow:0 0 #18a05800;border-left-color:transparent}}[data-theme=dark] .log-row.new-log[data-v-5d6d05f9]{animation:newLogPulseDark-5d6d05f9 4.5s cubic-bezier(.25,.46,.45,.94) forwards}@keyframes newLogPulseDark-5d6d05f9{0%{background:linear-gradient(90deg,#18a05833,#18a05814);box-shadow:0 0 10px #18a05840}5%{background:linear-gradient(90deg,#18a0583d,#18a0581a);box-shadow:0 0 14px 2px #18a0584d}15%{background:linear-gradient(90deg,#18a05836,#18a05817);box-shadow:0 0 12px 1px #18a05840}30%{background:linear-gradient(90deg,#18a05829,#18a05812);box-shadow:0 0 8px 1px #18a0582e}50%{background:linear-gradient(90deg,#18a0581c,#18a0580b);box-shadow:0 0 5px #18a0581f}70%{background:linear-gradient(90deg,#18a0580f,#18a05806);box-shadow:0 0 3px #18a05814}85%{background:linear-gradient(90deg,#18a05808,#18a05803);box-shadow:0 0 1px #18a0580a}to{background:transparent;box-shadow:0 0 #18a05800;border-left-color:transparent}}.log-row.new-log.action-row[data-v-5d6d05f9]{border-left:3px solid #18a058}.log-row.action-row[data-v-5d6d05f9]{background:linear-gradient(90deg,#18a0581f,#18a0580a);border-left:3px solid #18a058;padding-left:8px}.log-row.action-row[data-v-5d6d05f9]:hover{background:linear-gradient(90deg,#18a0582e,#18a05814)}.action-content[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px;width:100%}.action-msg[data-v-5d6d05f9]{flex:1;font-size:11px;color:#18a058;font-weight:600;letter-spacing:.2px}.action-time[data-v-5d6d05f9]{font-size:10px;font-family:SF Mono,Monaco,monospace;color:var(--text-tertiary);background:#18a0581a;padding:2px 6px;border-radius:4px}.log-col[data-v-5d6d05f9]{display:flex;align-items:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-channel[data-v-5d6d05f9]{min-width:0}.col-channel .n-tag[data-v-5d6d05f9]{max-width:100%;font-size:11px;font-weight:600;border-radius:4px;padding:3px 10px}.col-token[data-v-5d6d05f9]{justify-content:center;font-family:SF Mono,Monaco,Consolas,monospace;font-size:12px;font-weight:600;color:var(--text-secondary);background:#00000008;padding:4px 8px;border-radius:4px;margin:0 3px}[data-theme=dark] .col-token[data-v-5d6d05f9]{background:#ffffff0f}.col-time[data-v-5d6d05f9]{justify-content:flex-end;font-family:SF Mono,Monaco,Consolas,monospace;font-size:11px;font-weight:500;color:var(--text-tertiary);padding-right:2px;opacity:.85}.log-row:hover .col-time[data-v-5d6d05f9]{opacity:1;color:var(--text-secondary)}.col-channel-claude[data-v-5d6d05f9]{flex:2 1 60px;min-width:50px}.col-token-claude[data-v-5d6d05f9]{flex:1 1 40px;min-width:35px}.col-time-claude[data-v-5d6d05f9]{flex:1.5 1 55px;min-width:50px}.col-channel-codex[data-v-5d6d05f9]{flex:2 1 60px;min-width:50px}.col-token-codex[data-v-5d6d05f9]{flex:1 1 40px;min-width:35px}.col-time-codex[data-v-5d6d05f9]{flex:1.5 1 55px;min-width:50px}.col-channel-gemini[data-v-5d6d05f9]{flex:2.5 1 70px;min-width:55px}.col-token-gemini[data-v-5d6d05f9]{flex:1.2 1 45px;min-width:40px}.col-time-gemini[data-v-5d6d05f9]{flex:1.8 1 60px;min-width:55px}.col-channel-opencode[data-v-5d6d05f9]{flex:2.5 1 70px;min-width:55px}.col-token-opencode[data-v-5d6d05f9]{flex:1.2 1 45px;min-width:40px}.col-time-opencode[data-v-5d6d05f9]{flex:1.8 1 60px;min-width:55px}.claude-extra-area[data-v-5d6d05f9]{display:flex;align-items:center;gap:6px;margin-left:auto}.mcp-count-tag[data-v-5d6d05f9],.skills-count-tag[data-v-5d6d05f9]{font-size:10px;font-weight:500;padding:0 8px;height:22px;line-height:22px;border-radius:4px;cursor:pointer;transition:all .2s ease}.mcp-count-tag.clickable[data-v-5d6d05f9]:hover,.skills-count-tag.clickable[data-v-5d6d05f9]:hover{transform:scale(1.03);filter:brightness(1.1)}.mcp-quick-panel[data-v-5d6d05f9],.skills-quick-panel[data-v-5d6d05f9]{padding:2px 0}.mcp-quick-panel .panel-title[data-v-5d6d05f9],.skills-quick-panel .panel-title[data-v-5d6d05f9]{display:flex;justify-content:space-between;align-items:center;padding:6px 10px 8px;border-bottom:1px solid var(--border-primary);margin-bottom:4px}.mcp-quick-panel .panel-title span[data-v-5d6d05f9]:first-child,.skills-quick-panel .panel-title span[data-v-5d6d05f9]:first-child{font-size:13px;font-weight:600;color:var(--text-primary)}.no-items[data-v-5d6d05f9]{padding:16px 10px;text-align:center}.mcp-quick-list[data-v-5d6d05f9],.skills-quick-list[data-v-5d6d05f9]{max-height:300px;overflow-y:auto;padding:0 4px 4px}.mcp-quick-item[data-v-5d6d05f9],.skill-quick-item[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:5px;margin-bottom:4px;background:var(--bg-secondary);transition:all .2s ease}.mcp-quick-item[data-v-5d6d05f9]:hover,.skill-quick-item[data-v-5d6d05f9]:hover{background:var(--hover-bg)}.mcp-item-icon[data-v-5d6d05f9],.skill-item-icon[data-v-5d6d05f9]{width:24px;height:24px;border-radius:5px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mcp-item-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#3b82f626,#3b82f60d);color:#3b82f6}.skill-item-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,#18a05826,#18a0580d);color:#18a058}.mcp-item-info[data-v-5d6d05f9],.skill-item-info[data-v-5d6d05f9]{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.mcp-item-name[data-v-5d6d05f9],.skill-item-name[data-v-5d6d05f9]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mcp-item-type[data-v-5d6d05f9]{font-size:10px;color:var(--text-tertiary);text-transform:uppercase}.skill-item-desc[data-v-5d6d05f9]{font-size:10px;color:var(--text-tertiary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mcp-item-status[data-v-5d6d05f9]{flex-shrink:0}.mcp-item-status .status-dot[data-v-5d6d05f9]{width:8px;height:8px;border-radius:50%;background:var(--border-secondary)}.mcp-item-status.online .status-dot[data-v-5d6d05f9]{background:#18a058;box-shadow:0 0 6px #18a05880}.mcp-item-status.error .status-dot[data-v-5d6d05f9]{background:#d03050;box-shadow:0 0 6px #d0305080}.mcp-quick-list[data-v-5d6d05f9]::-webkit-scrollbar,.skills-quick-list[data-v-5d6d05f9]::-webkit-scrollbar{width:4px}.mcp-quick-list[data-v-5d6d05f9]::-webkit-scrollbar-thumb,.skills-quick-list[data-v-5d6d05f9]::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}[data-theme=dark] .mcp-quick-list[data-v-5d6d05f9]::-webkit-scrollbar-thumb,[data-theme=dark] .skills-quick-list[data-v-5d6d05f9]::-webkit-scrollbar-thumb{background:#ffffff26}.skills-button[data-v-5d6d05f9]{padding:6px!important;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:5px;background:var(--bg-secondary);border:1px solid var(--border-primary);transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px #0000000d}.skills-button .n-icon[data-v-5d6d05f9]{color:var(--text-color-3);transition:all .25s ease}.skills-button[data-v-5d6d05f9]:hover{background:linear-gradient(135deg,#18a0581a,#18a0580d);border-color:#18a0584d;box-shadow:0 4px 12px #18a05826;transform:translateY(-1px)}.skills-button:hover .n-icon[data-v-5d6d05f9]{color:#18a058;transform:scale(1.1)}.skills-button[data-v-5d6d05f9]:active{transform:translateY(0);box-shadow:0 2px 4px #0000000d}.lock-button[data-v-5d6d05f9]{margin-left:6px;padding:6px!important;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:5px;background:var(--bg-secondary);border:1px solid var(--border-primary);transition:all .25s cubic-bezier(.4,0,.2,1);box-shadow:0 2px 4px #0000000d}.lock-button .n-icon[data-v-5d6d05f9]{color:var(--text-color-3);transition:all .25s ease}.lock-button[data-v-5d6d05f9]:hover{background:linear-gradient(135deg,#6b72801a,#6b72800d);border-color:#6b72804d;box-shadow:0 4px 12px #0000001a;transform:translateY(-1px)}.lock-button:hover .n-icon[data-v-5d6d05f9]{color:var(--text-color-1);transform:scale(1.1)}.lock-button[data-v-5d6d05f9]:active{transform:translateY(0);box-shadow:0 2px 4px #0000000d}.locked-overlay[data-v-5d6d05f9]{flex:1;display:flex;align-items:center;justify-content:center;border-radius:6px;margin:10px;position:relative;overflow:hidden;background:var(--bg-secondary);border:1px solid var(--border-primary);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.locked-overlay[data-v-5d6d05f9]:before{content:"";position:absolute;width:400px;height:400px;border-radius:50%;top:50%;left:50%;transform:translate(-50%,-50%);opacity:.4;filter:blur(60px);pointer-events:none}.locked-claude[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(24,160,88,.03) 0%,var(--bg-secondary) 50%,rgba(24,160,88,.02) 100%)}.locked-claude[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(24,160,88,.15) 0%,transparent 70%)}.locked-codex[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(59,130,246,.03) 0%,var(--bg-secondary) 50%,rgba(59,130,246,.02) 100%)}.locked-codex[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(59,130,246,.15) 0%,transparent 70%)}.locked-gemini[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(168,85,247,.03) 0%,var(--bg-secondary) 50%,rgba(168,85,247,.02) 100%)}.locked-gemini[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(168,85,247,.15) 0%,transparent 70%)}.locked-opencode[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(234,88,12,.03) 0%,var(--bg-secondary) 50%,rgba(234,88,12,.02) 100%)}.locked-opencode[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(234,88,12,.15) 0%,transparent 70%)}.locked-content[data-v-5d6d05f9]{display:flex;flex-direction:column;align-items:center;gap:20px;padding:60px 40px;text-align:center;position:relative;z-index:1}.lock-icon[data-v-5d6d05f9]{width:96px;height:96px;display:flex;align-items:center;justify-content:center;border-radius:10px;background:var(--bg-primary);border:2px solid var(--border-primary);margin-bottom:8px;position:relative;box-shadow:0 8px 24px #0000001f;animation:lock-float-5d6d05f9 3s ease-in-out infinite}@keyframes lock-float-5d6d05f9{0%,to{transform:translateY(0)}50%{transform:translateY(-6px)}}.lock-icon[data-v-5d6d05f9]:before{content:"";position:absolute;top:-8px;right:-8px;bottom:-8px;left:-8px;border-radius:20px;opacity:.6;filter:blur(12px)}.locked-claude .lock-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(24,160,88,.12) 0%,var(--bg-primary) 100%);border-color:#18a05840;box-shadow:0 8px 24px #18a05826,0 0 0 1px #18a0581a inset}.locked-claude .lock-icon[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(24,160,88,.3) 0%,transparent 60%)}.locked-claude .lock-icon .n-icon[data-v-5d6d05f9]{color:#18a058;filter:drop-shadow(0 2px 4px rgba(24,160,88,.3))}.locked-codex .lock-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(59,130,246,.12) 0%,var(--bg-primary) 100%);border-color:#3b82f640;box-shadow:0 8px 24px #3b82f626,0 0 0 1px #3b82f61a inset}.locked-codex .lock-icon[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(59,130,246,.3) 0%,transparent 60%)}.locked-codex .lock-icon .n-icon[data-v-5d6d05f9]{color:#3b82f6;filter:drop-shadow(0 2px 4px rgba(59,130,246,.3))}.locked-gemini .lock-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(168,85,247,.12) 0%,var(--bg-primary) 100%);border-color:#a855f740;box-shadow:0 8px 24px #a855f726,0 0 0 1px #a855f71a inset}.locked-gemini .lock-icon[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(168,85,247,.3) 0%,transparent 60%)}.locked-gemini .lock-icon .n-icon[data-v-5d6d05f9]{color:#a855f7;filter:drop-shadow(0 2px 4px rgba(168,85,247,.3))}.locked-opencode .lock-icon[data-v-5d6d05f9]{background:linear-gradient(135deg,rgba(234,88,12,.12) 0%,var(--bg-primary) 100%);border-color:#ea580c40;box-shadow:0 8px 24px #ea580c26,0 0 0 1px #ea580c1a inset}.locked-opencode .lock-icon[data-v-5d6d05f9]:before{background:radial-gradient(circle,rgba(234,88,12,.3) 0%,transparent 60%)}.locked-opencode .lock-icon .n-icon[data-v-5d6d05f9]{color:#ea580c;filter:drop-shadow(0 2px 4px rgba(234,88,12,.3))}.lock-icon .n-icon[data-v-5d6d05f9]{opacity:.85;position:relative;z-index:1}.locked-title[data-v-5d6d05f9]{font-size:17px;font-weight:600;color:var(--text-color-1);margin:0;letter-spacing:.3px}.locked-hint[data-v-5d6d05f9]{font-size:13px;color:var(--text-color-3);max-width:220px;line-height:1.7;opacity:.9}.channel-status[data-v-5d6d05f9]{cursor:pointer;padding:4px 8px!important;border-radius:4px;transition:all .2s ease}.channel-status[data-v-5d6d05f9]:hover{background:var(--hover-bg)}.channel-quick-panel[data-v-5d6d05f9]{padding:4px 0}.panel-title[data-v-5d6d05f9]{display:flex;justify-content:space-between;align-items:center;padding:8px 12px 12px;border-bottom:1px solid var(--border-primary);margin-bottom:8px}.panel-title span[data-v-5d6d05f9]:first-child{font-size:13px;font-weight:600;color:var(--text-primary)}.no-channels[data-v-5d6d05f9]{padding:24px 12px;text-align:center}.channel-quick-list[data-v-5d6d05f9]{max-height:360px;overflow-y:auto}.channel-quick-item[data-v-5d6d05f9]{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border-radius:6px;margin:0 4px 6px;background:var(--bg-secondary);transition:all .2s ease}.channel-quick-item[data-v-5d6d05f9]:hover{background:var(--hover-bg)}.channel-quick-item.disabled[data-v-5d6d05f9]{opacity:.6}.channel-quick-info[data-v-5d6d05f9]{display:flex;align-items:center;gap:8px;width:100%}.channel-quick-name[data-v-5d6d05f9]{font-size:13px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.channel-metrics[data-v-5d6d05f9]{display:flex;gap:6px;width:100%}.channel-metrics .metric-item[data-v-5d6d05f9]{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 4px;background:var(--bg-primary);border-radius:4px;border:1px solid var(--border-primary)}.channel-metrics .metric-label[data-v-5d6d05f9]{font-size:10px;color:var(--text-tertiary);font-weight:500}.channel-metrics .metric-value[data-v-5d6d05f9]{font-size:12px;font-weight:700;color:var(--text-primary);font-family:SF Mono,Monaco,monospace}.channel-metrics .metric-value.active[data-v-5d6d05f9]{color:#f59e0b}.channel-switching-tip[data-v-5d6d05f9]{font-size:11px;color:var(--text-tertiary);padding:0 2px}.channel-quick-item.disabled .channel-metrics .metric-value[data-v-5d6d05f9]{color:var(--text-tertiary)}.channel-quick-list[data-v-5d6d05f9]::-webkit-scrollbar{width:4px}.channel-quick-list[data-v-5d6d05f9]::-webkit-scrollbar-thumb{background:#00000026;border-radius:2px}[data-theme=dark] .channel-quick-list[data-v-5d6d05f9]::-webkit-scrollbar-thumb{background:#ffffff26}@media (max-width: 1024px){.channel-column[data-v-5d6d05f9]{border-radius:6px}.card-header[data-v-5d6d05f9]{padding:8px 10px}.card-title[data-v-5d6d05f9]{font-size:13px}.stats-inline[data-v-5d6d05f9]{gap:6px}.stat-inline-item[data-v-5d6d05f9]{padding:8px}.stat-value[data-v-5d6d05f9]{font-size:14px}.stat-label[data-v-5d6d05f9]{font-size:9px}.logs-table-header[data-v-5d6d05f9]{padding:8px 10px;font-size:10px}.log-row[data-v-5d6d05f9]{padding:8px 10px;font-size:11px}}@media (max-width: 768px){.channel-column[data-v-5d6d05f9]{border-radius:6px;min-height:300px;height:auto;max-height:400px}.card-header[data-v-5d6d05f9]{padding:8px;gap:6px}.card-title[data-v-5d6d05f9]{font-size:12px}.stats-inline[data-v-5d6d05f9]{gap:4px}.stat-inline-item[data-v-5d6d05f9]{padding:6px;gap:6px}.stat-icon-dot[data-v-5d6d05f9]{width:6px;height:6px}.stat-value[data-v-5d6d05f9]{font-size:13px}.stat-label[data-v-5d6d05f9]{font-size:8px}.logs-card[data-v-5d6d05f9]{min-height:150px}.logs-table-header[data-v-5d6d05f9]{padding:6px 8px;font-size:9px}.log-row[data-v-5d6d05f9]{padding:6px 8px;font-size:10px;min-height:32px}.col-token[data-v-5d6d05f9]{font-size:10px;padding:2px 4px}.col-time[data-v-5d6d05f9]{font-size:9px}.mcp-count-tag[data-v-5d6d05f9],.skills-count-tag[data-v-5d6d05f9]{font-size:9px;padding:0 6px;height:18px;line-height:18px}.skills-button[data-v-5d6d05f9]{padding:4px 8px;font-size:10px;gap:4px}.lock-button[data-v-5d6d05f9]{width:26px;height:26px}}@media (max-width: 640px){.channel-column[data-v-5d6d05f9]{min-height:250px;max-height:350px}.card-header[data-v-5d6d05f9]{padding:6px;gap:4px;flex-wrap:wrap}.card-title[data-v-5d6d05f9]{font-size:11px}.stats-card .card-content[data-v-5d6d05f9]{padding:6px}.stats-inline[data-v-5d6d05f9]{gap:3px;flex-wrap:wrap}.stat-inline-item[data-v-5d6d05f9]{padding:5px;gap:4px;min-width:calc(33% - 3px);flex:1 1 auto}.stat-icon-dot[data-v-5d6d05f9]{width:5px;height:5px}.stat-value[data-v-5d6d05f9]{font-size:12px}.stat-label[data-v-5d6d05f9]{font-size:7px}.logs-card[data-v-5d6d05f9]{min-height:120px}.logs-table-header[data-v-5d6d05f9]{padding:5px 6px;font-size:8px;letter-spacing:.3px}.log-row[data-v-5d6d05f9]{padding:5px 6px;font-size:9px;min-height:28px}.col-channel .n-tag[data-v-5d6d05f9]{font-size:9px;padding:2px 6px}.col-token[data-v-5d6d05f9]{font-size:9px;padding:2px 3px;margin:0 1px}.col-time[data-v-5d6d05f9]{font-size:8px}.claude-extra-area[data-v-5d6d05f9]{gap:4px}.mcp-count-tag[data-v-5d6d05f9],.skills-count-tag[data-v-5d6d05f9]{font-size:8px;padding:0 4px;height:16px;line-height:16px}.skills-button[data-v-5d6d05f9]{padding:3px 6px;font-size:9px;gap:3px}.skills-button .n-icon[data-v-5d6d05f9]{font-size:12px!important}.lock-button[data-v-5d6d05f9]{width:24px;height:24px;margin-left:4px}.lock-button .n-icon[data-v-5d6d05f9]{font-size:12px!important}.locked-content[data-v-5d6d05f9]{padding:30px 20px;gap:12px}.lock-icon[data-v-5d6d05f9]{width:64px;height:64px}.lock-icon .n-icon[data-v-5d6d05f9]{font-size:28px!important}.lock-title[data-v-5d6d05f9]{font-size:14px}.lock-subtitle[data-v-5d6d05f9]{font-size:10px}.unlock-btn[data-v-5d6d05f9]{padding:8px 16px;font-size:11px}}@media (max-width: 480px){.channel-column[data-v-5d6d05f9]{min-height:220px;max-height:300px}.card-header[data-v-5d6d05f9]{padding:5px}.card-title[data-v-5d6d05f9]{font-size:10px}.stats-inline[data-v-5d6d05f9]{gap:2px}.stat-inline-item[data-v-5d6d05f9]{padding:4px;gap:3px}.stat-value[data-v-5d6d05f9]{font-size:11px}.stat-label[data-v-5d6d05f9]{font-size:6px}.logs-table-header[data-v-5d6d05f9]{padding:4px 5px;font-size:7px}.log-row[data-v-5d6d05f9]{padding:4px 5px;font-size:8px;min-height:24px}.col-token[data-v-5d6d05f9]{font-size:8px}.col-time[data-v-5d6d05f9]{font-size:7px}}.card[data-v-5d6d05f9]:not(.logs-card) .n-collapse{background:transparent}.card[data-v-5d6d05f9]:not(.logs-card) .n-collapse-item{background:transparent}.card[data-v-5d6d05f9] .n-collapse-item__header{padding:12px 16px;background:transparent;transition:all .3s ease}.card[data-v-5d6d05f9] .n-collapse-item__header:hover{background:#00000005}.card[data-v-5d6d05f9] .n-collapse-item__header-main{width:100%}.card[data-v-5d6d05f9]:not(.logs-card) .n-collapse-item__content-wrapper{padding:0 16px 12px}.card[data-v-5d6d05f9]:not(.logs-card) .n-collapse-item__content-inner{padding-top:0}.chart-card[data-v-5d6d05f9]:has(.n-collapse){padding:0}.dashboard-container[data-v-06100f0f]{height:100%;background:var(--bg-primary);overflow:hidden;padding:12px;box-sizing:border-box;display:flex;flex-direction:column}.dashboard-toolbar[data-v-06100f0f]{display:flex;justify-content:flex-end;margin-bottom:8px;flex-shrink:0}.analytics-link[data-v-06100f0f]{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--primary-color, #18a058);text-decoration:none;padding:4px 10px;border-radius:4px;background:#18a05814;transition:background .2s}.analytics-link[data-v-06100f0f]:hover{background:#18a05826}.analytics-link-icon[data-v-06100f0f]{font-size:14px}.dashboard-grid[data-v-06100f0f]{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;flex:1;min-height:0;overflow:hidden;box-sizing:border-box}.dashboard-grid[data-v-06100f0f] .sortable-ghost{opacity:.4}.dashboard-grid[data-v-06100f0f] .sortable-chosen{box-shadow:0 8px 24px #00000026}@media (max-width: 1600px){.dashboard-grid[data-v-06100f0f]{grid-template-columns:repeat(3,1fr)}}@media (max-width: 1200px){.dashboard-grid[data-v-06100f0f]{grid-template-columns:repeat(2,1fr)}}@media (max-width: 1024px){.dashboard-container[data-v-06100f0f]{padding:10px}.dashboard-grid[data-v-06100f0f]{gap:10px}}@media (max-width: 900px){.dashboard-grid[data-v-06100f0f]{grid-template-columns:1fr}}@media (max-width: 768px){.dashboard-container[data-v-06100f0f]{padding:8px;overflow-y:auto}.dashboard-grid[data-v-06100f0f]{gap:8px;overflow:visible;min-height:auto}}@media (max-width: 640px){.dashboard-container[data-v-06100f0f]{padding:6px}.dashboard-grid[data-v-06100f0f]{gap:6px}}@media (max-width: 480px){.dashboard-container[data-v-06100f0f]{padding:4px}.dashboard-grid[data-v-06100f0f]{gap:4px}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as e}from"./vendors-DMjSfzlv.js";import{a8 as a,f as l,r as n,w as s,h as c,K as t,a7 as o,c as i,o as u,a as d,W as r,X as v,a0 as p,Y as h,N as y,a3 as g,_ as m,p as f,F as k,$ as T,L as b,Z as x,v as C}from"./vue-vendor-DET08QYg.js";import{_ as w,u as _,a as $,R as z,g as q,b as S,c as L,d as I,e as O,f as j,t as M,h as N,i as A,j as F,k as P,l as U,m as D,n as E,o as V,s as J}from"./index-CaKktouI.js";import{E as G,o as K,n as R,m as Z,ar as B,R as H,as as W,at as X,au as Y,av as Q,aa as ee,i as ae,A as le,aw as ne,ax as se,T as ce,a as te}from"./icons-B29onFfZ.js";import{L as oe,N as ie,c as ue,b as de,a as re,Z as ve,B as pe,s as he}from"./naive-ui-CxpuzdjU.js";import"./markdown-C9MYpaSi.js";const ye={class:"channel-column"},ge={class:"drag-handle",title:"拖拽排序"},me={class:"header-icon"},fe={class:"channel-title"},ke={class:"mcp-quick-panel"},Te={class:"panel-title"},be={key:0,class:"no-items"},xe={key:1,class:"mcp-quick-list"},Ce={class:"mcp-item-icon"},we={class:"mcp-item-info"},_e={class:"mcp-item-name"},$e={class:"mcp-item-type"},ze={key:1,class:"claude-extra-area"},qe={class:"skills-quick-panel"},Se={class:"panel-title"},Le={key:0,class:"no-items"},Ie={key:1,class:"skills-quick-list"},Oe={class:"skill-item-icon"},je={class:"skill-item-info"},Me={class:"skill-item-name"},Ne={class:"skill-item-desc"},Ae={key:0,class:"channel-content"},Fe={class:"card"},Pe={class:"card-header"},Ue={key:0,class:"runtime-badge"},De={class:"card-body",style:{padding:"6px 10px"}},Ee={class:"proxy-info-row"},Ve={class:"proxy-status"},Je={class:"proxy-port"},Ge={class:"channel-name"},Ke={class:"channel-quick-panel"},Re={class:"panel-title"},Ze={key:0,class:"no-channels"},Be={key:1,class:"channel-quick-list"},He={class:"channel-quick-info"},We={class:"channel-quick-name"},Xe={key:0,class:"channel-switching-tip"},Ye={class:"channel-metrics"},Qe={class:"metric-item"},ea={class:"metric-value"},aa={class:"metric-item"},la={class:"metric-value"},na={class:"metric-item"},sa={class:"metric-value"},ca={class:"metric-item"},ta={class:"card"},oa={class:"card-header compact"},ia={class:"card-body",style:{padding:"8px 10px"}},ua={class:"quick-access-list"},da={class:"access-icon"},ra={class:"access-content"},va={class:"access-value"},pa={class:"access-icon"},ha={class:"access-content"},ya={class:"access-value"},ga={class:"access-icon"},ma={class:"access-content"},fa={class:"access-goto"},ka={class:"card-header compact"},Ta={class:"card-body",style:{padding:"8px 10px"}},ba={class:"stats-inline stats-3col"},xa={class:"stat-inline-item stat-requests"},Ca={class:"stat-info"},wa={class:"stat-inline-item stat-input"},_a={class:"stat-info"},$a={class:"stat-inline-item stat-output"},za={class:"stat-info"},qa={key:1,class:"card logs-card"},Sa={class:"card-header compact"},La={class:"card-body logs-card-body"},Ia={class:"logs-table-wrapper"},Oa={key:0,class:"empty-logs"},ja={key:0,class:"action-content"},Ma={class:"action-msg"},Na={class:"action-time"},Aa={class:"locked-content"},Fa={class:"lock-icon"},Pa="channelLocks",Ua=w({__name:"ChannelColumn",props:{channelType:{type:String,required:!0,validator:e=>["claude","codex","gemini","opencode"].includes(e)}},setup(e){let w=null,V=null;const J=e,Ua=a(),Da=oe(),{claudeProxy:Ea,codexProxy:Va,geminiProxy:Ja,opencodeProxy:Ga,claudeChannels:Ka,codexChannels:Ra,geminiChannels:Za,opencodeChannels:Ba,schedulerState:Ha,getProxyState:Wa,startProxy:Xa,stopProxy:Ya,getLogs:Qa,clearLogsForSource:el,loadChannels:al,logLimit:ll,statsInterval:nl}=_(),{dashboardData:sl,loadDashboard:cl}=$(),tl={claude:{title:"ClaudeCode",subtitle:"智能编程助手",icon:Z},codex:{title:"Codex-CLI",subtitle:"高效代码生成",icon:R},gemini:{title:"Gemini-CLI",subtitle:"多模态AI助手",icon:K},opencode:{title:"OpenCode",subtitle:"AI 代码助手",icon:G}},ol=l(()=>tl[J.channelType].title);l(()=>tl[J.channelType].subtitle);const il=l(()=>tl[J.channelType].icon),ul=l(()=>"claude"===J.channelType?Ea.value:"codex"===J.channelType?Va.value:"gemini"===J.channelType?Ja.value:"opencode"===J.channelType?Ga.value:{}),dl=l(()=>"claude"===J.channelType?"Claude":"codex"===J.channelType?"Codex":"gemini"===J.channelType?"Gemini":"opencode"===J.channelType?"OpenCode":""),rl=n({projects:0,sessions:0}),vl=n({requests:0,tokens:0,cost:0}),pl=n({requests:0,tokens:0,cost:0}),hl={requests:0,tokens:0,cost:3};let yl={requests:null,tokens:null,cost:null};const gl=n({requests:!1,tokens:!1,cost:!1}),ml=l(()=>{var e,a,l;const n="claude"===J.channelType?"claude":"codex"===J.channelType?"codex":"opencode"===J.channelType?"opencode":"gemini";return(null==(l=null==(a=null==(e=sl.value)?void 0:e.todayStats)?void 0:a[n])?void 0:l.byModel)||{}});function fl(e,a,l,n=600){yl[e]&&cancelAnimationFrame(yl[e]),gl.value[e]=!0;const s=Date.now(),c=()=>{const t=Date.now()-s,o=Math.min(t/n,1),i=1-Math.pow(1-o,2),u=a+(l-a)*i,d=hl[e]??0,r=Math.pow(10,d),v=d>0?Math.round(u*r)/r:Math.round(u);pl.value[e]=v,o<1?yl[e]=requestAnimationFrame(c):gl.value[e]=!1};yl[e]=requestAnimationFrame(c)}const kl=n(!1),Tl=n(0),bl=n([]),xl=n(0),Cl=n([]),wl=l(()=>({claude:"Claude",codex:"Codex",gemini:"Gemini",opencode:"OpenCode"}[J.channelType]||""));async function _l(){if(["claude","codex","gemini","opencode"].includes(J.channelType))try{const e=await O(!1,J.channelType);if(e.success&&e.skills){const a=e.skills.filter(e=>e.installed);Tl.value=a.length,bl.value=a.slice(0,10).map(e=>({...e,_uninstalling:!1}))}}catch(e){}}async function $l(e=!1){try{const a=await async function(e=!1){if(!e&&w)return w;if(!e&&V)return V;const a=D().then(e=>(w=(null==e?void 0:e.success)&&e.servers?Object.values(e.servers):[],w)).finally(()=>{V=null});return V=a,a}(e),l=a.filter(e=>{var a;return!0===(null==(a=e.apps)?void 0:a[J.channelType])});xl.value=l.length,Cl.value=l.slice(0,10).map(e=>({...e,_toggling:!1}))}catch(a){}}function zl(e){try{const a=localStorage.getItem(Pa),l=a?JSON.parse(a):{};l[J.channelType]=e,localStorage.setItem(Pa,JSON.stringify(l))}catch(a){}}const ql=n(function(){try{const e=localStorage.getItem(Pa);if(e){return JSON.parse(e)[J.channelType]||!1}}catch(e){}return!1}());async function Sl(){ql.value=!ql.value,zl(ql.value);try{if(await E("channelLocks",J.channelType,ql.value),sl.value){const e=sl.value.uiConfig||{},a={...e.channelLocks||{}};a[J.channelType]=ql.value,sl.value={...sl.value,uiConfig:{...e,channelLocks:a}}}}catch(e){}}const Ll=n(!0);function Il(e){e.detail&&void 0!==e.detail.showLogs&&(Ll.value=e.detail.showLogs)}const Ol=n(Date.now()),jl=l(()=>{if(!ul.value.running)return"";const e=ul.value.startTime;if(!e)return"";const a=Ol.value-e;if(a<=0)return"";const l=Math.floor(a/1e3),n=Math.floor(l/3600),s=Math.floor(l%3600/60),c=l%60;let t="已运行 ";return n>0&&(t+=`${n}小时`),s>0&&(t+=`${s}分`),(c>0||0===n&&0===s)&&(t+=`${c}秒`),t}),Ml=n(null),Nl=l(()=>ll.value),Al={claude:Qa("claude"),codex:Qa("codex"),gemini:Qa("gemini"),opencode:Qa("opencode")},Fl=l(()=>((Al[J.channelType]||Al.claude).value||[]).slice(0,Nl.value));let Pl=null,Ul=null,Dl=null,El=!1,Vl=null;const Jl=l(()=>{let e=[];"claude"===J.channelType?e=Ka.value||[]:"codex"===J.channelType?e=Ra.value||[]:"gemini"===J.channelType?e=Za.value||[]:"opencode"===J.channelType&&(e=Ba.value||[]);return[...e.filter(e=>!1!==e.enabled),...e.filter(e=>!1===e.enabled)]});function Gl(e){const a=Ha[J.channelType];if(!a||!a.channels)return 0;const l=a.channels.find(a=>a.id===e);return l?l.inflight:0}const Kl=l(()=>{var e;const a=Jl.value.filter(e=>!1!==e.enabled).length;return(null==(e=ul.value.proxy)?void 0:e.running)?`${a}个渠道调度中`:Jl.value.length>0?`${a}个渠道已启用`:"无渠道"}),Rl=n({});function Zl(e){return Rl.value[e]||{requests:0,tokens:0,cost:0}}async function Bl(){var e;try{let a;if("claude"===J.channelType?a=await q():"codex"===J.channelType?a=await S():"gemini"===J.channelType?a=await L():"opencode"===J.channelType&&(a=await I()),a&&a.byChannel){const l={};for(const[n,s]of Object.entries(a.byChannel))l[n]={requests:s.requests||0,tokens:(null==(e=s.tokens)?void 0:e.total)||0,cost:s.cost||0};Rl.value=l}}catch(a){}}async function Hl(e){var a,l;const n=Wa(J.channelType);n.value.loading=!0;try{let a;a=e?await Xa(J.channelType):await Ya(J.channelType,{refreshChannelsDrawer:!0}),!1!==a.success?Da.success(e?`${ol.value} 代理已启动`:`${ol.value} 代理已停止`):(Da.error(a.error||"操作失败"),n.value.running=!e)}catch(s){Da.error((null==(l=null==(a=s.response)?void 0:a.data)?void 0:l.error)||s.message||"操作失败"),n.value.running=!e}finally{n.value.loading=!1}}function Wl(){Ua.push({name:`${J.channelType}-projects`})}function Xl(){Ua.push({name:`${J.channelType}-projects`})}s(Fl,e=>{var a;const l=(null==(a=e[0])?void 0:a.id)||null;if(!l||l===Pl)return void(Pl=l);Pl=l,Vl&&clearTimeout(Vl),Vl=setTimeout(()=>{Bl()},5e3);(!Ml.value||Ml.value.scrollTop<20)&&C(()=>{Ml.value&&(Ml.value.scrollTop=0)})}),s(()=>vl.value.requests,e=>{fl("requests",pl.value.requests,e,600)}),s(()=>vl.value.tokens,e=>{fl("tokens",pl.value.tokens,e,600)}),s(()=>vl.value.cost,e=>{fl("cost",pl.value.cost,e,600)}),s(()=>J.channelType,()=>{var e;Pl=(null==(e=Fl.value[0])?void 0:e.id)||null}),s(()=>{var e,a;return null==(a=null==(e=sl.value)?void 0:e.counts)?void 0:a[J.channelType]},()=>{an()}),s(nl,()=>{El&&function(){Ul&&(clearInterval(Ul),Ul=null);const e=nl.value||30,a=Math.max(1e3*e,1e4);Ul=setInterval(()=>{ln(),Bl()},a)}()});const Yl=n({});function Ql(e){return!!Yl.value[e]}function en(e,a){e&&(Yl.value={...Yl.value,[e]:!!a})}function an(){var e,a;const l=null==(a=null==(e=sl.value)?void 0:e.counts)?void 0:a[J.channelType];rl.value.projects=(null==l?void 0:l.projectCount)||0,rl.value.sessions=(null==l?void 0:l.sessionCount)||0}async function ln(){if(sl.value&&sl.value.todayStats){const e=sl.value.todayStats[J.channelType];e&&(vl.value.requests=e.requests||0,vl.value.tokens=e.tokens||0,vl.value.cost=e.cost||0)}an()}function nn(){el(J.channelType)}function sn(){window.dispatchEvent(new CustomEvent("open-skills-drawer",{detail:{platform:J.channelType}}))}return c(async()=>{await Promise.all([cl().then(()=>ln()),Bl()]),_l(),$l(),async function(){var e,a;try{if(sl.value&&sl.value.uiConfig)Ll.value=!1!==(null==(e=sl.value.uiConfig.panelVisibility)?void 0:e.showLogs);else{const e=await j();e.success&&e.config&&(Ll.value=!1!==(null==(a=e.config.panelVisibility)?void 0:a.showLogs))}}catch(l){}}(),async function(){var e,a;try{let l=!1;if(sl.value&&sl.value.uiConfig)l=(null==(e=sl.value.uiConfig.channelLocks)?void 0:e[J.channelType])||!1;else{const e=await j();e.success&&e.config&&(l=(null==(a=e.config.channelLocks)?void 0:a[J.channelType])||!1)}ql.value=l,zl(l)}catch(l){}}(),window.addEventListener("panel-visibility-change",Il),pl.value={...vl.value},El=!0,Dl=setInterval(()=>{Ol.value=Date.now()},1e3)}),t(()=>{El=!1,Ul&&clearInterval(Ul),Dl&&clearInterval(Dl),Vl&&clearTimeout(Vl),window.removeEventListener("panel-visibility-change",Il),Object.values(yl).forEach(e=>{e&&cancelAnimationFrame(e)})}),(a,l)=>{const n=o("n-collapse");return u(),i("div",ye,[d("div",{class:b(["channel-header",e.channelType])},[d("div",ge,[v(y(ie),{size:16},{default:h(()=>[v(y(B))]),_:1})]),d("div",me,[v(y(ie),{size:20},{default:h(()=>[(u(),p(g(il.value)))]),_:1})]),d("h2",fe,m(ol.value),1),xl.value>0?(u(),p(y(ve),{key:0,trigger:"click",placement:"bottom",width:340,class:"mcp-popover"},{trigger:h(()=>[v(y(re),{type:"info",size:"small",bordered:!1,class:"mcp-count-tag clickable"},{default:h(()=>[f(" 已启用 "+m(xl.value)+" 个 MCP ",1)]),_:1})]),default:h(()=>[d("div",ke,[d("div",Te,[l[3]||(l[3]=d("span",null,"已启用的 MCP 服务",-1)),v(y(ue),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[f(m(wl.value)+" 平台",1)]),_:1})]),0===Cl.value.length?(u(),i("div",be,[v(y(ue),{depth:"3"},{default:h(()=>[...l[4]||(l[4]=[f("暂无启用的 MCP 服务",-1)])]),_:1})])):(u(),i("div",xe,[(u(!0),i(k,null,T(Cl.value,e=>(u(),i("div",{key:e.id,class:"mcp-quick-item"},[d("div",Ce,[v(y(ie),{size:14},{default:h(()=>[v(y(H))]),_:1})]),d("div",we,[d("span",_e,m(e.name),1),d("span",$e,m(e.transportType||"stdio"),1)]),v(y(de),{size:"small",value:!0,"onUpdate:value":a=>async function(e,a){e._toggling=!0;try{await M(e.id,J.channelType,a),Da.success(a?`已启用 ${e.name}`:`已禁用 ${e.name}`),await $l(!0)}catch(l){Da.error("操作失败: "+(l.message||"未知错误"))}finally{e._toggling=!1}}(e,a),loading:e._toggling},null,8,["onUpdate:value","loading"])]))),128))]))])]),_:1})):r("",!0),["claude","codex","gemini","opencode"].includes(e.channelType)?(u(),i("div",ze,[Tl.value>0?(u(),p(y(ve),{key:0,trigger:"click",placement:"bottom",width:340,class:"skills-popover"},{trigger:h(()=>[v(y(re),{type:"success",size:"small",bordered:!1,class:"skills-count-tag clickable"},{default:h(()=>[f(m(Tl.value)+" 个技能 ",1)]),_:1})]),default:h(()=>[d("div",qe,[d("div",Se,[l[6]||(l[6]=d("span",null,"已安装的技能",-1)),v(y(pe),{text:"",size:"tiny",onClick:sn},{default:h(()=>[...l[5]||(l[5]=[f(" 管理全部 ",-1)])]),_:1})]),0===bl.value.length?(u(),i("div",Le,[v(y(ue),{depth:"3"},{default:h(()=>[...l[7]||(l[7]=[f("暂无已安装的技能",-1)])]),_:1})])):(u(),i("div",Ie,[(u(!0),i(k,null,T(bl.value,e=>(u(),i("div",{key:e.id,class:"skill-quick-item"},[d("div",Oe,[v(y(ie),{size:14},{default:h(()=>[v(y(G))]),_:1})]),d("div",je,[d("span",Me,m(e.name),1),d("span",Ne,m(e.description||"无描述"),1)]),v(y(pe),{size:"tiny",tertiary:"",type:"error",onClick:a=>async function(e){e._uninstalling=!0;try{const a=await N(e.directory,J.channelType);a.success?(Da.success(`已卸载 ${e.name}`),await _l()):Da.error(a.error||"卸载失败")}catch(a){Da.error("卸载失败: "+(a.message||"未知错误"))}finally{e._uninstalling=!1}}(e),loading:e._uninstalling},{default:h(()=>[...l[8]||(l[8]=[f(" 卸载 ",-1)])]),_:1},8,["onClick","loading"])]))),128))]))])]),_:1})):r("",!0),v(y(he),{trigger:"hover"},{trigger:h(()=>[v(y(pe),{text:"",class:"skills-button",onClick:sn,title:"Skills 技能管理"},{icon:h(()=>[v(y(ie),{size:18},{default:h(()=>[v(y(G))]),_:1})]),_:1})]),default:h(()=>[l[9]||(l[9]=f(" Skills 技能管理 ",-1))]),_:1})])):r("",!0),v(y(pe),{text:"",class:"lock-button",onClick:Sl,title:ql.value?"解锁此列":"锁定此列"},{icon:h(()=>[v(y(ie),{size:18},{default:h(()=>[ql.value?(u(),p(y(W),{key:0})):(u(),p(y(X),{key:1}))]),_:1})]),_:1},8,["title"])],2),ql.value?r("",!0):(u(),i("div",Ae,[d("div",Fe,[d("div",Pe,[v(y(ie),{size:16},{default:h(()=>[v(y(Y))]),_:1}),l[10]||(l[10]=d("h3",{class:"card-title"},"代理控制",-1)),ul.value.running&&jl.value?(u(),i("span",Ue,m(jl.value),1)):r("",!0),v(y(de),{value:ul.value.running,"onUpdate:value":[l[0]||(l[0]=e=>ul.value.running=e),Hl],loading:ul.value.loading,size:"small",style:{"margin-left":"auto"}},null,8,["value","loading"])]),d("div",De,[d("div",Ee,[d("div",Ve,[d("div",{class:b(["status-dot",{active:ul.value.running}])},null,2),v(y(ue),{type:ul.value.running?"success":"default",style:{"font-size":"12px"}},{default:h(()=>[f(m(ul.value.running?"运行中":"已停止"),1)]),_:1},8,["type"]),d("span",Je,"端口: "+m(ul.value.port),1)]),v(y(ve),{trigger:"click",placement:"bottom",width:320,class:"channel-popover"},{trigger:h(()=>[v(y(pe),{text:"",size:"tiny",class:"channel-status"},{default:h(()=>[d("span",Ge,m(Kl.value),1)]),_:1})]),default:h(()=>[d("div",Ke,[d("div",Re,[l[12]||(l[12]=d("span",null,"渠道快捷管理",-1)),v(y(ue),{depth:"3",style:{"font-size":"11px"}},{default:h(()=>[...l[11]||(l[11]=[f("点击开关切换状态",-1)])]),_:1})]),0===Jl.value.length?(u(),i("div",Ze,[v(y(ue),{depth:"3"},{default:h(()=>[...l[13]||(l[13]=[f("暂无配置渠道",-1)])]),_:1})])):(u(),i("div",Be,[(u(!0),i(k,null,T(Jl.value,e=>{var a,n;return u(),i("div",{key:e.id,class:b(["channel-quick-item",{disabled:!1===e.enabled}])},[d("div",He,[d("span",We,m(e.name),1),"frozen"===(null==(a=e.health)?void 0:a.status)?(u(),p(y(re),{key:0,size:"tiny",type:"error",bordered:!1},{default:h(()=>[...l[14]||(l[14]=[f(" 冻结 ",-1)])]),_:1})):r("",!0),v(y(de),{size:"small",value:!1!==e.enabled,"onUpdate:value":a=>async function(e,a){if(e&&!Ql(e.id)){en(e.id,!0);try{let l;"claude"===J.channelType?l=A:"codex"===J.channelType?l=F:"gemini"===J.channelType?l=P:"opencode"===J.channelType&&(l=U),l&&(await l(e.id,{enabled:a}),Da.success(a?`渠道「${e.name}」已启用`:`渠道「${e.name}」已停用`),await al())}catch(l){Da.error("操作失败: "+l.message)}finally{en(e.id,!1)}}}(e,a),loading:Ql(e.id),disabled:Ql(e.id),style:{"margin-left":"auto"}},null,8,["value","onUpdate:value","loading","disabled"])]),Ql(e.id)?(u(),i("div",Xe," 正在切换渠道状态... ")):r("",!0),d("div",Ye,[d("span",Qe,[l[15]||(l[15]=d("span",{class:"metric-label"},"请求",-1)),d("span",ea,m(Zl(e.id).requests),1)]),d("span",aa,[l[16]||(l[16]=d("span",{class:"metric-label"},"Tokens",-1)),d("span",la,m((n=Zl(e.id).tokens,n>=1e6?(n/1e6).toFixed(1)+"M":n>=1e3?(n/1e3).toFixed(1)+"K":n.toString())),1)]),d("span",na,[l[17]||(l[17]=d("span",{class:"metric-label"},"权重",-1)),d("span",sa,m(e.weight||1),1)]),d("span",ca,[l[18]||(l[18]=d("span",{class:"metric-label"},"并发",-1)),d("span",{class:b(["metric-value",{active:Gl(e.id)>0}])},m(Gl(e.id))+m(e.maxConcurrency?`/${e.maxConcurrency}`:""),3)])])],2)}),128))]))])]),_:1})])])]),d("div",ta,[d("div",oa,[v(y(ie),{size:14},{default:h(()=>[v(y(Q))]),_:1}),l[19]||(l[19]=d("h3",{class:"card-title"},"快速访问",-1))]),d("div",ia,[d("div",ua,[d("div",{class:"access-card access-card-projects clickable",onClick:Wl},[d("div",da,[v(y(ie),{size:16},{default:h(()=>[v(y(ee))]),_:1})]),d("div",ra,[l[20]||(l[20]=d("span",{class:"access-label"},"项目",-1)),d("span",va,m(rl.value.projects),1)])]),d("div",{class:"access-card access-card-sessions clickable",onClick:l[1]||(l[1]=e=>kl.value=!0)},[d("div",pa,[v(y(ie),{size:16},{default:h(()=>[v(y(ae))]),_:1})]),d("div",ha,[l[21]||(l[21]=d("span",{class:"access-label"},"最新对话",-1)),d("span",ya,m(rl.value.sessions),1)])]),d("div",{class:"access-card access-card-goto clickable",onClick:Xl},[d("div",ga,[v(y(ie),{size:16},{default:h(()=>[v(y(le))]),_:1})]),d("div",ma,[l[22]||(l[22]=d("span",{class:"access-label"},"前往",-1)),d("span",fa,m(dl.value),1)])])])])]),d("div",{class:b(["card stats-card",`stats-card-${e.channelType}`])},[d("div",ka,[v(y(ie),{size:14},{default:h(()=>[v(y(ne))]),_:1}),l[23]||(l[23]=d("h3",{class:"card-title"},"今日数据",-1))]),d("div",Ta,[d("div",ba,[d("div",xa,[l[25]||(l[25]=d("div",{class:"stat-icon-dot requests"},null,-1)),d("div",Ca,[l[24]||(l[24]=d("span",{class:"stat-label"},"请求",-1)),d("span",{class:b(["stat-value",{animating:gl.value.requests}])},m(pl.value.requests),3)])]),d("div",wa,[l[27]||(l[27]=d("div",{class:"stat-icon-dot tokens"},null,-1)),d("div",_a,[l[26]||(l[26]=d("span",{class:"stat-label"},"总 Tokens",-1)),d("span",{class:b(["stat-value",{animating:gl.value.tokens}])},m((c=pl.value.tokens,c>=1e6?(c/1e6).toFixed(1)+"M":c>=1e3?(c/1e3).toFixed(1)+"K":c.toString())),3)])]),d("div",$a,[l[29]||(l[29]=d("div",{class:"stat-icon-dot cost"},null,-1)),d("div",za,[l[28]||(l[28]=d("span",{class:"stat-label"},"成本 / USD",-1)),d("span",{class:b(["stat-value",{animating:gl.value.cost}])},m((s=pl.value.cost,!s||Number.isNaN(s)?"$0":"$"+Number(s).toFixed(3))),3)])])])])],2),Object.keys(ml.value).length>0?(u(),i("div",{key:0,class:b(["card chart-card",`chart-card-${e.channelType}`])},[v(n,{"default-expanded-names":[],accordion:""})],2)):r("",!0),Ll.value?(u(),i("div",qa,[d("div",Sa,[v(y(ie),{size:14},{default:h(()=>[v(y(se))]),_:1}),l[30]||(l[30]=d("h3",{class:"card-title"},"实时日志",-1)),v(y(pe),{text:"",size:"tiny",onClick:x(nn,["stop"]),style:{"margin-left":"auto"},title:"清空日志"},{icon:h(()=>[v(y(ie),{size:14},{default:h(()=>[v(y(ce))]),_:1})]),_:1})]),d("div",La,[d("div",Ia,[d("div",{class:b(["logs-table-header",`logs-header-${e.channelType}`])},[d("div",{class:b(["log-col col-channel",`col-channel-${e.channelType}`])},"渠道",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"请求",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"回复",2),"claude"===e.channelType?(u(),i(k,{key:0},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"写入",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"命中",2)],64)):"codex"===e.channelType?(u(),i(k,{key:1},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"推理",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2)],64)):"gemini"===e.channelType?(u(),i(k,{key:2},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"总计",2)],64)):"opencode"===e.channelType?(u(),i(k,{key:3},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"缓存",2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},"总计",2)],64)):r("",!0),d("div",{class:b(["log-col col-time",`col-time-${e.channelType}`])},"时间",2)],2),d("div",{class:"logs-container",ref_key:"logsContainer",ref:Ml},[0===Fl.value.length?(u(),i("div",Oa,[v(y(ie),{size:32,depth:"3",style:{"margin-bottom":"8px"}},{default:h(()=>[v(y(se))]),_:1}),v(y(ue),{depth:"3",style:{"font-size":"12px","font-weight":"500"}},{default:h(()=>[...l[31]||(l[31]=[f("暂无实时日志",-1)])]),_:1}),v(y(ue),{depth:"3",style:{"font-size":"11px","margin-top":"4px"}},{default:h(()=>[...l[32]||(l[32]=[f("开启代理后将显示请求记录",-1)])]),_:1})])):r("",!0),(u(!0),i(k,null,T(Fl.value,a=>{var l,n,s,c,t,o,p,g,T,x;return u(),i("div",{key:a.id,class:b(["log-row",{"action-row":"action"===a.type,"new-log":a.isNew}])},["action"===a.type?(u(),i("div",ja,[v(y(ie),{size:12,color:"#18a058"},{default:h(()=>[v(y(te))]),_:1}),d("span",Ma,m(a.message),1),d("span",Na,m(a.time),1)])):(u(),i(k,{key:1},[d("div",{class:b(["log-col col-channel",`col-channel-${e.channelType}`])},[v(y(re),{size:"tiny",type:"success"},{default:h(()=>[f(m(a.channel),1)]),_:2},1024)],2),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(l=a.tokens)?void 0:l.input)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(n=a.tokens)?void 0:n.output)||0),3),"claude"===e.channelType?(u(),i(k,{key:0},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(s=a.tokens)?void 0:s.cacheCreation)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(c=a.tokens)?void 0:c.cacheRead)||0),3)],64)):"codex"===e.channelType?(u(),i(k,{key:1},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(t=a.tokens)?void 0:t.reasoning)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(o=a.tokens)?void 0:o.cached)||0),3)],64)):"gemini"===e.channelType?(u(),i(k,{key:2},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(p=a.tokens)?void 0:p.cached)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(g=a.tokens)?void 0:g.total)||0),3)],64)):"opencode"===e.channelType?(u(),i(k,{key:3},[d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(T=a.tokens)?void 0:T.cached)||0),3),d("div",{class:b(["log-col col-token",`col-token-${e.channelType}`])},m((null==(x=a.tokens)?void 0:x.total)||0),3)],64)):r("",!0),d("div",{class:b(["log-col col-time",`col-time-${e.channelType}`])},m(a.time),3)],64))],2)}),128))],512)])])])):r("",!0)])),ql.value?(u(),i("div",{key:1,class:b(["locked-overlay",`locked-${e.channelType}`])},[d("div",Aa,[d("div",Fa,[v(y(ie),{size:48},{default:h(()=>[v(y(W))]),_:1})]),l[34]||(l[34]=d("h3",{class:"locked-title"},"该渠道已锁定",-1)),v(y(ue),{depth:"3",class:"locked-hint"},{default:h(()=>[...l[33]||(l[33]=[f(" 点击上方按钮解锁以查看内容 ",-1)])]),_:1})])],2)):r("",!0),v(z,{visible:kl.value,"onUpdate:visible":l[2]||(l[2]=e=>kl.value=e),channel:e.channelType},null,8,["visible","channel"])]);var s,c}}},[["__scopeId","data-v-5d6d05f9"]]),Da=n({theme:"light",panelVisibility:{showChannels:!0,showLogs:!0},channelLocks:{claude:!1,codex:!1,gemini:!1},channelCollapse:{claude:[],codex:[],gemini:[]},channelOrder:{claude:[],codex:[],gemini:[]}});let Ea=!1,Va=null;async function Ja(){return Ea?Da.value:Va||(Va=(async()=>{try{const e=await j();e.success&&e.config&&(Da.value=e.config,Ea=!0)}catch(e){}finally{Va=null}return Da.value})(),Va)}const Ga={class:"dashboard-container"},Ka="dashboardChannelOrder",Ra=w({__name:"Home",setup(a){const l=["claude","codex","gemini","opencode"],{uiConfig:s,updateConfig:t,loadUIConfig:o}=(Ea||Ja(),{uiConfig:Da,loadUIConfig:Ja,saveConfig:async function(e){try{const a=await J(e);return!!a.success&&(Da.value=a.config,!0)}catch(a){return!1}},updateConfig:async function(e,a){try{const l=await V(e,a);return!!l.success&&(Da.value=l.config,!0)}catch(l){return!1}},updateNestedConfig:async function(e,a,l){try{const n=await E(e,a,l);return!!n.success&&(Da.value=n.config,!0)}catch(n){return!1}}});function d(e){try{localStorage.setItem(Ka,JSON.stringify(e))}catch(a){}}const r=n(function(){try{const e=localStorage.getItem(Ka);if(e){const a=JSON.parse(e);if(Array.isArray(a)&&4===a.length)return a}}catch(e){}return l}().map(e=>({type:e})));async function g(){const e=r.value.map(e=>e.type);d(e),await t("dashboardChannelOrder",e)}return c(async()=>{if(await o(),s.value.dashboardChannelOrder&&Array.isArray(s.value.dashboardChannelOrder)&&4===s.value.dashboardChannelOrder.length){const e=s.value.dashboardChannelOrder;r.value=e.map(e=>({type:e})),d(e)}}),(a,l)=>(u(),i("div",Ga,[v(y(e),{modelValue:r.value,"onUpdate:modelValue":l[0]||(l[0]=e=>r.value=e),class:"dashboard-grid","item-key":"type",animation:200,handle:".drag-handle",onEnd:g},{item:h(({element:e})=>[(u(),p(Ua,{"channel-type":e.type,key:e.type},null,8,["channel-type"]))]),_:1},8,["modelValue"])]))}},[["__scopeId","data-v-06100f0f"]]);export{Ra as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,P as s}from"./index-
|
|
1
|
+
import{_ as a,P as s}from"./index-CaKktouI.js";import{c as r,o as e,X as o,Y as i,N as d}from"./vue-vendor-DET08QYg.js";import{K as n}from"./naive-ui-CxpuzdjU.js";import"./vendors-DMjSfzlv.js";import"./markdown-C9MYpaSi.js";import"./icons-B29onFfZ.js";const t={class:"plugin-manager"},m=a({__name:"PluginManager",setup:a=>(a,m)=>(e(),r("div",t,[o(d(n),{title:"Plugins 插件管理",bordered:!1},{default:i(()=>[o(s,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-6d92033b"]]);export{m as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{r as e,f as a,c as t,o as s,a as l,X as n,s as o,Y as r,N as i,_ as c,G as u,Z as d,p,a0 as v,W as m,a8 as f,a5 as h,w as y,h as g,K as _,F as k,$ as j,a6 as w,R as x,v as b}from"./vue-vendor-DET08QYg.js";import{d as C}from"./vendors-DMjSfzlv.js";import{_ as $,p as z,q as L,r as N,v as P,w as M,x as D}from"./index-
|
|
1
|
+
import{r as e,f as a,c as t,o as s,a as l,X as n,s as o,Y as r,N as i,_ as c,G as u,Z as d,p,a0 as v,W as m,a8 as f,a5 as h,w as y,h as g,K as _,F as k,$ as j,a6 as w,R as x,v as b}from"./vue-vendor-DET08QYg.js";import{d as C}from"./vendors-DMjSfzlv.js";import{_ as $,p as z,q as L,r as N,v as P,w as M,x as D}from"./index-CaKktouI.js";import{a9 as I,T,d as E,ad as K,h as U}from"./icons-B29onFfZ.js";import{N as R,B as q,c as V,a as H,_ as O,q as S,n as A,g as B,x as F,h as G,p as W}from"./naive-ui-CxpuzdjU.js";import"./markdown-C9MYpaSi.js";const X={class:"card-content"},Y={class:"header-row"},Z={class:"project-name"},J={class:"stats-row"},Q=$({__name:"ProjectCard",props:{project:{type:Object,required:!0}},emits:["click","delete"],setup(f,{emit:h}){const y=f,g=h,_=e(!1);function k(){g("click")}function j(){g("delete",y.project)}const w=a(()=>{var e,a;return(null==(e=y.project)?void 0:e.displayName)||(null==(a=y.project)?void 0:a.name)||""}),x=a(()=>{var e,a,t;return(null==(e=y.project)?void 0:e.path)||(null==(a=y.project)?void 0:a.fullPath)||(null==(t=y.project)?void 0:t.name)||""}),b=a(()=>{var e;return(null==(e=y.project)?void 0:e.sessionCount)||0}),C=a(()=>{var e;return null==(e=y.project)?void 0:e.lastUsed}),$=a(()=>{var e;const a=["#18a058","#2080f0","#f0a020","#d03050","#9333ea","#06b6d4"];return a[((null==(e=y.project)?void 0:e.name)||"").split("").reduce((e,a)=>e+a.charCodeAt(0),0)%a.length]});function z(e){if(!e)return"";const a=new Date(e),t=new Date-a;return t<6e4?"刚刚":t<36e5?`${Math.floor(t/6e4)}分钟前`:t<864e5?`${Math.floor(t/36e5)}小时前`:t<6048e5?`${Math.floor(t/864e5)}天前`:a.toLocaleDateString("zh-CN")}return(e,a)=>(s(),t("div",{class:"project-card",onClick:k,onMouseenter:a[0]||(a[0]=e=>_.value=!0),onMouseleave:a[1]||(a[1]=e=>_.value=!1)},[l("div",X,[l("div",Y,[n(i(R),{size:"18",color:$.value},{default:r(()=>[n(i(I))]),_:1},8,["color"]),l("span",Z,c(w.value),1),o(n(i(q),{text:"",type:"error",size:"tiny",class:"delete-btn",onClick:d(j,["stop"])},{icon:r(()=>[n(i(R),{size:"14"},{default:r(()=>[n(i(T))]),_:1})]),_:1},512),[[u,_.value]])]),n(i(V),{depth:"3",class:"project-path"},{default:r(()=>[p(c(x.value),1)]),_:1}),l("div",J,[n(i(H),{size:"tiny",bordered:!1,type:"success"},{default:r(()=>[p(c(b.value)+" 会话 ",1)]),_:1}),C.value?(s(),v(i(V),{key:0,depth:"3",class:"last-used"},{default:r(()=>[p(c(z(C.value)),1)]),_:1})):m("",!0)])])],32))}},[["__scopeId","data-v-3a18e66d"]]),ee={class:"project-list-container"},ae={class:"header"},te={class:"header-text"},se={key:0,class:"loading-container"},le={key:3,class:"projects-grid"},ne={class:"search-hint"},oe={style:{"margin-bottom":"16px"}},re={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},ie={class:"search-result-header"},ce={class:"search-result-title"},ue=$({__name:"ProjectList",setup(o){const u=f(),d=h(),$=z(),T=a(()=>d.meta.channel||"claude"),X=e(""),Y=e([]),Z=e(null),J=e(!1),ue=e(""),de=e(null),pe=e(!1),ve=e(null),me=a(()=>{const e=X.value.toLowerCase();return Y.value.filter(a=>{const t=(a.displayName||"").toLowerCase(),s=(a.fullPath||"").toLowerCase();return t.includes(e)||s.includes(e)})});function fe(e){const a=d.meta.channel||"claude";u.push({name:`${a}-sessions`,params:{projectName:e}})}async function he(){const e=Y.value.map(e=>e.name);await $.saveProjectOrder(e)}function ye(e){const a=e.fullPath||e.name,t=e.sessionCount||0;P.warning({title:"删除项目",content:`确定要删除项目 "${a}" 吗?\n\n当前项目包含 ${t} 个会话,删除后所有会话数据将无法恢复!`,positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await $.deleteProject(e.name),N.success("项目已删除")}catch(a){N.error("删除失败: "+a.message)}}})}async function ge(){try{const a="codex"===(e=T.value||"claude")?"codex":"gemini"===e?"gemini":"opencode"===e?"opencode":"claude",t=await L(a);if("manual"===(null==t?void 0:t.method))return void N.warning("自动复制失败,已弹出手动复制框");N.success("基础启动命令已复制到剪贴板")}catch(a){N.error("复制失败: "+a.message)}var e}async function _e(){if(ue.value){pe.value=!0;try{const e=await M(ue.value,35,T.value);de.value=e}catch(e){N.error("搜索失败: "+e.message)}finally{pe.value=!1}}}function ke(e,a){if(!a||!e)return e;const t=new RegExp(`(${a})`,"gi");return e.replace(t,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function je(e){(e.metaKey||e.ctrlKey)&&"k"===e.key&&(e.preventDefault(),J.value=!0,b(()=>{var e;null==(e=ve.value)||e.focus()}))}return y(()=>$.projects,e=>{Y.value=[...e]},{immediate:!0}),y(J,e=>{e||(ue.value="",de.value=null)}),y(T,e=>{$.setChannel(e),$.fetchProjects()},{immediate:!0}),g(()=>{document.addEventListener("keydown",je)}),_(()=>{document.removeEventListener("keydown",je)}),(e,a)=>(s(),t("div",ee,[l("div",ae,[l("div",te,[n(i(O),{style:{margin:"0"}},{default:r(()=>[...a[4]||(a[4]=[p("我的项目",-1)])]),_:1}),n(i(V),{depth:"3"},{default:r(()=>[...a[5]||(a[5]=[p("选择一个项目查看会话,拖拽可调整顺序",-1)])]),_:1})]),n(i(A),null,{default:r(()=>[n(i(q),{type:"primary",size:"medium",onClick:ge},{icon:r(()=>[n(i(R),null,{default:r(()=>[n(i(E))]),_:1})]),default:r(()=>[a[6]||(a[6]=p(" 新建项目 ",-1))]),_:1}),n(i(S),{value:X.value,"onUpdate:value":a[0]||(a[0]=e=>X.value=e),placeholder:"搜索项目...",clearable:"",class:"search-input"},{prefix:r(()=>[n(i(R),null,{default:r(()=>[n(i(K))]),_:1})]),_:1},8,["value"])]),_:1})]),l("div",{class:"content",ref_key:"contentEl",ref:Z},[i($).loading?(s(),t("div",se,[n(i(B),{size:"large"},{description:r(()=>[...a[7]||(a[7]=[p(" 加载项目列表... ",-1)])]),_:1})])):i($).error?(s(),v(i(F),{key:1,type:"error",title:"加载失败",style:{"margin-top":"20px"}},{default:r(()=>[p(c(i($).error),1)]),_:1})):X.value?(s(),t("div",le,[(s(!0),t(k,null,j(me.value,e=>(s(),v(Q,{key:e.name,project:e,onClick:a=>fe(e.name),onDelete:ye},null,8,["project","onClick"]))),128))])):(s(),v(i(C),{key:2,modelValue:Y.value,"onUpdate:modelValue":a[1]||(a[1]=e=>Y.value=e),"item-key":"name",class:"projects-grid","ghost-class":"ghost","chosen-class":"chosen","drag-class":"drag",animation:"200",onEnd:he},{item:r(({element:e})=>[n(Q,{project:e,onClick:a=>fe(e.name),onDelete:ye},null,8,["project","onClick"])]),_:1},8,["modelValue"])),i($).loading||i($).error||0!==i($).projects.length?m("",!0):(s(),v(i(G),{key:4,description:"没有找到项目",style:{"margin-top":"60px"}},{icon:r(()=>[n(i(R),null,{default:r(()=>[n(i(I))]),_:1})]),_:1}))],512),l("div",ne,[n(i(V),{depth:"3",style:{"font-size":"12px"}},{default:r(()=>[...a[8]||(a[8]=[l("kbd",null,"⌘",-1),p(" / ",-1),l("kbd",null,"Ctrl",-1),p(" + ",-1),l("kbd",null,"K",-1),p(" 全局搜索 ",-1)])]),_:1})]),n(i(W),{show:J.value,"onUpdate:show":a[3]||(a[3]=e=>J.value=e),preset:"card",title:"全局搜索",style:x([{width:"800px","max-width":"90vw"},{marginTop:"80px"}])},{default:r(()=>[l("div",oe,[n(i(S),{ref_key:"globalSearchInputRef",ref:ve,value:ue.value,"onUpdate:value":a[2]||(a[2]=e=>ue.value=e),placeholder:"搜索所有项目的对话内容...",clearable:"",onKeyup:w(_e,["enter"]),disabled:pe.value},{prefix:r(()=>[n(i(R),null,{default:r(()=>[n(i(K))]),_:1})]),suffix:r(()=>[n(i(q),{text:"",onClick:_e,disabled:!ue.value||pe.value,loading:pe.value},{default:r(()=>[...a[9]||(a[9]=[p(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])]),de.value?(s(),t("div",re,[n(i(F),{type:"info",style:{"margin-bottom":"16px"}},{default:r(()=>[p(' 关键词 "'+c(de.value.keyword)+'" 共找到 '+c(de.value.totalMatches)+" 处匹配 ",1)]),_:1}),(s(!0),t(k,null,j(de.value.sessions,e=>(s(),t("div",{key:`${e.projectName}-${e.sessionId}`,class:"search-result-item"},[l("div",ie,[l("div",ce,[n(i(V),{strong:"",style:{"font-size":"15px","font-weight":"700"}},{default:r(()=>[p(c(e.projectDisplayName),1)]),_:2},1024),n(i(V),{depth:"2",style:{margin:"0 8px"}},{default:r(()=>[...a[10]||(a[10]=[p("·",-1)])]),_:1}),n(i(V),{strong:""},{default:r(()=>[p(c(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),n(i(H),{size:"small",bordered:!1},{default:r(()=>[p(c(e.matchCount)+" 个匹配",1)]),_:2},1024)]),n(i(q),{size:"small",type:"primary",onClick:a=>async function(e,a){try{const{copyResult:t}=await D(e,a,T.value);"manual"===(null==t?void 0:t.method)?N.warning("自动复制失败,已弹出手动复制框"):N.success("启动命令已复制到剪贴板"),J.value=!1}catch(t){N.error("复制失败: "+t.message)}}(e.projectName,e.sessionId)},{icon:r(()=>[n(i(R),null,{default:r(()=>[n(i(U))]),_:1})]),default:r(()=>[a[11]||(a[11]=p(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(s(!0),t(k,null,j(e.matches,(e,a)=>(s(),t("div",{key:a,class:"search-match"},[n(i(H),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:r(()=>[p(c("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),n(i(V),{depth:"3",class:"search-match-text",innerHTML:ke(e.context,de.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===de.value.sessions.length?(s(),v(i(G),{key:0,description:"没有找到匹配的内容"})):m("",!0)])):m("",!0)]),_:1},8,["show"])]))}},[["__scopeId","data-v-e1a01844"]]);export{ue as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a8 as e,a5 as s,f as a,r as l,w as t,h as n,K as o,c as i,o as r,a as u,X as c,a0 as d,W as v,Y as f,N as p,p as m,_ as h,a6 as y,s as g,Z as k,G as _,y as w,F as j,$ as C,v as I}from"./vue-vendor-DET08QYg.js";import{d as x}from"./vendors-DMjSfzlv.js";import{_ as z,p as b,y as N,C as F,z as B,r as M,v as L,x as $,A as S}from"./index-ZttxvTKw.js";import{V as P,d as U,ad as T,ay as E,j as A,G as K,T as O,a1 as R,az as V,p as H,h as q,U as D}from"./icons-B29onFfZ.js";import{N as G,B as W,_ as X,c as Y,a as Z,q as J,g as Q,x as ee,s as se,n as ae,h as le,p as te}from"./naive-ui-CxpuzdjU.js";import"./markdown-C9MYpaSi.js";const ne={class:"session-list-container"},oe={class:"header"},ie={class:"title-bar"},re={class:"title-section"},ue={class:"title-with-count"},ce={key:0,class:"loading-container"},de=["onMouseenter","onClick"],ve={class:"drag-handle"},fe={class:"session-left"},pe={class:"session-icon"},me={class:"session-info"},he={class:"session-header"},ye={class:"session-title-row"},ge={class:"session-title"},ke={class:"session-meta"},_e={class:"session-right"},we={class:"session-tags-area"},je={class:"session-actions"},Ce={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},Ie={class:"search-result-header"},xe={class:"search-result-title"},ze=z({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(z){const ze=z,be=e(),Ne=s(),Fe=b(),{addFavorite:Be,removeFavorite:Me,isFavorite:Le}=N(),$e=a(()=>Ne.meta.channel||"claude"),Se=l(ze.projectName),Pe=a(()=>Se.value||ze.projectName),Ue=l(""),Te=l(!1),Ee=l(null),Ae=l(""),Ke=l(null),Oe=l([]),Re=l(null),Ve=l(!1),He=l(null),qe=l(!1),De=l(!1),Ge=l(""),We=l(""),Xe=l(null),Ye=l(!1),Ze={group:{name:`${$e.value}-sessions`,pull:!1,put:!1},forceFallback:!0,fallbackOnBody:!1,fallbackTolerance:4,scroll:!0},Je=a(()=>{var e;return(null==(e=Fe.currentProjectInfo)?void 0:e.displayName)||ze.projectName}),Qe=a(()=>{var e;return(null==(e=Fe.currentProjectInfo)?void 0:e.fullPath)||Pe.value});async function es(){const e=await async function(){Fe.projects.length||await Fe.fetchProjects();const e=Fe.projects.find(e=>e.name===ze.projectName);if(e)return Se.value=e.name,e.name;const s=Fe.projects.find(e=>e.displayName===ze.projectName||e.fullPath===ze.projectName);return s?(Se.value=s.name,s.name!==ze.projectName&&await be.replace({name:`${$e.value}-sessions`,params:{projectName:s.name}}),s.name):(Se.value=ze.projectName,ze.projectName)}();await Fe.fetchSessions(e)}t(()=>Fe.sessionsWithAlias,e=>{Oe.value=[...e]},{immediate:!0});const ss=a(()=>{if(!Ue.value)return Oe.value;const e=Ue.value.toLowerCase();return Oe.value.filter(s=>s.sessionId.toLowerCase().includes(e)||s.alias&&s.alias.toLowerCase().includes(e)||s.firstMessage&&s.firstMessage.toLowerCase().includes(e)||s.gitBranch&&s.gitBranch.toLowerCase().includes(e))});function as(){const e=Ne.meta.channel||"claude";be.push({name:`${e}-projects`})}async function ls(){if(Ue.value){qe.value=!0;try{const e=await B(Pe.value,Ue.value,35,$e.value);Re.value=e,Ve.value=!0}catch(e){M.error("搜索失败: "+e.message)}finally{qe.value=!1}}}async function ts(){const e=Oe.value.map(e=>e.sessionId);await Fe.saveSessionOrder(e)}async function ns(){if(Ee.value)try{const e=Ee.value.sessionId;Ae.value?(await Fe.setAlias(e,Ae.value),M.success("别名设置成功")):(await Fe.deleteAlias(e),M.success("别名已删除")),Te.value=!1,Ee.value=null,Ae.value=""}catch(e){M.error("操作失败: "+e.message)}}function os(e){M.error(e)}async function is(e){try{const{copyResult:s}=await $(Pe.value,e,$e.value);if("manual"===(null==s?void 0:s.method))return void M.warning("自动复制失败,已弹出手动复制框");M.success("启动命令已复制到剪贴板")}catch(s){M.error("复制失败: "+s.message)}}async function rs(){Ye.value=!0;try{const e=$e.value||"claude",s=function(e){return"codex"===e?"codex":"gemini"===e?"gemini":"opencode"===e?null:"claude"}(e);if(!s)return void M.warning("OpenCode 暂不支持在此新建会话,请在 CLI 中手动创建");const a=await S(Pe.value,s),l=null==a?void 0:a.sessionId;if(!l)throw new Error("创建会话成功但未返回 sessionId");const{copyResult:t}=await $(Pe.value,l,e);if(await es(),"manual"===(null==t?void 0:t.method))return void M.warning("新会话已创建,自动复制失败,已弹出手动复制框");M.success("新会话已创建,启动命令已复制到剪贴板")}catch(e){M.error("创建会话失败: "+e.message)}finally{Ye.value=!1}}function us(e){if(!e)return"";return new Date(e).toLocaleString("zh-CN")}function cs(e){if(!e)return"0 B";const s=1024;return e<s?e+" B":e<s*s?(e/s).toFixed(1)+" KB":(e/s/s).toFixed(1)+" MB"}function ds(e,s){if(!s||!e)return e;const a=new RegExp(`(${s})`,"gi");return e.replace(a,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function vs(e,s=80){return e?e.length>s?e.substring(0,s)+"...":e:""}return t([$e,()=>ze.projectName],([e])=>{Fe.setChannel(e),es()},{immediate:!0}),n(()=>{}),o(()=>{}),(e,s)=>(r(),i("div",ne,[u("div",oe,[u("div",ie,[c(p(W),{size:"small",onClick:as,class:"back-button"},{icon:f(()=>[c(p(G),{size:"18"},{default:f(()=>[c(p(P))]),_:1})]),_:1}),u("div",re,[u("div",ue,[c(p(X),null,{default:f(()=>[m(h(Je.value),1)]),_:1}),c(p(Y),{depth:"3",class:"session-count"},{default:f(()=>[m("("+h(p(Fe).sessions.length)+" 个对话)",1)]),_:1}),c(p(Z),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:f(()=>[m(h(cs(p(Fe).totalSize)),1)]),_:1}),c(p(W),{type:"primary",size:"small",loading:Ye.value,onClick:rs,style:{"margin-left":"12px"}},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(U))]),_:1})]),default:f(()=>[s[8]||(s[8]=m(" 新建会话 ",-1))]),_:1},8,["loading"])]),c(p(Y),{depth:"3",class:"project-path"},{default:f(()=>[m(h(Qe.value),1)]),_:1})]),c(p(J),{value:Ue.value,"onUpdate:value":s[0]||(s[0]=e=>Ue.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:y(ls,["enter"]),disabled:qe.value},{prefix:f(()=>[c(p(G),null,{default:f(()=>[c(p(T))]),_:1})]),suffix:f(()=>[c(p(W),{text:"",onClick:ls,disabled:!Ue.value||qe.value,loading:qe.value},{default:f(()=>[...s[9]||(s[9]=[m(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),u("div",{class:"content",ref_key:"contentEl",ref:He},[p(Fe).loading?(r(),i("div",ce,[c(p(Q),{size:"large"},{description:f(()=>[...s[10]||(s[10]=[m(" 加载会话列表... ",-1)])]),_:1})])):p(Fe).error?(r(),d(p(ee),{key:1,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:f(()=>[m(h(p(Fe).error),1)]),_:1})):ss.value.length>0?(r(),d(p(x),w({key:2,modelValue:Oe.value,"onUpdate:modelValue":s[2]||(s[2]=e=>Oe.value=e),"item-key":"sessionId",class:"sessions-list",handle:".drag-handle"},Ze,{"ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:ts}),{item:f(({element:e})=>[u("div",{class:"session-item",onMouseenter:s=>Ke.value=e.sessionId,onMouseleave:s[1]||(s[1]=e=>Ke.value=null),onClick:s=>function(e){Ge.value=e.sessionId,We.value=e.alias||"",De.value=!0,I(()=>{var e;null==(e=Xe.value)||e.open()})}(e)},[u("div",ve,[c(p(G),{size:"16",color:"#999"},{default:f(()=>[c(p(E))]),_:1})]),u("div",fe,[u("div",pe,[c(p(G),{size:"24",color:"#18a058"},{default:f(()=>[c(p(A))]),_:1})]),u("div",me,[u("div",he,[u("div",ye,[u("span",ge,h(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId),1),e.forkedFrom?(r(),d(p(se),{key:0,placement:"top"},{trigger:f(()=>[c(p(Z),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(K))]),_:1})]),default:f(()=>[s[11]||(s[11]=m(" Fork ",-1))]),_:1})]),default:f(()=>[m(" Fork 自: "+h(e.forkedFrom),1)]),_:2},1024)):v("",!0)])]),u("div",ke,[c(p(Y),{depth:"3"},{default:f(()=>[m(h(us(e.mtime)),1)]),_:2},1024),c(p(Y),{depth:"3"},{default:f(()=>[...s[12]||(s[12]=[m("•",-1)])]),_:1}),c(p(Z),{size:"small",bordered:!1},{default:f(()=>[m(h(cs(e.size)),1)]),_:2},1024)]),e.firstMessage?(r(),d(p(Y),{key:0,depth:"3",class:"session-message"},{default:f(()=>[m(h(vs(e.firstMessage,80)),1)]),_:2},1024)):e.gitBranch||e.summary?v("",!0):(r(),d(p(Y),{key:1,depth:"3",class:"session-message session-message-empty"},{default:f(()=>[...s[13]||(s[13]=[m(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),u("div",_e,[u("div",we,[e.gitBranch?(r(),d(p(Z),{key:0,size:"small",type:"info",bordered:!1},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(K))]),_:1})]),default:f(()=>[m(" "+h(e.gitBranch),1)]),_:2},1024)):v("",!0)]),u("div",je,[c(p(ae),null,{default:f(()=>[g(c(p(W),{size:"small",type:"error",onClick:k(s=>{return a=e.sessionId,void L.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await Fe.deleteSession(a),M.success("会话已删除")}catch(e){M.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(O))]),_:1})]),default:f(()=>[s[14]||(s[14]=m(" 删除 ",-1))]),_:1},8,["onClick"]),[[_,Ke.value===e.sessionId]]),c(p(W),{size:"small",onClick:k(s=>function(e){Ee.value=e,Ae.value=e.alias||"",Te.value=!0}(e),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(R))]),_:1})]),default:f(()=>[s[15]||(s[15]=m(" 别名 ",-1))]),_:1},8,["onClick"]),c(p(W),{size:"small",type:p(Le)($e.value,Pe.value,e.sessionId)?"warning":"default",onClick:k(s=>async function(e){const s=$e.value,a=Le(s,Pe.value,e.sessionId);try{if(a)await Me(s,Pe.value,e.sessionId),M.success("已取消收藏");else{const a={sessionId:e.sessionId,projectName:Pe.value,projectDisplayName:Je.value,projectFullPath:Qe.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await Be(s,a),M.success("已添加到收藏")}}catch(l){M.error("操作失败: "+l.message)}}(e),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[p(Le)($e.value,Pe.value,e.sessionId)?(r(),d(p(V),{key:0})):(r(),d(p(H),{key:1}))]),_:2},1024)]),default:f(()=>[m(" "+h(p(Le)($e.value,Pe.value,e.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==$e.value?(r(),d(p(W),{key:0,size:"small",onClick:k(s=>async function(e){if("opencode"!==$e.value)try{await Fe.forkSession(e),M.success("Fork 成功!")}catch(s){M.error("Fork 失败: "+s.message)}else M.warning("OpenCode 当前不支持该 Fork 操作")}(e.sessionId),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(K))]),_:1})]),default:f(()=>[s[16]||(s[16]=m(" Fork ",-1))]),_:1},8,["onClick"])):v("",!0),c(p(W),{size:"small",type:"primary",onClick:k(s=>is(e.sessionId),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(q))]),_:1})]),default:f(()=>[s[17]||(s[17]=m(" 使用对话 ",-1))]),_:1},8,["onClick"])]),_:2},1024)])])],40,de)]),_:1},16,["modelValue"])):(r(),d(p(le),{key:3,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(D))]),_:1})]),_:1}))],512),c(p(te),{show:Te.value,"onUpdate:show":s[5]||(s[5]=e=>Te.value=e),preset:"dialog",title:"设置别名"},{action:f(()=>[c(p(ae),null,{default:f(()=>[c(p(W),{onClick:s[4]||(s[4]=e=>Te.value=!1)},{default:f(()=>[...s[18]||(s[18]=[m("取消",-1)])]),_:1}),c(p(W),{type:"primary",onClick:ns},{default:f(()=>[...s[19]||(s[19]=[m("确定",-1)])]),_:1})]),_:1})]),default:f(()=>[c(p(J),{value:Ae.value,"onUpdate:value":s[3]||(s[3]=e=>Ae.value=e),placeholder:"输入别名(留空删除)",onKeyup:y(ns,["enter"])},null,8,["value"])]),_:1},8,["show"]),c(p(te),{show:Ve.value,"onUpdate:show":s[6]||(s[6]=e=>Ve.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:f(()=>[Re.value?(r(),i("div",Ce,[c(p(ee),{type:"info",style:{"margin-bottom":"16px"}},{default:f(()=>[m(' 关键词 "'+h(Re.value.keyword)+'" 共找到 '+h(Re.value.totalMatches)+" 处匹配 ",1)]),_:1}),(r(!0),i(j,null,C(Re.value.sessions,e=>(r(),i("div",{key:e.sessionId,class:"search-result-item"},[u("div",Ie,[u("div",xe,[c(p(Y),{strong:""},{default:f(()=>[m(h(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),c(p(Z),{size:"small",bordered:!1},{default:f(()=>[m(h(e.matchCount)+" 个匹配",1)]),_:2},1024)]),c(p(W),{size:"small",type:"primary",onClick:s=>is(e.sessionId)},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(q))]),_:1})]),default:f(()=>[s[20]||(s[20]=m(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(r(!0),i(j,null,C(e.matches,(e,s)=>(r(),i("div",{key:s,class:"search-match"},[c(p(Z),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:f(()=>[m(h("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),c(p(Y),{depth:"3",class:"search-match-text",innerHTML:ds(e.context,Re.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Re.value.sessions.length?(r(),d(p(le),{key:0,description:"没有找到匹配的内容"})):v("",!0)])):v("",!0)]),_:1},8,["show"]),Ge.value?(r(),d(F,{key:0,ref_key:"chatHistoryRef",ref:Xe,show:De.value,"onUpdate:show":s[7]||(s[7]=e=>De.value=e),"project-name":Pe.value,"session-id":Ge.value,"session-alias":We.value,channel:$e.value,onError:os},null,8,["show","project-name","session-id","session-alias","channel"])):v("",!0)]))}},[["__scopeId","data-v-05ca5429"]]);export{ze as default};
|
|
1
|
+
import{a8 as e,a5 as s,f as a,r as l,w as t,h as n,K as o,c as i,o as r,a as u,X as c,a0 as d,W as v,Y as f,N as p,p as m,_ as h,a6 as y,s as g,Z as k,G as _,y as w,F as j,$ as C,v as I}from"./vue-vendor-DET08QYg.js";import{d as x}from"./vendors-DMjSfzlv.js";import{_ as z,p as b,y as N,C as F,z as B,r as M,v as L,x as $,A as S}from"./index-CaKktouI.js";import{V as P,d as U,ad as T,ay as E,j as A,G as K,T as O,a1 as R,az as V,p as H,h as q,U as D}from"./icons-B29onFfZ.js";import{N as G,B as W,_ as X,c as Y,a as Z,q as J,g as Q,x as ee,s as se,n as ae,h as le,p as te}from"./naive-ui-CxpuzdjU.js";import"./markdown-C9MYpaSi.js";const ne={class:"session-list-container"},oe={class:"header"},ie={class:"title-bar"},re={class:"title-section"},ue={class:"title-with-count"},ce={key:0,class:"loading-container"},de=["onMouseenter","onClick"],ve={class:"drag-handle"},fe={class:"session-left"},pe={class:"session-icon"},me={class:"session-info"},he={class:"session-header"},ye={class:"session-title-row"},ge={class:"session-title"},ke={class:"session-meta"},_e={class:"session-right"},we={class:"session-tags-area"},je={class:"session-actions"},Ce={key:0,style:{"max-height":"70vh","overflow-y":"auto"}},Ie={class:"search-result-header"},xe={class:"search-result-title"},ze=z({__name:"SessionList",props:{projectName:{type:String,required:!0}},setup(z){const ze=z,be=e(),Ne=s(),Fe=b(),{addFavorite:Be,removeFavorite:Me,isFavorite:Le}=N(),$e=a(()=>Ne.meta.channel||"claude"),Se=l(ze.projectName),Pe=a(()=>Se.value||ze.projectName),Ue=l(""),Te=l(!1),Ee=l(null),Ae=l(""),Ke=l(null),Oe=l([]),Re=l(null),Ve=l(!1),He=l(null),qe=l(!1),De=l(!1),Ge=l(""),We=l(""),Xe=l(null),Ye=l(!1),Ze={group:{name:`${$e.value}-sessions`,pull:!1,put:!1},forceFallback:!0,fallbackOnBody:!1,fallbackTolerance:4,scroll:!0},Je=a(()=>{var e;return(null==(e=Fe.currentProjectInfo)?void 0:e.displayName)||ze.projectName}),Qe=a(()=>{var e;return(null==(e=Fe.currentProjectInfo)?void 0:e.fullPath)||Pe.value});async function es(){const e=await async function(){Fe.projects.length||await Fe.fetchProjects();const e=Fe.projects.find(e=>e.name===ze.projectName);if(e)return Se.value=e.name,e.name;const s=Fe.projects.find(e=>e.displayName===ze.projectName||e.fullPath===ze.projectName);return s?(Se.value=s.name,s.name!==ze.projectName&&await be.replace({name:`${$e.value}-sessions`,params:{projectName:s.name}}),s.name):(Se.value=ze.projectName,ze.projectName)}();await Fe.fetchSessions(e)}t(()=>Fe.sessionsWithAlias,e=>{Oe.value=[...e]},{immediate:!0});const ss=a(()=>{if(!Ue.value)return Oe.value;const e=Ue.value.toLowerCase();return Oe.value.filter(s=>s.sessionId.toLowerCase().includes(e)||s.alias&&s.alias.toLowerCase().includes(e)||s.firstMessage&&s.firstMessage.toLowerCase().includes(e)||s.gitBranch&&s.gitBranch.toLowerCase().includes(e))});function as(){const e=Ne.meta.channel||"claude";be.push({name:`${e}-projects`})}async function ls(){if(Ue.value){qe.value=!0;try{const e=await B(Pe.value,Ue.value,35,$e.value);Re.value=e,Ve.value=!0}catch(e){M.error("搜索失败: "+e.message)}finally{qe.value=!1}}}async function ts(){const e=Oe.value.map(e=>e.sessionId);await Fe.saveSessionOrder(e)}async function ns(){if(Ee.value)try{const e=Ee.value.sessionId;Ae.value?(await Fe.setAlias(e,Ae.value),M.success("别名设置成功")):(await Fe.deleteAlias(e),M.success("别名已删除")),Te.value=!1,Ee.value=null,Ae.value=""}catch(e){M.error("操作失败: "+e.message)}}function os(e){M.error(e)}async function is(e){try{const{copyResult:s}=await $(Pe.value,e,$e.value);if("manual"===(null==s?void 0:s.method))return void M.warning("自动复制失败,已弹出手动复制框");M.success("启动命令已复制到剪贴板")}catch(s){M.error("复制失败: "+s.message)}}async function rs(){Ye.value=!0;try{const e=$e.value||"claude",s=function(e){return"codex"===e?"codex":"gemini"===e?"gemini":"opencode"===e?null:"claude"}(e);if(!s)return void M.warning("OpenCode 暂不支持在此新建会话,请在 CLI 中手动创建");const a=await S(Pe.value,s),l=null==a?void 0:a.sessionId;if(!l)throw new Error("创建会话成功但未返回 sessionId");const{copyResult:t}=await $(Pe.value,l,e);if(await es(),"manual"===(null==t?void 0:t.method))return void M.warning("新会话已创建,自动复制失败,已弹出手动复制框");M.success("新会话已创建,启动命令已复制到剪贴板")}catch(e){M.error("创建会话失败: "+e.message)}finally{Ye.value=!1}}function us(e){if(!e)return"";return new Date(e).toLocaleString("zh-CN")}function cs(e){if(!e)return"0 B";const s=1024;return e<s?e+" B":e<s*s?(e/s).toFixed(1)+" KB":(e/s/s).toFixed(1)+" MB"}function ds(e,s){if(!s||!e)return e;const a=new RegExp(`(${s})`,"gi");return e.replace(a,'<mark style="background-color: #ffd700; padding: 2px 4px; border-radius: 2px; font-weight: 600;">$1</mark>')}function vs(e,s=80){return e?e.length>s?e.substring(0,s)+"...":e:""}return t([$e,()=>ze.projectName],([e])=>{Fe.setChannel(e),es()},{immediate:!0}),n(()=>{}),o(()=>{}),(e,s)=>(r(),i("div",ne,[u("div",oe,[u("div",ie,[c(p(W),{size:"small",onClick:as,class:"back-button"},{icon:f(()=>[c(p(G),{size:"18"},{default:f(()=>[c(p(P))]),_:1})]),_:1}),u("div",re,[u("div",ue,[c(p(X),null,{default:f(()=>[m(h(Je.value),1)]),_:1}),c(p(Y),{depth:"3",class:"session-count"},{default:f(()=>[m("("+h(p(Fe).sessions.length)+" 个对话)",1)]),_:1}),c(p(Z),{size:"small",bordered:!1,type:"info",class:"total-size-tag"},{default:f(()=>[m(h(cs(p(Fe).totalSize)),1)]),_:1}),c(p(W),{type:"primary",size:"small",loading:Ye.value,onClick:rs,style:{"margin-left":"12px"}},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(U))]),_:1})]),default:f(()=>[s[8]||(s[8]=m(" 新建会话 ",-1))]),_:1},8,["loading"])]),c(p(Y),{depth:"3",class:"project-path"},{default:f(()=>[m(h(Qe.value),1)]),_:1})]),c(p(J),{value:Ue.value,"onUpdate:value":s[0]||(s[0]=e=>Ue.value=e),placeholder:"搜索会话...",clearable:"",class:"search-input",onKeyup:y(ls,["enter"]),disabled:qe.value},{prefix:f(()=>[c(p(G),null,{default:f(()=>[c(p(T))]),_:1})]),suffix:f(()=>[c(p(W),{text:"",onClick:ls,disabled:!Ue.value||qe.value,loading:qe.value},{default:f(()=>[...s[9]||(s[9]=[m(" 搜索 ",-1)])]),_:1},8,["disabled","loading"])]),_:1},8,["value","disabled"])])]),u("div",{class:"content",ref_key:"contentEl",ref:He},[p(Fe).loading?(r(),i("div",ce,[c(p(Q),{size:"large"},{description:f(()=>[...s[10]||(s[10]=[m(" 加载会话列表... ",-1)])]),_:1})])):p(Fe).error?(r(),d(p(ee),{key:1,type:"error",title:"加载失败",style:{"margin-bottom":"16px"}},{default:f(()=>[m(h(p(Fe).error),1)]),_:1})):ss.value.length>0?(r(),d(p(x),w({key:2,modelValue:Oe.value,"onUpdate:modelValue":s[2]||(s[2]=e=>Oe.value=e),"item-key":"sessionId",class:"sessions-list",handle:".drag-handle"},Ze,{"ghost-class":"ghost","chosen-class":"chosen",animation:"200",onEnd:ts}),{item:f(({element:e})=>[u("div",{class:"session-item",onMouseenter:s=>Ke.value=e.sessionId,onMouseleave:s[1]||(s[1]=e=>Ke.value=null),onClick:s=>function(e){Ge.value=e.sessionId,We.value=e.alias||"",De.value=!0,I(()=>{var e;null==(e=Xe.value)||e.open()})}(e)},[u("div",ve,[c(p(G),{size:"16",color:"#999"},{default:f(()=>[c(p(E))]),_:1})]),u("div",fe,[u("div",pe,[c(p(G),{size:"24",color:"#18a058"},{default:f(()=>[c(p(A))]),_:1})]),u("div",me,[u("div",he,[u("div",ye,[u("span",ge,h(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId),1),e.forkedFrom?(r(),d(p(se),{key:0,placement:"top"},{trigger:f(()=>[c(p(Z),{size:"small",type:"warning",bordered:!1,style:{"margin-left":"8px",cursor:"help"}},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(K))]),_:1})]),default:f(()=>[s[11]||(s[11]=m(" Fork ",-1))]),_:1})]),default:f(()=>[m(" Fork 自: "+h(e.forkedFrom),1)]),_:2},1024)):v("",!0)])]),u("div",ke,[c(p(Y),{depth:"3"},{default:f(()=>[m(h(us(e.mtime)),1)]),_:2},1024),c(p(Y),{depth:"3"},{default:f(()=>[...s[12]||(s[12]=[m("•",-1)])]),_:1}),c(p(Z),{size:"small",bordered:!1},{default:f(()=>[m(h(cs(e.size)),1)]),_:2},1024)]),e.firstMessage?(r(),d(p(Y),{key:0,depth:"3",class:"session-message"},{default:f(()=>[m(h(vs(e.firstMessage,80)),1)]),_:2},1024)):e.gitBranch||e.summary?v("",!0):(r(),d(p(Y),{key:1,depth:"3",class:"session-message session-message-empty"},{default:f(()=>[...s[13]||(s[13]=[m(" 暂未读取到对话内容 ",-1)])]),_:1}))])]),u("div",_e,[u("div",we,[e.gitBranch?(r(),d(p(Z),{key:0,size:"small",type:"info",bordered:!1},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(K))]),_:1})]),default:f(()=>[m(" "+h(e.gitBranch),1)]),_:2},1024)):v("",!0)]),u("div",je,[c(p(ae),null,{default:f(()=>[g(c(p(W),{size:"small",type:"error",onClick:k(s=>{return a=e.sessionId,void L.warning({title:"删除会话",content:"确定要删除这个会话吗?此操作不可恢复!",positiveText:"确定删除",negativeText:"取消",onPositiveClick:async()=>{try{await Fe.deleteSession(a),M.success("会话已删除")}catch(e){M.error("删除失败: "+e.message)}}});var a},["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(O))]),_:1})]),default:f(()=>[s[14]||(s[14]=m(" 删除 ",-1))]),_:1},8,["onClick"]),[[_,Ke.value===e.sessionId]]),c(p(W),{size:"small",onClick:k(s=>function(e){Ee.value=e,Ae.value=e.alias||"",Te.value=!0}(e),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(R))]),_:1})]),default:f(()=>[s[15]||(s[15]=m(" 别名 ",-1))]),_:1},8,["onClick"]),c(p(W),{size:"small",type:p(Le)($e.value,Pe.value,e.sessionId)?"warning":"default",onClick:k(s=>async function(e){const s=$e.value,a=Le(s,Pe.value,e.sessionId);try{if(a)await Me(s,Pe.value,e.sessionId),M.success("已取消收藏");else{const a={sessionId:e.sessionId,projectName:Pe.value,projectDisplayName:Je.value,projectFullPath:Qe.value,alias:e.alias||"",firstMessage:e.firstMessage||"",mtime:e.mtime,size:e.size,gitBranch:e.gitBranch||"",forkedFrom:e.forkedFrom||""};await Be(s,a),M.success("已添加到收藏")}}catch(l){M.error("操作失败: "+l.message)}}(e),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[p(Le)($e.value,Pe.value,e.sessionId)?(r(),d(p(V),{key:0})):(r(),d(p(H),{key:1}))]),_:2},1024)]),default:f(()=>[m(" "+h(p(Le)($e.value,Pe.value,e.sessionId)?"已收藏":"收藏"),1)]),_:2},1032,["type","onClick"]),"opencode"!==$e.value?(r(),d(p(W),{key:0,size:"small",onClick:k(s=>async function(e){if("opencode"!==$e.value)try{await Fe.forkSession(e),M.success("Fork 成功!")}catch(s){M.error("Fork 失败: "+s.message)}else M.warning("OpenCode 当前不支持该 Fork 操作")}(e.sessionId),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(K))]),_:1})]),default:f(()=>[s[16]||(s[16]=m(" Fork ",-1))]),_:1},8,["onClick"])):v("",!0),c(p(W),{size:"small",type:"primary",onClick:k(s=>is(e.sessionId),["stop"])},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(q))]),_:1})]),default:f(()=>[s[17]||(s[17]=m(" 使用对话 ",-1))]),_:1},8,["onClick"])]),_:2},1024)])])],40,de)]),_:1},16,["modelValue"])):(r(),d(p(le),{key:3,description:"没有找到会话",style:{"margin-top":"60px"}},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(D))]),_:1})]),_:1}))],512),c(p(te),{show:Te.value,"onUpdate:show":s[5]||(s[5]=e=>Te.value=e),preset:"dialog",title:"设置别名"},{action:f(()=>[c(p(ae),null,{default:f(()=>[c(p(W),{onClick:s[4]||(s[4]=e=>Te.value=!1)},{default:f(()=>[...s[18]||(s[18]=[m("取消",-1)])]),_:1}),c(p(W),{type:"primary",onClick:ns},{default:f(()=>[...s[19]||(s[19]=[m("确定",-1)])]),_:1})]),_:1})]),default:f(()=>[c(p(J),{value:Ae.value,"onUpdate:value":s[3]||(s[3]=e=>Ae.value=e),placeholder:"输入别名(留空删除)",onKeyup:y(ns,["enter"])},null,8,["value"])]),_:1},8,["show"]),c(p(te),{show:Ve.value,"onUpdate:show":s[6]||(s[6]=e=>Ve.value=e),preset:"card",title:"搜索结果",style:{width:"1200px"}},{default:f(()=>[Re.value?(r(),i("div",Ce,[c(p(ee),{type:"info",style:{"margin-bottom":"16px"}},{default:f(()=>[m(' 关键词 "'+h(Re.value.keyword)+'" 共找到 '+h(Re.value.totalMatches)+" 处匹配 ",1)]),_:1}),(r(!0),i(j,null,C(Re.value.sessions,e=>(r(),i("div",{key:e.sessionId,class:"search-result-item"},[u("div",Ie,[u("div",xe,[c(p(Y),{strong:""},{default:f(()=>[m(h(e.alias?`${e.alias} (${e.sessionId.substring(0,8)})`:e.sessionId.substring(0,8)),1)]),_:2},1024),c(p(Z),{size:"small",bordered:!1},{default:f(()=>[m(h(e.matchCount)+" 个匹配",1)]),_:2},1024)]),c(p(W),{size:"small",type:"primary",onClick:s=>is(e.sessionId)},{icon:f(()=>[c(p(G),null,{default:f(()=>[c(p(q))]),_:1})]),default:f(()=>[s[20]||(s[20]=m(" 使用对话 ",-1))]),_:1},8,["onClick"])]),(r(!0),i(j,null,C(e.matches,(e,s)=>(r(),i("div",{key:s,class:"search-match"},[c(p(Z),{size:"tiny",type:"user"===e.role?"info":"success",bordered:!1},{default:f(()=>[m(h("user"===e.role?"用户":"助手"),1)]),_:2},1032,["type"]),c(p(Y),{depth:"3",class:"search-match-text",innerHTML:ds(e.context,Re.value.keyword)},null,8,["innerHTML"])]))),128))]))),128)),0===Re.value.sessions.length?(r(),d(p(le),{key:0,description:"没有找到匹配的内容"})):v("",!0)])):v("",!0)]),_:1},8,["show"]),Ge.value?(r(),d(F,{key:0,ref_key:"chatHistoryRef",ref:Xe,show:De.value,"onUpdate:show":s[7]||(s[7]=e=>De.value=e),"project-name":Pe.value,"session-id":Ge.value,"session-alias":We.value,channel:$e.value,onError:os},null,8,["show","project-name","session-id","session-alias","channel"])):v("",!0)]))}},[["__scopeId","data-v-05ca5429"]]);export{ze as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,S as s}from"./index-
|
|
1
|
+
import{_ as a,S as s}from"./index-CaKktouI.js";import{c as e,o as r,X as o,Y as i,N as t}from"./vue-vendor-DET08QYg.js";import{K as d}from"./naive-ui-CxpuzdjU.js";import"./vendors-DMjSfzlv.js";import"./markdown-C9MYpaSi.js";import"./icons-B29onFfZ.js";const m={class:"skill-manager"},n=a({__name:"SkillManager",setup:a=>(a,n)=>(r(),e("div",m,[o(t(d),{title:"Skills 技能管理",bordered:!1},{default:i(()=>[o(s,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-6ebc8a84"]]);export{n as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as a,W as s}from"./index-
|
|
1
|
+
import{_ as a,W as s}from"./index-CaKktouI.js";import{c as r,o as e,X as o,Y as d,N as i}from"./vue-vendor-DET08QYg.js";import{K as t}from"./naive-ui-CxpuzdjU.js";import"./vendors-DMjSfzlv.js";import"./markdown-C9MYpaSi.js";import"./icons-B29onFfZ.js";const m={class:"workspace-manager"},n=a({__name:"WorkspaceManager",setup:a=>(a,n)=>(e(),r("div",m,[o(i(t),{title:"工作区管理",bordered:!1},{default:d(()=>[o(s,{"in-drawer":!1,"hide-back":!0})]),_:1})]))},[["__scopeId","data-v-c6211fd6"]]);export{n as default};
|