chainlesschain 0.45.11 → 0.45.19
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/package.json +1 -1
- package/src/assets/web-panel/assets/AppLayout-B00RARl2.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-CFP4dGIJ.css +1 -0
- package/src/assets/web-panel/assets/{Chat-5f__rMCR.js → Chat-DXtvKoM0.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-C4mrNC4c.js → Cron-BJ4ODHOy.js} +1 -1
- package/src/assets/web-panel/assets/Dashboard-3iIpp3zd.js +3 -0
- package/src/assets/web-panel/assets/Dashboard-BS-tzGNj.css +1 -0
- package/src/assets/web-panel/assets/{Logs-CC_Zuh66.js → Logs-CSeKZEG_.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-B15GiN3u.js → McpTools-BYQAK11r.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-Dbd7oLOH.js → Memory-gkUAPyuZ.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-CEkc49fY.js → Notes-bjNrQgAo.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-CjyPHW00.js → Providers-Dbf57Tbv.js} +1 -1
- package/src/assets/web-panel/assets/{Services-XFzHMRRd.js → Services-CS0oMdxh.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-D8oxmB3U.js → Skills-B2fgruv8.js} +1 -1
- package/src/assets/web-panel/assets/Tasks-BJjN_YEm.css +1 -0
- package/src/assets/web-panel/assets/Tasks-qULws8pc.js +1 -0
- package/src/assets/web-panel/assets/{antd-ChLPLhSn.js → antd-CJSBocer.js} +1 -1
- package/src/assets/web-panel/assets/chat-DnH09sSR.js +1 -0
- package/src/assets/web-panel/assets/{index-DQ5xXK7O.js → index-CF2CqPYX.js} +2 -2
- package/src/assets/web-panel/assets/{markdown-DtbPhnFe.js → markdown-Bo5cVN4u.js} +1 -1
- package/src/assets/web-panel/assets/ws-DjelKkD6.js +1 -0
- package/src/assets/web-panel/index.html +2 -2
- package/src/commands/agent.js +7 -8
- package/src/commands/chat.js +9 -11
- package/src/commands/serve.js +11 -106
- package/src/commands/session.js +185 -18
- package/src/commands/ui.js +10 -151
- package/src/gateways/repl/agent-repl.js +1 -0
- package/src/gateways/repl/chat-repl.js +1 -0
- package/src/gateways/ui/web-ui-server.js +1 -0
- package/src/gateways/ws/action-protocol.js +83 -0
- package/src/gateways/ws/message-dispatcher.js +73 -0
- package/src/gateways/ws/session-protocol.js +396 -0
- package/src/gateways/ws/task-protocol.js +55 -0
- package/src/gateways/ws/worktree-protocol.js +315 -0
- package/src/gateways/ws/ws-server.js +4 -0
- package/src/gateways/ws/ws-session-gateway.js +1 -0
- package/src/harness/background-task-manager.js +506 -0
- package/src/harness/background-task-worker.js +48 -0
- package/src/harness/compression-telemetry.js +214 -0
- package/src/harness/feature-flags.js +157 -0
- package/src/harness/jsonl-session-store.js +452 -0
- package/src/harness/prompt-compressor.js +416 -0
- package/src/harness/worktree-isolator.js +845 -0
- package/src/lib/agent-core.js +246 -45
- package/src/lib/background-task-manager.js +1 -305
- package/src/lib/background-task-worker.js +1 -50
- package/src/lib/compression-telemetry.js +5 -0
- package/src/lib/feature-flags.js +7 -182
- package/src/lib/interaction-adapter.js +32 -6
- package/src/lib/jsonl-session-store.js +21 -237
- package/src/lib/prompt-compressor.js +10 -351
- package/src/lib/sub-agent-context.js +91 -0
- package/src/lib/worktree-isolator.js +13 -231
- package/src/lib/ws-agent-handler.js +1 -0
- package/src/lib/ws-server.js +155 -359
- package/src/lib/ws-session-manager.js +82 -1
- package/src/repl/agent-repl.js +114 -32
- package/src/runtime/agent-runtime.js +417 -0
- package/src/runtime/contracts/agent-turn.js +11 -0
- package/src/runtime/contracts/session-record.js +31 -0
- package/src/runtime/contracts/task-record.js +18 -0
- package/src/runtime/contracts/telemetry-record.js +23 -0
- package/src/runtime/contracts/worktree-record.js +14 -0
- package/src/runtime/index.js +13 -0
- package/src/runtime/policies/agent-policy.js +45 -0
- package/src/runtime/runtime-context.js +14 -0
- package/src/runtime/runtime-events.js +37 -0
- package/src/runtime/runtime-factory.js +50 -0
- package/src/tools/index.js +22 -0
- package/src/tools/legacy-agent-tools.js +171 -0
- package/src/tools/registry.js +141 -0
- package/src/tools/tool-context.js +28 -0
- package/src/tools/tool-permissions.js +28 -0
- package/src/tools/tool-telemetry.js +39 -0
- package/src/assets/web-panel/assets/AppLayout-19ZC8w11.js +0 -1
- package/src/assets/web-panel/assets/AppLayout-CjgO-ML6.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-CRFnDUFh.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-DsjXpZor.js +0 -3
- package/src/assets/web-panel/assets/chat-C_hu-qNs.js +0 -1
- package/src/assets/web-panel/assets/ws-DwluTqT5.js +0 -1
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as ne,W as y,Z as t,X as i,$ as ae,a0 as le,Y as l,k as e,a1 as a,a2 as C,a3 as r,a4 as j,F as O,u as s,a5 as f,G as d,a6 as ie,a7 as de,f as ue,c as p}from"./vendor-CN0Iv_qZ.js";import{u as re}from"./ws-DjelKkD6.js";import{u as ce,T as me}from"./index-CF2CqPYX.js";import{_ as pe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as x,G as B,D as F,M as L,C as A,b as I,c as D,d as G,e as K,B as R,f as V,h as E,T as $,I as _e}from"./antd-CJSBocer.js";const ve={key:0,class:"logo-text"},ye={key:0,class:"mode-banner project"},fe={class:"banner-info"},ke={class:"banner-name"},ge={key:1,class:"mode-banner global"},be=["title"],Ce={key:0,class:"footer-text"},Oe={class:"header-left"},we={class:"header-right"},Te={class:"theme-switcher"},je=["data-theme-key","onClick"],xe={__name:"AppLayout",setup(Be){const P=ae(),U=le(),k=re(),w=ce(),u=ue(!1),_=window.__CC_CONFIG__||{},m=p(()=>_.mode==="project"),W=p(()=>w.current),z=p(()=>w.config.vars["--menu-mode"]),N=p(()=>{const c=U.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),g=p(()=>k.status),H=p(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[k.status]||"default"),X=p(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[k.status]||"未知");function Y(c){w.setTheme(c)}function Z({key:c}){P.push({mcp:"/mcp"}[c]||`/${c}`)}return ne(()=>k.connect()),(c,o)=>{const n=i("a-menu-item"),T=i("a-menu-item-group"),M=i("a-menu-divider"),q=i("a-menu"),J=i("a-badge"),Q=i("a-layout-sider"),S=i("a-tooltip"),ee=i("a-tag"),te=i("a-layout-header"),oe=i("router-view"),se=i("a-layout-content"),h=i("a-layout");return l(),y(h,{class:"app-root"},{default:t(()=>[e(Q,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=v=>u.value=v),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:C(["logo",{collapsed:u.value}])},[o[2]||(o[2]=a("span",{class:"logo-icon"},"⛓",-1)),u.value?j("",!0):(l(),r("span",ve,"ChainlessChain"))],2),u.value?(l(),r("div",{key:1,class:"mode-icon-sm",title:m.value?s(_).projectName:"全局模式"},[m.value?(l(),y(s(x),{key:0,style:{color:"#1677ff"}})):(l(),y(s(B),{key:1,style:{color:"#722ed1"}}))],8,be)):(l(),r(O,{key:0},[m.value?(l(),r("div",ye,[e(s(x),{class:"banner-icon"}),a("div",fe,[a("div",ke,f(s(_).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(l(),r("div",ge,[e(s(B),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(q,{selectedKeys:N.value,"onUpdate:selectedKeys":o[0]||(o[0]=v=>N.value=v),theme:z.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:Z},{default:t(()=>[u.value?(l(),r(O,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(L))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(A))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(I))]),_:1}),e(M,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(K))]),_:1}),e(M,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(R))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(E))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s($))]),_:1})],64)):(l(),r(O,{key:0},[e(T,null,{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[6]||(o[6]=d("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(L))]),default:t(()=>[o[7]||(o[7]=d("AI 对话",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(A))]),default:t(()=>[o[8]||(o[8]=d("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[9]||(o[9]=d("日志查看",-1))]),_:1})]),_:1}),e(T,null,{title:t(()=>[...o[10]||(o[10]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[11]||(o[11]=d("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[12]||(o[12]=d("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[13]||(o[13]=d("MCP 工具",-1))]),_:1})]),_:1}),e(T,null,{title:t(()=>[...o[14]||(o[14]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(R))]),default:t(()=>[o[15]||(o[15]=d("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[16]||(o[16]=d("记忆文件",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[17]||(o[17]=d("定时任务",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s($))]),default:t(()=>[o[18]||(o[18]=d("后台任务",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:C(["sidebar-footer",{collapsed:u.value}])},[e(J,{status:H.value},null,8,["status"]),u.value?j("",!0):(l(),r("span",Ce,f(X.value),1))],2)]),_:1},8,["collapsed"]),e(h,{class:"main-area"},{default:t(()=>[e(te,{class:"app-header"},{default:t(()=>[a("div",Oe,[a("div",{class:C(["scope-tag",m.value?"project":"global"])},[(l(),y(ie(m.value?s(x):s(B)))),a("span",null,f(m.value?s(_).projectName||"项目":"全局模式"),1),m.value&&s(_).projectRoot?(l(),y(S,{key:0,title:s(_).projectRoot},{default:t(()=>[e(s(_e),{class:"info-icon"})]),_:1},8,["title"])):j("",!0)],2)]),a("div",we,[a("div",Te,[(l(!0),r(O,null,de(s(me),(v,b)=>(l(),y(S,{key:b,title:v.label},{default:t(()=>[a("button",{class:C(["theme-btn",{active:W.value===b}]),"data-theme-key":b,onClick:Ne=>Y(b)},f(v.icon),11,je)]),_:2},1032,["title"]))),128))]),o[19]||(o[19]=a("span",{class:"version-tag"},"v5.0.2.9",-1)),e(ee,{color:g.value==="connected"?"green":g.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[d(f(g.value==="connected"?"已连接":g.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(se,{class:"page-content"},{default:t(()=>[e(oe)]),_:1})]),_:1})]),_:1})}}},Ae=pe(xe,[["__scopeId","data-v-3fd6e0b7"]]);export{Ae as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.app-root[data-v-3fd6e0b7]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-3fd6e0b7]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}.main-area[data-v-3fd6e0b7]{background:var(--bg-base)}.logo[data-v-3fd6e0b7]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-3fd6e0b7]{padding:0;justify-content:center}.logo-icon[data-v-3fd6e0b7]{font-size:20px;flex-shrink:0}.logo-text[data-v-3fd6e0b7]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-3fd6e0b7]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-3fd6e0b7]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-3fd6e0b7]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-3fd6e0b7]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-3fd6e0b7]{color:#722ed1}.banner-info[data-v-3fd6e0b7]{flex:1;min-width:0}.banner-name[data-v-3fd6e0b7]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-3fd6e0b7]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-3fd6e0b7]{color:#c084fc}.mode-icon-sm[data-v-3fd6e0b7]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-3fd6e0b7]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important}.group-label[data-v-3fd6e0b7]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-3fd6e0b7] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-3fd6e0b7] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-3fd6e0b7]{margin:4px 0!important}.sidebar-footer[data-v-3fd6e0b7]{position:absolute;bottom:48px;left:0;right:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-3fd6e0b7]{justify-content:center;padding:8px 0}.footer-text[data-v-3fd6e0b7]{color:var(--text-secondary);font-size:11px}.app-header[data-v-3fd6e0b7]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-3fd6e0b7],.header-right[data-v-3fd6e0b7]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-3fd6e0b7]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-3fd6e0b7]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-3fd6e0b7]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-3fd6e0b7]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-3fd6e0b7]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-3fd6e0b7]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-3fd6e0b7]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-3fd6e0b7]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-3fd6e0b7]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-3fd6e0b7]{margin:0!important;font-size:11px}.page-content[data-v-3fd6e0b7]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as Q,o as R,a3 as n,a1 as s,k as i,u as r,a5 as u,Z as d,F as S,a7 as z,G as c,a4 as y,W as T,a9 as V,A as q,c as x,X as f,f as $,Y as o,a2 as A,n as J}from"./vendor-CN0Iv_qZ.js";import{m as H,H as M}from"./markdown-
|
|
1
|
+
import{w as Q,o as R,a3 as n,a1 as s,k as i,u as r,a5 as u,Z as d,F as S,a7 as z,G as c,a4 as y,W as T,a9 as V,A as q,c as x,X as f,f as $,Y as o,a2 as A,n as J}from"./vendor-CN0Iv_qZ.js";import{m as H,H as M}from"./markdown-Bo5cVN4u.js";import{u as K}from"./chat-DnH09sSR.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as P,G as U,M as W,i as X,l as Y}from"./antd-CJSBocer.js";import"./ws-DjelKkD6.js";const Z={style:{display:"flex",height:"calc(100vh - 56px - 48px)",gap:"16px"}},ee={style:{width:"240px","flex-shrink":"0",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},te={key:0,style:{padding:"6px 12px 4px","font-size":"11px",color:"#1677ff",background:"rgba(22,119,255,.07)","border-bottom":"1px solid rgba(22,119,255,.15)",display:"flex","align-items":"center",gap:"4px"}},se=["title"],oe={key:1,style:{padding:"6px 12px 4px","font-size":"11px",color:"#722ed1",background:"rgba(114,46,209,.07)","border-bottom":"1px solid rgba(114,46,209,.15)",display:"flex","align-items":"center",gap:"4px"}},ne={style:{padding:"10px 12px","border-bottom":"1px solid var(--border-color)",display:"flex",gap:"8px"}},ae={style:{flex:"1","overflow-y":"auto",padding:"8px"}},le=["onClick"],ie={class:"session-icon"},re={class:"session-info"},de={class:"session-title"},pe={class:"session-meta"},ue={key:0,style:{"text-align":"center",color:"var(--text-muted)",padding:"24px 0","font-size":"13px"}},ce={style:{flex:"1",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},ve={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},xe={style:{"margin-top":"24px",display:"flex",gap:"12px"}},ge={key:0,class:"tool-msg"},ye={style:{margin:"0","font-size":"11px",color:"#aaa","white-space":"pre-wrap"}},fe={key:0,style:{"margin-top":"8px","padding-top":"8px","border-top":"1px solid var(--border-color)"}},_e={style:{margin:"0","font-size":"11px",color:"#52c41a","white-space":"pre-wrap"}},me={key:1,class:"user-msg"},be={class:"bubble user"},he={key:2,class:"assistant-msg"},ke=["innerHTML"],we={key:0,class:"assistant-msg"},Ce=["innerHTML"],Se={key:1,class:"question-card"},ze={class:"question-text"},Me={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Oe={key:2,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},Ie={style:{display:"flex",gap:"8px","align-items":"flex-end"}},Le={__name:"Chat",setup(Ne){const k=window.__CC_CONFIG__||{},j=x(()=>k.mode==="project");H.setOptions({highlight:(a,e)=>e&&M.getLanguage(e)?M.highlight(a,{language:e}).value:M.highlightAuto(a).value,breaks:!0});const l=K(),_=$(null),g=$(""),p=x(()=>l.currentSessionId),O=x(()=>p.value?l.getMessages(p.value):[]),w=x(()=>{const a=l.streaming[p.value];return a?.active?a.content:null}),m=x(()=>l.pendingQuestion[p.value]),b=x(()=>l.isLoading);function I(a){try{return H(a||"")}catch{return a||""}}async function h(a){await l.createSession(a)}async function L(){if(!g.value.trim()||b.value||!p.value)return;const a=g.value;g.value="",await l.sendMessage(p.value,a)}function N(a){l.answerQuestion(p.value,a)}return Q([O,w],()=>{J(()=>{_.value&&(_.value.scrollTop=_.value.scrollHeight)})},{deep:!0}),R(()=>{l.loadSessions()}),(a,e)=>{const v=f("a-button"),E=f("a-collapse-panel"),F=f("a-collapse"),B=f("a-input-search"),G=f("a-textarea");return o(),n("div",Z,[s("div",ee,[j.value?(o(),n("div",te,[i(r(P)),s("span",{style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:r(k).projectRoot},u(r(k).projectName||"项目"),9,se)])):(o(),n("div",oe,[i(r(U)),e[5]||(e[5]=s("span",null,"全局会话",-1))])),s("div",ne,[i(v,{type:"primary",size:"small",style:{flex:"1"},onClick:e[0]||(e[0]=t=>h("chat"))},{icon:d(()=>[i(r(W))]),default:d(()=>[e[6]||(e[6]=c(" Chat ",-1))]),_:1}),i(v,{size:"small",style:{flex:"1"},onClick:e[1]||(e[1]=t=>h("agent"))},{icon:d(()=>[i(r(X))]),default:d(()=>[e[7]||(e[7]=c(" Agent ",-1))]),_:1})]),s("div",ae,[(o(!0),n(S,null,z(r(l).sessions,t=>(o(),n("div",{key:t.id,class:A(["session-item",{active:t.id===r(l).currentSessionId}]),onClick:C=>r(l).switchSession(t.id)},[s("span",ie,u(t.type==="agent"?"🤖":"💬"),1),s("div",re,[s("div",de,u(t.title||"新对话"),1),s("div",pe,u(t.messageCount||0)+" 条消息",1)])],10,le))),128)),r(l).sessions.length?y("",!0):(o(),n("div",ue,[...e[8]||(e[8]=[c(" 点击上方按钮",-1),s("br",null,null,-1),c("开始新对话 ",-1)])]))])]),s("div",ce,[p.value?(o(),n("div",{key:1,style:{flex:"1","overflow-y":"auto",padding:"20px"},ref_key:"messagesEl",ref:_},[(o(!0),n(S,null,z(O.value,(t,C)=>(o(),n("div",{key:C,class:A(["message-row",t.role])},[t.role==="tool"?(o(),n("div",ge,[i(F,{ghost:"",size:"small"},{default:d(()=>[i(E,{header:`🔧 ${t.tool} ${t.status==="running"?"(执行中...)":"✓"}`,style:{border:"1px solid var(--border-color)","border-radius":"6px",background:"var(--bg-card)"}},{default:d(()=>[s("pre",ye,u(JSON.stringify(t.input,null,2)),1),t.result?(o(),n("div",fe,[s("pre",_e,u(typeof t.result=="string"?t.result:JSON.stringify(t.result,null,2)),1)])):y("",!0)]),_:2},1032,["header"])]),_:2},1024)])):t.role==="user"?(o(),n("div",me,[s("div",be,u(t.content),1)])):(o(),n("div",he,[e[14]||(e[14]=s("div",{class:"avatar"},"AI",-1)),s("div",{class:"bubble assistant",innerHTML:I(t.content)},null,8,ke)]))],2))),128)),w.value?(o(),n("div",we,[e[15]||(e[15]=s("div",{class:"avatar"},"AI",-1)),s("div",{class:"bubble assistant streaming",innerHTML:I(w.value)},null,8,Ce)])):y("",!0),m.value?(o(),n("div",Se,[s("div",ze,u(m.value.question),1),m.value.choices?.length?(o(),n("div",Me,[(o(!0),n(S,null,z(m.value.choices,t=>(o(),T(v,{key:t,size:"small",onClick:C=>N(t)},{default:d(()=>[c(u(t),1)]),_:2},1032,["onClick"]))),128))])):(o(),T(B,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:N}))])):y("",!0)],512)):(o(),n("div",ve,[e[11]||(e[11]=s("div",{style:{"font-size":"48px","margin-bottom":"16px"}},"💬",-1)),e[12]||(e[12]=s("div",{style:{"font-size":"16px","margin-bottom":"8px",color:"#777"}},"开始 AI 对话",-1)),e[13]||(e[13]=s("div",{style:{"font-size":"13px",color:"var(--text-muted)"}},"选择左侧会话或创建新对话",-1)),s("div",xe,[i(v,{type:"primary",onClick:e[2]||(e[2]=t=>h("chat"))},{default:d(()=>[...e[9]||(e[9]=[c("新建 Chat",-1)])]),_:1}),i(v,{style:{},onClick:e[3]||(e[3]=t=>h("agent"))},{default:d(()=>[...e[10]||(e[10]=[c("新建 Agent",-1)])]),_:1})])])),p.value?(o(),n("div",Oe,[s("div",Ie,[i(G,{value:g.value,"onUpdate:value":e[4]||(e[4]=t=>g.value=t),placeholder:b.value?"等待响应中...":"输入消息,Shift+Enter 换行,Enter 发送","auto-size":{minRows:1,maxRows:6},disabled:b.value,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)",color:"var(--text-primary)",resize:"none",flex:"1"},onKeydown:V(q(L,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),i(v,{type:"primary",loading:b.value,onClick:L,style:{height:"40px"}},{icon:d(()=>[i(r(Y))]),_:1},8,["loading"])])])):y("",!0)])])}}},Fe=D(Le,[["__scopeId","data-v-8392b2d7"]]);export{Fe as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as Q}from"./ws-
|
|
1
|
+
import{u as Q}from"./ws-DjelKkD6.js";import{p as ee,R as ae,h as te,o as d}from"./antd-CJSBocer.js";import{o as le,a3 as b,a1 as m,k as a,Z as t,X as s,f as x,Y as p,G as f,u as B,F as V,a7 as ne,a5 as w,W as L,a4 as z,c as W}from"./vendor-CN0Iv_qZ.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={key:0,style:{"text-align":"center",padding:"40px"}},re={style:{color:"#e0e0e0","font-weight":"500"}},ue={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ie={key:1,style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px",color:"#91caff","font-size":"11px"}},ce={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},fe={__name:"Cron",setup(de){const y=Q(),C=x(!1),$=x(!1),_=x(!1),v=x([]),q=W(()=>v.value.filter(l=>l.enabled).length),S=W(()=>v.value.filter(l=>!l.enabled).length),N=[{label:"每5分钟",cron:"*/5 * * * *"},{label:"每15分钟",cron:"*/15 * * * *"},{label:"每小时",cron:"0 * * * *"},{label:"每天9点",cron:"0 9 * * *"},{label:"每天18点",cron:"0 18 * * *"},{label:"每周一9点",cron:"0 9 * * 1"},{label:"每月1号",cron:"0 9 1 * *"}],o=x({name:"",cron:"",payload:"",description:"",enabled:!0}),A=[{title:"任务名称",key:"name",width:"25%"},{title:"Cron",key:"cron",width:"20%"},{title:"状态",key:"status",width:"15%"},{title:"操作",key:"actions",width:"20%"}];async function T(){C.value=!0;try{const{output:l}=await y.execute('skill run cron-scheduler "list all scheduled tasks"',2e4);v.value=F(l)}catch{v.value=[]}finally{C.value=!1}}function F(l){const e=[],c=l.split(`
|
|
2
2
|
`);for(const k of c){const u=k.trim();if(!u||u.startsWith("─"))continue;const i=u.match(/^([^\t|]+?)[\t|]+([*\d/,\-?LW#\s]+)[\t|]+/);i&&e.push({key:e.length,name:i[1].trim(),cron:i[2].trim(),enabled:!u.toLowerCase().includes("pause")&&!u.toLowerCase().includes("disabled"),description:"",running:!1})}return e}function P(l){o.value.cron=l.cron,_.value=!0}async function R(){if(!o.value.name||!o.value.cron){d.warning("请填写任务名称和 Cron 表达式");return}$.value=!0;try{const l=`skill run cron-scheduler "add task: ${o.value.name}, schedule: ${o.value.cron}, payload: ${o.value.payload||"ping"}"`,{output:e}=await y.execute(l,2e4);d.success("任务已创建"),_.value=!1,o.value={name:"",cron:"",payload:"",description:"",enabled:!0},await T()}catch(l){d.error("创建失败: "+l.message)}finally{$.value=!1}}async function j(l){l.running=!0;try{const{output:e}=await y.execute(`skill run cron-scheduler "run task: ${l.name}"`,3e4);d.success(`任务 ${l.name} 已触发`)}catch(e){d.error("触发失败: "+e.message)}finally{l.running=!1}}async function D(l){const e=l.enabled?"pause":"enable";try{await y.execute(`skill run cron-scheduler "${e} task: ${l.name}"`,1e4),l.enabled=!l.enabled,d.success(`任务已${l.enabled?"启用":"暂停"}`)}catch{d.error("操作失败")}}async function E(l){try{await y.execute(`skill run cron-scheduler "delete task: ${l.name}"`,1e4),v.value=v.value.filter(e=>e.key!==l.key),d.success("任务已删除")}catch{d.error("删除失败")}}return le(T),(l,e)=>{const c=s("a-button"),k=s("a-space"),u=s("a-statistic"),i=s("a-card"),h=s("a-col"),G=s("a-row"),I=s("a-spin"),M=s("a-badge"),X=s("a-popconfirm"),Y=s("a-table"),U=s("a-input"),g=s("a-form-item"),Z=s("a-textarea"),H=s("a-switch"),J=s("a-form"),K=s("a-modal");return p(),b("div",null,[m("div",oe,[e[9]||(e[9]=m("div",null,[m("h2",{class:"page-title"},"定时任务"),m("p",{class:"page-sub"},"定时任务调度管理")],-1)),a(k,null,{default:t(()=>[a(c,{onClick:e[0]||(e[0]=n=>_.value=!0),type:"primary"},{icon:t(()=>[a(B(ee))]),default:t(()=>[e[7]||(e[7]=f(" 新建任务 ",-1))]),_:1}),a(c,{ghost:"",loading:C.value,onClick:T},{icon:t(()=>[a(B(ae))]),default:t(()=>[e[8]||(e[8]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a(G,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"全部任务",value:v.value.length,"value-style":"color: #ccc; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"启用中",value:q.value,"value-style":"color: #52c41a; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"已暂停",value:S.value,"value-style":"color: #faad14; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1}),a(h,{xs:12,sm:6},{default:t(()=>[a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:t(()=>[a(u,{title:"预设方案",value:N.length,"value-style":"color: #1677ff; font-size: 18px;"},null,8,["value"])]),_:1})]),_:1})]),_:1}),a(i,{title:"快速添加预设",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"},size:"small"},{default:t(()=>[a(k,{wrap:""},{default:t(()=>[(p(),b(V,null,ne(N,n=>a(c,{key:n.label,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)","font-size":"12px"},onClick:r=>P(n)},{default:t(()=>[f(w(n.label),1)]),_:2},1032,["onClick"])),64))]),_:1})]),_:1}),a(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[C.value?(p(),b("div",se,[a(I,{size:"large"})])):(p(),L(Y,{key:1,columns:A,"data-source":v.value,pagination:{pageSize:15},size:"small"},{bodyCell:t(({column:n,record:r})=>[n.key==="name"?(p(),b(V,{key:0},[m("div",re,w(r.name),1),r.description?(p(),b("div",ue,w(r.description),1)):z("",!0)],64)):z("",!0),n.key==="cron"?(p(),b("code",ie,w(r.cron),1)):z("",!0),n.key==="status"?(p(),L(M,{key:2,status:r.enabled?"success":"warning",text:r.enabled?"运行中":"已暂停"},null,8,["status","text"])):z("",!0),n.key==="actions"?(p(),L(k,{key:3,size:"small"},{default:t(()=>[a(c,{size:"small",type:"link",loading:r.running,onClick:O=>j(r)},{default:t(()=>[...e[10]||(e[10]=[f("运行",-1)])]),_:1},8,["loading","onClick"]),a(c,{size:"small",type:"link",onClick:O=>D(r)},{default:t(()=>[f(w(r.enabled?"暂停":"启用"),1)]),_:2},1032,["onClick"]),a(X,{title:"确认删除此任务?",onConfirm:O=>E(r)},{default:t(()=>[a(c,{size:"small",type:"link",danger:""},{default:t(()=>[...e[11]||(e[11]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):z("",!0)]),emptyText:t(()=>[m("div",ce,[a(B(te),{style:{"font-size":"36px","margin-bottom":"12px",display:"block"}}),e[12]||(e[12]=f(" 暂无定时任务 ",-1))])]),_:1},8,["data-source"]))]),_:1}),a(K,{open:_.value,"onUpdate:open":e[6]||(e[6]=n=>_.value=n),title:"新建定时任务","confirm-loading":$.value,onOk:R,width:"520px"},{default:t(()=>[a(J,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:t(()=>[a(g,{label:"任务名称",required:""},{default:t(()=>[a(U,{value:o.value.name,"onUpdate:value":e[1]||(e[1]=n=>o.value.name=n),placeholder:"任务名称"},null,8,["value"])]),_:1}),a(g,{label:"Cron 表达式",required:""},{default:t(()=>[a(U,{value:o.value.cron,"onUpdate:value":e[2]||(e[2]=n=>o.value.cron=n),placeholder:"如: 0 9 * * * (每天9点)"},null,8,["value"]),e[13]||(e[13]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},"格式: 分 时 日 月 周",-1))]),_:1}),a(g,{label:"任务内容",required:""},{default:t(()=>[a(Z,{value:o.value.payload,"onUpdate:value":e[3]||(e[3]=n=>o.value.payload=n),rows:3,placeholder:"要执行的 AI 任务描述..."},null,8,["value"])]),_:1}),a(g,{label:"描述"},{default:t(()=>[a(U,{value:o.value.description,"onUpdate:value":e[4]||(e[4]=n=>o.value.description=n),placeholder:"可选描述"},null,8,["value"])]),_:1}),a(g,{label:"立即启用"},{default:t(()=>[a(H,{checked:o.value.enabled,"onUpdate:checked":e[5]||(e[5]=n=>o.value.enabled=n)},null,8,["checked"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}};export{fe as default};
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{V as se,f as T,o as le,b as oe,a3 as p,a1 as l,a5 as o,u as r,k as t,Z as s,W as I,a4 as H,c as S,X as x,$ as ae,Y as i,G as m,a8 as X,F as P,a7 as O}from"./vendor-CN0Iv_qZ.js";import{u as B}from"./ws-DjelKkD6.js";import{u as ne}from"./chat-DnH09sSR.js";import{_ as re}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as ie,F as ue,i as Y,c as Z,M as q,j as de,k as ve,b as J,S as ce,d as pe}from"./antd-CJSBocer.js";function me(){return{samples:0,compressedSamples:0,hitRate:0,totalSavedTokens:0,averageSavedTokens:0,totalOriginalTokens:0,totalCompressedTokens:0,netSavingsRate:0,variantDistribution:{},strategyDistribution:[],providerDistribution:[],modelDistribution:[]}}const fe=se("dashboard",()=>{const V=T(!1),j=T(!1),d=T({wsStatus:"disconnected",activeLlm:null,activeModel:null,skillCount:0,sessionCount:0,providerCount:0,appRunning:!1,setupDone:!1,edition:"",mcpCount:null,noteCount:null}),F=T(""),_=T(me()),v=T({windowPreset:"all",provider:"",model:""});let k=null;function D(n=B()){k||(k=n.onRuntimeEvent(c=>{c.type==="compression:summary"?N(c.payload?.summary||{}):c.type==="session:start"?d.value.sessionCount=(d.value.sessionCount||0)+1:c.type==="session:end"&&(d.value.sessionCount=Math.max(0,(d.value.sessionCount||0)-1))}))}function E(){k&&(k(),k=null)}function N(n){_.value={..._.value,...n||{}}}function h(n){return n==="1h"?3600*1e3:n==="24h"?1440*60*1e3:n==="7d"?10080*60*1e3:null}function f(n){d.value.appRunning=n.includes("Desktop app running"),d.value.setupDone=n.includes("Setup completed");const c=n.match(/Edition:\s+(\S+)/i);c&&(d.value.edition=c[1]);const w=n.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(w)d.value.activeLlm=w[1],d.value.activeModel=w[2];else{const b=n.match(/LLM:\s+(\S+)/i);b&&(d.value.activeLlm=b[1])}}async function g(){const n=B();D(n),j.value=!0;const c={type:"compression-stats",windowMs:h(v.value.windowPreset)};v.value.provider&&(c.provider=v.value.provider),v.value.model&&(c.model=v.value.model);try{const w=await n.sendRaw(c,1e4);N(w.summary||{})}catch{}finally{j.value=!1}}async function W(){const n=B();D(n),V.value=!0,d.value.wsStatus=n.status,F.value="";try{const[c,w]=await Promise.allSettled([n.execute("status",15e3),n.listSessions()]);if(c.status==="fulfilled"){const b=c.value.output;F.value=b.split(`
|
|
2
|
+
`).slice(0,20).join(`
|
|
3
|
+
`),f(b)}w.status==="fulfilled"&&(d.value.sessionCount=w.value.length),Promise.allSettled([n.execute("skill sources",15e3),n.execute("llm providers",15e3)]).then(([b,R])=>{if(b.status==="fulfilled"){const A=b.value.output.match(/(\d+)\s*(?:skills|技能)/i);A&&(d.value.skillCount=parseInt(A[1],10))}if(R.status==="fulfilled"){const y=R.value.output.match(/active[:\s]+(\S+)/i);y&&!d.value.activeLlm&&(d.value.activeLlm=y[1])}}),n.execute("mcp servers",1e4).then(({output:b})=>{const R=(b.match(/^[a-z]/gm)||[]).length;d.value.mcpCount=R}).catch(()=>{d.value.mcpCount=0}),await g()}catch{}finally{V.value=!1}}return{loading:V,compressionLoading:j,stats:d,statusLog:F,compression:_,telemetryFilters:v,ensureRuntimeSubscription:D,stopRuntimeSubscription:E,refresh:W,refreshCompression:g,applyCompressionSummary:N,toWindowMs:h}}),ye={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"20px"}},ge={class:"page-sub"},be={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},_e={style:{color:"#91caff","font-weight":"600"}},ke={style:{color:"#4a6fa5","font-size":"11px","font-family":"monospace"}},we={class:"stat-header"},Ce={class:"stat-sub"},xe={class:"stat-header"},Se={class:"stat-value",style:{color:"#91caff","font-size":"15px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},he={class:"stat-sub",style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Re={class:"stat-header"},$e={class:"stat-value",style:{color:"#1677ff"}},ze={class:"stat-header"},Le={class:"stat-value",style:{color:"#c084fc"}},De={class:"stat-header"},Me={class:"stat-sub"},Te={class:"stat-header"},Pe={class:"stat-value",style:{color:"#13c2c2"}},Oe={class:"stat-header"},je={class:"stat-value",style:{color:"#faad14"}},Fe={class:"status-log"},Ee={class:"telemetry-filter"},Ne={class:"telemetry-filter"},Ae={class:"telemetry-filter"},Ie={class:"telemetry-card"},Ve={class:"telemetry-value"},We={class:"telemetry-sub"},Be={class:"telemetry-card"},Ue={class:"telemetry-value"},Ge={class:"telemetry-sub"},He={class:"telemetry-card"},Xe={class:"telemetry-value"},Ye={class:"telemetry-sub"},Ze={class:"telemetry-section"},qe={key:0,class:"telemetry-empty"},Je={key:1,class:"telemetry-list"},Ke={class:"telemetry-section"},Qe={key:0,class:"telemetry-empty"},et={key:1,class:"telemetry-list"},tt={class:"telemetry-section"},st={key:0,class:"telemetry-empty"},lt={key:1,class:"telemetry-list"},ot={class:"telemetry-section"},at={key:0,class:"telemetry-empty"},nt={key:1,class:"telemetry-list"},rt={style:{color:"#91caff"}},it={style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},ut={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},dt={__name:"Dashboard",setup(V){const j=ae(),d=B(),F=ne(),_=fe(),v=window.__CC_CONFIG__||{},k=S(()=>v.mode==="project"),D=S(()=>d.status),E=S(()=>_.loading),N=S(()=>_.statusLog),h=S(()=>_.telemetryFilters),f=S(()=>_.compression),g=S(()=>_.stats),W=S(()=>Object.entries(f.value.variantDistribution||{})),n=S(()=>f.value.providerDistribution||[]),c=S(()=>f.value.modelDistribution||[]);async function w(){await _.refresh()}async function b(){await _.refreshCompression()}function R(y){return`${((y||0)*100).toFixed(1)}%`}async function A(){await F.createSession("agent"),j.push("/chat")}return le(()=>{_.ensureRuntimeSubscription(d),setTimeout(w,300)}),oe(()=>{_.stopRuntimeSubscription()}),(y,e)=>{const z=x("a-button"),U=x("a-tag"),C=x("a-card"),K=x("a-badge"),u=x("a-col"),$=x("a-row"),Q=x("a-space"),L=x("a-select-option"),G=x("a-select"),M=x("a-descriptions-item"),ee=x("a-descriptions");return i(),p("div",null,[l("div",ye,[l("div",null,[e[13]||(e[13]=l("h2",{class:"page-title"},"仪表板",-1)),l("p",ge,o(k.value?`项目「${r(v).projectName||"未命名"}」运行概览`:"ChainlessChain 全局运行概览"),1)]),t(z,{type:"primary",ghost:"",loading:E.value,onClick:w},{icon:s(()=>[t(r(ie))]),default:s(()=>[e[14]||(e[14]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),k.value?(i(),I(C,{key:0,style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.25)","margin-bottom":"16px"},size:"small"},{default:s(()=>[l("div",be,[t(r(ue),{style:{color:"#1677ff","font-size":"18px"}}),l("div",null,[l("div",_e,o(r(v).projectName||"项目"),1),l("div",ke,o(r(v).projectRoot),1)]),t(U,{color:"blue",style:{"margin-left":"auto"}},{default:s(()=>[...e[15]||(e[15]=[m("项目面板",-1)])]),_:1})])]),_:1})):H("",!0),t($,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:s(()=>[t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card gateway-card",size:"small"},{default:s(()=>[l("div",we,[e[16]||(e[16]=l("span",{class:"stat-label"},"WebSocket Gateway",-1)),t(K,{status:D.value==="connected"?"success":"error"},null,8,["status"])]),l("div",{class:"stat-value",style:X({color:D.value==="connected"?"#52c41a":"#888"})},o(D.value==="connected"?"运行中":"未连接"),5),l("div",Ce,"端口 "+o(r(v).wsPort||18800)+" · "+o(r(v).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small"},{default:s(()=>[l("div",xe,[e[17]||(e[17]=l("span",{class:"stat-label"},"当前 LLM",-1)),t(r(Y),{style:{color:"#1677ff"}})]),l("div",Se,o(g.value.activeLlm||"未配置"),1),l("div",he,o(g.value.activeModel||"—"),1)]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[0]||(e[0]=a=>y.$router.push("/skills"))},{default:s(()=>[l("div",Re,[e[18]||(e[18]=l("span",{class:"stat-label"},"可用技能",-1)),t(r(Z),{style:{color:"#1677ff"}})]),l("div",$e,o(g.value.skillCount||"—"),1),e[19]||(e[19]=l("div",{class:"stat-sub"},"点击管理技能",-1))]),_:1})]),_:1}),t(u,{xs:24,sm:12,lg:6},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[1]||(e[1]=a=>y.$router.push("/chat"))},{default:s(()=>[l("div",ze,[e[20]||(e[20]=l("span",{class:"stat-label"},"AI 会话",-1)),t(r(q),{style:{color:"#722ed1"}})]),l("div",Le,o(g.value.sessionCount),1),e[21]||(e[21]=l("div",{class:"stat-sub"},"点击进入对话",-1))]),_:1})]),_:1})]),_:1}),t($,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:s(()=>[t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small"},{default:s(()=>[l("div",De,[e[22]||(e[22]=l("span",{class:"stat-label"},"应用状态",-1)),t(r(de),{style:X({color:g.value.appRunning?"#52c41a":"#888"})},null,8,["style"])]),l("div",{class:"stat-value",style:X({color:g.value.appRunning?"#52c41a":"#888",fontSize:"15px"})},o(g.value.appRunning?"运行中":g.value.setupDone?"已初始化":"未启动"),5),l("div",Me,o(g.value.edition||"Community")+" Edition",1)]),_:1})]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[2]||(e[2]=a=>y.$router.push("/mcp"))},{default:s(()=>[l("div",Te,[e[23]||(e[23]=l("span",{class:"stat-label"},"MCP 工具",-1)),t(r(ve),{style:{color:"#13c2c2"}})]),l("div",Pe,o(g.value.mcpCount??"—"),1),e[24]||(e[24]=l("div",{class:"stat-sub"},"已挂载扩展",-1))]),_:1})]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[t(C,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:e[3]||(e[3]=a=>y.$router.push("/notes"))},{default:s(()=>[l("div",Oe,[e[25]||(e[25]=l("span",{class:"stat-label"},"知识库笔记",-1)),t(r(J),{style:{color:"#faad14"}})]),l("div",je,o(g.value.noteCount??"—"),1),e[26]||(e[26]=l("div",{class:"stat-sub"},"点击管理笔记",-1))]),_:1})]),_:1})]),_:1}),t($,{gutter:[16,16]},{default:s(()=>[t(u,{xs:24,lg:10},{default:s(()=>[t(C,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)",height:"100%"}},{default:s(()=>[t(Q,{direction:"vertical",style:{width:"100%"},size:"middle"},{default:s(()=>[t(z,{type:"primary",block:"",onClick:e[4]||(e[4]=a=>y.$router.push("/chat"))},{icon:s(()=>[t(r(q))]),default:s(()=>[m(" "+o(k.value?"进入项目 Chat":"新建 AI 对话"),1)]),_:1}),t(z,{block:"",onClick:A,style:{background:"rgba(114,46,209,.12)","border-color":"#722ed1",color:"#722ed1"}},{icon:s(()=>[t(r(Y))]),default:s(()=>[e[27]||(e[27]=m(" 启动 Agent 模式 ",-1))]),_:1}),t($,{gutter:8},{default:s(()=>[t(u,{span:12},{default:s(()=>[t(z,{block:"",onClick:e[5]||(e[5]=a=>y.$router.push("/services")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(ce))]),default:s(()=>[e[28]||(e[28]=m(" 服务管理 ",-1))]),_:1})]),_:1}),t(u,{span:12},{default:s(()=>[t(z,{block:"",onClick:e[6]||(e[6]=a=>y.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(J))]),default:s(()=>[e[29]||(e[29]=m(" 查看日志 ",-1))]),_:1})]),_:1})]),_:1}),t($,{gutter:8},{default:s(()=>[t(u,{span:12},{default:s(()=>[t(z,{block:"",onClick:e[7]||(e[7]=a=>y.$router.push("/skills")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(Z))]),default:s(()=>[e[30]||(e[30]=m(" 技能管理 ",-1))]),_:1})]),_:1}),t(u,{span:12},{default:s(()=>[t(z,{block:"",onClick:e[8]||(e[8]=a=>y.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[t(r(pe))]),default:s(()=>[e[31]||(e[31]=m(" LLM 配置 ",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(u,{xs:24,lg:14},{default:s(()=>[t(C,{title:"最近状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},loading:E.value},{extra:s(()=>[t(z,{type:"link",size:"small",onClick:e[9]||(e[9]=a=>y.$router.push("/logs"))},{default:s(()=>[...e[32]||(e[32]=[m("查看更多",-1)])]),_:1})]),default:s(()=>[l("pre",Fe,o(N.value||"点击刷新加载系统状态..."),1)]),_:1},8,["loading"])]),_:1})]),_:1}),t(C,{title:"压缩策略观测",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"},loading:E.value},{default:s(()=>[t($,{gutter:[12,12],style:{"margin-bottom":"12px"}},{default:s(()=>[t(u,{xs:24,md:8},{default:s(()=>[l("div",Ee,[e[37]||(e[37]=l("div",{class:"telemetry-filter-label"},"时间窗口",-1)),t(G,{value:h.value.windowPreset,"onUpdate:value":e[10]||(e[10]=a=>h.value.windowPreset=a),style:{width:"100%"},onChange:b},{default:s(()=>[t(L,{value:"all"},{default:s(()=>[...e[33]||(e[33]=[m("全部样本",-1)])]),_:1}),t(L,{value:"1h"},{default:s(()=>[...e[34]||(e[34]=[m("近 1 小时",-1)])]),_:1}),t(L,{value:"24h"},{default:s(()=>[...e[35]||(e[35]=[m("近 24 小时",-1)])]),_:1}),t(L,{value:"7d"},{default:s(()=>[...e[36]||(e[36]=[m("近 7 天",-1)])]),_:1})]),_:1},8,["value"])])]),_:1}),t(u,{xs:24,md:8},{default:s(()=>[l("div",Ne,[e[39]||(e[39]=l("div",{class:"telemetry-filter-label"},"Provider 切片",-1)),t(G,{value:h.value.provider,"onUpdate:value":e[11]||(e[11]=a=>h.value.provider=a),style:{width:"100%"},onChange:b},{default:s(()=>[t(L,{value:""},{default:s(()=>[...e[38]||(e[38]=[m("全部 Provider",-1)])]),_:1}),(i(!0),p(P,null,O(n.value,a=>(i(),I(L,{key:a.key,value:a.key},{default:s(()=>[m(o(a.key),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1}),t(u,{xs:24,md:8},{default:s(()=>[l("div",Ae,[e[41]||(e[41]=l("div",{class:"telemetry-filter-label"},"Model 切片",-1)),t(G,{value:h.value.model,"onUpdate:value":e[12]||(e[12]=a=>h.value.model=a),style:{width:"100%"},onChange:b},{default:s(()=>[t(L,{value:""},{default:s(()=>[...e[40]||(e[40]=[m("全部 Model",-1)])]),_:1}),(i(!0),p(P,null,O(c.value,a=>(i(),I(L,{key:a.key,value:a.key},{default:s(()=>[m(o(a.key),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])])]),_:1})]),_:1}),t($,{gutter:[12,12]},{default:s(()=>[t(u,{xs:24,sm:8},{default:s(()=>[l("div",Ie,[e[42]||(e[42]=l("div",{class:"telemetry-label"},"压缩命中率",-1)),l("div",Ve,o(R(f.value.hitRate)),1),l("div",We,o(f.value.compressedSamples)+" / "+o(f.value.samples)+" 次压缩产生了有效节省 ",1)])]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[l("div",Be,[e[43]||(e[43]=l("div",{class:"telemetry-label"},"累计节省 Token",-1)),l("div",Ue,o(f.value.totalSavedTokens),1),l("div",Ge,"平均每次 "+o(f.value.averageSavedTokens)+" Token",1)])]),_:1}),t(u,{xs:24,sm:8},{default:s(()=>[l("div",He,[e[44]||(e[44]=l("div",{class:"telemetry-label"},"净节省率",-1)),l("div",Xe,o(R(f.value.netSavingsRate)),1),l("div",Ye," 原始 "+o(f.value.totalOriginalTokens)+" -> 压缩后 "+o(f.value.totalCompressedTokens),1)])]),_:1})]),_:1}),t($,{gutter:[16,16],style:{"margin-top":"12px"}},{default:s(()=>[t(u,{xs:24,lg:12},{default:s(()=>[l("div",Ze,[e[45]||(e[45]=l("div",{class:"telemetry-section-title"},"策略命中分布",-1)),f.value.strategyDistribution.length===0?(i(),p("div",qe,"暂无压缩样本")):(i(),p("div",Je,[(i(!0),p(P,null,O(f.value.strategyDistribution.slice(0,6),a=>(i(),p("div",{key:a.strategy,class:"telemetry-row"},[l("span",null,o(a.strategy),1),l("span",null,o(a.hits)+" 次 · "+o(R(a.hitRate)),1)]))),128))]))])]),_:1}),t(u,{xs:24,lg:12},{default:s(()=>[l("div",Ke,[e[46]||(e[46]=l("div",{class:"telemetry-section-title"},"变体分布",-1)),W.value.length===0?(i(),p("div",Qe,"暂无变体数据")):(i(),p("div",et,[(i(!0),p(P,null,O(W.value,([a,te])=>(i(),p("div",{key:a,class:"telemetry-row"},[l("span",null,o(a),1),l("span",null,o(te)+" 次",1)]))),128))]))])]),_:1})]),_:1}),t($,{gutter:[16,16],style:{"margin-top":"12px"}},{default:s(()=>[t(u,{xs:24,lg:12},{default:s(()=>[l("div",tt,[e[47]||(e[47]=l("div",{class:"telemetry-section-title"},"Provider 切片",-1)),n.value.length===0?(i(),p("div",st,"暂无 Provider 数据")):(i(),p("div",lt,[(i(!0),p(P,null,O(n.value.slice(0,6),a=>(i(),p("div",{key:a.key,class:"telemetry-row"},[l("span",null,o(a.key),1),l("span",null,o(a.samples)+" 次 · "+o(R(a.hitRate)),1)]))),128))]))])]),_:1}),t(u,{xs:24,lg:12},{default:s(()=>[l("div",ot,[e[48]||(e[48]=l("div",{class:"telemetry-section-title"},"Model 切片",-1)),c.value.length===0?(i(),p("div",at,"暂无 Model 数据")):(i(),p("div",nt,[(i(!0),p(P,null,O(c.value.slice(0,6),a=>(i(),p("div",{key:a.key,class:"telemetry-row"},[l("span",null,o(a.key),1),l("span",null,o(a.samples)+" 次 · "+o(a.savedTokens)+" saved",1)]))),128))]))])]),_:1})]),_:1})]),_:1},8,["loading"]),t(C,{title:"运行信息",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:s(()=>[t(ee,{column:{xs:1,sm:2,lg:3},size:"small"},{default:s(()=>[t(M,{label:"面板模式"},{default:s(()=>[t(U,{color:k.value?"blue":"purple"},{default:s(()=>[m(o(k.value?"项目级":"全局"),1)]),_:1},8,["color"])]),_:1}),k.value?(i(),I(M,{key:0,label:"项目名称"},{default:s(()=>[l("span",rt,o(r(v).projectName||"—"),1)]),_:1})):H("",!0),k.value?(i(),I(M,{key:1,label:"项目路径"},{default:s(()=>[l("span",it,o(r(v).projectRoot),1)]),_:1})):H("",!0),t(M,{label:"WebSocket"},{default:s(()=>[l("span",ut," ws://"+o(r(v).wsHost||"127.0.0.1")+":"+o(r(v).wsPort||18800),1)]),_:1}),t(M,{label:"认证"},{default:s(()=>[t(U,{color:r(v).wsToken?"green":"default",style:{"font-size":"11px"}},{default:s(()=>[m(o(r(v).wsToken?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),t(M,{label:"版本"},{default:s(()=>[...e[49]||(e[49]=[l("span",{style:{color:"var(--text-muted)"}},"v5.0.2.7",-1)])]),_:1})]),_:1})]),_:1})])}}},yt=re(dt,[["__scopeId","data-v-39c5aabc"]]);export{yt as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.stat-card[data-v-39c5aabc]{background:var(--bg-card)!important;border-color:var(--border-color)!important;transition:border-color .2s}.stat-card[data-v-39c5aabc]:hover{border-color:var(--text-muted)!important}.stat-header[data-v-39c5aabc]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.stat-label[data-v-39c5aabc]{color:var(--text-secondary);font-size:12px}.stat-value[data-v-39c5aabc]{font-size:22px;font-weight:600;line-height:1.2;margin-bottom:4px}.stat-sub[data-v-39c5aabc]{color:var(--text-muted);font-size:11px}.gateway-card[data-v-39c5aabc]{border-left:3px solid #1677ff!important}.status-log[data-v-39c5aabc]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:6px;padding:10px 14px;color:var(--text-secondary);font-size:11px;font-family:Consolas,monospace;max-height:200px;overflow-y:auto;white-space:pre-wrap;margin:0;line-height:1.6}.telemetry-card[data-v-39c5aabc]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:14px;height:100%}.telemetry-filter[data-v-39c5aabc]{display:flex;flex-direction:column;gap:6px}.telemetry-filter-label[data-v-39c5aabc]{color:var(--text-muted);font-size:12px}.telemetry-label[data-v-39c5aabc]{color:var(--text-muted);font-size:12px;margin-bottom:6px}.telemetry-value[data-v-39c5aabc]{color:#91caff;font-size:24px;font-weight:600;line-height:1.2}.telemetry-sub[data-v-39c5aabc]{color:var(--text-secondary);font-size:11px;margin-top:4px}.telemetry-section[data-v-39c5aabc]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:14px;min-height:140px}.telemetry-section-title[data-v-39c5aabc]{color:var(--text-secondary);font-size:12px;margin-bottom:10px}.telemetry-list[data-v-39c5aabc]{display:flex;flex-direction:column;gap:8px}.telemetry-row[data-v-39c5aabc]{display:flex;justify-content:space-between;gap:12px;color:var(--text-secondary);font-size:12px}.telemetry-empty[data-v-39c5aabc]{color:var(--text-muted);font-size:12px}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as R}from"./ws-
|
|
1
|
+
import{u as R}from"./ws-DjelKkD6.js";import{_ as U}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as q}from"./antd-CJSBocer.js";import{w as z,o as A,a3 as i,a1 as o,k as a,Z as d,W as D,a4 as F,a5 as h,F as j,a7 as G,n as w,X as l,f as r,c as C,Y as u,G as b,u as I,a2 as Q}from"./vendor-CN0Iv_qZ.js";const X={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Y={style:{display:"flex",gap:"10px",margin:"12px 0"}},Z={key:0,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},J={key:1,style:{"text-align":"center",padding:"40px",color:"var(--text-muted)"}},P={key:2},ee=["innerHTML"],te={__name:"Logs",setup(ae){const L=R(),k=r("status"),v=r(!1),g=r(""),m=r(""),c=r(""),_=r(!0),n=r(null),T={status:"status",doctor:"doctor","skill-sources":"skill sources","llm-providers":"llm providers"},f=C(()=>m.value.split(`
|
|
2
2
|
`)),p=C(()=>{if(!c.value)return f.value;const e=c.value.toLowerCase();return f.value.filter(t=>t.toLowerCase().includes(e))});function M(e){return e.includes("✖")||e.includes("error")||e.includes("Error")||e.includes("failed")?"line-error":e.includes("✔")||e.includes("✓")||e.includes("success")||e.includes("running")?"line-success":e.includes("warn")||e.includes("Warn")||e.includes("○")?"line-warn":e.startsWith(" ")||e.startsWith(" ")?"line-indent":""}function B(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function H(e){if(!c.value)return e;const t=c.value.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return e.replace(new RegExp(`(${t})`,"gi"),"<mark>$1</mark>")}async function x(){v.value=!0,g.value="",m.value="";const e=T[k.value]||"status";try{const{output:t}=await L.execute(e,3e4);m.value=t,_.value&&(await w(),n.value&&(n.value.scrollTop=n.value.scrollHeight))}catch(t){g.value=`执行失败: ${t.message}`,m.value=g.value}finally{v.value=!1}}return z(p,async()=>{_.value&&(await w(),n.value&&(n.value.scrollTop=n.value.scrollHeight))}),A(x),(e,t)=>{const N=l("a-checkbox"),S=l("a-button"),W=l("a-space"),y=l("a-tab-pane"),$=l("a-tabs"),V=l("a-input-search"),E=l("a-tag"),K=l("a-spin");return u(),i("div",null,[o("div",X,[t[5]||(t[5]=o("div",null,[o("h2",{class:"page-title"},"日志查看"),o("p",{class:"page-sub"},"系统运行日志与诊断输出")],-1)),a(W,null,{default:d(()=>[a(N,{checked:_.value,"onUpdate:checked":t[0]||(t[0]=s=>_.value=s)},{default:d(()=>[...t[3]||(t[3]=[b("自动滚动",-1)])]),_:1},8,["checked"]),a(S,{type:"primary",ghost:"",loading:v.value,onClick:x},{icon:d(()=>[a(I(q))]),default:d(()=>[t[4]||(t[4]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a($,{activeKey:k.value,"onUpdate:activeKey":t[1]||(t[1]=s=>k.value=s),onChange:x,style:{"margin-bottom":"0"}},{default:d(()=>[a(y,{key:"status",tab:"系统状态"}),a(y,{key:"doctor",tab:"环境诊断"}),a(y,{key:"skill-sources",tab:"技能来源"}),a(y,{key:"llm-providers",tab:"LLM 提供商"})]),_:1},8,["activeKey"]),o("div",Y,[a(V,{value:c.value,"onUpdate:value":t[2]||(t[2]=s=>c.value=s),placeholder:"搜索日志内容...","allow-clear":"",style:{flex:"1"}},null,8,["value"]),p.value.length!==f.value.length?(u(),D(E,{key:0,color:"blue"},{default:d(()=>[b(h(p.value.length)+" / "+h(f.value.length)+" 行 ",1)]),_:1})):F("",!0)]),o("div",{ref_key:"logContainer",ref:n,class:"log-box"},[v.value?(u(),i("div",Z,[a(K,{size:"large"}),t[6]||(t[6]=o("div",{style:{"margin-top":"10px"}},"加载中...",-1))])):p.value.length?(u(),i("div",P,[(u(!0),i(j,null,G(p.value,(s,O)=>(u(),i("div",{key:O,class:Q(["log-line",M(s)]),innerHTML:H(B(s))},null,10,ee))),128))])):(u(),i("div",J,h(g.value||"暂无日志内容,点击刷新加载"),1))],512)])}}},re=U(te,[["__scopeId","data-v-b316ead3"]]);export{re as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{u as V}from"./ws-
|
|
1
|
+
import{u as V}from"./ws-DjelKkD6.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as E,e as W,k as F,m as $}from"./antd-CJSBocer.js";import{o as q,a3 as u,a1 as m,k as o,Z as a,f as b,X as d,Y as l,G as k,u as v,F as A,a7 as D,W as C,a5 as p,a4 as z,c as G}from"./vendor-CN0Iv_qZ.js";const U={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},X={key:0,style:{"text-align":"center",padding:"30px"}},Y={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},Z={key:2,class:"servers-grid"},H={style:{display:"flex","align-items":"center",gap:"10px","margin-bottom":"6px"}},J={style:{color:"#e0e0e0","font-weight":"500","font-family":"monospace"}},K={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Q={key:1,style:{color:"var(--text-secondary)","font-size":"11px","margin-top":"4px"}},ee={key:0,style:{"text-align":"center",padding:"30px"}},te={key:0,style:{color:"#91caff","font-family":"monospace","font-size":"12px"}},oe={__name:"McpTools",setup(ae){const w=V(),f=b(!1),g=b([]),y=b([]),x=b(""),P=G(()=>{if(!x.value)return y.value;const r=x.value.toLowerCase();return y.value.filter(t=>t.name?.toLowerCase().includes(r)||t.description?.toLowerCase().includes(r))}),T=[{title:"工具名称",key:"name",dataIndex:"name",width:"30%"},{title:"服务器",key:"server",dataIndex:"server",width:"20%"},{title:"描述",dataIndex:"description",ellipsis:!0}];async function M(){f.value=!0;try{const[r,t]=await Promise.all([w.execute("mcp servers",15e3).catch(()=>({output:""})),w.execute("mcp tools",15e3).catch(()=>({output:""}))]);g.value=N(r.output),y.value=B(t.output)}catch(r){console.error("MCP load failed:",r)}finally{f.value=!1}}function N(r){const t=[],_=r.split(`
|
|
2
2
|
`);let s=null;for(const i of _){const e=i.trim();if(!e||e.startsWith("─")||e.startsWith("MCP"))continue;const c=e.match(/^[●•]?\s*([a-z][a-z0-9-_]+)\s*$/i)||e.match(/^([a-z][a-z0-9-_]+)\s*[::]/);c?(s&&t.push(s),s={key:c[1],name:c[1],command:"",args:[],description:""}):s&&(e.startsWith("command:")||e.startsWith("Command:")?s.command=e.replace(/^command:\s*/i,"").trim():e.startsWith("args:")||e.startsWith("Args:")?s.args=e.replace(/^args:\s*/i,"").split(",").map(h=>h.trim()):s.description||(s.description=e.slice(0,80)))}return s&&t.push(s),!t.length&&r.trim()&&!r.includes("No MCP")&&r.split(`
|
|
3
3
|
`).filter(e=>e.trim()&&!e.includes("─")).slice(0,10).forEach((e,c)=>{t.push({key:c,name:e.trim(),command:"",args:[],description:""})}),t}function B(r){const t=[],_=r.split(`
|
|
4
|
-
`);let s="unknown";for(const i of _){const e=i.trim();if(!e||e.startsWith("─"))continue;if(e.match(/^\[/)||e.match(/^Server:/i)){s=e.replace(/[\[\]]/g,"").replace(/^Server:\s*/i,"").trim();continue}const c=e.match(/^[●•]?\s*([a-z][a-z0-9_-]+)\s*[-–]\s*(.+)/i)||e.match(/^[●•]?\s*([a-z][a-z0-9_-]+)$/);c&&t.push({key:t.length,name:c[1],description:c[2]||"",server:s})}return t}return q(M),(r,t)=>{const _=d("a-button"),s=d("a-statistic"),i=d("a-card"),e=d("a-col"),c=d("a-row"),h=d("a-spin"),I=d("a-badge"),L=d("a-input-search"),O=d("a-tag"),R=d("a-table");return l(),u("div",null,[m("div",U,[t[2]||(t[2]=m("div",null,[m("h2",{class:"page-title"},"MCP 工具"),m("p",{class:"page-sub"},"Model Context Protocol — 已挂载工具与服务器")],-1)),o(_,{type:"primary",ghost:"",loading:f.value,onClick:M},{icon:a(()=>[o(v(E))]),default:a(()=>[t[1]||(t[1]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),o(c,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(e,{xs:24,sm:8},{default:a(()=>[o(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[o(s,{title:"服务器数量",value:g.value.length,"value-style":"color: #1677ff; font-size: 20px;"},{prefix:a(()=>[o(v(W))]),_:1},8,["value"])]),_:1})]),_:1}),o(e,{xs:24,sm:8},{default:a(()=>[o(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[o(s,{title:"工具数量",value:y.value.length,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:a(()=>[o(v(F))]),_:1},8,["value"])]),_:1})]),_:1}),o(e,{xs:24,sm:8},{default:a(()=>[o(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[o(s,{title:"运行状态",value:"就绪","value-style":"color: #52c41a; font-size: 20px;"},{prefix:a(()=>[o(v($))]),_:1})]),_:1})]),_:1})]),_:1}),o(i,{title:"已配置服务器",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[f.value?(l(),u("div",X,[o(h)])):g.value.length?(l(),u("div",Z,[(l(!0),u(A,null,D(g.value,n=>(l(),C(i,{key:n.name,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:a(()=>[m("div",H,[o(v(W),{style:{color:"#1677ff"}}),m("span",J,p(n.name),1),o(I,{status:"success"})]),n.command?(l(),u("div",K,p(n.command)+" "+p(n.args?.join(" ")),1)):z("",!0),n.description?(l(),u("div",Q,p(n.description),1)):z("",!0)]),_:2},1024))),128))])):(l(),u("div",Y,[...t[3]||(t[3]=[k(" 暂无 MCP 服务器,使用 ",-1),m("code",{style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px"}},"chainlesschain mcp add",-1),k(" 添加 ",-1)])]))]),_:1}),o(i,{title:"可用工具",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[o(L,{value:x.value,"onUpdate:value":t[0]||(t[0]=n=>x.value=n),placeholder:"搜索工具...","allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value"])]),default:a(()=>[f.value?(l(),u("div",ee,[o(h)])):(l(),C(R,{key:1,columns:
|
|
4
|
+
`);let s="unknown";for(const i of _){const e=i.trim();if(!e||e.startsWith("─"))continue;if(e.match(/^\[/)||e.match(/^Server:/i)){s=e.replace(/[\[\]]/g,"").replace(/^Server:\s*/i,"").trim();continue}const c=e.match(/^[●•]?\s*([a-z][a-z0-9_-]+)\s*[-–]\s*(.+)/i)||e.match(/^[●•]?\s*([a-z][a-z0-9_-]+)$/);c&&t.push({key:t.length,name:c[1],description:c[2]||"",server:s})}return t}return q(M),(r,t)=>{const _=d("a-button"),s=d("a-statistic"),i=d("a-card"),e=d("a-col"),c=d("a-row"),h=d("a-spin"),I=d("a-badge"),L=d("a-input-search"),O=d("a-tag"),R=d("a-table");return l(),u("div",null,[m("div",U,[t[2]||(t[2]=m("div",null,[m("h2",{class:"page-title"},"MCP 工具"),m("p",{class:"page-sub"},"Model Context Protocol — 已挂载工具与服务器")],-1)),o(_,{type:"primary",ghost:"",loading:f.value,onClick:M},{icon:a(()=>[o(v(E))]),default:a(()=>[t[1]||(t[1]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),o(c,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:a(()=>[o(e,{xs:24,sm:8},{default:a(()=>[o(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[o(s,{title:"服务器数量",value:g.value.length,"value-style":"color: #1677ff; font-size: 20px;"},{prefix:a(()=>[o(v(W))]),_:1},8,["value"])]),_:1})]),_:1}),o(e,{xs:24,sm:8},{default:a(()=>[o(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[o(s,{title:"工具数量",value:y.value.length,"value-style":"color: #52c41a; font-size: 20px;"},{prefix:a(()=>[o(v(F))]),_:1},8,["value"])]),_:1})]),_:1}),o(e,{xs:24,sm:8},{default:a(()=>[o(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"},size:"small"},{default:a(()=>[o(s,{title:"运行状态",value:"就绪","value-style":"color: #52c41a; font-size: 20px;"},{prefix:a(()=>[o(v($))]),_:1})]),_:1})]),_:1})]),_:1}),o(i,{title:"已配置服务器",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[f.value?(l(),u("div",X,[o(h)])):g.value.length?(l(),u("div",Z,[(l(!0),u(A,null,D(g.value,n=>(l(),C(i,{key:n.name,size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{default:a(()=>[m("div",H,[o(v(W),{style:{color:"#1677ff"}}),m("span",J,p(n.name),1),o(I,{status:"success"})]),n.command?(l(),u("div",K,p(n.command)+" "+p(n.args?.join(" ")),1)):z("",!0),n.description?(l(),u("div",Q,p(n.description),1)):z("",!0)]),_:2},1024))),128))])):(l(),u("div",Y,[...t[3]||(t[3]=[k(" 暂无 MCP 服务器,使用 ",-1),m("code",{style:{background:"var(--bg-card-hover)",padding:"2px 6px","border-radius":"3px"}},"chainlesschain mcp add",-1),k(" 添加 ",-1)])]))]),_:1}),o(i,{title:"可用工具",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:a(()=>[o(L,{value:x.value,"onUpdate:value":t[0]||(t[0]=n=>x.value=n),placeholder:"搜索工具...","allow-clear":"",size:"small",style:{width:"200px"}},null,8,["value"])]),default:a(()=>[f.value?(l(),u("div",ee,[o(h)])):(l(),C(R,{key:1,columns:T,"data-source":P.value,pagination:{pageSize:15},size:"small"},{bodyCell:a(({column:n,record:S})=>[n.key==="name"?(l(),u("span",te,p(S.name),1)):z("",!0),n.key==="server"?(l(),C(O,{key:1,color:"blue",style:{"font-size":"10px"}},{default:a(()=>[k(p(S.server),1)]),_:2},1024)):z("",!0)]),emptyText:a(()=>[...t[4]||(t[4]=[m("div",{style:{padding:"30px",color:"var(--text-muted)"}},"暂无可用工具",-1)])]),_:1},8,["data-source"]))]),_:1})])}}},ie=j(oe,[["__scopeId","data-v-8a49311e"]]);export{ie as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as H}from"./ws-
|
|
2
|
-
`);for(const x of d){const i=x.trim();if(!i||i.startsWith("─")||i.startsWith("Recall"))continue;const m=i.match(/^[-●•\d.]+\s+(.+)/);if(m){const b=m[1].trim();b.length>5&&e.push({id:e.length,content:b,layer:s.value,importance:"",time:""})}else i.length>10&&!i.includes(":")&&e.length<30&&e.push({id:e.length,content:i,layer:s.value,importance:"",time:""})}return e.slice(0,20)}async function j(){if(!c.value.content.trim()){k.warning("请输入记忆内容");return}$.value=!0;try{const a=`hmemory store "${c.value.content.replace(/"/g,'\\"')}" --importance ${c.value.importance}`,{output:e}=await w.execute(a,15e3);e.toLowerCase().includes("stored")||e.includes("✔")?(k.success("记忆已存储"),C.value=!1,c.value={content:"",importance:.5},await B()):(k.warning(e.slice(0,100)||"存储完成"),C.value=!1)}catch(a){k.error("存储失败: "+a.message)}finally{$.value=!1}}async function F(){
|
|
1
|
+
import{u as H}from"./ws-DjelKkD6.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as K,R as ee,T as te,h as oe,q as ae,r as le,o as k}from"./antd-CJSBocer.js";import{o as ne,a3 as v,a1 as r,k as t,Z as o,X as n,f as u,Y as f,G as p,u as h,a4 as N,F as re,a7 as se,a5 as O}from"./vendor-CN0Iv_qZ.js";const ie={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ue={style:{display:"flex","align-items":"center",gap:"12px"}},ce={key:0,style:{"text-align":"center",padding:"30px"}},de={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},pe={key:2,class:"memory-list"},me={style:{display:"flex","justify-content":"space-between","align-items":"flex-start","margin-bottom":"4px"}},ve={style:{display:"flex",gap:"8px","align-items":"center"}},fe={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ye={style:{color:"var(--text-muted)","font-size":"11px"}},ge={style:{color:"#ccc","font-size":"13px","line-height":"1.6"}},_e={__name:"Memory",setup(xe){const w=H(),T=u(!1),y=u(!1),S=u(!1),$=u(!1),C=u(!1),g=u({shortTerm:0,longTerm:0,core:0}),_=u([]),s=u("short-term"),z=u(""),c=u({content:"",importance:.5});function R(a){return{"short-term":"purple","long-term":"blue",core:"green"}[a]||"default"}function V(a){return{"short-term":"短期","long-term":"长期",core:"核心"}[a]||a}async function B(){T.value=!0;try{const{output:a}=await w.execute("hmemory stats",15e3);W(a)}catch(a){console.error("hmemory stats failed:",a)}finally{T.value=!1,await M()}}function W(a){const e=a.match(/short.?term[^\d]*(\d+)/i),d=a.match(/long.?term[^\d]*(\d+)/i),x=a.match(/core[^\d]*(\d+)/i);e&&(g.value.shortTerm=parseInt(e[1])),d&&(g.value.longTerm=parseInt(d[1])),x&&(g.value.core=parseInt(x[1]))}async function M(){y.value=!0;try{const a=s.value==="short-term"?"recent":s.value==="long-term"?"important":"core",{output:e}=await w.execute(`hmemory recall "${a}" --limit 20`,15e3);_.value=U(e)}catch{_.value=[]}finally{y.value=!1}}async function q(){if(!z.value.trim()){await M();return}y.value=!0;try{const{output:a}=await w.execute(`hmemory recall "${z.value}"`,15e3);_.value=U(a)}catch{_.value=[]}finally{y.value=!1}}function U(a){const e=[],d=a.split(`
|
|
2
|
+
`);for(const x of d){const i=x.trim();if(!i||i.startsWith("─")||i.startsWith("Recall"))continue;const m=i.match(/^[-●•\d.]+\s+(.+)/);if(m){const b=m[1].trim();b.length>5&&e.push({id:e.length,content:b,layer:s.value,importance:"",time:""})}else i.length>10&&!i.includes(":")&&e.length<30&&e.push({id:e.length,content:i,layer:s.value,importance:"",time:""})}return e.slice(0,20)}async function j(){if(!c.value.content.trim()){k.warning("请输入记忆内容");return}$.value=!0;try{const a=`hmemory store "${c.value.content.replace(/"/g,'\\"')}" --importance ${c.value.importance}`,{output:e}=await w.execute(a,15e3);e.toLowerCase().includes("stored")||e.includes("✔")?(k.success("记忆已存储"),C.value=!1,c.value={content:"",importance:.5},await B()):(k.warning(e.slice(0,100)||"存储完成"),C.value=!1)}catch(a){k.error("存储失败: "+a.message)}finally{$.value=!1}}async function F(){S.value=!0;try{const{output:a}=await w.execute("hmemory consolidate",2e4);k.success("记忆巩固完成"),await B()}catch(a){k.error("巩固失败: "+a.message)}finally{S.value=!1}}return ne(B),(a,e)=>{const d=n("a-button"),x=n("a-space"),i=n("a-statistic"),m=n("a-card"),b=n("a-col"),D=n("a-row"),L=n("a-radio-button"),E=n("a-radio-group"),G=n("a-input-search"),P=n("a-spin"),be=n("BrainOutlined"),Q=n("a-tag"),X=n("a-textarea"),I=n("a-form-item"),Y=n("a-slider"),Z=n("a-form"),A=n("a-modal");return f(),v("div",null,[r("div",ie,[e[11]||(e[11]=r("div",null,[r("h2",{class:"page-title"},"记忆文件"),r("p",{class:"page-sub"},"分层记忆系统 — 短期 / 长期 / 核心记忆")],-1)),t(x,null,{default:o(()=>[t(d,{onClick:e[0]||(e[0]=l=>C.value=!0),type:"primary"},{icon:o(()=>[t(h(K))]),default:o(()=>[e[9]||(e[9]=p(" 存储记忆 ",-1))]),_:1}),t(d,{ghost:"",loading:T.value,onClick:B},{icon:o(()=>[t(h(ee))]),default:o(()=>[e[10]||(e[10]=p(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),t(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(b,{xs:24,sm:8},{default:o(()=>[t(m,{style:{background:"rgba(114,46,209,.1)","border-color":"rgba(114,46,209,.35)",cursor:"pointer"},hoverable:"",onClick:e[1]||(e[1]=l=>s.value="short-term")},{default:o(()=>[t(i,{title:"短期记忆",value:g.value.shortTerm||0,"value-style":"color: #c084fc; font-size: 20px;"},{prefix:o(()=>[t(h(te))]),_:1},8,["value"]),e[12]||(e[12]=r("div",{style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},"最近会话内容",-1))]),_:1})]),_:1}),t(b,{xs:24,sm:8},{default:o(()=>[t(m,{style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.3)",cursor:"pointer"},hoverable:"",onClick:e[2]||(e[2]=l=>s.value="long-term")},{default:o(()=>[t(i,{title:"长期记忆",value:g.value.longTerm||0,"value-style":"color: #91caff; font-size: 20px;"},{prefix:o(()=>[t(h(oe))]),_:1},8,["value"]),e[13]||(e[13]=r("div",{style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},"巩固后的重要信息",-1))]),_:1})]),_:1}),t(b,{xs:24,sm:8},{default:o(()=>[t(m,{style:{background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)",cursor:"pointer"},hoverable:"",onClick:e[3]||(e[3]=l=>s.value="core")},{default:o(()=>[t(i,{title:"核心记忆",value:g.value.core||0,"value-style":"color: #69db7c; font-size: 20px;"},{prefix:o(()=>[t(h(ae))]),_:1},8,["value"]),e[14]||(e[14]=r("div",{style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},"高重要性长期保留",-1))]),_:1})]),_:1})]),_:1}),t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[r("div",ue,[e[18]||(e[18]=r("span",null,"记忆内容",-1)),t(E,{value:s.value,"onUpdate:value":e[4]||(e[4]=l=>s.value=l),"button-style":"solid",size:"small",onChange:M},{default:o(()=>[t(L,{value:"short-term"},{default:o(()=>[...e[15]||(e[15]=[p("短期",-1)])]),_:1}),t(L,{value:"long-term"},{default:o(()=>[...e[16]||(e[16]=[p("长期",-1)])]),_:1}),t(L,{value:"core"},{default:o(()=>[...e[17]||(e[17]=[p("核心",-1)])]),_:1})]),_:1},8,["value"])])]),extra:o(()=>[t(G,{value:z.value,"onUpdate:value":e[5]||(e[5]=l=>z.value=l),placeholder:"语义搜索记忆...","allow-clear":"",size:"small",style:{width:"220px"},loading:y.value,onSearch:q},null,8,["value","loading"])]),default:o(()=>[y.value?(f(),v("div",ce,[t(P)])):_.value.length?(f(),v("div",pe,[(f(!0),v(re,null,se(_.value,l=>(f(),v("div",{key:l.id,class:"memory-item"},[r("div",me,[r("div",ve,[t(Q,{color:R(l.layer||s.value),style:{"font-size":"10px"}},{default:o(()=>[p(O(V(l.layer||s.value)),1)]),_:2},1032,["color"]),l.importance?(f(),v("span",fe," 重要度 "+O(l.importance),1)):N("",!0)]),r("span",ye,O(l.time),1)]),r("div",ge,O(l.content),1)]))),128))])):(f(),v("div",de,[N("",!0),e[19]||(e[19]=p(' 暂无记忆内容,点击"存储记忆"添加 ',-1))]))]),_:1}),t(d,{loading:S.value,onClick:F,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(h(le))]),default:o(()=>[e[20]||(e[20]=p(" 巩固记忆(短期 → 长期晋升) ",-1))]),_:1},8,["loading"]),t(A,{open:C.value,"onUpdate:open":e[8]||(e[8]=l=>C.value=l),title:"存储新记忆","confirm-loading":$.value,onOk:j},{default:o(()=>[t(Z,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[t(I,{label:"内容",required:""},{default:o(()=>[t(X,{value:c.value.content,"onUpdate:value":e[6]||(e[6]=l=>c.value.content=l),rows:4,placeholder:"要存储的记忆内容..."},null,8,["value"])]),_:1}),t(I,{label:"重要度"},{default:o(()=>[t(Y,{value:c.value.importance,"onUpdate:value":e[7]||(e[7]=l=>c.value.importance=l),min:0,max:1,step:.1,marks:{0:"低",.5:"中",1:"高"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])])}}},Be=J(_e,[["__scopeId","data-v-ebb07e22"]]);export{Be as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as J}from"./ws-
|
|
1
|
+
import{u as J}from"./ws-DjelKkD6.js";import{_ as K}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as ee,R as te,b as ae,o as C}from"./antd-CJSBocer.js";import{o as le,a3 as v,a1 as p,a5 as d,k as l,Z as o,W as x,a4 as _,f as s,X as c,c as oe,Y as i,G as m,u as I,F as A,a7 as D}from"./vendor-CN0Iv_qZ.js";const ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},se={class:"page-sub"},ie={style:{"margin-bottom":"16px",display:"flex",gap:"10px"}},ue={key:0,style:{"text-align":"center",padding:"60px"}},re={key:0,style:{color:"#e0e0e0","font-weight":"500"}},ce={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},de={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},ve={style:{"margin-bottom":"10px"}},me={style:{"white-space":"pre-wrap",color:"#ccc","font-family":"inherit","line-height":"1.7",background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},fe={__name:"Notes",setup(ge){const $=J(),h=s(!1),S=s(!1),z=s(!1),U=s(""),W=s([]),w=s([]),k=s(!1),f=s(""),b=s(!1),V=s(!1),g=s(null),n=s({title:"",content:"",tags:""}),E=oe(()=>k.value?w.value:W.value),G=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function B(){h.value=!0,U.value="";try{const{output:a}=await $.execute("note list",2e4);W.value=M(a)}catch(a){U.value=`加载失败: ${a.message}`}finally{h.value=!1}}function M(a){const e=[],y=a.split(`
|
|
2
2
|
`);for(const T of y){const u=T.trim();if(!u||u.startsWith("─")||u.startsWith("Note")||u.match(/^\d+ note/i))continue;const r=u.match(/^(\d+)\.\s+(.+?)(?:\s+\[([^\]]+)\])?\s*(?:-\s*(.*))?$/);r?e.push({key:r[1],id:r[1],title:r[2].trim(),tags:r[3]?r[3].split(",").map(F=>F.trim()):[],preview:(r[4]||"").trim().slice(0,100),content:""}):u.length>2&&!u.startsWith("✖")&&!u.startsWith("[")&&e.push({key:e.length,id:String(e.length),title:u,tags:[],preview:"",content:""})}return e}async function P(){if(!f.value.trim()){O();return}S.value=!0,k.value=!0;try{const{output:a}=await $.execute(`note search "${f.value}"`,15e3);w.value=M(a)}catch{w.value=[]}finally{S.value=!1}}function O(){f.value="",k.value=!1,w.value=[]}async function Q(){if(!n.value.title.trim()){C.warning("请输入标题");return}z.value=!0;try{let a=`note add "${n.value.title}"`;n.value.content&&(a+=` -c "${n.value.content.replace(/"/g,'\\"')}"`),n.value.tags&&(a+=` -t "${n.value.tags}"`);const{output:e}=await $.execute(a,15e3);e.includes("✖")||e.toLowerCase().includes("error")?C.error("添加失败: "+e.slice(0,100)):(C.success("笔记已添加"),b.value=!1,n.value={title:"",content:"",tags:""},await B())}catch(a){C.error("添加失败: "+a.message)}finally{z.value=!1}}function X(a){g.value=a,V.value=!0}return le(B),(a,e)=>{const y=c("a-button"),T=c("a-space"),u=c("a-input-search"),r=c("a-tag"),F=c("a-spin"),Y=c("a-table"),j=c("a-input"),L=c("a-form-item"),Z=c("a-textarea"),H=c("a-form"),q=c("a-modal");return i(),v("div",null,[p("div",ne,[p("div",null,[e[7]||(e[7]=p("h2",{class:"page-title"},"笔记管理",-1)),p("p",se,"个人知识库 · "+d(W.value.length)+" 条笔记",1)]),l(T,null,{default:o(()=>[l(y,{onClick:e[0]||(e[0]=t=>b.value=!0),type:"primary"},{icon:o(()=>[l(I(ee))]),default:o(()=>[e[8]||(e[8]=m(" 新建笔记 ",-1))]),_:1}),l(y,{ghost:"",loading:h.value,onClick:B},{icon:o(()=>[l(I(te))]),default:o(()=>[e[9]||(e[9]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),p("div",ie,[l(u,{value:f.value,"onUpdate:value":e[1]||(e[1]=t=>f.value=t),placeholder:"搜索笔记...","allow-clear":"",style:{"max-width":"400px"},loading:S.value,onSearch:P,onClear:O},null,8,["value","loading"]),k.value?(i(),x(r,{key:0,color:"blue",closable:"",onClose:O},{default:o(()=>[m(" 搜索: "+d(f.value),1)]),_:1})):_("",!0)]),h.value?(i(),v("div",ue,[l(F,{size:"large"})])):(i(),x(Y,{key:1,columns:G,"data-source":E.value,pagination:{pageSize:20,showTotal:t=>`共 ${t} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"note-row"},{bodyCell:o(({column:t,record:N})=>[t.key==="title"?(i(),v("span",re,d(N.title),1)):_("",!0),t.key==="tags"?(i(!0),v(A,{key:1},D(N.tags,R=>(i(),x(r,{key:R,color:"blue",style:{"font-size":"10px",margin:"1px"}},{default:o(()=>[m(d(R),1)]),_:2},1024))),128)):_("",!0),t.key==="content"?(i(),v("span",ce,d(N.preview),1)):_("",!0),t.key==="actions"?(i(),x(y,{key:3,size:"small",type:"link",onClick:R=>X(N)},{default:o(()=>[...e[10]||(e[10]=[m("查看",-1)])]),_:1},8,["onClick"])):_("",!0)]),emptyText:o(()=>[p("div",pe,[l(I(ae),{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),m(" "+d(U.value||'暂无笔记,点击"新建笔记"添加'),1)])]),_:1},8,["data-source","pagination"])),l(q,{open:b.value,"onUpdate:open":e[5]||(e[5]=t=>b.value=t),title:"新建笔记","confirm-loading":z.value,onOk:Q},{default:o(()=>[l(H,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[l(L,{label:"标题",required:""},{default:o(()=>[l(j,{value:n.value.title,"onUpdate:value":e[2]||(e[2]=t=>n.value.title=t),placeholder:"笔记标题"},null,8,["value"])]),_:1}),l(L,{label:"内容"},{default:o(()=>[l(Z,{value:n.value.content,"onUpdate:value":e[3]||(e[3]=t=>n.value.content=t),rows:5,placeholder:"笔记内容..."},null,8,["value"])]),_:1}),l(L,{label:"标签"},{default:o(()=>[l(j,{value:n.value.tags,"onUpdate:value":e[4]||(e[4]=t=>n.value.tags=t),placeholder:"用逗号分隔,如: work,ideas"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),l(q,{open:V.value,"onUpdate:open":e[6]||(e[6]=t=>V.value=t),title:g.value?.title,footer:null,width:"700px"},{default:o(()=>[g.value?(i(),v("div",de,[p("div",ve,[(i(!0),v(A,null,D(g.value.tags,t=>(i(),x(r,{key:t,color:"blue"},{default:o(()=>[m(d(t),1)]),_:2},1024))),128))]),p("pre",me,d(g.value.content||g.value.preview),1)])):_("",!0)]),_:1},8,["open","title"])])}}},we=K(fe,[["__scopeId","data-v-4630ece9"]]);export{we as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V as S,f as b,o as V,a3 as k,a1 as e,k as v,Z as r,u as d,W as f,a4 as $,F as B,a7 as N,X as m,Y as l,G as y,a5 as _,a2 as F}from"./vendor-CN0Iv_qZ.js";import{u as M}from"./ws-
|
|
1
|
+
import{V as S,f as b,o as V,a3 as k,a1 as e,k as v,Z as r,u as d,W as f,a4 as $,F as B,a7 as N,X as m,Y as l,G as y,a5 as _,a2 as F}from"./vendor-CN0Iv_qZ.js";import{u as M}from"./ws-DjelKkD6.js";import{a as I,b as O}from"./parsers-DftYMnlk.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as E,o as h}from"./antd-CJSBocer.js";const R=S("providers",()=>{const w=b(!1),o=b(null),u=b([]),P=b([]),i=b(null);async function t(){const a=M();w.value=!0;try{const{output:c}=await a.execute("llm providers",15e3);u.value=I(c);const n=u.value.find(g=>g.active);n&&(i.value=n.name);const{output:p}=await a.execute("llm models",15e3);P.value=O(p)}catch(c){console.error("Failed to load providers:",c)}finally{w.value=!1}}async function x(a){await M().execute(`llm switch ${a}`,1e4),u.value.forEach(n=>n.active=n.name===a),i.value=a}async function z(a){const c=M();o.value=a;try{const{output:n,exitCode:p}=await c.execute("llm test",3e4),g=u.value.find(C=>C.name===a);return g&&(g.status=p===0?"ok":"error"),p===0}catch{const n=u.value.find(p=>p.name===a);return n&&(n.status="error"),!1}finally{o.value=null}}return{loading:w,testing:o,providers:u,localModels:P,activeProvider:i,loadProviders:t,switchProvider:x,testProvider:z}}),W={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},A={key:1,style:{"text-align":"center",padding:"60px"}},D={key:2},G={class:"providers-grid"},T={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},X={style:{"font-size":"24px"}},Y={style:{flex:"1"}},Z={style:{color:"#e0e0e0","font-weight":"500"}},q={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},H={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},J={key:0,style:{"margin-top":"24px"}},K={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},Q={__name:"Providers",setup(w){const o=R();async function u(i){try{await o.switchProvider(i),h.success(`已切换到 ${i}`)}catch(t){h.error(`切换失败: ${t.message}`)}}async function P(i){await o.testProvider(i)?h.success(`${i} 连接正常`):h.warning(`${i} 连接失败,请检查配置`)}return V(()=>{o.loadProviders()}),(i,t)=>{const x=m("a-button"),z=m("a-alert"),a=m("a-spin"),c=m("a-tag"),n=m("a-badge"),p=m("a-card"),g=m("a-list-item"),C=m("a-list");return l(),k("div",null,[e("div",W,[t[2]||(t[2]=e("div",null,[e("h2",{class:"page-title"},"LLM 配置"),e("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),v(x,{type:"primary",ghost:"",loading:d(o).loading,onClick:t[0]||(t[0]=s=>d(o).loadProviders())},{icon:r(()=>[v(d(E))]),default:r(()=>[t[1]||(t[1]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),d(o).activeProvider?(l(),f(z,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:r(()=>[e("span",null,[t[3]||(t[3]=y("当前激活:",-1)),e("strong",null,_(d(o).activeProvider),1)])]),_:1})):$("",!0),d(o).loading?(l(),k("div",A,[v(a,{size:"large"}),t[4]||(t[4]=e("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(l(),k("div",D,[e("div",G,[(l(!0),k(B,null,N(d(o).providers,s=>(l(),f(p,{key:s.name,class:F(["provider-card",{active:s.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:r(()=>[e("div",T,[e("span",X,_(s.icon),1),e("div",Y,[e("div",Z,_(s.label),1),e("div",q,_(s.name),1)]),e("div",null,[s.active?(l(),f(c,{key:0,color:"green"},{default:r(()=>[...t[5]||(t[5]=[y("活跃",-1)])]),_:1})):s.status==="ok"?(l(),f(n,{key:1,status:"success",text:""})):s.status==="error"?(l(),f(n,{key:2,status:"error",text:""})):$("",!0)])]),e("div",H,[v(x,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:d(o).testing===s.name,onClick:L=>P(s.name)},{default:r(()=>[...t[6]||(t[6]=[y(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),s.active?(l(),f(c,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:r(()=>[...t[8]||(t[8]=[y("当前",-1)])]),_:1})):(l(),f(x,{key:0,size:"small",type:"primary",ghost:"",onClick:L=>u(s.name)},{default:r(()=>[...t[7]||(t[7]=[y(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),d(o).localModels.length?(l(),k("div",J,[t[9]||(t[9]=e("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 🦙 本地模型(Ollama) ",-1)),v(C,{"data-source":d(o).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:r(({item:s})=>[v(g,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:r(()=>[v(c,{color:"cyan",style:{"font-size":"10px"}},{default:r(()=>[y(_(s.size||"local"),1)]),_:2},1024)]),default:r(()=>[e("span",K,_(s.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):$("",!0)]))])}}},at=j(Q,[["__scopeId","data-v-6ade5578"]]);export{at as default};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{u as X}from"./ws-
|
|
1
|
+
import{u as X}from"./ws-DjelKkD6.js";import{_ as Y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as Z,j as q,d as $,i as J,m as K,n as Q,b as U}from"./antd-CJSBocer.js";import{o as ee,a3 as d,a1 as m,k as e,Z as t,f as r,X as n,Y as s,G as y,u as c,a5 as u,a4 as g,W as V,c as te}from"./vendor-CN0Iv_qZ.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=X(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),W=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),N=r([]),I=te(()=>S.status==="connected"),j=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function R(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);W.value=o,E(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function E(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
|
|
2
2
|
`).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));N.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function F(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee(R),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),A=n("a-badge"),H=n("a-table"),P=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:R},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(q))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c($))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(J))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(G,{color:I.value?"green":"red"},{default:t(()=>[y(" WS "+u(I.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(T)])):(s(),V(H,{key:1,columns:j,"data-source":N.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(A,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(P,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:F,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Q))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(U))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c($))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=Y(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{V,f as v,c as h,o as $,a3 as m,a1 as i,a5 as y,u as s,k as r,Z as d,F as C,a7 as L,X as p,$ as j,Y as u,G as g,W as M}from"./vendor-CN0Iv_qZ.js";import{u as A}from"./ws-
|
|
1
|
+
import{V,f as v,c as h,o as $,a3 as m,a1 as i,a5 as y,u as s,k as r,Z as d,F as C,a7 as L,X as p,$ as j,Y as u,G as g,W as M}from"./vendor-CN0Iv_qZ.js";import{u as A}from"./ws-DjelKkD6.js";import{p as F}from"./parsers-DftYMnlk.js";import{u as N}from"./chat-DnH09sSR.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as R,R as E,P}from"./antd-CJSBocer.js";const T=V("skills",()=>{const _=v(!1),e=v([]),c=v(""),f=v("all"),x=h(()=>{const n=new Set(["all"]);return e.value.forEach(l=>{l.category&&n.add(l.category),l.executionMode&&n.add(l.executionMode)}),[...n]}),k=h(()=>{let n=e.value;if(f.value!=="all"&&(n=n.filter(l=>l.category===f.value||l.executionMode===f.value)),c.value){const l=c.value.toLowerCase();n=n.filter(o=>o.name?.toLowerCase().includes(l)||o.description?.toLowerCase().includes(l)||o.title?.toLowerCase().includes(l))}return n});async function b(){const n=A();_.value=!0;try{const{output:l}=await n.execute("skill list",2e4),o=F(l);e.value=o}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:e,searchQuery:c,selectedCategory:f,categories:x,filteredSkills:k,loadSkills:b}}),U={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},W={class:"page-sub"},D={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},G={key:0,style:{"text-align":"center",padding:"60px"}},X={key:1,class:"skills-grid"},Y={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},Z={style:{flex:"1","min-width":"0"}},H={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},J={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},K={style:{"margin-left":"12px","flex-shrink":"0"}},ee={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},te={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const e=T(),c=N(),f=j(),x=h(()=>e.categories.filter(o=>o!=="all").slice(0,6));function k(o){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[o]||o}function b(o){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[o]||o||"未知"}function n(o){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[o]||"default"}async function l(o){await c.createSession("agent"),f.push("/chat"),setTimeout(()=>{c.currentSessionId&&c.sendMessage(c.currentSessionId,`/skill run ${o}`)},300)}return $(()=>{e.allSkills.length||e.loadSkills()}),(o,t)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),I=p("a-radio-group"),q=p("a-spin"),B=p("a-tag"),O=p("a-card");return u(),m("div",null,[i("div",U,[i("div",null,[t[3]||(t[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",W,y(s(e).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:s(e).loading,onClick:t[0]||(t[0]=a=>s(e).loadSkills())},{icon:d(()=>[r(s(E))]),default:d(()=>[t[4]||(t[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",D,[r(z,{value:s(e).searchQuery,"onUpdate:value":t[1]||(t[1]=a=>s(e).searchQuery=a),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(I,{value:s(e).selectedCategory,"onUpdate:value":t[2]||(t[2]=a=>s(e).selectedCategory=a),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...t[5]||(t[5]=[g("全部",-1)])]),_:1}),(u(!0),m(C,null,L(x.value,a=>(u(),M(w,{key:a,value:a},{default:d(()=>[g(y(k(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),s(e).loading?(u(),m("div",G,[r(q,{size:"large"}),t[6]||(t[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):s(e).filteredSkills.length?(u(),m("div",X,[(u(!0),m(C,null,L(s(e).filteredSkills,a=>(u(),M(O,{key:a.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",Y,[i("div",Z,[i("div",H,y(a.name),1),i("div",J,y(a.description||"暂无描述"),1)]),i("div",K,[r(B,{color:n(a.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(a.executionMode)),1)]),_:2},1032,["color"])])]),i("div",ee,[r(S,{size:"small",type:"primary",ghost:"",onClick:le=>l(a.name)},{icon:d(()=>[r(s(P))]),default:d(()=>[t[7]||(t[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(u(),m("div",te,[r(s(R),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(s(e).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},ce=Q(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{ce as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.page-header[data-v-c8e3e605]{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.banner[data-v-c8e3e605],.stats-row[data-v-c8e3e605]{margin-bottom:16px}.panel-card[data-v-c8e3e605],.stat-card[data-v-c8e3e605]{background:var(--bg-card);border-color:var(--border-color)}.task-item[data-v-c8e3e605]{padding:12px;border-radius:6px;margin-bottom:8px;background:var(--bg-card-hover, rgba(255, 255, 255, .04))}.task-item.running[data-v-c8e3e605]{border-left:3px solid #1677ff}.task-header[data-v-c8e3e605]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.task-desc[data-v-c8e3e605]{flex:1;color:var(--text-primary);font-weight:500}.task-id[data-v-c8e3e605]{font-family:monospace;font-size:12px;color:var(--text-tertiary)}.task-meta[data-v-c8e3e605]{display:flex;gap:16px;align-items:center;font-size:12px;color:var(--text-secondary)}.error-text[data-v-c8e3e605]{color:#ff4d4f}.success-text[data-v-c8e3e605]{color:#52c41a}.muted-text[data-v-c8e3e605]{color:var(--text-tertiary)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{V as B,f as $,c as R,o as F,b as I,a3 as d,a1 as f,k as l,Z as o,u as s,W as T,a4 as b,X as _,Y as r,G as g,a5 as u,F as A,a7 as P}from"./vendor-CN0Iv_qZ.js";import{u as V}from"./ws-DjelKkD6.js";import{_ as E}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as L}from"./antd-CJSBocer.js";const U=B("tasks",()=>{const v=$([]),t=$(!1);let w=null,k=null;const S=R(()=>v.value.filter(e=>e.status==="running")),N=R(()=>v.value.filter(e=>e.status==="pending")),i=R(()=>v.value.filter(e=>e.status==="completed"||e.status==="failed"||e.status==="timeout"));async function a(){const e=V();t.value=!0;try{const p=await e.sendRaw({type:"tasks-list"});p&&Array.isArray(p.tasks)&&(v.value=p.tasks)}catch{}finally{t.value=!1}}async function x(e){const p=V();try{await p.sendRaw({type:"tasks-stop",taskId:e})}catch{}finally{await a()}}const C=$(null);function z(e=5e3){y(),a(),w=setInterval(a,e),m()}function y(){w&&(clearInterval(w),w=null),k&&(k(),k=null)}function m(){const e=V();if(k)return;const p=n=>{n.type==="task:notification"&&n.payload?.task&&(C.value=n.payload.task,a(),setTimeout(()=>{C.value=null},8e3))};k=e.onRuntimeEvent(p)}function h(e){return!e||e<0?"-":e<1e3?`${e}ms`:e<6e4?`${(e/1e3).toFixed(1)}s`:`${(e/6e4).toFixed(1)}m`}function D(e){switch(e){case"running":return"processing";case"pending":return"default";case"completed":return"success";case"failed":return"error";case"timeout":return"warning";default:return"default"}}return{tasks:v,loading:t,running:S,pending:N,completed:i,lastNotification:C,fetchTasks:a,stopTask:x,startPolling:z,stopPolling:y,formatDuration:h,getStatusColor:D}}),W={class:"page-header"},G={key:0,class:"error-text"},M={key:1},O={class:"task-header"},X={class:"task-desc"},Y={class:"task-id"},Z={class:"task-meta"},j=["title"],q={key:0,class:"error-text"},H={key:1,class:"success-text"},J={key:2,class:"muted-text"},K={__name:"Tasks",setup(v){const t=U(),w=[{title:"状态",key:"status",width:90},{title:"描述",key:"description",ellipsis:!0},{title:"类型",dataIndex:"type",width:100},{title:"耗时",key:"duration",width:90},{title:"创建时间",key:"createdAt",width:180},{title:"结果",key:"result",ellipsis:!0},{title:"操作",key:"action",width:80}];function k(i){return i.status==="running"&&i.startedAt?t.formatDuration(Date.now()-i.startedAt):i.completedAt&&i.startedAt?t.formatDuration(i.completedAt-i.startedAt):"-"}function S(i){return i?new Date(i).toLocaleString():"-"}function N(i,a){return i?i.length>a?`${i.slice(0,a)}...`:i:""}return F(()=>t.startPolling(5e3)),I(()=>t.stopPolling()),(i,a)=>{const x=_("a-button"),C=_("a-space"),z=_("a-alert"),y=_("a-statistic"),m=_("a-card"),h=_("a-col"),D=_("a-row"),e=_("a-tag"),p=_("a-table");return r(),d("div",null,[f("div",W,[a[3]||(a[3]=f("div",null,[f("h2",{class:"page-title"},"后台任务"),f("p",{class:"page-sub"},"查看后台任务队列、实时通知和任务执行结果。")],-1)),l(C,null,{default:o(()=>[l(x,{ghost:"",loading:s(t).loading,onClick:a[0]||(a[0]=n=>s(t).fetchTasks())},{icon:o(()=>[l(s(L))]),default:o(()=>[a[2]||(a[2]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(t).lastNotification?(r(),T(z,{key:0,type:s(t).lastNotification.status==="completed"?"success":"error","show-icon":"",closable:"",class:"banner",onClose:a[1]||(a[1]=n=>s(t).lastNotification=null)},{message:o(()=>[g(" 任务"+u(s(t).lastNotification.status==="completed"?"完成":"结束")+": "+u(s(t).lastNotification.description||s(t).lastNotification.id.slice(0,16)),1)]),description:o(()=>[s(t).lastNotification.error?(r(),d("span",G,u(s(t).lastNotification.error),1)):s(t).lastNotification.result?(r(),d("span",M,u(N(String(s(t).lastNotification.result),120)),1)):b("",!0)]),_:1},8,["type"])):b("",!0),l(D,{gutter:[16,16],class:"stats-row"},{default:o(()=>[l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"全部任务",value:s(t).tasks.length},null,8,["value"])]),_:1})]),_:1}),l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"运行中",value:s(t).running.length},null,8,["value"])]),_:1})]),_:1}),l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"等待中",value:s(t).pending.length},null,8,["value"])]),_:1})]),_:1}),l(h,{xs:12,sm:6},{default:o(()=>[l(m,{class:"stat-card",size:"small"},{default:o(()=>[l(y,{title:"已完成",value:s(t).completed.length},null,8,["value"])]),_:1})]),_:1})]),_:1}),s(t).running.length>0?(r(),T(m,{key:1,title:"运行中的任务",class:"panel-card",size:"small"},{default:o(()=>[(r(!0),d(A,null,P(s(t).running,n=>(r(),d("div",{key:n.id,class:"task-item running"},[f("div",O,[l(e,{color:s(t).getStatusColor(n.status)},{default:o(()=>[g(u(n.status.toUpperCase()),1)]),_:2},1032,["color"]),f("span",X,u(n.description),1),f("span",Y,u(n.id.slice(0,16)),1)]),f("div",Z,[f("span",null,"类型: "+u(n.type||"-"),1),f("span",null,"已运行: "+u(s(t).formatDuration(Date.now()-n.startedAt)),1),l(x,{size:"small",danger:"",onClick:c=>s(t).stopTask(n.id)},{default:o(()=>[...a[4]||(a[4]=[g("停止",-1)])]),_:1},8,["onClick"])])]))),128))]),_:1})):b("",!0),l(m,{class:"panel-card"},{default:o(()=>[l(p,{columns:w,"data-source":s(t).tasks,pagination:{pageSize:15,size:"small"},loading:s(t).loading,"row-key":"id",size:"small"},{bodyCell:o(({column:n,record:c})=>[n.key==="status"?(r(),T(e,{key:0,color:s(t).getStatusColor(c.status)},{default:o(()=>[g(u(c.status),1)]),_:2},1032,["color"])):n.key==="description"?(r(),d("span",{key:1,title:c.command},u(c.description),9,j)):n.key==="duration"?(r(),d(A,{key:2},[g(u(k(c)),1)],64)):n.key==="createdAt"?(r(),d(A,{key:3},[g(u(S(c.createdAt)),1)],64)):n.key==="result"?(r(),d(A,{key:4},[c.error?(r(),d("span",q,u(N(c.error,60)),1)):c.result?(r(),d("span",H,u(N(String(c.result),60)),1)):(r(),d("span",J,"-"))],64)):n.key==="action"?(r(),d(A,{key:5},[c.status==="running"?(r(),T(x,{key:0,size:"small",danger:"",onClick:Q=>s(t).stopTask(c.id)},{default:o(()=>[...a[5]||(a[5]=[g(" 停止 ",-1)])]),_:1},8,["onClick"])):b("",!0)],64)):b("",!0)]),_:1},8,["data-source","loading"])]),_:1})])}}},nt=E(K,[["__scopeId","data-v-c8e3e605"]]);export{nt as default};
|