chainlesschain 0.45.19 → 0.45.21

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.
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.45.19",
3
+ "version": "0.45.21",
4
4
  "description": "CLI for ChainlessChain - install, configure, and manage your personal AI management system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -20,7 +20,8 @@
20
20
  "format": "prettier --write \"src/**/*.js\" \"bin/**/*.js\" \"__tests__/**/*.js\"",
21
21
  "sync-skill-packs": "node --input-type=module -e \"import { generateCliPacks } from './src/lib/skill-packs/generator.js'; const r = await generateCliPacks({ force: false }); console.log('Skill packs synced:', r.generated.length, 'generated,', r.skipped.length, 'skipped');\"",
22
22
  "postinstall": "node --input-type=module -e \"import { generateCliPacks } from './src/lib/skill-packs/generator.js'; generateCliPacks({ force: false }).catch(() => {});\" 2>/dev/null || true",
23
- "build:web-panel": "cd ../web-panel && npm install --legacy-peer-deps && npm run build && node --input-type=module -e \"import fs from 'fs'; import path from 'path'; const src=path.resolve(process.cwd(),'dist'),dst=path.resolve(process.cwd(),'../cli/src/assets/web-panel'); fs.rmSync(dst,{recursive:true,force:true}); fs.cpSync(src,dst,{recursive:true}); console.log('Web panel bundled to',dst);\"",
23
+ "build:web-panel": "node scripts/build-web-panel.mjs",
24
+ "build:web-panel:force": "node scripts/build-web-panel.mjs --force",
24
25
  "prepublishOnly": "npm run build:web-panel"
25
26
  },
26
27
  "engines": {
@@ -0,0 +1 @@
1
+ b6744e2c344641fcaf8001e19180b3faa5507b4af46c9fbd821b8009262ebcf2
@@ -1 +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};
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-IK-oro0g.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};
@@ -1,3 +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(`
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(""),b=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){b.value={...b.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 _=n.match(/LLM:\s+(\S+)/i);_&&(d.value.activeLlm=_[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 _=c.value.output;F.value=_.split(`
2
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};
3
+ `),f(_)}w.status==="fulfilled"&&(d.value.sessionCount=w.value.length),Promise.allSettled([n.execute("skill sources",15e3),n.execute("llm providers",15e3)]).then(([_,R])=>{if(_.status==="fulfilled"){const A=_.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:_})=>{const R=(_.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:b,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"},_e={style:{display:"flex","align-items":"center",gap:"12px","flex-wrap":"wrap"}},be={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(),b=fe(),v=window.__CC_CONFIG__||{},k=S(()=>v.mode==="project"),D=S(()=>d.status),E=S(()=>b.loading),N=S(()=>b.statusLog),h=S(()=>b.telemetryFilters),f=S(()=>b.compression),g=S(()=>b.stats),W=S(()=>Object.entries(f.value.variantDistribution||{})),n=S(()=>f.value.providerDistribution||[]),c=S(()=>f.value.modelDistribution||[]);async function w(){await b.refresh()}async function _(){await b.refreshCompression()}function R(y){return`${((y||0)*100).toFixed(1)}%`}async function A(){await F.createSession("agent"),j.push("/chat")}return le(()=>{b.ensureRuntimeSubscription(d),setTimeout(w,300)}),oe(()=>{b.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",_e,[t(r(ue),{style:{color:"#1677ff","font-size":"18px"}}),l("div",null,[l("div",be,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:_},{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:_},{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:_},{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-c2d8ed1e"]]);export{yt as default};
@@ -0,0 +1 @@
1
+ .stat-card[data-v-c2d8ed1e]{background:var(--bg-card)!important;border-color:var(--border-color)!important;transition:border-color .2s}.stat-card[data-v-c2d8ed1e]:hover{border-color:var(--text-muted)!important}.stat-header[data-v-c2d8ed1e]{display:flex;justify-content:space-between;align-items:center;margin-bottom:6px}.stat-label[data-v-c2d8ed1e]{color:var(--text-secondary);font-size:12px}.stat-value[data-v-c2d8ed1e]{font-size:22px;font-weight:600;line-height:1.2;margin-bottom:4px}.stat-sub[data-v-c2d8ed1e]{color:var(--text-muted);font-size:11px}.gateway-card[data-v-c2d8ed1e]{border-left:3px solid #1677ff!important}.status-log[data-v-c2d8ed1e]{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-c2d8ed1e]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:14px;height:100%}.telemetry-filter[data-v-c2d8ed1e]{display:flex;flex-direction:column;gap:6px}.telemetry-filter-label[data-v-c2d8ed1e]{color:var(--text-muted);font-size:12px}.telemetry-label[data-v-c2d8ed1e]{color:var(--text-muted);font-size:12px;margin-bottom:6px}.telemetry-value[data-v-c2d8ed1e]{color:#91caff;font-size:24px;font-weight:600;line-height:1.2}.telemetry-sub[data-v-c2d8ed1e]{color:var(--text-secondary);font-size:11px;margin-top:4px}.telemetry-section[data-v-c2d8ed1e]{background:var(--bg-base);border:1px solid var(--border-color);border-radius:8px;padding:14px;min-height:140px}.telemetry-section-title[data-v-c2d8ed1e]{color:var(--text-secondary);font-size:12px;margin-bottom:10px}.telemetry-list[data-v-c2d8ed1e]{display:flex;flex-direction:column;gap:8px}.telemetry-row[data-v-c2d8ed1e]{display:flex;justify-content:space-between;gap:12px;color:var(--text-secondary);font-size:12px}.telemetry-empty[data-v-c2d8ed1e]{color:var(--text-muted);font-size:12px}
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-B00RARl2.js","./vendor-CN0Iv_qZ.js","./ws-DjelKkD6.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-CJSBocer.js","./AppLayout-CFP4dGIJ.css","./Dashboard-3iIpp3zd.js","./chat-DnH09sSR.js","./Dashboard-BS-tzGNj.css","./Chat-DXtvKoM0.js","./markdown-Bo5cVN4u.js","./Chat-DB46afPg.css","./Services-CS0oMdxh.js","./Services-C8Qs6KXv.css","./Logs-CSeKZEG_.js","./Logs-Gf_Mv9Nx.css","./Skills-B2fgruv8.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-Dbf57Tbv.js","./Providers-Brm-S_hS.css","./McpTools-BYQAK11r.js","./McpTools-CyhSLDwf.css","./Notes-bjNrQgAo.js","./Notes-BG69sJKi.css","./Memory-gkUAPyuZ.js","./Memory-DRghrGJr.css","./Cron-BJ4ODHOy.js","./Tasks-qULws8pc.js","./Tasks-BJjN_YEm.css"])))=>i.map(i=>d[i]);
2
- import{S as k,U as x,V as L,f as A,c as y,o as I,W as S,u as T,X as E,Y as R,Z as O,k as w,R as V,_ as D}from"./vendor-CN0Iv_qZ.js";import{a as h,A as M}from"./antd-CJSBocer.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))d(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const a of t.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&d(a)}).observe(document,{childList:!0,subtree:!0});function i(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function d(e){if(e.ep)return;e.ep=!0;const t=i(e);fetch(e.href,t)}})();const C="modulepreload",N=function(c,o){return new URL(c,o).href},B={},s=function(o,i,d){let e=Promise.resolve();if(i&&i.length>0){let _=function(n){return Promise.all(n.map(f=>Promise.resolve(f).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};const a=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),m=r?.nonce||r?.getAttribute("nonce");e=_(i.map(n=>{if(n=N(n,d),n in B)return;B[n]=!0;const f=n.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(d)for(let p=a.length-1;p>=0;p--){const g=a[p];if(g.href===n&&(!f||g.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${u}`))return;const l=document.createElement("link");if(l.rel=f?"stylesheet":C,f||(l.as="script"),l.crossOrigin="",l.href=n,m&&l.setAttribute("nonce",m),document.head.appendChild(l),f)return new Promise((p,g)=>{l.addEventListener("load",p),l.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${n}`)))})}))}function t(a){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=a,window.dispatchEvent(r),!r.defaultPrevented)throw a}return e.then(a=>{for(const r of a||[])r.status==="rejected"&&t(r.reason);return o().catch(t)})},U=[{path:"/",component:()=>s(()=>import("./AppLayout-B00RARl2.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>s(()=>import("./Dashboard-3iIpp3zd.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>s(()=>import("./Chat-DXtvKoM0.js"),__vite__mapDeps([9,1,10,4,7,2,3,11]),import.meta.url)},{path:"services",name:"Services",component:()=>s(()=>import("./Services-CS0oMdxh.js"),__vite__mapDeps([12,2,1,3,4,13]),import.meta.url)},{path:"logs",name:"Logs",component:()=>s(()=>import("./Logs-CSeKZEG_.js"),__vite__mapDeps([14,2,1,3,4,15]),import.meta.url)},{path:"skills",name:"Skills",component:()=>s(()=>import("./Skills-B2fgruv8.js"),__vite__mapDeps([16,1,2,17,7,3,4,18]),import.meta.url)},{path:"providers",name:"Providers",component:()=>s(()=>import("./Providers-Dbf57Tbv.js"),__vite__mapDeps([19,1,2,17,3,4,20]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>s(()=>import("./McpTools-BYQAK11r.js"),__vite__mapDeps([21,2,1,3,4,22]),import.meta.url)},{path:"notes",name:"Notes",component:()=>s(()=>import("./Notes-bjNrQgAo.js"),__vite__mapDeps([23,2,1,3,4,24]),import.meta.url)},{path:"memory",name:"Memory",component:()=>s(()=>import("./Memory-gkUAPyuZ.js"),__vite__mapDeps([25,2,1,3,4,26]),import.meta.url)},{path:"cron",name:"Cron",component:()=>s(()=>import("./Cron-BJ4ODHOy.js"),__vite__mapDeps([27,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>s(()=>import("./Tasks-qULws8pc.js"),__vite__mapDeps([28,1,2,3,4,29]),import.meta.url)}]}],F=k({history:x(),routes:U}),P="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:h.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},$=L("theme",()=>{const c=A(localStorage.getItem(P)||"dark"),o=y(()=>v[c.value]||v.dark),i=y(()=>o.value.antd),d=y(()=>c.value!=="light");function e(){const r=o.value.vars,m=document.documentElement;for(const[_,n]of Object.entries(r))m.style.setProperty(_,n);m.setAttribute("data-theme",c.value)}function t(r){v[r]&&(c.value=r,localStorage.setItem(P,r),e())}function a(){e()}return{current:c,config:o,antdTheme:i,isDark:d,setTheme:t,init:a}}),j={__name:"App",setup(c){const o=$();return I(()=>o.init()),(i,d)=>{const e=E("router-view"),t=E("a-config-provider");return R(),S(t,{theme:T(o).antdTheme},{default:O(()=>[w(e)]),_:1},8,["theme"])}}},b=V(j);b.use(D());b.use(F);b.use(M);b.mount("#app");export{v as T,$ as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-B_tkw3Pn.js","./vendor-CN0Iv_qZ.js","./ws-DjelKkD6.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-CJSBocer.js","./AppLayout-CFP4dGIJ.css","./Dashboard-BZd4wDPQ.js","./chat-DnH09sSR.js","./Dashboard-CKeMmCoT.css","./Chat-DXtvKoM0.js","./markdown-Bo5cVN4u.js","./Chat-DB46afPg.css","./Services-CS0oMdxh.js","./Services-C8Qs6KXv.css","./Logs-CSeKZEG_.js","./Logs-Gf_Mv9Nx.css","./Skills-B2fgruv8.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-Dbf57Tbv.js","./Providers-Brm-S_hS.css","./McpTools-BYQAK11r.js","./McpTools-CyhSLDwf.css","./Notes-bjNrQgAo.js","./Notes-BG69sJKi.css","./Memory-gkUAPyuZ.js","./Memory-DRghrGJr.css","./Cron-BJ4ODHOy.js","./Tasks-qULws8pc.js","./Tasks-BJjN_YEm.css"])))=>i.map(i=>d[i]);
2
+ import{S as k,U as x,V as L,f as A,c as y,o as I,W as S,u as T,X as E,Y as R,Z as O,k as w,R as V,_ as D}from"./vendor-CN0Iv_qZ.js";import{a as h,A as M}from"./antd-CJSBocer.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))d(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const a of t.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&d(a)}).observe(document,{childList:!0,subtree:!0});function i(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function d(e){if(e.ep)return;e.ep=!0;const t=i(e);fetch(e.href,t)}})();const C="modulepreload",N=function(c,o){return new URL(c,o).href},B={},s=function(o,i,d){let e=Promise.resolve();if(i&&i.length>0){let _=function(n){return Promise.all(n.map(f=>Promise.resolve(f).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};const a=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),m=r?.nonce||r?.getAttribute("nonce");e=_(i.map(n=>{if(n=N(n,d),n in B)return;B[n]=!0;const f=n.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(d)for(let p=a.length-1;p>=0;p--){const g=a[p];if(g.href===n&&(!f||g.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${u}`))return;const l=document.createElement("link");if(l.rel=f?"stylesheet":C,f||(l.as="script"),l.crossOrigin="",l.href=n,m&&l.setAttribute("nonce",m),document.head.appendChild(l),f)return new Promise((p,g)=>{l.addEventListener("load",p),l.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${n}`)))})}))}function t(a){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=a,window.dispatchEvent(r),!r.defaultPrevented)throw a}return e.then(a=>{for(const r of a||[])r.status==="rejected"&&t(r.reason);return o().catch(t)})},U=[{path:"/",component:()=>s(()=>import("./AppLayout-B_tkw3Pn.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>s(()=>import("./Dashboard-BZd4wDPQ.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>s(()=>import("./Chat-DXtvKoM0.js"),__vite__mapDeps([9,1,10,4,7,2,3,11]),import.meta.url)},{path:"services",name:"Services",component:()=>s(()=>import("./Services-CS0oMdxh.js"),__vite__mapDeps([12,2,1,3,4,13]),import.meta.url)},{path:"logs",name:"Logs",component:()=>s(()=>import("./Logs-CSeKZEG_.js"),__vite__mapDeps([14,2,1,3,4,15]),import.meta.url)},{path:"skills",name:"Skills",component:()=>s(()=>import("./Skills-B2fgruv8.js"),__vite__mapDeps([16,1,2,17,7,3,4,18]),import.meta.url)},{path:"providers",name:"Providers",component:()=>s(()=>import("./Providers-Dbf57Tbv.js"),__vite__mapDeps([19,1,2,17,3,4,20]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>s(()=>import("./McpTools-BYQAK11r.js"),__vite__mapDeps([21,2,1,3,4,22]),import.meta.url)},{path:"notes",name:"Notes",component:()=>s(()=>import("./Notes-bjNrQgAo.js"),__vite__mapDeps([23,2,1,3,4,24]),import.meta.url)},{path:"memory",name:"Memory",component:()=>s(()=>import("./Memory-gkUAPyuZ.js"),__vite__mapDeps([25,2,1,3,4,26]),import.meta.url)},{path:"cron",name:"Cron",component:()=>s(()=>import("./Cron-BJ4ODHOy.js"),__vite__mapDeps([27,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>s(()=>import("./Tasks-qULws8pc.js"),__vite__mapDeps([28,1,2,3,4,29]),import.meta.url)}]}],F=k({history:x(),routes:U}),P="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:h.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},$=L("theme",()=>{const c=A(localStorage.getItem(P)||"dark"),o=y(()=>v[c.value]||v.dark),i=y(()=>o.value.antd),d=y(()=>c.value!=="light");function e(){const r=o.value.vars,m=document.documentElement;for(const[_,n]of Object.entries(r))m.style.setProperty(_,n);m.setAttribute("data-theme",c.value)}function t(r){v[r]&&(c.value=r,localStorage.setItem(P,r),e())}function a(){e()}return{current:c,config:o,antdTheme:i,isDark:d,setTheme:t,init:a}}),j={__name:"App",setup(c){const o=$();return I(()=>o.init()),(i,d)=>{const e=E("router-view"),t=E("a-config-provider");return R(),S(t,{theme:T(o).antdTheme},{default:O(()=>[w(e)]),_:1},8,["theme"])}}},b=V(j);b.use(D());b.use(F);b.use(M);b.mount("#app");export{v as T,$ as u};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-CF2CqPYX.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-IK-oro0g.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-CN0Iv_qZ.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/antd-CJSBocer.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-CyGyEIVX.css">
@@ -53,6 +53,7 @@ export class BackgroundTaskManager extends EventEmitter {
53
53
  this.tasks = new Map();
54
54
  this.processes = new Map();
55
55
  this._checkInterval = null;
56
+ this._createSeq = 0;
56
57
  if (options.recoverOnStart) {
57
58
  this._loadPersistedTasks({
58
59
  recoverPending: options.recoverPending !== false,
@@ -87,6 +88,7 @@ export class BackgroundTaskManager extends EventEmitter {
87
88
  recoverySourceStatus: null,
88
89
  ownerNodeId: spec.ownerNodeId || this.nodeId,
89
90
  recoveryDecision: null,
91
+ _seq: ++this._createSeq,
90
92
  };
91
93
 
92
94
  this._recordHistory(task, "created", {
@@ -199,7 +201,11 @@ export class BackgroundTaskManager extends EventEmitter {
199
201
  if (filter.status) {
200
202
  tasks = tasks.filter((task) => task.status === filter.status);
201
203
  }
202
- return tasks.sort((a, b) => b.createdAt - a.createdAt);
204
+ return tasks.sort((a, b) => {
205
+ if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
206
+ // Tiebreak: insertion sequence (newer = higher _seq)
207
+ return (b._seq || 0) - (a._seq || 0);
208
+ });
203
209
  }
204
210
 
205
211
  stop(taskId) {
@@ -143,10 +143,18 @@ export function listJsonlSessions(options = {}) {
143
143
  updated_at: lastEvent
144
144
  ? new Date(lastEvent.timestamp).toISOString()
145
145
  : "",
146
+ _lastTs: lastEvent?.timestamp || 0,
147
+ _eventCount: events.length,
146
148
  };
147
149
  })
148
- .sort((a, b) => (b.updated_at > a.updated_at ? 1 : -1))
149
- .slice(0, limit);
150
+ .sort((a, b) => {
151
+ // Primary: numeric timestamp descending
152
+ if (b._lastTs !== a._lastTs) return b._lastTs - a._lastTs;
153
+ // Tiebreak when ms collides: more events = more recent activity
154
+ return b._eventCount - a._eventCount;
155
+ })
156
+ .slice(0, limit)
157
+ .map(({ _lastTs, _eventCount, ...rest }) => rest);
150
158
 
151
159
  return files;
152
160
  }
@@ -1 +0,0 @@
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}