chainlesschain 0.45.9 → 0.45.11
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/bin/chainlesschain.js +0 -0
- package/package.json +1 -1
- package/src/assets/web-panel/assets/AppLayout-19ZC8w11.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-CjgO-ML6.css +1 -0
- package/src/assets/web-panel/assets/Chat-5f__rMCR.js +1 -0
- package/src/assets/web-panel/assets/Chat-DB46afPg.css +1 -0
- package/src/assets/web-panel/assets/Cron-C4mrNC4c.js +2 -0
- package/src/assets/web-panel/assets/Dashboard-CRFnDUFh.css +1 -0
- package/src/assets/web-panel/assets/Dashboard-DsjXpZor.js +3 -0
- package/src/assets/web-panel/assets/Logs-CC_Zuh66.js +2 -0
- package/src/assets/web-panel/assets/Logs-Gf_Mv9Nx.css +1 -0
- package/src/assets/web-panel/assets/McpTools-B15GiN3u.js +4 -0
- package/src/assets/web-panel/assets/McpTools-CyhSLDwf.css +1 -0
- package/src/assets/web-panel/assets/Memory-DRghrGJr.css +1 -0
- package/src/assets/web-panel/assets/Memory-Dbd7oLOH.js +2 -0
- package/src/assets/web-panel/assets/Notes-BG69sJKi.css +1 -0
- package/src/assets/web-panel/assets/Notes-CEkc49fY.js +2 -0
- package/src/assets/web-panel/assets/Providers-Brm-S_hS.css +1 -0
- package/src/assets/web-panel/assets/Providers-CjyPHW00.js +1 -0
- package/src/assets/web-panel/assets/Services-C8Qs6KXv.css +1 -0
- package/src/assets/web-panel/assets/Services-XFzHMRRd.js +2 -0
- package/src/assets/web-panel/assets/Skills-BdjRyorN.css +1 -0
- package/src/assets/web-panel/assets/Skills-D8oxmB3U.js +1 -0
- package/src/assets/web-panel/assets/{antd-BhDHu4KM.js → antd-ChLPLhSn.js} +89 -89
- package/src/assets/web-panel/assets/chat-C_hu-qNs.js +1 -0
- package/src/assets/web-panel/assets/index-CyGyEIVX.css +1 -0
- package/src/assets/web-panel/assets/index-DQ5xXK7O.js +2 -0
- package/src/assets/web-panel/assets/{markdown-CNQE8HeM.js → markdown-DtbPhnFe.js} +1 -1
- package/src/assets/web-panel/assets/parsers-DftYMnlk.js +3 -0
- package/src/assets/web-panel/assets/vendor-CN0Iv_qZ.js +1 -0
- package/src/assets/web-panel/assets/ws-DwluTqT5.js +1 -0
- package/src/assets/web-panel/index.html +4 -4
- package/src/commands/config.js +44 -0
- package/src/constants.js +1 -0
- package/src/lib/background-task-manager.js +305 -0
- package/src/lib/background-task-worker.js +50 -0
- package/src/lib/feature-flags.js +182 -0
- package/src/lib/jsonl-session-store.js +237 -0
- package/src/lib/prompt-compressor.js +351 -0
- package/src/lib/worktree-isolator.js +231 -0
- package/src/repl/agent-repl.js +38 -2
- package/src/assets/web-panel/assets/AppLayout-CZDQcPAA.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-D-KJRC1s.js +0 -1
- package/src/assets/web-panel/assets/Chat-BsgVc34I.js +0 -1
- package/src/assets/web-panel/assets/Chat-V-g0UHcr.css +0 -1
- package/src/assets/web-panel/assets/Dashboard-Bmgu7fEn.js +0 -2
- package/src/assets/web-panel/assets/Providers-DlC9S5Nf.js +0 -2
- package/src/assets/web-panel/assets/Providers-YRgg8NIn.css +0 -1
- package/src/assets/web-panel/assets/Skills--YIq8avF.js +0 -2
- package/src/assets/web-panel/assets/Skills-BC4Yu_4f.css +0 -1
- package/src/assets/web-panel/assets/chat-_a36nOu_.js +0 -1
- package/src/assets/web-panel/assets/index-B6snAd4S.css +0 -1
- package/src/assets/web-panel/assets/index-Ze9tR-zc.js +0 -2
- package/src/assets/web-panel/assets/vendor-Ks18OpWK.js +0 -1
- package/src/assets/web-panel/assets/ws-Bve9vKht.js +0 -1
package/bin/chainlesschain.js
CHANGED
|
File without changes
|
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{o as se,W as y,Z as t,X as i,$ as ne,a0 as ae,Y as l,k as e,a1 as a,a2 as C,a3 as c,a4 as j,F as O,u as s,a5 as f,G as d,a6 as le,a7 as ie,f as de,c as p}from"./vendor-CN0Iv_qZ.js";import{u as ue}from"./ws-DwluTqT5.js";import{u as ce,T as re}from"./index-DQ5xXK7O.js";import{_ as me}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,I as pe}from"./antd-ChLPLhSn.js";const _e={key:0,class:"logo-text"},ve={key:0,class:"mode-banner project"},ye={class:"banner-info"},fe={class:"banner-name"},ke={key:1,class:"mode-banner global"},ge=["title"],be={key:0,class:"footer-text"},Ce={class:"header-left"},Oe={class:"header-right"},we={class:"theme-switcher"},Te=["data-theme-key","onClick"],je={__name:"AppLayout",setup(xe){const $=ne(),P=ae(),k=ue(),w=ce(),u=de(!1),_=window.__CC_CONFIG__||{},m=p(()=>_.mode==="project"),U=p(()=>w.current),W=p(()=>w.config.vars["--menu-mode"]),N=p(()=>{const r=P.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[r]||r]}),g=p(()=>k.status),z=p(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[k.status]||"default"),H=p(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[k.status]||"未知");function X(r){w.setTheme(r)}function Y({key:r}){$.push({mcp:"/mcp"}[r]||`/${r}`)}return se(()=>k.connect()),(r,o)=>{const n=i("a-menu-item"),T=i("a-menu-item-group"),h=i("a-menu-divider"),Z=i("a-menu"),q=i("a-badge"),J=i("a-layout-sider"),M=i("a-tooltip"),Q=i("a-tag"),ee=i("a-layout-header"),te=i("router-view"),oe=i("a-layout-content"),S=i("a-layout");return l(),y(S,{class:"app-root"},{default:t(()=>[e(J,{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(),c("span",_e,"ChainlessChain"))],2),u.value?(l(),c("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,ge)):(l(),c(O,{key:0},[m.value?(l(),c("div",ve,[e(s(x),{class:"banner-icon"}),a("div",ye,[a("div",fe,f(s(_).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(l(),c("div",ke,[e(s(B),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(Z,{selectedKeys:N.value,"onUpdate:selectedKeys":o[0]||(o[0]=v=>N.value=v),theme:W.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:Y},{default:t(()=>[u.value?(l(),c(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(h,{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(h,{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})],64)):(l(),c(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})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:C(["sidebar-footer",{collapsed:u.value}])},[e(q,{status:z.value},null,8,["status"]),u.value?j("",!0):(l(),c("span",be,f(H.value),1))],2)]),_:1},8,["collapsed"]),e(S,{class:"main-area"},{default:t(()=>[e(ee,{class:"app-header"},{default:t(()=>[a("div",Ce,[a("div",{class:C(["scope-tag",m.value?"project":"global"])},[(l(),y(le(m.value?s(x):s(B)))),a("span",null,f(m.value?s(_).projectName||"项目":"全局模式"),1),m.value&&s(_).projectRoot?(l(),y(M,{key:0,title:s(_).projectRoot},{default:t(()=>[e(s(pe),{class:"info-icon"})]),_:1},8,["title"])):j("",!0)],2)]),a("div",Oe,[a("div",we,[(l(!0),c(O,null,ie(s(re),(v,b)=>(l(),y(M,{key:b,title:v.label},{default:t(()=>[a("button",{class:C(["theme-btn",{active:U.value===b}]),"data-theme-key":b,onClick:Be=>X(b)},f(v.icon),11,Te)]),_:2},1032,["title"]))),128))]),o[18]||(o[18]=a("span",{class:"version-tag"},"v5.0.2.7",-1)),e(Q,{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(oe,{class:"page-content"},{default:t(()=>[e(te)]),_:1})]),_:1})]),_:1})}}},Le=me(je,[["__scopeId","data-v-2229220c"]]);export{Le as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.app-root[data-v-2229220c]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-2229220c]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}.main-area[data-v-2229220c]{background:var(--bg-base)}.logo[data-v-2229220c]{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-2229220c]{padding:0;justify-content:center}.logo-icon[data-v-2229220c]{font-size:20px;flex-shrink:0}.logo-text[data-v-2229220c]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-2229220c]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-2229220c]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-2229220c]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-2229220c]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-2229220c]{color:#722ed1}.banner-info[data-v-2229220c]{flex:1;min-width:0}.banner-name[data-v-2229220c]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-2229220c]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-2229220c]{color:#c084fc}.mode-icon-sm[data-v-2229220c]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-2229220c]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important}.group-label[data-v-2229220c]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-2229220c] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-2229220c] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-2229220c]{margin:4px 0!important}.sidebar-footer[data-v-2229220c]{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-2229220c]{justify-content:center;padding:8px 0}.footer-text[data-v-2229220c]{color:var(--text-secondary);font-size:11px}.app-header[data-v-2229220c]{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-2229220c],.header-right[data-v-2229220c]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-2229220c]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-2229220c]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-2229220c]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-2229220c]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-2229220c]{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-2229220c]{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-2229220c]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-2229220c]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-2229220c]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-2229220c]{margin:0!important;font-size:11px}.page-content[data-v-2229220c]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
|
|
@@ -0,0 +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-DtbPhnFe.js";import{u as K}from"./chat-C_hu-qNs.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as P,G as U,M as W,i as X,k as Y}from"./antd-ChLPLhSn.js";import"./ws-DwluTqT5.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-variable,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id{color:#79c0ff}.hljs-regexp,.hljs-string,.hljs-meta .hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-comment,.hljs-code,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c}.session-item[data-v-8392b2d7]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:background .15s;margin-bottom:4px}.session-item[data-v-8392b2d7]:hover{background:var(--bg-card-hover)}.session-item.active[data-v-8392b2d7]{background:#1677ff20;border:1px solid #1677ff40}.session-icon[data-v-8392b2d7]{font-size:16px}.session-info[data-v-8392b2d7]{flex:1;min-width:0}.session-title[data-v-8392b2d7]{color:#ccc;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-meta[data-v-8392b2d7]{color:var(--text-muted);font-size:11px;margin-top:2px}.message-row[data-v-8392b2d7]{margin-bottom:16px}.user-msg[data-v-8392b2d7]{display:flex;justify-content:flex-end}.assistant-msg[data-v-8392b2d7]{display:flex;gap:10px;align-items:flex-start}.avatar[data-v-8392b2d7]{width:32px;height:32px;border-radius:50%;background:#1677ff;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--text-primary);flex-shrink:0}.bubble[data-v-8392b2d7]{padding:10px 14px;border-radius:12px;max-width:80%;line-height:1.6;font-size:14px}.bubble.user[data-v-8392b2d7]{background:#1677ff;color:var(--text-primary);border-bottom-right-radius:4px}.bubble.assistant[data-v-8392b2d7]{background:var(--bg-card-hover);color:var(--text-primary);border-bottom-left-radius:4px}.bubble.streaming[data-v-8392b2d7]:after{content:"▋";animation:blink-8392b2d7 .7s step-start infinite;color:#1677ff}@keyframes blink-8392b2d7{50%{opacity:0}}.tool-msg[data-v-8392b2d7]{margin:8px 0}.question-card[data-v-8392b2d7]{background:var(--bg-card-hover);border:1px solid #1677ff40;border-radius:10px;padding:14px 16px;margin-top:8px}.question-text[data-v-8392b2d7]{color:#aaa;font-size:13px}[data-v-8392b2d7] .bubble.assistant pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}[data-v-8392b2d7] .bubble.assistant code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}[data-v-8392b2d7] .bubble.assistant p{margin:0 0 8px}[data-v-8392b2d7] .bubble.assistant p:last-child{margin:0}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as Q}from"./ws-DwluTqT5.js";import{o as ee,R as ae,h as te,n as d}from"./antd-ChLPLhSn.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
|
+
`);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 @@
|
|
|
1
|
+
.stat-card[data-v-2ac2518e]{background:var(--bg-card)!important;border-color:var(--border-color)!important;transition:border-color .2s}.stat-card[data-v-2ac2518e]:hover{border-color:var(--text-muted)!important}.stat-header[data-v-2ac2518e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.stat-label[data-v-2ac2518e]{color:var(--text-secondary);font-size:12px}.stat-value[data-v-2ac2518e]{font-size:22px;font-weight:600;line-height:1.2;margin-bottom:4px}.stat-sub[data-v-2ac2518e]{color:var(--text-muted);font-size:11px}.gateway-card[data-v-2ac2518e]{border-left:3px solid #1677ff!important}.status-log[data-v-2ac2518e]{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}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{o as V,a3 as W,a1 as o,a5 as n,u as l,k as s,Z as e,W as $,a4 as z,c as O,f as h,X as m,$ as E,Y as w,G as v,a8 as L}from"./vendor-CN0Iv_qZ.js";import{u as G}from"./ws-DwluTqT5.js";import{u as H}from"./chat-C_hu-qNs.js";import{_ as X}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as Y,F as Z,i as j,c as R,M as D,j as q,T as J,b as N,S as K,d as Q}from"./antd-ChLPLhSn.js";const U={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"20px"}},tt={class:"page-sub"},st={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},et={style:{color:"#91caff","font-weight":"600"}},ot={style:{color:"#4a6fa5","font-size":"11px","font-family":"monospace"}},lt={class:"stat-header"},at={class:"stat-sub"},nt={class:"stat-header"},rt={class:"stat-value",style:{color:"#91caff","font-size":"15px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},ut={class:"stat-sub",style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},it={class:"stat-header"},dt={class:"stat-value",style:{color:"#1677ff"}},ct={class:"stat-header"},pt={class:"stat-value",style:{color:"#c084fc"}},vt={class:"stat-header"},ft={class:"stat-sub"},mt={class:"stat-header"},bt={class:"stat-value",style:{color:"#13c2c2"}},gt={class:"stat-header"},_t={class:"stat-value",style:{color:"#faad14"}},yt={class:"status-log"},kt={style:{color:"#91caff"}},Ct={style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},wt={style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"12px"}},xt={__name:"Dashboard",setup(St){const T=E(),b=G(),A=H(),c=window.__CC_CONFIG__||{},g=O(()=>c.mode==="project"),x=O(()=>b.status),k=h(!1),S=h(""),a=h({activeLlm:null,activeModel:null,skillCount:0,sessionCount:0,appRunning:!1,setupDone:!1,edition:"",mcpCount:null,noteCount:null});async function M(){k.value=!0,a.value.wsStatus=b.status,S.value="";try{const[r,t]=await Promise.allSettled([b.execute("status",15e3),b.listSessions()]);if(r.status==="fulfilled"){const u=r.value.output;S.value=u.split(`
|
|
2
|
+
`).slice(0,20).join(`
|
|
3
|
+
`),P(u)}t.status==="fulfilled"&&(a.value.sessionCount=t.value.length),Promise.allSettled([b.execute("skill sources",15e3),b.execute("llm providers",15e3)]).then(([u,p])=>{if(u.status==="fulfilled"){const i=u.value.output.match(/(\d+)\s*(?:skills|技能)/i);i&&(a.value.skillCount=parseInt(i[1]))}if(p.status==="fulfilled"){const C=p.value.output.match(/active[:\s]+(\S+)/i);C&&!a.value.activeLlm&&(a.value.activeLlm=C[1])}}),b.execute("mcp servers",1e4).then(({output:u})=>{const p=(u.match(/^[a-z]/gm)||[]).length;a.value.mcpCount=p}).catch(()=>{a.value.mcpCount=0})}catch{}finally{k.value=!1}}function P(r){a.value.appRunning=r.includes("Desktop app running"),a.value.setupDone=r.includes("Setup completed");const t=r.match(/Edition:\s+(\S+)/i);t&&(a.value.edition=t[1]);const u=r.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(u)a.value.activeLlm=u[1],a.value.activeModel=u[2];else{const p=r.match(/LLM:\s+(\S+)/i);p&&(a.value.activeLlm=p[1])}}async function I(){await A.createSession("agent"),T.push("/chat")}return V(()=>setTimeout(M,300)),(r,t)=>{const u=m("a-button"),p=m("a-tag"),i=m("a-card"),C=m("a-badge"),d=m("a-col"),y=m("a-row"),B=m("a-space"),_=m("a-descriptions-item"),F=m("a-descriptions");return w(),W("div",null,[o("div",U,[o("div",null,[t[10]||(t[10]=o("h2",{class:"page-title"},"仪表板",-1)),o("p",tt,n(g.value?`项目「${l(c).projectName||"未命名"}」运行概览`:"ChainlessChain 全局运行状态"),1)]),s(u,{type:"primary",ghost:"",loading:k.value,onClick:M},{icon:e(()=>[s(l(Y))]),default:e(()=>[t[11]||(t[11]=v(" 刷新 ",-1))]),_:1},8,["loading"])]),g.value?(w(),$(i,{key:0,style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.25)","margin-bottom":"16px"},size:"small"},{default:e(()=>[o("div",st,[s(l(Z),{style:{color:"#1677ff","font-size":"18px"}}),o("div",null,[o("div",et,n(l(c).projectName||"项目"),1),o("div",ot,n(l(c).projectRoot),1)]),s(p,{color:"blue",style:{"margin-left":"auto"}},{default:e(()=>[...t[12]||(t[12]=[v("项目级面板",-1)])]),_:1})])]),_:1})):z("",!0),s(y,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:e(()=>[s(d,{xs:24,sm:12,lg:6},{default:e(()=>[s(i,{class:"stat-card gateway-card",size:"small"},{default:e(()=>[o("div",lt,[t[13]||(t[13]=o("span",{class:"stat-label"},"WebSocket Gateway",-1)),s(C,{status:x.value==="connected"?"success":"error"},null,8,["status"])]),o("div",{class:"stat-value",style:L({color:x.value==="connected"?"#52c41a":"#888"})},n(x.value==="connected"?"运行中":"未连接"),5),o("div",at,"端口 "+n(l(c).wsPort||18800)+" · "+n(l(c).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),s(d,{xs:24,sm:12,lg:6},{default:e(()=>[s(i,{class:"stat-card",size:"small"},{default:e(()=>[o("div",nt,[t[14]||(t[14]=o("span",{class:"stat-label"},"主 LLM",-1)),s(l(j),{style:{color:"#1677ff"}})]),o("div",rt,n(a.value.activeLlm||"未配置"),1),o("div",ut,n(a.value.activeModel||"—"),1)]),_:1})]),_:1}),s(d,{xs:24,sm:12,lg:6},{default:e(()=>[s(i,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:t[0]||(t[0]=f=>r.$router.push("/skills"))},{default:e(()=>[o("div",it,[t[15]||(t[15]=o("span",{class:"stat-label"},"可用技能",-1)),s(l(R),{style:{color:"#1677ff"}})]),o("div",dt,n(a.value.skillCount||"—"),1),t[16]||(t[16]=o("div",{class:"stat-sub"},"点击管理技能",-1))]),_:1})]),_:1}),s(d,{xs:24,sm:12,lg:6},{default:e(()=>[s(i,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:t[1]||(t[1]=f=>r.$router.push("/chat"))},{default:e(()=>[o("div",ct,[t[17]||(t[17]=o("span",{class:"stat-label"},"AI 会话",-1)),s(l(D),{style:{color:"#722ed1"}})]),o("div",pt,n(a.value.sessionCount),1),t[18]||(t[18]=o("div",{class:"stat-sub"},"点击进入对话",-1))]),_:1})]),_:1})]),_:1}),s(y,{gutter:[12,12],style:{"margin-bottom":"16px"}},{default:e(()=>[s(d,{xs:24,sm:8},{default:e(()=>[s(i,{class:"stat-card",size:"small"},{default:e(()=>[o("div",vt,[t[19]||(t[19]=o("span",{class:"stat-label"},"应用状态",-1)),s(l(q),{style:L({color:a.value.appRunning?"#52c41a":"#888"})},null,8,["style"])]),o("div",{class:"stat-value",style:L({color:a.value.appRunning?"#52c41a":"#888",fontSize:"15px"})},n(a.value.appRunning?"运行中":a.value.setupDone?"已初始化":"未启动"),5),o("div",ft,n(a.value.edition||"Community")+" Edition",1)]),_:1})]),_:1}),s(d,{xs:24,sm:8},{default:e(()=>[s(i,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:t[2]||(t[2]=f=>r.$router.push("/mcp"))},{default:e(()=>[o("div",mt,[t[20]||(t[20]=o("span",{class:"stat-label"},"MCP 工具",-1)),s(l(J),{style:{color:"#13c2c2"}})]),o("div",bt,n(a.value.mcpCount??"—"),1),t[21]||(t[21]=o("div",{class:"stat-sub"},"已挂载扩展",-1))]),_:1})]),_:1}),s(d,{xs:24,sm:8},{default:e(()=>[s(i,{class:"stat-card",size:"small",style:{cursor:"pointer"},onClick:t[3]||(t[3]=f=>r.$router.push("/notes"))},{default:e(()=>[o("div",gt,[t[22]||(t[22]=o("span",{class:"stat-label"},"知识库笔记",-1)),s(l(N),{style:{color:"#faad14"}})]),o("div",_t,n(a.value.noteCount??"—"),1),t[23]||(t[23]=o("div",{class:"stat-sub"},"点击管理笔记",-1))]),_:1})]),_:1})]),_:1}),s(y,{gutter:[16,16]},{default:e(()=>[s(d,{xs:24,lg:10},{default:e(()=>[s(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)",height:"100%"}},{default:e(()=>[s(B,{direction:"vertical",style:{width:"100%"},size:"middle"},{default:e(()=>[s(u,{type:"primary",block:"",onClick:t[4]||(t[4]=f=>r.$router.push("/chat"))},{icon:e(()=>[s(l(D))]),default:e(()=>[v(" "+n(g.value?"进入项目 Chat":"新建 AI 对话"),1)]),_:1}),s(u,{block:"",onClick:I,style:{background:"rgba(114,46,209,.12)","border-color":"#722ed1",color:"#722ed1"}},{icon:e(()=>[s(l(j))]),default:e(()=>[t[24]||(t[24]=v(" 启动 Agent 模式 ",-1))]),_:1}),s(y,{gutter:8},{default:e(()=>[s(d,{span:12},{default:e(()=>[s(u,{block:"",onClick:t[5]||(t[5]=f=>r.$router.push("/services")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:e(()=>[s(l(K))]),default:e(()=>[t[25]||(t[25]=v(" 服务管理 ",-1))]),_:1})]),_:1}),s(d,{span:12},{default:e(()=>[s(u,{block:"",onClick:t[6]||(t[6]=f=>r.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:e(()=>[s(l(N))]),default:e(()=>[t[26]||(t[26]=v(" 查看日志 ",-1))]),_:1})]),_:1})]),_:1}),s(y,{gutter:8},{default:e(()=>[s(d,{span:12},{default:e(()=>[s(u,{block:"",onClick:t[7]||(t[7]=f=>r.$router.push("/skills")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:e(()=>[s(l(R))]),default:e(()=>[t[27]||(t[27]=v(" 技能管理 ",-1))]),_:1})]),_:1}),s(d,{span:12},{default:e(()=>[s(u,{block:"",onClick:t[8]||(t[8]=f=>r.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:e(()=>[s(l(Q))]),default:e(()=>[t[28]||(t[28]=v(" LLM 配置 ",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),s(d,{xs:24,lg:14},{default:e(()=>[s(i,{title:"最近状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"},loading:k.value},{extra:e(()=>[s(u,{type:"link",size:"small",onClick:t[9]||(t[9]=f=>r.$router.push("/logs"))},{default:e(()=>[...t[29]||(t[29]=[v("查看更多 →",-1)])]),_:1})]),default:e(()=>[o("pre",yt,n(S.value||"点击刷新加载系统状态..."),1)]),_:1},8,["loading"])]),_:1})]),_:1}),s(i,{title:"运行信息",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-top":"16px"}},{default:e(()=>[s(F,{column:{xs:1,sm:2,lg:3},size:"small"},{default:e(()=>[s(_,{label:"面板模式"},{default:e(()=>[s(p,{color:g.value?"blue":"purple"},{default:e(()=>[v(n(g.value?"项目级":"全局"),1)]),_:1},8,["color"])]),_:1}),g.value?(w(),$(_,{key:0,label:"项目名称"},{default:e(()=>[o("span",kt,n(l(c).projectName||"—"),1)]),_:1})):z("",!0),g.value?(w(),$(_,{key:1,label:"项目路径"},{default:e(()=>[o("span",Ct,n(l(c).projectRoot),1)]),_:1})):z("",!0),s(_,{label:"WebSocket"},{default:e(()=>[o("span",wt," ws://"+n(l(c).wsHost||"127.0.0.1")+":"+n(l(c).wsPort||18800),1)]),_:1}),s(_,{label:"认证"},{default:e(()=>[s(p,{color:l(c).wsToken?"green":"default",style:{"font-size":"11px"}},{default:e(()=>[v(n(l(c).wsToken?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),s(_,{label:"版本"},{default:e(()=>[...t[30]||(t[30]=[o("span",{style:{color:"var(--text-muted)"}},"v5.0.2.7",-1)])]),_:1})]),_:1})]),_:1})])}}},Ot=X(xt,[["__scopeId","data-v-2ac2518e"]]);export{Ot as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as R}from"./ws-DwluTqT5.js";import{_ as U}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as q}from"./antd-ChLPLhSn.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
|
+
`)),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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.log-box[data-v-b316ead3]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:12px 16px;height:calc(100vh - 280px);min-height:300px;overflow-y:auto;font-family:Cascadia Code,JetBrains Mono,Consolas,monospace;font-size:12px;line-height:1.7}.log-line[data-v-b316ead3]{padding:1px 0;white-space:pre-wrap;word-break:break-all;color:var(--text-secondary)}.line-error[data-v-b316ead3]{color:#ff6b6b}.line-success[data-v-b316ead3]{color:#69db7c}.line-warn[data-v-b316ead3]{color:#fcc419}.line-indent[data-v-b316ead3]{color:var(--text-secondary)}[data-v-b316ead3] mark{background:#d4a017;color:#000;border-radius:2px;padding:0 2px}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{u as V}from"./ws-DwluTqT5.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as E,e as W,T as F,l as $}from"./antd-ChLPLhSn.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(""),T=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))}),P=[{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
|
+
`);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
|
+
`).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:P,"data-source":T.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.servers-grid[data-v-8a49311e]{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.memory-list[data-v-ebb07e22]{display:flex;flex-direction:column;gap:10px;max-height:400px;overflow-y:auto}.memory-item[data-v-ebb07e22]{background:var(--bg-card-hover);border:1px solid var(--border-color);border-radius:6px;padding:10px 14px;transition:border-color .2s}.memory-item[data-v-ebb07e22]:hover{border-color:var(--text-muted)}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as H}from"./ws-DwluTqT5.js";import{_ as J}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as K,R as ee,p as te,h as oe,q as ae,r as ne,n as k}from"./antd-ChLPLhSn.js";import{o as le,a3 as v,a1 as r,k as t,Z as o,X as l,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(),S=u(!1),y=u(!1),T=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(){S.value=!0;try{const{output:a}=await w.execute("hmemory stats",15e3);W(a)}catch(a){console.error("hmemory stats failed:",a)}finally{S.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(){T.value=!0;try{const{output:a}=await w.execute("hmemory consolidate",2e4);k.success("记忆巩固完成"),await B()}catch(a){k.error("巩固失败: "+a.message)}finally{T.value=!1}}return le(B),(a,e)=>{const d=l("a-button"),x=l("a-space"),i=l("a-statistic"),m=l("a-card"),b=l("a-col"),D=l("a-row"),L=l("a-radio-button"),E=l("a-radio-group"),G=l("a-input-search"),P=l("a-spin"),be=l("BrainOutlined"),Q=l("a-tag"),X=l("a-textarea"),I=l("a-form-item"),Y=l("a-slider"),Z=l("a-form"),A=l("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]=n=>C.value=!0),type:"primary"},{icon:o(()=>[t(h(K))]),default:o(()=>[e[9]||(e[9]=p(" 存储记忆 ",-1))]),_:1}),t(d,{ghost:"",loading:S.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]=n=>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]=n=>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]=n=>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]=n=>s.value=n),"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]=n=>z.value=n),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,n=>(f(),v("div",{key:n.id,class:"memory-item"},[r("div",me,[r("div",ve,[t(Q,{color:R(n.layer||s.value),style:{"font-size":"10px"}},{default:o(()=>[p(O(V(n.layer||s.value)),1)]),_:2},1032,["color"]),n.importance?(f(),v("span",fe," 重要度 "+O(n.importance),1)):N("",!0)]),r("span",ye,O(n.time),1)]),r("div",ge,O(n.content),1)]))),128))])):(f(),v("div",de,[N("",!0),e[19]||(e[19]=p(' 暂无记忆内容,点击"存储记忆"添加 ',-1))]))]),_:1}),t(d,{loading:T.value,onClick:F,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(h(ne))]),default:o(()=>[e[20]||(e[20]=p(" 巩固记忆(短期 → 长期晋升) ",-1))]),_:1},8,["loading"]),t(A,{open:C.value,"onUpdate:open":e[8]||(e[8]=n=>C.value=n),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]=n=>c.value.content=n),rows:4,placeholder:"要存储的记忆内容..."},null,8,["value"])]),_:1}),t(I,{label:"重要度"},{default:o(()=>[t(Y,{value:c.value.importance,"onUpdate:value":e[7]||(e[7]=n=>c.value.importance=n),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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-4630ece9] .note-row:hover td{background:var(--bg-card-hover)!important;cursor:pointer}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as J}from"./ws-DwluTqT5.js";import{_ as K}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{o as ee,R as te,b as ae,n as C}from"./antd-ChLPLhSn.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
|
+
`);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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.providers-grid[data-v-6ade5578]{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.provider-card[data-v-6ade5578]{border:1px solid var(--border-color)!important;transition:border-color .2s}.provider-card[data-v-6ade5578]:hover{border-color:var(--text-muted)!important}.provider-card.active[data-v-6ade5578]{border-color:#52c41a!important;background:#29a27014!important}
|
|
@@ -0,0 +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-DwluTqT5.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,n as h}from"./antd-ChLPLhSn.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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-v-13be6bfe] .port-active td{color:#52c41a!important}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{u as X}from"./ws-DwluTqT5.js";import{_ as Y}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as Z,j as q,d as $,i as J,l as K,m as Q,b as U}from"./antd-ChLPLhSn.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
|
+
`).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};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.skills-grid[data-v-a1cd8dd9]{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}.skill-card[data-v-a1cd8dd9]{transition:border-color .2s,transform .2s}.skill-card[data-v-a1cd8dd9]:hover{border-color:#1677ff!important;transform:translateY(-1px)}
|
|
@@ -0,0 +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-DwluTqT5.js";import{p as F}from"./parsers-DftYMnlk.js";import{u as N}from"./chat-C_hu-qNs.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as R,R as E,P}from"./antd-ChLPLhSn.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};
|