chainlesschain 0.45.79 → 0.45.81

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.
Files changed (51) hide show
  1. package/bin/chainlesschain.js +0 -0
  2. package/package.json +1 -1
  3. package/src/assets/web-panel/.build-hash +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-CoH0P1ux.js → Analytics-C1AnPdMx.js} +2 -2
  5. package/src/assets/web-panel/assets/{AppLayout-Dk1eV3Xp.js → AppLayout-YdvJBMHH.js} +1 -1
  6. package/src/assets/web-panel/assets/{Backup-Cv97eAjW.js → Backup-D31iZX3l.js} +1 -1
  7. package/src/assets/web-panel/assets/{Chat-DSbYaPuD.js → Chat-DiXJ3TuK.js} +1 -1
  8. package/src/assets/web-panel/assets/Cowork-BnrHWwZw.js +7 -0
  9. package/src/assets/web-panel/assets/Cowork-CcSoS3eX.css +1 -0
  10. package/src/assets/web-panel/assets/{Cron-BcH0ckxq.js → Cron-DBt1ueXh.js} +2 -2
  11. package/src/assets/web-panel/assets/Dashboard-BS-tzGNj.css +1 -0
  12. package/src/assets/web-panel/assets/{Dashboard-DSOE-azo.js → Dashboard-HPh9FcPt.js} +2 -2
  13. package/src/assets/web-panel/assets/{Git-zd3CuuXJ.js → Git-hwQ1oZHj.js} +2 -2
  14. package/src/assets/web-panel/assets/{Logs-BUKXg48N.js → Logs-4D9p6PRM.js} +1 -1
  15. package/src/assets/web-panel/assets/{McpTools-WVxDlw0C.js → McpTools-CyAUjbbs.js} +1 -1
  16. package/src/assets/web-panel/assets/{Memory-BLFTgTpY.js → Memory-BMqOR7S-.js} +2 -2
  17. package/src/assets/web-panel/assets/{Notes-CFypT876.js → Notes-Cmas8i4E.js} +2 -2
  18. package/src/assets/web-panel/assets/{Organization-BOOqeyu_.js → Organization-DnSa58Tl.js} +4 -4
  19. package/src/assets/web-panel/assets/{P2P-D9xrbb8q.js → P2P-BxksIBWs.js} +2 -2
  20. package/src/assets/web-panel/assets/{Permissions-CidrpFWd.js → Permissions-Bq5Qn2s3.js} +4 -4
  21. package/src/assets/web-panel/assets/{Projects-D3Ycn8xG.js → Projects-B7EM0uPg.js} +1 -1
  22. package/src/assets/web-panel/assets/{Providers-D0kMUvHz.js → Providers-DAwgG5KV.js} +2 -2
  23. package/src/assets/web-panel/assets/{RssFeed-OQLesJxb.js → RssFeed-HSZoRXvS.js} +2 -2
  24. package/src/assets/web-panel/assets/{Security-BR4hAAkF.js → Security-Cz17qBny.js} +3 -3
  25. package/src/assets/web-panel/assets/{Services-BFMDfXE5.js → Services-D2EsLq-v.js} +1 -1
  26. package/src/assets/web-panel/assets/{Skills-BAf_mFKw.js → Skills-C9v-f3vZ.js} +1 -1
  27. package/src/assets/web-panel/assets/{Tasks-DuNOWfjU.js → Tasks-yMEcU0n7.js} +1 -1
  28. package/src/assets/web-panel/assets/{Templates-buh__Yll.js → Templates-l7SvlKuB.js} +1 -1
  29. package/src/assets/web-panel/assets/{Wallet-vgS5USvW.js → Wallet-BHWhLWn9.js} +4 -4
  30. package/src/assets/web-panel/assets/{WebAuthn-BoL2UJ5Z.js → WebAuthn-kWhFYaUK.js} +4 -4
  31. package/src/assets/web-panel/assets/{antd-BQNxIyr-.js → antd-D6h4fDFf.js} +82 -82
  32. package/src/assets/web-panel/assets/{chat-BwUxWn7i.js → chat-BYmuDvol.js} +1 -1
  33. package/src/assets/web-panel/assets/{index-CCRLEutJ.js → index-ByUk2Wmr.js} +2 -2
  34. package/src/assets/web-panel/assets/{markdown-BeVIhIzs.js → markdown-BZsB-Dsv.js} +1 -1
  35. package/src/assets/web-panel/assets/ws-Dma34ig_.js +1 -0
  36. package/src/assets/web-panel/index.html +2 -2
  37. package/src/gateways/ws/action-protocol.js +101 -0
  38. package/src/gateways/ws/message-dispatcher.js +3 -0
  39. package/src/gateways/ws/session-protocol.js +2 -0
  40. package/src/gateways/ws/ws-agent-handler.js +1 -0
  41. package/src/gateways/ws/ws-server.js +18 -0
  42. package/src/gateways/ws/ws-session-gateway.js +1 -0
  43. package/src/lib/cowork-task-runner.js +55 -3
  44. package/src/lib/cowork-task-templates.js +105 -0
  45. package/src/lib/sub-agent-context.js +26 -0
  46. package/src/runtime/agent-core.js +6 -1
  47. package/src/runtime/coding-agent-shell-policy.cjs +16 -1
  48. package/src/assets/web-panel/assets/Cowork-CPqYhoMI.css +0 -1
  49. package/src/assets/web-panel/assets/Cowork-DY0Jcql7.js +0 -48
  50. package/src/assets/web-panel/assets/Dashboard-CKeMmCoT.css +0 -1
  51. package/src/assets/web-panel/assets/ws-B4fo9ew1.js +0 -1
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chainlesschain",
3
- "version": "0.45.79",
3
+ "version": "0.45.81",
4
4
  "description": "CLI for ChainlessChain - install, configure, and manage your personal AI management system",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- 709850a5a13b18f5118fb3b728ba0ec9040ce7fb1b68050a2e457bfe0f20967b
1
+ 6ac44a36d355598807809f65e620b8407b1d426151131c5db319d466da890e4b
@@ -1,3 +1,3 @@
1
- import{u as ie}from"./ws-B4fo9ew1.js";import{_ as ue}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as ce,m as de,T as G,a0 as pe,a1 as ve,a2 as X,H as C}from"./antd-BQNxIyr-.js";import{w as fe,o as me,a3 as m,a1 as S,k as o,Z as s,f as y,X as f,r as Y,Y as r,G as i,u as b,W as I,a5 as x,a4 as g}from"./vendor-CN0Iv_qZ.js";const ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ye={style:{display:"flex","align-items":"center",gap:"12px"}},_e={key:0,style:{"text-align":"center",padding:"60px"}},xe={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},ge={key:2,style:{color:"#faad14"}},Te={key:3,style:{color:"var(--text-secondary)"}},be={key:0,style:{"text-align":"center",padding:"60px"}},he={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},we={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:3,style:{color:"#faad14"}},Se={key:4,style:{color:"var(--text-secondary)"}},Ie={key:0,style:{"text-align":"center",padding:"40px"}},ze={__name:"Analytics",setup(Re){const h=ie(),z=y("all"),O=y(!1),M=y(!1),N=y(!1),B=y(!1),D=y(!1),A=y(!1),L=y(20),p=Y({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),R=y([]),j=y([]),v=Y({entries:0,hits:0,tokensSaved:0,expired:0}),Z=[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,t)=>(e.provider||"").localeCompare(t.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,t)=>(e.model||"").localeCompare(t.model||"")},{title:"调用次数",key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input Tokens",key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output Tokens",key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total Tokens",key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)},{title:"费用 (USD)",key:"cost",dataIndex:"cost",width:"110px",sorter:(e,t)=>(e.cost||0)-(t.cost||0)},{title:"平均响应",key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,t)=>(e.avgResponseTime||0)-(t.avgResponseTime||0)}],q=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:"费用",key:"cost",dataIndex:"cost",width:"100px"},{title:"响应时间",key:"responseTime",dataIndex:"responseTime",width:"100px"}];function T(e){return(e||"").replace(/,/g,"")}function w(e){try{const t=(e||"").trim(),a=t.search(/[{[]/);return a>=0?JSON.parse(t.slice(a)):null}catch{return null}}function K(e){const t=(e||"").split(`
1
+ import{u as ie}from"./ws-Dma34ig_.js";import{_ as ue}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as ce,m as de,T as H,a1 as pe,a2 as ve,a3 as X,J as C}from"./antd-D6h4fDFf.js";import{w as fe,o as me,a3 as m,a1 as S,k as o,Z as s,f as y,X as f,r as Y,Y as r,G as i,u as b,W as I,a5 as x,a4 as g}from"./vendor-CN0Iv_qZ.js";const ke={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ye={style:{display:"flex","align-items":"center",gap:"12px"}},_e={key:0,style:{"text-align":"center",padding:"60px"}},xe={key:1,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},ge={key:2,style:{color:"#faad14"}},Te={key:3,style:{color:"var(--text-secondary)"}},be={key:0,style:{"text-align":"center",padding:"60px"}},he={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},we={key:2,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Ce={key:3,style:{color:"#faad14"}},Se={key:4,style:{color:"var(--text-secondary)"}},Ie={key:0,style:{"text-align":"center",padding:"40px"}},ze={__name:"Analytics",setup(Re){const h=ie(),z=y("all"),O=y(!1),M=y(!1),N=y(!1),B=y(!1),D=y(!1),A=y(!1),J=y(20),p=Y({totalCalls:0,totalTokens:0,totalCost:0,avgResponseTime:0}),R=y([]),j=y([]),v=Y({entries:0,hits:0,tokensSaved:0,expired:0}),Z=[{title:"Provider",key:"provider",dataIndex:"provider",width:"120px",sorter:(e,t)=>(e.provider||"").localeCompare(t.provider||"")},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0,sorter:(e,t)=>(e.model||"").localeCompare(t.model||"")},{title:"调用次数",key:"calls",dataIndex:"calls",width:"100px",sorter:(e,t)=>(e.calls||0)-(t.calls||0)},{title:"Input Tokens",key:"inputTokens",dataIndex:"inputTokens",width:"120px",sorter:(e,t)=>(e.inputTokens||0)-(t.inputTokens||0)},{title:"Output Tokens",key:"outputTokens",dataIndex:"outputTokens",width:"130px",sorter:(e,t)=>(e.outputTokens||0)-(t.outputTokens||0)},{title:"Total Tokens",key:"totalTokens",dataIndex:"totalTokens",width:"120px",sorter:(e,t)=>(e.totalTokens||0)-(t.totalTokens||0)},{title:"费用 (USD)",key:"cost",dataIndex:"cost",width:"110px",sorter:(e,t)=>(e.cost||0)-(t.cost||0)},{title:"平均响应",key:"avgResponseTime",dataIndex:"avgResponseTime",width:"110px",sorter:(e,t)=>(e.avgResponseTime||0)-(t.avgResponseTime||0)}],q=[{title:"时间",key:"timestamp",dataIndex:"timestamp",width:"180px"},{title:"Provider",key:"provider",dataIndex:"provider",width:"110px"},{title:"Model",key:"model",dataIndex:"model",ellipsis:!0},{title:"Input",key:"inputTokens",dataIndex:"inputTokens",width:"90px"},{title:"Output",key:"outputTokens",dataIndex:"outputTokens",width:"90px"},{title:"费用",key:"cost",dataIndex:"cost",width:"100px"},{title:"响应时间",key:"responseTime",dataIndex:"responseTime",width:"100px"}];function T(e){return(e||"").replace(/,/g,"")}function w(e){try{const t=(e||"").trim(),a=t.search(/[{[]/);return a>=0?JSON.parse(t.slice(a)):null}catch{return null}}function K(e){const t=(e||"").split(`
2
2
  `);for(const a of t){const l=a.trim(),_=l.match(/total\s*calls?\s*[::]\s*([\d,]+)/i);_&&(p.totalCalls=parseInt(T(_[1]),10)||0);const u=l.match(/total\s*tokens?\s*[::]\s*([\d,]+)/i);u&&(p.totalTokens=parseInt(T(u[1]),10)||0);const d=l.match(/cost\s*[::]\s*\$?([\d,.]+)/i);d&&(p.totalCost=parseFloat(T(d[1]))||0);const c=l.match(/(?:avg|average)\s*(?:response\s*)?time\s*[::]\s*([\d,.]+)/i);c&&(p.avgResponseTime=parseFloat(T(c[1]))||0)}}function Q(e){p.totalCalls=e.totalCalls??e.total_calls??e.calls??0,p.totalTokens=e.totalTokens??e.total_tokens??e.tokens??0,p.totalCost=e.totalCost??e.total_cost??e.cost??0,p.avgResponseTime=e.avgResponseTime??e.avg_response_time??e.avgTime??0}function ee(e){return(Array.isArray(e)?e:e.breakdown||e.providers||e.rows||[]).map((a,l)=>({key:l,provider:a.provider||"-",model:a.model||"-",calls:a.calls||a.count||0,inputTokens:a.inputTokens??a.input_tokens??0,outputTokens:a.outputTokens??a.output_tokens??0,totalTokens:a.totalTokens??a.total_tokens??(a.inputTokens??0)+(a.outputTokens??0),cost:a.cost??a.total_cost??0,avgResponseTime:a.avgResponseTime??a.avg_response_time??0}))}function te(e){return(Array.isArray(e)?e:e.recent||e.records||e.rows||[]).map((a,l)=>({key:l,timestamp:a.timestamp||a.time||a.created_at||"-",provider:a.provider||"-",model:a.model||"-",inputTokens:a.inputTokens??a.input_tokens??0,outputTokens:a.outputTokens??a.output_tokens??0,cost:a.cost??0,responseTime:a.responseTime??a.response_time??0}))}function oe(e){v.entries=e.entries??e.count??e.size??0,v.hits=e.hits??e.cacheHits??e.cache_hits??0,v.tokensSaved=e.tokensSaved??e.tokens_saved??0,v.expired=e.expired??e.expiredCount??e.expired_count??0}function se(e){const t=(e||"").split(`
3
- `);for(const a of t){const l=a.trim(),_=l.match(/entries?\s*[::]\s*([\d,]+)/i);_&&(v.entries=parseInt(T(_[1]),10)||0);const u=l.match(/hits?\s*[::]\s*([\d,]+)/i);u&&(v.hits=parseInt(T(u[1]),10)||0);const d=l.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);d&&(v.tokensSaved=parseInt(T(d[1]),10)||0);const c=l.match(/expired?\s*[::]\s*([\d,]+)/i);c&&(v.expired=parseInt(T(c[1]),10)||0)}}async function P(){O.value=!0;try{const{output:e}=await h.execute(`tokens show --period ${z.value} --json`,15e3),t=w(e);t?Q(t):K(e)}catch(e){console.error("loadSummary failed:",e)}finally{O.value=!1}}async function ae(){M.value=!0;try{const{output:e}=await h.execute("tokens breakdown --json",15e3),t=w(e);t?R.value=ee(t):R.value=[]}catch(e){console.error("loadBreakdown failed:",e),R.value=[]}finally{M.value=!1}}async function F(){N.value=!0;try{const{output:e}=await h.execute(`tokens recent --limit ${L.value} --json`,15e3),t=w(e);t?j.value=te(t):j.value=[]}catch(e){console.error("loadRecent failed:",e),j.value=[]}finally{N.value=!1}}async function $(){B.value=!0;try{const{output:e}=await h.execute("tokens cache --json",15e3),t=w(e);t?oe(t):se(e)}catch(e){console.error("loadCache failed:",e)}finally{B.value=!1}}async function ne(){D.value=!0;try{const{output:e}=await h.execute("tokens cache --clear --json",15e3),t=w(e);t&&t.error?C.error("清理缓存失败: "+t.error):(C.success("缓存已清理"),await $())}catch(e){C.error("清理缓存失败: "+e.message)}finally{D.value=!1}}async function le(){A.value=!0;try{const{output:e}=await h.execute("tokens cache --cleanup --json",15e3),t=w(e);t&&t.error?C.error("清理过期失败: "+t.error):(C.success("过期缓存已清理"),await $())}catch(e){C.error("清理过期失败: "+e.message)}finally{A.value=!1}}async function U(){await Promise.all([P(),ae(),F(),$()])}return fe(z,()=>{P()}),me(U),(e,t)=>{const a=f("a-radio-button"),l=f("a-radio-group"),_=f("a-button"),u=f("a-statistic"),d=f("a-card"),c=f("a-col"),V=f("a-row"),J=f("a-spin"),H=f("a-tag"),W=f("a-empty"),E=f("a-table"),re=f("a-space");return r(),m("div",null,[S("div",ke,[t[7]||(t[7]=S("div",null,[S("h2",{class:"page-title"},"使用分析"),S("p",{class:"page-sub"},"Token 用量 / 成本 / 缓存")],-1)),S("div",ye,[o(l,{value:z.value,"onUpdate:value":t[0]||(t[0]=n=>z.value=n),"button-style":"solid",size:"small"},{default:s(()=>[o(a,{value:"today"},{default:s(()=>[...t[2]||(t[2]=[i("今天",-1)])]),_:1}),o(a,{value:"week"},{default:s(()=>[...t[3]||(t[3]=[i("本周",-1)])]),_:1}),o(a,{value:"month"},{default:s(()=>[...t[4]||(t[4]=[i("本月",-1)])]),_:1}),o(a,{value:"all"},{default:s(()=>[...t[5]||(t[5]=[i("全部",-1)])]),_:1})]),_:1},8,["value"]),o(_,{type:"primary",ghost:"",loading:O.value,onClick:U},{icon:s(()=>[o(b(ce))]),default:s(()=>[t[6]||(t[6]=i(" 刷新 ",-1))]),_:1},8,["loading"])])]),o(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"总调用次数",value:p.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[o(b(de))]),suffix:s(()=>[...t[8]||(t[8]=[i("次",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"总 Token 数",value:p.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:s(()=>[o(b(G))]),_:1},8,["value"])]),_:1})]),_:1}),o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"总费用",value:p.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:s(()=>[o(b(pe))]),suffix:s(()=>[...t[9]||(t[9]=[i("USD",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"平均响应时间",value:p.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:s(()=>[o(b(G))]),suffix:s(()=>[...t[10]||(t[10]=[i("ms",-1)])]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(d,{title:"Provider 分布",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:s(()=>[M.value?(r(),m("div",_e,[o(J,{size:"large"})])):(r(),I(E,{key:1,columns:Z,"data-source":R.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:n,record:k})=>[n.key==="provider"?(r(),I(H,{key:0,color:"blue"},{default:s(()=>[i(x(k.provider),1)]),_:2},1024)):g("",!0),n.key==="model"?(r(),m("span",xe,x(k.model),1)):g("",!0),n.key==="cost"?(r(),m("span",ge,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),n.key==="avgResponseTime"?(r(),m("span",Te,x(k.avgResponseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(W,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(d,{title:"最近调用记录",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(l,{value:L.value,"onUpdate:value":t[1]||(t[1]=n=>L.value=n),size:"small",onChange:F},{default:s(()=>[o(a,{value:10},{default:s(()=>[...t[11]||(t[11]=[i("10",-1)])]),_:1}),o(a,{value:20},{default:s(()=>[...t[12]||(t[12]=[i("20",-1)])]),_:1}),o(a,{value:50},{default:s(()=>[...t[13]||(t[13]=[i("50",-1)])]),_:1})]),_:1},8,["value"])]),default:s(()=>[N.value?(r(),m("div",be,[o(J,{size:"large"})])):(r(),I(E,{key:1,columns:q,"data-source":j.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:n,record:k})=>[n.key==="timestamp"?(r(),m("span",he,x(k.timestamp),1)):g("",!0),n.key==="provider"?(r(),I(H,{key:1,color:"blue"},{default:s(()=>[i(x(k.provider),1)]),_:2},1024)):g("",!0),n.key==="model"?(r(),m("span",we,x(k.model),1)):g("",!0),n.key==="cost"?(r(),m("span",Ce,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),n.key==="responseTime"?(r(),m("span",Se,x(k.responseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(W,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(d,{title:"缓存状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[o(re,null,{default:s(()=>[o(_,{size:"small",loading:A.value,onClick:le,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(b(X))]),default:s(()=>[t[14]||(t[14]=i(" 清理过期 ",-1))]),_:1},8,["loading"]),o(_,{size:"small",danger:"",loading:D.value,onClick:ne,style:{"border-color":"var(--border-color)"}},{icon:s(()=>[o(b(X))]),default:s(()=>[t[15]||(t[15]=i(" 清理缓存 ",-1))]),_:1},8,["loading"])]),_:1})]),default:s(()=>[B.value?(r(),m("div",Ie,[o(J)])):(r(),I(V,{key:1,gutter:[16,16]},{default:s(()=>[o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"缓存条目",value:v.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:s(()=>[o(b(ve))]),_:1},8,["value"])]),_:1}),o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"命中次数",value:v.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["value"])]),_:1}),o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"节省 Token",value:v.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["value"])]),_:1}),o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"已过期",value:v.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["value"])]),_:1})]),_:1}))]),_:1})])}}},Be=ue(ze,[["__scopeId","data-v-92f257d5"]]);export{Be as default};
3
+ `);for(const a of t){const l=a.trim(),_=l.match(/entries?\s*[::]\s*([\d,]+)/i);_&&(v.entries=parseInt(T(_[1]),10)||0);const u=l.match(/hits?\s*[::]\s*([\d,]+)/i);u&&(v.hits=parseInt(T(u[1]),10)||0);const d=l.match(/(?:tokens?\s*)?saved\s*[::]\s*([\d,]+)/i);d&&(v.tokensSaved=parseInt(T(d[1]),10)||0);const c=l.match(/expired?\s*[::]\s*([\d,]+)/i);c&&(v.expired=parseInt(T(c[1]),10)||0)}}async function P(){O.value=!0;try{const{output:e}=await h.execute(`tokens show --period ${z.value} --json`,15e3),t=w(e);t?Q(t):K(e)}catch(e){console.error("loadSummary failed:",e)}finally{O.value=!1}}async function ae(){M.value=!0;try{const{output:e}=await h.execute("tokens breakdown --json",15e3),t=w(e);t?R.value=ee(t):R.value=[]}catch(e){console.error("loadBreakdown failed:",e),R.value=[]}finally{M.value=!1}}async function F(){N.value=!0;try{const{output:e}=await h.execute(`tokens recent --limit ${J.value} --json`,15e3),t=w(e);t?j.value=te(t):j.value=[]}catch(e){console.error("loadRecent failed:",e),j.value=[]}finally{N.value=!1}}async function L(){B.value=!0;try{const{output:e}=await h.execute("tokens cache --json",15e3),t=w(e);t?oe(t):se(e)}catch(e){console.error("loadCache failed:",e)}finally{B.value=!1}}async function ne(){D.value=!0;try{const{output:e}=await h.execute("tokens cache --clear --json",15e3),t=w(e);t&&t.error?C.error("清理缓存失败: "+t.error):(C.success("缓存已清理"),await L())}catch(e){C.error("清理缓存失败: "+e.message)}finally{D.value=!1}}async function le(){A.value=!0;try{const{output:e}=await h.execute("tokens cache --cleanup --json",15e3),t=w(e);t&&t.error?C.error("清理过期失败: "+t.error):(C.success("过期缓存已清理"),await L())}catch(e){C.error("清理过期失败: "+e.message)}finally{A.value=!1}}async function U(){await Promise.all([P(),ae(),F(),L()])}return fe(z,()=>{P()}),me(U),(e,t)=>{const a=f("a-radio-button"),l=f("a-radio-group"),_=f("a-button"),u=f("a-statistic"),d=f("a-card"),c=f("a-col"),V=f("a-row"),$=f("a-spin"),W=f("a-tag"),E=f("a-empty"),G=f("a-table"),re=f("a-space");return r(),m("div",null,[S("div",ke,[t[7]||(t[7]=S("div",null,[S("h2",{class:"page-title"},"使用分析"),S("p",{class:"page-sub"},"Token 用量 / 成本 / 缓存")],-1)),S("div",ye,[o(l,{value:z.value,"onUpdate:value":t[0]||(t[0]=n=>z.value=n),"button-style":"solid",size:"small"},{default:s(()=>[o(a,{value:"today"},{default:s(()=>[...t[2]||(t[2]=[i("今天",-1)])]),_:1}),o(a,{value:"week"},{default:s(()=>[...t[3]||(t[3]=[i("本周",-1)])]),_:1}),o(a,{value:"month"},{default:s(()=>[...t[4]||(t[4]=[i("本月",-1)])]),_:1}),o(a,{value:"all"},{default:s(()=>[...t[5]||(t[5]=[i("全部",-1)])]),_:1})]),_:1},8,["value"]),o(_,{type:"primary",ghost:"",loading:O.value,onClick:U},{icon:s(()=>[o(b(ce))]),default:s(()=>[t[6]||(t[6]=i(" 刷新 ",-1))]),_:1},8,["loading"])])]),o(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"总调用次数",value:p.totalCalls,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[o(b(de))]),suffix:s(()=>[...t[8]||(t[8]=[i("次",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"总 Token 数",value:p.totalTokens,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:s(()=>[o(b(H))]),_:1},8,["value"])]),_:1})]),_:1}),o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"总费用",value:p.totalCost,precision:4,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:s(()=>[o(b(pe))]),suffix:s(()=>[...t[9]||(t[9]=[i("USD",-1)])]),_:1},8,["value"])]),_:1})]),_:1}),o(c,{xs:24,sm:12,lg:6},{default:s(()=>[o(d,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[o(u,{title:"平均响应时间",value:p.avgResponseTime,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:s(()=>[o(b(H))]),suffix:s(()=>[...t[10]||(t[10]=[i("ms",-1)])]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(d,{title:"Provider 分布",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:s(()=>[M.value?(r(),m("div",_e,[o($,{size:"large"})])):(r(),I(G,{key:1,columns:Z,"data-source":R.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:n,record:k})=>[n.key==="provider"?(r(),I(W,{key:0,color:"blue"},{default:s(()=>[i(x(k.provider),1)]),_:2},1024)):g("",!0),n.key==="model"?(r(),m("span",xe,x(k.model),1)):g("",!0),n.key==="cost"?(r(),m("span",ge,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),n.key==="avgResponseTime"?(r(),m("span",Te,x(k.avgResponseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(E,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(d,{title:"最近调用记录",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:s(()=>[o(l,{value:J.value,"onUpdate:value":t[1]||(t[1]=n=>J.value=n),size:"small",onChange:F},{default:s(()=>[o(a,{value:10},{default:s(()=>[...t[11]||(t[11]=[i("10",-1)])]),_:1}),o(a,{value:20},{default:s(()=>[...t[12]||(t[12]=[i("20",-1)])]),_:1}),o(a,{value:50},{default:s(()=>[...t[13]||(t[13]=[i("50",-1)])]),_:1})]),_:1},8,["value"])]),default:s(()=>[N.value?(r(),m("div",be,[o($,{size:"large"})])):(r(),I(G,{key:1,columns:q,"data-source":j.value,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"analytics-row"},{bodyCell:s(({column:n,record:k})=>[n.key==="timestamp"?(r(),m("span",he,x(k.timestamp),1)):g("",!0),n.key==="provider"?(r(),I(W,{key:1,color:"blue"},{default:s(()=>[i(x(k.provider),1)]),_:2},1024)):g("",!0),n.key==="model"?(r(),m("span",we,x(k.model),1)):g("",!0),n.key==="cost"?(r(),m("span",Ce,"$"+x((k.cost||0).toFixed(4)),1)):g("",!0),n.key==="responseTime"?(r(),m("span",Se,x(k.responseTime||0)+" ms",1)):g("",!0)]),emptyText:s(()=>[o(E,{description:"暂无调用记录"})]),_:1},8,["data-source","pagination"]))]),_:1}),o(d,{title:"缓存状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[o(re,null,{default:s(()=>[o(_,{size:"small",loading:A.value,onClick:le,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:s(()=>[o(b(X))]),default:s(()=>[t[14]||(t[14]=i(" 清理过期 ",-1))]),_:1},8,["loading"]),o(_,{size:"small",danger:"",loading:D.value,onClick:ne,style:{"border-color":"var(--border-color)"}},{icon:s(()=>[o(b(X))]),default:s(()=>[t[15]||(t[15]=i(" 清理缓存 ",-1))]),_:1},8,["loading"])]),_:1})]),default:s(()=>[B.value?(r(),m("div",Ie,[o($)])):(r(),I(V,{key:1,gutter:[16,16]},{default:s(()=>[o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"缓存条目",value:v.entries,"value-style":{color:"#1677ff",fontSize:"18px"}},{prefix:s(()=>[o(b(ve))]),_:1},8,["value"])]),_:1}),o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"命中次数",value:v.hits,"value-style":{color:"#52c41a",fontSize:"18px"}},null,8,["value"])]),_:1}),o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"节省 Token",value:v.tokensSaved,"value-style":{color:"#faad14",fontSize:"18px"}},null,8,["value"])]),_:1}),o(c,{xs:12,sm:6},{default:s(()=>[o(u,{title:"已过期",value:v.expired,"value-style":{color:"#ff4d4f",fontSize:"18px"}},null,8,["value"])]),_:1})]),_:1}))]),_:1})])}}},Be=ue(ze,[["__scopeId","data-v-92f257d5"]]);export{Be as default};
@@ -1 +1 @@
1
- import{o as fe,W as f,Z as t,X as d,$ as ve,a0 as ge,Y as i,k as e,a1 as a,a2 as w,a3 as r,a4 as S,F as j,u as s,a5 as g,G as l,a6 as be,a7 as Oe,f as Ce,c as m}from"./vendor-CN0Iv_qZ.js";import{u as we}from"./ws-B4fo9ew1.js";import{u as je,T as Te}from"./index-CCRLEutJ.js";import{_ as Se}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as B,G as x,D as M,M as F,R as K,C as P,b as A,c as G,d as I,e as W,B as D,f as V,h as z,T as E,S as U,L as $,W as H,i as X,j as Y,P as Z,k as q,l as J,m as Q,n as h,o as ee,K as te,I as Be}from"./antd-BQNxIyr-.js";const xe={key:0,class:"logo-text"},Le={key:0,class:"mode-banner project"},Ne={class:"banner-info"},Re={class:"banner-name"},Me={key:1,class:"mode-banner global"},Fe=["title"],Ke={key:0,class:"footer-text"},Pe={class:"header-left"},Ae={class:"header-right"},Ge={class:"theme-switcher"},Ie=["data-theme-key","onClick"],We={__name:"AppLayout",setup(De){const oe=ve(),se=ge(),b=we(),T=je(),u=Ce(!1),y=window.__CC_CONFIG__||{},p=m(()=>y.mode==="project"),ne=m(()=>T.current),le=m(()=>T.config.vars["--menu-mode"]),L=m(()=>{const c=se.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),O=m(()=>b.status),ae=m(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),ie=m(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function de(c){T.setTheme(c)}function ue({key:c}){oe.push({mcp:"/mcp"}[c]||`/${c}`)}return fe(()=>b.connect()),(c,o)=>{const n=d("a-menu-item"),k=d("a-menu-item-group"),v=d("a-menu-divider"),re=d("a-menu"),ce=d("a-badge"),pe=d("a-layout-sider"),N=d("a-tooltip"),me=d("a-tag"),ye=d("a-layout-header"),ke=d("router-view"),_e=d("a-layout-content"),R=d("a-layout");return i(),f(R,{class:"app-root"},{default:t(()=>[e(pe,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=_=>u.value=_),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:w(["logo",{collapsed:u.value}])},[o[2]||(o[2]=a("span",{class:"logo-icon"},"⛓",-1)),u.value?S("",!0):(i(),r("span",xe,"ChainlessChain"))],2),u.value?(i(),r("div",{key:1,class:"mode-icon-sm",title:p.value?s(y).projectName:"全局模式"},[p.value?(i(),f(s(B),{key:0,style:{color:"#1677ff"}})):(i(),f(s(x),{key:1,style:{color:"#722ed1"}}))],8,Fe)):(i(),r(j,{key:0},[p.value?(i(),r("div",Le,[e(s(B),{class:"banner-icon"}),a("div",Ne,[a("div",Re,g(s(y).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),r("div",Me,[e(s(x),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(re,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=_=>L.value=_),theme:le.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:ue},{default:t(()=>[u.value?(i(),r(j,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(M))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(K))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(P))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(A))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(I))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(W))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(E))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"security"},{icon:t(()=>[e(s(U))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(H))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Z))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"wallet"},{icon:t(()=>[e(s(q))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(J))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(Q))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(h))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ee))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(te))]),_:1})],64)):(i(),r(j,{key:0},[e(k,null,{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(M))]),default:t(()=>[o[6]||(o[6]=l("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[7]||(o[7]=l("AI 对话",-1))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[8]||(o[8]=l("日常协作",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(P))]),default:t(()=>[o[9]||(o[9]=l("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(A))]),default:t(()=>[o[10]||(o[10]=l("日志查看",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[11]||(o[11]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[12]||(o[12]=l("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[13]||(o[13]=l("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(W))]),default:t(()=>[o[14]||(o[14]=l("MCP 工具",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[15]||(o[15]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[16]||(o[16]=l("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[17]||(o[17]=l("记忆文件",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),default:t(()=>[o[18]||(o[18]=l("定时任务",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[19]||(o[19]=l("后台任务",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[20]||(o[20]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(n,{key:"security"},{icon:t(()=>[e(s(U))]),default:t(()=>[o[21]||(o[21]=l("安全中心",-1))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),default:t(()=>[o[22]||(o[22]=l("权限管理",-1))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(H))]),default:t(()=>[o[23]||(o[23]=l("P2P 网络",-1))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),default:t(()=>[o[24]||(o[24]=l("备份同步",-1))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),default:t(()=>[o[25]||(o[25]=l("Git 与数据",-1))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Z))]),default:t(()=>[o[26]||(o[26]=l("项目管理",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[27]||(o[27]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(n,{key:"wallet"},{icon:t(()=>[e(s(q))]),default:t(()=>[o[28]||(o[28]=l("钱包管理",-1))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(J))]),default:t(()=>[o[29]||(o[29]=l("组织管理",-1))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(Q))]),default:t(()=>[o[30]||(o[30]=l("使用分析",-1))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(h))]),default:t(()=>[o[31]||(o[31]=l("模板中心",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[32]||(o[32]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ee))]),default:t(()=>[o[33]||(o[33]=l("RSS 订阅",-1))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(te))]),default:t(()=>[o[34]||(o[34]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:w(["sidebar-footer",{collapsed:u.value}])},[e(ce,{status:ae.value},null,8,["status"]),u.value?S("",!0):(i(),r("span",Ke,g(ie.value),1))],2)]),_:1},8,["collapsed"]),e(R,{class:"main-area"},{default:t(()=>[e(ye,{class:"app-header"},{default:t(()=>[a("div",Pe,[a("div",{class:w(["scope-tag",p.value?"project":"global"])},[(i(),f(be(p.value?s(B):s(x)))),a("span",null,g(p.value?s(y).projectName||"项目":"全局模式"),1),p.value&&s(y).projectRoot?(i(),f(N,{key:0,title:s(y).projectRoot},{default:t(()=>[e(s(Be),{class:"info-icon"})]),_:1},8,["title"])):S("",!0)],2)]),a("div",Ae,[a("div",Ge,[(i(!0),r(j,null,Oe(s(Te),(_,C)=>(i(),f(N,{key:C,title:_.label},{default:t(()=>[a("button",{class:w(["theme-btn",{active:ne.value===C}]),"data-theme-key":C,onClick:Ve=>de(C)},g(_.icon),11,Ie)]),_:2},1032,["title"]))),128))]),o[35]||(o[35]=a("span",{class:"version-tag"},"v5.0.2.9",-1)),e(me,{color:O.value==="connected"?"green":O.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(g(O.value==="connected"?"已连接":O.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(_e,{class:"page-content"},{default:t(()=>[e(ke)]),_:1})]),_:1})]),_:1})}}},Xe=Se(We,[["__scopeId","data-v-2d496e96"]]);export{Xe as default};
1
+ import{o as fe,W as f,Z as t,X as d,$ as ve,a0 as ge,Y as i,k as e,a1 as a,a2 as w,a3 as r,a4 as S,F as j,u as s,a5 as g,G as l,a6 as be,a7 as Oe,f as Ce,c as m}from"./vendor-CN0Iv_qZ.js";import{u as we}from"./ws-Dma34ig_.js";import{u as je,T as Te}from"./index-ByUk2Wmr.js";import{_ as Se}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as B,G as x,D as M,M as F,R as K,C as P,b as A,c as G,d as I,e as W,B as D,f as V,h as z,T as E,S as U,L as $,W as H,i as X,j as Y,P as Z,k as q,l as J,m as Q,n as h,o as ee,K as te,I as Be}from"./antd-D6h4fDFf.js";const xe={key:0,class:"logo-text"},Le={key:0,class:"mode-banner project"},Ne={class:"banner-info"},Re={class:"banner-name"},Me={key:1,class:"mode-banner global"},Fe=["title"],Ke={key:0,class:"footer-text"},Pe={class:"header-left"},Ae={class:"header-right"},Ge={class:"theme-switcher"},Ie=["data-theme-key","onClick"],We={__name:"AppLayout",setup(De){const oe=ve(),se=ge(),b=we(),T=je(),u=Ce(!1),y=window.__CC_CONFIG__||{},p=m(()=>y.mode==="project"),ne=m(()=>T.current),le=m(()=>T.config.vars["--menu-mode"]),L=m(()=>{const c=se.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),O=m(()=>b.status),ae=m(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[b.status]||"default"),ie=m(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[b.status]||"未知");function de(c){T.setTheme(c)}function ue({key:c}){oe.push({mcp:"/mcp"}[c]||`/${c}`)}return fe(()=>b.connect()),(c,o)=>{const n=d("a-menu-item"),k=d("a-menu-item-group"),v=d("a-menu-divider"),re=d("a-menu"),ce=d("a-badge"),pe=d("a-layout-sider"),N=d("a-tooltip"),me=d("a-tag"),ye=d("a-layout-header"),ke=d("router-view"),_e=d("a-layout-content"),R=d("a-layout");return i(),f(R,{class:"app-root"},{default:t(()=>[e(pe,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=_=>u.value=_),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:w(["logo",{collapsed:u.value}])},[o[2]||(o[2]=a("span",{class:"logo-icon"},"⛓",-1)),u.value?S("",!0):(i(),r("span",xe,"ChainlessChain"))],2),u.value?(i(),r("div",{key:1,class:"mode-icon-sm",title:p.value?s(y).projectName:"全局模式"},[p.value?(i(),f(s(B),{key:0,style:{color:"#1677ff"}})):(i(),f(s(x),{key:1,style:{color:"#722ed1"}}))],8,Fe)):(i(),r(j,{key:0},[p.value?(i(),r("div",Le,[e(s(B),{class:"banner-icon"}),a("div",Ne,[a("div",Re,g(s(y).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),r("div",Me,[e(s(x),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(re,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=_=>L.value=_),theme:le.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:ue},{default:t(()=>[u.value?(i(),r(j,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(M))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(K))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(P))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(A))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(I))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(W))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(E))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"security"},{icon:t(()=>[e(s(U))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(H))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Z))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"wallet"},{icon:t(()=>[e(s(q))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(J))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(Q))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(h))]),_:1}),e(v,{class:"divider-sm"}),e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ee))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(te))]),_:1})],64)):(i(),r(j,{key:0},[e(k,null,{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(M))]),default:t(()=>[o[6]||(o[6]=l("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[7]||(o[7]=l("AI 对话",-1))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[8]||(o[8]=l("日常协作",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(P))]),default:t(()=>[o[9]||(o[9]=l("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(A))]),default:t(()=>[o[10]||(o[10]=l("日志查看",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[11]||(o[11]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[12]||(o[12]=l("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[13]||(o[13]=l("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(W))]),default:t(()=>[o[14]||(o[14]=l("MCP 工具",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[15]||(o[15]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[16]||(o[16]=l("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[17]||(o[17]=l("记忆文件",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),default:t(()=>[o[18]||(o[18]=l("定时任务",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[19]||(o[19]=l("后台任务",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[20]||(o[20]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(n,{key:"security"},{icon:t(()=>[e(s(U))]),default:t(()=>[o[21]||(o[21]=l("安全中心",-1))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s($))]),default:t(()=>[o[22]||(o[22]=l("权限管理",-1))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(H))]),default:t(()=>[o[23]||(o[23]=l("P2P 网络",-1))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),default:t(()=>[o[24]||(o[24]=l("备份同步",-1))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Y))]),default:t(()=>[o[25]||(o[25]=l("Git 与数据",-1))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(Z))]),default:t(()=>[o[26]||(o[26]=l("项目管理",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[27]||(o[27]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(n,{key:"wallet"},{icon:t(()=>[e(s(q))]),default:t(()=>[o[28]||(o[28]=l("钱包管理",-1))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(J))]),default:t(()=>[o[29]||(o[29]=l("组织管理",-1))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(Q))]),default:t(()=>[o[30]||(o[30]=l("使用分析",-1))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(h))]),default:t(()=>[o[31]||(o[31]=l("模板中心",-1))]),_:1})]),_:1}),e(k,null,{title:t(()=>[...o[32]||(o[32]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ee))]),default:t(()=>[o[33]||(o[33]=l("RSS 订阅",-1))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(te))]),default:t(()=>[o[34]||(o[34]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:w(["sidebar-footer",{collapsed:u.value}])},[e(ce,{status:ae.value},null,8,["status"]),u.value?S("",!0):(i(),r("span",Ke,g(ie.value),1))],2)]),_:1},8,["collapsed"]),e(R,{class:"main-area"},{default:t(()=>[e(ye,{class:"app-header"},{default:t(()=>[a("div",Pe,[a("div",{class:w(["scope-tag",p.value?"project":"global"])},[(i(),f(be(p.value?s(B):s(x)))),a("span",null,g(p.value?s(y).projectName||"项目":"全局模式"),1),p.value&&s(y).projectRoot?(i(),f(N,{key:0,title:s(y).projectRoot},{default:t(()=>[e(s(Be),{class:"info-icon"})]),_:1},8,["title"])):S("",!0)],2)]),a("div",Ae,[a("div",Ge,[(i(!0),r(j,null,Oe(s(Te),(_,C)=>(i(),f(N,{key:C,title:_.label},{default:t(()=>[a("button",{class:w(["theme-btn",{active:ne.value===C}]),"data-theme-key":C,onClick:Ve=>de(C)},g(_.icon),11,Ie)]),_:2},1032,["title"]))),128))]),o[35]||(o[35]=a("span",{class:"version-tag"},"v5.0.2.9",-1)),e(me,{color:O.value==="connected"?"green":O.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(g(O.value==="connected"?"已连接":O.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(_e,{class:"page-content"},{default:t(()=>[e(ke)]),_:1})]),_:1})]),_:1})}}},Xe=Se(We,[["__scopeId","data-v-2d496e96"]]);export{Xe as default};
@@ -1 +1 @@
1
- import{u as Me}from"./ws-B4fo9ew1.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as Le,J as me,i as re,O as N,a4 as U,a2 as Te}from"./antd-BQNxIyr-.js";import{o as je,a3 as s,a1 as p,k as a,Z as o,f as n,X as y,Y as l,G as f,u as v,W as b,a4 as r,a5 as u,F as Re}from"./vendor-CN0Iv_qZ.js";const De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ee={key:0,style:{"text-align":"center",padding:"30px"}},Ue={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Je={key:1},Ke={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={key:3,style:{"margin-top":"16px"}},Ge={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},We={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},He={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},Xe={style:{"font-family":"monospace"}},Ye={key:0},Ze={key:1,style:{"margin-top":"12px"}},qe={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Qe={key:0,style:{"text-align":"center",padding:"30px"}},et={key:0,style:{"margin-bottom":"16px"}},tt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},at={key:0,style:{"font-family":"monospace","font-size":"12px"}},ot={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},lt={key:0,style:{"text-align":"center",padding:"30px"}},nt={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},st={key:0,style:{"text-align":"center",padding:"30px"}},rt={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},it={key:1},ut={key:2},ct={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},dt={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},pt={key:0,style:{"margin-top":"12px"}},vt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},yt={__name:"Backup",setup(ft){const g=Me(),ie=n("backup"),J=n(!1),K=n(!1),V=n(!1),B=n(""),w=n([]),_=n(""),be=[{title:"备份 ID",key:"id"},{title:"大小",key:"size",width:120},{title:"创建时间",key:"createdAt"},{title:"操作",key:"action",width:100}];async function ue(){K.value=!0,B.value="";try{const{output:t}=await g.execute("backup list --json",15e3),e=M(t);Array.isArray(e)?w.value=e:e&&Array.isArray(e.backups)?w.value=e.backups:(w.value=[],t&&t.trim()&&(_.value=t))}catch(t){B.value=`加载备份列表失败: ${t.message}`}finally{K.value=!1}}async function xe(){V.value=!0,_.value="",B.value="";try{const{output:t}=await g.execute("backup create --json",3e4);_.value=t||"备份已创建",await ue()}catch(t){_.value=`创建备份失败: ${t.message}`}finally{V.value=!1}}const G=n(!1),W=n(!1),k=n(null),z=n("");function _e(t){k.value=t,z.value="",G.value=!0}async function ke(){if(k.value){W.value=!0,z.value="";try{const{output:t}=await g.execute(`backup restore ${k.value.id}`,6e4);z.value=t||"恢复完成"}catch(t){z.value=`恢复失败: ${t.message}`}finally{W.value=!1}}}const H=n(!1),L=n(""),I=n(!1),T=n("未知"),j=n(0),X=n(""),x=n(""),Y=n(!1),Z=n(!1),S=n([]),he=[{title:"文件路径",key:"path"},{title:"冲突类型",key:"type",width:120}];async function q(){H.value=!0,L.value="";try{const{output:t}=await g.execute("sync status --json",15e3),e=M(t);e?(I.value=e.online||e.synced||e.status==="online"||!1,T.value=I.value?"已同步":"未同步",j.value=e.pending??e.pendingChanges??0,X.value=e.lastSync||e.lastSyncTime||""):we(t)}catch(t){L.value=`加载同步状态失败: ${t.message}`}finally{H.value=!1}}function we(t){if(!t){T.value="未知";return}I.value=/synced|online|up.to.date/i.test(t),T.value=I.value?"已同步":"未同步";const e=t.match(/pending[:\s]+(\d+)/i);j.value=e?parseInt(e[1]):0;const c=t.match(/last[:\s]+(.+)/i);c&&(X.value=c[1].trim())}async function ze(){Y.value=!0,x.value="";try{const{output:t}=await g.execute("sync push",3e4);x.value=t||"推送完成",await q()}catch(t){x.value=`推送失败: ${t.message}`}finally{Y.value=!1}}async function Se(){Z.value=!0,x.value="";try{const{output:t}=await g.execute("sync pull",3e4);x.value=t||"拉取完成",await q()}catch(t){x.value=`拉取失败: ${t.message}`}finally{Z.value=!1}}async function Ce(){try{const{output:t}=await g.execute("sync conflicts --json",15e3),e=M(t);Array.isArray(e)?S.value=e:e&&Array.isArray(e.conflicts)?S.value=e.conflicts:S.value=[]}catch{S.value=[]}}const Q=n(!1),R=n(""),C=n(!1),ee=n(""),te=n(!1),O=n(""),A=n([]),Ae=[{title:"CID",key:"cid"},{title:"名称",key:"name"},{title:"大小",key:"size",width:120},{title:"固定时间",key:"pinnedAt"},{title:"操作",key:"action",width:120}];async function Pe(){Q.value=!0,R.value="";try{const{output:t}=await g.execute("ipfs status --json",15e3),e=M(t);if(e)C.value=e.online||e.status==="online"||e.connected||!1,ee.value=e.peerId||e.id||"";else{C.value=t?/online|connected|running/i.test(t):!1;const c=t?t.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;ee.value=c?c[1]:""}}catch(t){R.value=`加载 IPFS 状态失败: ${t.message}`}finally{Q.value=!1}}async function ae(){te.value=!0,O.value="";try{const{output:t}=await g.execute("ipfs pins --json",15e3),e=M(t);Array.isArray(e)?A.value=e:e&&Array.isArray(e.pins)?A.value=e.pins:A.value=[]}catch(t){O.value=`加载固定列表失败: ${t.message}`}finally{te.value=!1}}const oe=n(!1),le=n(!1),D=n(""),F=n("");async function ce(){if(D.value.trim()){le.value=!0,F.value="";try{const{output:t}=await g.execute(`ipfs pin "${D.value.trim()}"`,3e4);F.value=t||"固定成功",await ae()}catch(t){F.value=`固定失败: ${t.message}`}finally{le.value=!1}}}async function $e(t){try{await g.execute(`ipfs unpin ${t.cid}`,15e3),await ae()}catch(e){O.value=`取消固定失败: ${e.message}`}}function M(t){if(!t||!t.trim())return null;try{return JSON.parse(t.trim())}catch{const c=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(c)try{return JSON.parse(c[0])}catch{}return null}}function de(t){if(t==null||isNaN(t))return"-";const e=Number(t);if(e===0)return"0 B";const c=["B","KB","MB","GB","TB"],h=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,h)).toFixed(h>0?1:0)+" "+c[h]}async function pe(){J.value=!0;try{await Promise.all([ue(),q(),Ce(),Pe(),ae()])}finally{J.value=!1}}return je(pe),(t,e)=>{const c=y("a-button"),h=y("a-space"),E=y("a-spin"),ve=y("a-empty"),ne=y("a-table"),m=y("a-card"),ye=y("a-modal"),se=y("a-tab-pane"),P=y("a-statistic"),$=y("a-col"),fe=y("a-row"),ge=y("a-tag"),Be=y("a-popconfirm"),Ie=y("a-input"),Oe=y("a-tabs");return l(),s("div",null,[p("div",De,[e[6]||(e[6]=p("div",null,[p("h2",{class:"page-title"},"备份与同步"),p("p",{class:"page-sub"},"备份管理 / 数据同步 / IPFS")],-1)),a(c,{type:"primary",ghost:"",loading:J.value,onClick:pe},{icon:o(()=>[a(v(Le))]),default:o(()=>[e[5]||(e[5]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Oe,{activeKey:ie.value,"onUpdate:activeKey":e[4]||(e[4]=i=>ie.value=i),type:"card"},{default:o(()=>[a(se,{key:"backup"},{tab:o(()=>[a(v(re)),e[7]||(e[7]=f(" 备份管理",-1))]),default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:o(()=>[a(h,null,{default:o(()=>[a(v(re)),e[8]||(e[8]=p("span",null,"备份操作",-1))]),_:1})]),extra:o(()=>[a(c,{type:"primary",loading:V.value,onClick:xe},{icon:o(()=>[a(v(me))]),default:o(()=>[e[9]||(e[9]=f(" 创建备份 ",-1))]),_:1},8,["loading"])]),default:o(()=>[K.value?(l(),s("div",Ee,[a(E)])):w.value.length===0&&!_.value?(l(),b(ve,{key:1,description:"暂无备份记录"})):r("",!0),w.value.length>0?(l(),b(ne,{key:2,columns:be,"data-source":w.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:o(({column:i,record:d})=>[i.key==="id"?(l(),s("span",Ue,u(d.id.length>20?d.id.slice(0,20)+"...":d.id),1)):r("",!0),i.key==="size"?(l(),s("span",Je,u(de(d.size)),1)):r("",!0),i.key==="createdAt"?(l(),s("span",Ke,u(d.createdAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(c,{key:3,size:"small",type:"link",onClick:Fe=>_e(d)},{default:o(()=>[...e[10]||(e[10]=[f(" 恢复 ",-1)])]),_:1},8,["onClick"])):r("",!0)]),_:1},8,["data-source"])):r("",!0),_.value?(l(),s("div",Ve,[e[11]||(e[11]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"最近操作结果",-1)),p("pre",Ge,u(_.value),1)])):r("",!0),B.value?(l(),s("div",We,u(B.value),1)):r("",!0)]),_:1}),a(ye,{open:G.value,"onUpdate:open":e[0]||(e[0]=i=>G.value=i),title:"确认恢复备份","ok-text":"确认恢复","cancel-text":"取消","confirm-loading":W.value,onOk:ke,"ok-type":"danger"},{default:o(()=>[e[15]||(e[15]=p("p",{style:{color:"var(--text-secondary)"}}," 确定要恢复以下备份吗?此操作将覆盖当前数据。 ",-1)),k.value?(l(),s("div",He,[p("div",null,[e[12]||(e[12]=p("strong",null,"备份 ID:",-1)),e[13]||(e[13]=f()),p("span",Xe,u(k.value.id),1)]),k.value.createdAt?(l(),s("div",Ye,[e[14]||(e[14]=p("strong",null,"创建时间:",-1)),f(" "+u(k.value.createdAt),1)])):r("",!0)])):r("",!0),z.value?(l(),s("div",Ze,[p("pre",qe,u(z.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),a(se,{key:"sync"},{tab:o(()=>[a(v(N)),e[16]||(e[16]=f(" 数据同步",-1))]),default:o(()=>[H.value?(l(),s("div",Qe,[a(E)])):(l(),s(Re,{key:1},[a(fe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"同步状态",value:T.value,"value-style":{color:I.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"待同步变更",value:j.value,"value-style":{color:j.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"最近同步",value:X.value||"无","value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a(h,{style:{"margin-bottom":"16px"}},{default:o(()=>[a(c,{loading:Y.value,onClick:ze,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(re))]),default:o(()=>[e[17]||(e[17]=f(" 推送 ",-1))]),_:1},8,["loading"]),a(c,{loading:Z.value,onClick:Se,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(N))]),default:o(()=>[e[18]||(e[18]=f(" 拉取 ",-1))]),_:1},8,["loading"])]),_:1}),x.value?(l(),s("div",et,[e[19]||(e[19]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"操作结果",-1)),p("pre",tt,u(x.value),1)])):r("",!0),S.value.length>0?(l(),b(m,{key:1,title:"冲突列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(ne,{columns:he,"data-source":S.value,pagination:!1,size:"small","row-key":"path"},{bodyCell:o(({column:i,record:d})=>[i.key==="path"?(l(),s("span",at,u(d.path),1)):r("",!0),i.key==="type"?(l(),b(ge,{key:1,color:"red"},{default:o(()=>[f(u(d.type||"冲突"),1)]),_:2},1024)):r("",!0)]),_:1},8,["data-source"])]),_:1})):r("",!0)],64)),L.value?(l(),s("div",ot,u(L.value),1)):r("",!0)]),_:1}),a(se,{key:"ipfs"},{tab:o(()=>[a(v(U)),e[20]||(e[20]=f(" IPFS 存储",-1))]),default:o(()=>[a(m,{title:"IPFS 状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(ge,{color:C.value?"green":"default"},{default:o(()=>[f(u(C.value?"在线":"离线"),1)]),_:1},8,["color"])]),default:o(()=>[Q.value?(l(),s("div",lt,[a(E)])):(l(),b(fe,{key:1,gutter:[16,16]},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"节点状态",value:C.value?"已连接":"未连接","value-style":{color:C.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"已固定文件",value:A.value.length,"value-style":{fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"Peer ID",value:ee.value||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1})),R.value?(l(),s("div",nt,u(R.value),1)):r("",!0)]),_:1}),a(m,{title:"固定文件列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{size:"small",onClick:e[1]||(e[1]=i=>oe.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(me))]),default:o(()=>[e[21]||(e[21]=f(" 固定文件 ",-1))]),_:1})]),default:o(()=>[te.value?(l(),s("div",st,[a(E)])):A.value.length===0?(l(),b(ve,{key:1,description:"暂无固定文件"})):(l(),b(ne,{key:2,columns:Ae,"data-source":A.value,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:o(({column:i,record:d})=>[i.key==="cid"?(l(),s("span",rt,u(d.cid.length>24?d.cid.slice(0,24)+"...":d.cid),1)):r("",!0),i.key==="name"?(l(),s("span",it,u(d.name||"-"),1)):r("",!0),i.key==="size"?(l(),s("span",ut,u(de(d.size)),1)):r("",!0),i.key==="pinnedAt"?(l(),s("span",ct,u(d.pinnedAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(Be,{key:4,title:"确定取消固定?","ok-text":"确定","cancel-text":"取消",onConfirm:Fe=>$e(d)},{default:o(()=>[a(c,{size:"small",type:"link",danger:""},{default:o(()=>[a(v(Te)),e[22]||(e[22]=f(" 取消固定 ",-1))]),_:1})]),_:1},8,["onConfirm"])):r("",!0)]),_:1},8,["data-source"])),O.value?(l(),s("div",dt,u(O.value),1)):r("",!0)]),_:1}),a(ye,{open:oe.value,"onUpdate:open":e[3]||(e[3]=i=>oe.value=i),title:"固定文件到 IPFS","confirm-loading":le.value,onOk:ce,"ok-text":"固定","cancel-text":"取消"},{default:o(()=>[e[23]||(e[23]=p("div",{style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},"请输入要固定的文件路径",-1)),a(Ie,{value:D.value,"onUpdate:value":e[2]||(e[2]=i=>D.value=i),placeholder:"文件路径,例如: /path/to/file.txt",onPressEnter:ce},null,8,["value"]),F.value?(l(),s("div",pt,[p("pre",vt,u(F.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},_t=Ne(yt,[["__scopeId","data-v-3d5d81e6"]]);export{_t as default};
1
+ import{u as Me}from"./ws-Dma34ig_.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{p as Le,N as me,i as re,Q as N,a5 as U,a3 as Te}from"./antd-D6h4fDFf.js";import{o as je,a3 as s,a1 as p,k as a,Z as o,f as n,X as y,Y as l,G as f,u as v,W as b,a4 as r,a5 as u,F as Re}from"./vendor-CN0Iv_qZ.js";const De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ee={key:0,style:{"text-align":"center",padding:"30px"}},Ue={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Ke={key:1},Ve={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Je={key:3,style:{"margin-top":"16px"}},Ge={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},We={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},He={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},Qe={style:{"font-family":"monospace"}},Xe={key:0},Ye={key:1,style:{"margin-top":"12px"}},Ze={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},qe={key:0,style:{"text-align":"center",padding:"30px"}},et={key:0,style:{"margin-bottom":"16px"}},tt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},at={key:0,style:{"font-family":"monospace","font-size":"12px"}},ot={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},lt={key:0,style:{"text-align":"center",padding:"30px"}},nt={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},st={key:0,style:{"text-align":"center",padding:"30px"}},rt={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},it={key:1},ut={key:2},ct={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},dt={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},pt={key:0,style:{"margin-top":"12px"}},vt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},yt={__name:"Backup",setup(ft){const g=Me(),ie=n("backup"),K=n(!1),V=n(!1),J=n(!1),B=n(""),w=n([]),_=n(""),be=[{title:"备份 ID",key:"id"},{title:"大小",key:"size",width:120},{title:"创建时间",key:"createdAt"},{title:"操作",key:"action",width:100}];async function ue(){V.value=!0,B.value="";try{const{output:t}=await g.execute("backup list --json",15e3),e=M(t);Array.isArray(e)?w.value=e:e&&Array.isArray(e.backups)?w.value=e.backups:(w.value=[],t&&t.trim()&&(_.value=t))}catch(t){B.value=`加载备份列表失败: ${t.message}`}finally{V.value=!1}}async function xe(){J.value=!0,_.value="",B.value="";try{const{output:t}=await g.execute("backup create --json",3e4);_.value=t||"备份已创建",await ue()}catch(t){_.value=`创建备份失败: ${t.message}`}finally{J.value=!1}}const G=n(!1),W=n(!1),k=n(null),z=n("");function _e(t){k.value=t,z.value="",G.value=!0}async function ke(){if(k.value){W.value=!0,z.value="";try{const{output:t}=await g.execute(`backup restore ${k.value.id}`,6e4);z.value=t||"恢复完成"}catch(t){z.value=`恢复失败: ${t.message}`}finally{W.value=!1}}}const H=n(!1),L=n(""),I=n(!1),T=n("未知"),j=n(0),Q=n(""),x=n(""),X=n(!1),Y=n(!1),S=n([]),he=[{title:"文件路径",key:"path"},{title:"冲突类型",key:"type",width:120}];async function Z(){H.value=!0,L.value="";try{const{output:t}=await g.execute("sync status --json",15e3),e=M(t);e?(I.value=e.online||e.synced||e.status==="online"||!1,T.value=I.value?"已同步":"未同步",j.value=e.pending??e.pendingChanges??0,Q.value=e.lastSync||e.lastSyncTime||""):we(t)}catch(t){L.value=`加载同步状态失败: ${t.message}`}finally{H.value=!1}}function we(t){if(!t){T.value="未知";return}I.value=/synced|online|up.to.date/i.test(t),T.value=I.value?"已同步":"未同步";const e=t.match(/pending[:\s]+(\d+)/i);j.value=e?parseInt(e[1]):0;const c=t.match(/last[:\s]+(.+)/i);c&&(Q.value=c[1].trim())}async function ze(){X.value=!0,x.value="";try{const{output:t}=await g.execute("sync push",3e4);x.value=t||"推送完成",await Z()}catch(t){x.value=`推送失败: ${t.message}`}finally{X.value=!1}}async function Se(){Y.value=!0,x.value="";try{const{output:t}=await g.execute("sync pull",3e4);x.value=t||"拉取完成",await Z()}catch(t){x.value=`拉取失败: ${t.message}`}finally{Y.value=!1}}async function Ce(){try{const{output:t}=await g.execute("sync conflicts --json",15e3),e=M(t);Array.isArray(e)?S.value=e:e&&Array.isArray(e.conflicts)?S.value=e.conflicts:S.value=[]}catch{S.value=[]}}const q=n(!1),R=n(""),C=n(!1),ee=n(""),te=n(!1),O=n(""),A=n([]),Ae=[{title:"CID",key:"cid"},{title:"名称",key:"name"},{title:"大小",key:"size",width:120},{title:"固定时间",key:"pinnedAt"},{title:"操作",key:"action",width:120}];async function Pe(){q.value=!0,R.value="";try{const{output:t}=await g.execute("ipfs status --json",15e3),e=M(t);if(e)C.value=e.online||e.status==="online"||e.connected||!1,ee.value=e.peerId||e.id||"";else{C.value=t?/online|connected|running/i.test(t):!1;const c=t?t.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;ee.value=c?c[1]:""}}catch(t){R.value=`加载 IPFS 状态失败: ${t.message}`}finally{q.value=!1}}async function ae(){te.value=!0,O.value="";try{const{output:t}=await g.execute("ipfs pins --json",15e3),e=M(t);Array.isArray(e)?A.value=e:e&&Array.isArray(e.pins)?A.value=e.pins:A.value=[]}catch(t){O.value=`加载固定列表失败: ${t.message}`}finally{te.value=!1}}const oe=n(!1),le=n(!1),D=n(""),F=n("");async function ce(){if(D.value.trim()){le.value=!0,F.value="";try{const{output:t}=await g.execute(`ipfs pin "${D.value.trim()}"`,3e4);F.value=t||"固定成功",await ae()}catch(t){F.value=`固定失败: ${t.message}`}finally{le.value=!1}}}async function $e(t){try{await g.execute(`ipfs unpin ${t.cid}`,15e3),await ae()}catch(e){O.value=`取消固定失败: ${e.message}`}}function M(t){if(!t||!t.trim())return null;try{return JSON.parse(t.trim())}catch{const c=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(c)try{return JSON.parse(c[0])}catch{}return null}}function de(t){if(t==null||isNaN(t))return"-";const e=Number(t);if(e===0)return"0 B";const c=["B","KB","MB","GB","TB"],h=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,h)).toFixed(h>0?1:0)+" "+c[h]}async function pe(){K.value=!0;try{await Promise.all([ue(),Z(),Ce(),Pe(),ae()])}finally{K.value=!1}}return je(pe),(t,e)=>{const c=y("a-button"),h=y("a-space"),E=y("a-spin"),ve=y("a-empty"),ne=y("a-table"),m=y("a-card"),ye=y("a-modal"),se=y("a-tab-pane"),P=y("a-statistic"),$=y("a-col"),fe=y("a-row"),ge=y("a-tag"),Be=y("a-popconfirm"),Ie=y("a-input"),Oe=y("a-tabs");return l(),s("div",null,[p("div",De,[e[6]||(e[6]=p("div",null,[p("h2",{class:"page-title"},"备份与同步"),p("p",{class:"page-sub"},"备份管理 / 数据同步 / IPFS")],-1)),a(c,{type:"primary",ghost:"",loading:K.value,onClick:pe},{icon:o(()=>[a(v(Le))]),default:o(()=>[e[5]||(e[5]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Oe,{activeKey:ie.value,"onUpdate:activeKey":e[4]||(e[4]=i=>ie.value=i),type:"card"},{default:o(()=>[a(se,{key:"backup"},{tab:o(()=>[a(v(re)),e[7]||(e[7]=f(" 备份管理",-1))]),default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:o(()=>[a(h,null,{default:o(()=>[a(v(re)),e[8]||(e[8]=p("span",null,"备份操作",-1))]),_:1})]),extra:o(()=>[a(c,{type:"primary",loading:J.value,onClick:xe},{icon:o(()=>[a(v(me))]),default:o(()=>[e[9]||(e[9]=f(" 创建备份 ",-1))]),_:1},8,["loading"])]),default:o(()=>[V.value?(l(),s("div",Ee,[a(E)])):w.value.length===0&&!_.value?(l(),b(ve,{key:1,description:"暂无备份记录"})):r("",!0),w.value.length>0?(l(),b(ne,{key:2,columns:be,"data-source":w.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:o(({column:i,record:d})=>[i.key==="id"?(l(),s("span",Ue,u(d.id.length>20?d.id.slice(0,20)+"...":d.id),1)):r("",!0),i.key==="size"?(l(),s("span",Ke,u(de(d.size)),1)):r("",!0),i.key==="createdAt"?(l(),s("span",Ve,u(d.createdAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(c,{key:3,size:"small",type:"link",onClick:Fe=>_e(d)},{default:o(()=>[...e[10]||(e[10]=[f(" 恢复 ",-1)])]),_:1},8,["onClick"])):r("",!0)]),_:1},8,["data-source"])):r("",!0),_.value?(l(),s("div",Je,[e[11]||(e[11]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"最近操作结果",-1)),p("pre",Ge,u(_.value),1)])):r("",!0),B.value?(l(),s("div",We,u(B.value),1)):r("",!0)]),_:1}),a(ye,{open:G.value,"onUpdate:open":e[0]||(e[0]=i=>G.value=i),title:"确认恢复备份","ok-text":"确认恢复","cancel-text":"取消","confirm-loading":W.value,onOk:ke,"ok-type":"danger"},{default:o(()=>[e[15]||(e[15]=p("p",{style:{color:"var(--text-secondary)"}}," 确定要恢复以下备份吗?此操作将覆盖当前数据。 ",-1)),k.value?(l(),s("div",He,[p("div",null,[e[12]||(e[12]=p("strong",null,"备份 ID:",-1)),e[13]||(e[13]=f()),p("span",Qe,u(k.value.id),1)]),k.value.createdAt?(l(),s("div",Xe,[e[14]||(e[14]=p("strong",null,"创建时间:",-1)),f(" "+u(k.value.createdAt),1)])):r("",!0)])):r("",!0),z.value?(l(),s("div",Ye,[p("pre",Ze,u(z.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),a(se,{key:"sync"},{tab:o(()=>[a(v(N)),e[16]||(e[16]=f(" 数据同步",-1))]),default:o(()=>[H.value?(l(),s("div",qe,[a(E)])):(l(),s(Re,{key:1},[a(fe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"同步状态",value:T.value,"value-style":{color:I.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"待同步变更",value:j.value,"value-style":{color:j.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"最近同步",value:Q.value||"无","value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a(h,{style:{"margin-bottom":"16px"}},{default:o(()=>[a(c,{loading:X.value,onClick:ze,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(re))]),default:o(()=>[e[17]||(e[17]=f(" 推送 ",-1))]),_:1},8,["loading"]),a(c,{loading:Y.value,onClick:Se,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(N))]),default:o(()=>[e[18]||(e[18]=f(" 拉取 ",-1))]),_:1},8,["loading"])]),_:1}),x.value?(l(),s("div",et,[e[19]||(e[19]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"操作结果",-1)),p("pre",tt,u(x.value),1)])):r("",!0),S.value.length>0?(l(),b(m,{key:1,title:"冲突列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(ne,{columns:he,"data-source":S.value,pagination:!1,size:"small","row-key":"path"},{bodyCell:o(({column:i,record:d})=>[i.key==="path"?(l(),s("span",at,u(d.path),1)):r("",!0),i.key==="type"?(l(),b(ge,{key:1,color:"red"},{default:o(()=>[f(u(d.type||"冲突"),1)]),_:2},1024)):r("",!0)]),_:1},8,["data-source"])]),_:1})):r("",!0)],64)),L.value?(l(),s("div",ot,u(L.value),1)):r("",!0)]),_:1}),a(se,{key:"ipfs"},{tab:o(()=>[a(v(U)),e[20]||(e[20]=f(" IPFS 存储",-1))]),default:o(()=>[a(m,{title:"IPFS 状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(ge,{color:C.value?"green":"default"},{default:o(()=>[f(u(C.value?"在线":"离线"),1)]),_:1},8,["color"])]),default:o(()=>[q.value?(l(),s("div",lt,[a(E)])):(l(),b(fe,{key:1,gutter:[16,16]},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"节点状态",value:C.value?"已连接":"未连接","value-style":{color:C.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"已固定文件",value:A.value.length,"value-style":{fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"Peer ID",value:ee.value||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1})),R.value?(l(),s("div",nt,u(R.value),1)):r("",!0)]),_:1}),a(m,{title:"固定文件列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{size:"small",onClick:e[1]||(e[1]=i=>oe.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(me))]),default:o(()=>[e[21]||(e[21]=f(" 固定文件 ",-1))]),_:1})]),default:o(()=>[te.value?(l(),s("div",st,[a(E)])):A.value.length===0?(l(),b(ve,{key:1,description:"暂无固定文件"})):(l(),b(ne,{key:2,columns:Ae,"data-source":A.value,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:o(({column:i,record:d})=>[i.key==="cid"?(l(),s("span",rt,u(d.cid.length>24?d.cid.slice(0,24)+"...":d.cid),1)):r("",!0),i.key==="name"?(l(),s("span",it,u(d.name||"-"),1)):r("",!0),i.key==="size"?(l(),s("span",ut,u(de(d.size)),1)):r("",!0),i.key==="pinnedAt"?(l(),s("span",ct,u(d.pinnedAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(Be,{key:4,title:"确定取消固定?","ok-text":"确定","cancel-text":"取消",onConfirm:Fe=>$e(d)},{default:o(()=>[a(c,{size:"small",type:"link",danger:""},{default:o(()=>[a(v(Te)),e[22]||(e[22]=f(" 取消固定 ",-1))]),_:1})]),_:1},8,["onConfirm"])):r("",!0)]),_:1},8,["data-source"])),O.value?(l(),s("div",dt,u(O.value),1)):r("",!0)]),_:1}),a(ye,{open:oe.value,"onUpdate:open":e[3]||(e[3]=i=>oe.value=i),title:"固定文件到 IPFS","confirm-loading":le.value,onOk:ce,"ok-text":"固定","cancel-text":"取消"},{default:o(()=>[e[23]||(e[23]=p("div",{style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},"请输入要固定的文件路径",-1)),a(Ie,{value:D.value,"onUpdate:value":e[2]||(e[2]=i=>D.value=i),placeholder:"文件路径,例如: /path/to/file.txt",onPressEnter:ce},null,8,["value"]),F.value?(l(),s("div",pt,[p("pre",vt,u(F.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},_t=Ne(yt,[["__scopeId","data-v-3d5d81e6"]]);export{_t as default};
@@ -1 +1 @@
1
- import{w as G,o as Q,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 R,A as V,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-BeVIhIzs.js";/* empty css */import{u as K}from"./chat-BwUxWn7i.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as P,G as U,M as W,q as X,u as Y}from"./antd-BQNxIyr-.js";import"./ws-B4fo9ew1.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 G([O,w],()=>{J(()=>{_.value&&(_.value.scrollTop=_.value.scrollHeight)})},{deep:!0}),Q(()=>{l.loadSessions()}),(a,e)=>{const v=f("a-button"),E=f("a-collapse-panel"),F=f("a-collapse"),q=f("a-input-search"),B=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(q,{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(B,{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:R(V(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)])])}}},qe=D(Le,[["__scopeId","data-v-8392b2d7"]]);export{qe as default};
1
+ import{w as G,o as Q,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 R,A as V,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-BZsB-Dsv.js";/* empty css */import{u as K}from"./chat-BYmuDvol.js";import{_ as D}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as P,G as U,M as W,q as X,u as Y}from"./antd-D6h4fDFf.js";import"./ws-Dma34ig_.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 G([O,w],()=>{J(()=>{_.value&&(_.value.scrollTop=_.value.scrollHeight)})},{deep:!0}),Q(()=>{l.loadSessions()}),(a,e)=>{const v=f("a-button"),E=f("a-collapse-panel"),F=f("a-collapse"),q=f("a-input-search"),B=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(q,{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(B,{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:R(V(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)])])}}},qe=D(Le,[["__scopeId","data-v-8392b2d7"]]);export{qe as default};
@@ -0,0 +1,7 @@
1
+ import{V as Tn,w as tn,f as I,c as He,o as En,a3 as T,a1 as f,k as N,u as r,F as ie,a7 as le,a2 as ke,A as lt,a5 as v,a4 as V,G as Q,W as te,a6 as rt,Z as W,a9 as An,X as _e,Y as p,n as Wt}from"./vendor-CN0Iv_qZ.js";import{m as Yt,H as ct}from"./markdown-BZsB-Dsv.js";/* empty css */import{u as ut}from"./ws-Dma34ig_.js";import{u as he}from"./chat-BYmuDvol.js";import{_ as yn}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as Me,T as vn,v as $t,H as Sn,o as On,G as Rn,r as bn,j as wn,w as Cn,x as Dn,m as Ln,y as kn,b as Mn,s as In,u as xn}from"./antd-D6h4fDFf.js";const{entries:nn,setPrototypeOf:Vt,isFrozen:Nn,getPrototypeOf:Pn,getOwnPropertyDescriptor:Fn}=Object;let{freeze:F,seal:Y,create:Ue}=Object,{apply:gt,construct:Tt}=typeof Reflect<"u"&&Reflect;F||(F=function(t){return t});Y||(Y=function(t){return t});gt||(gt=function(t,c){for(var l=arguments.length,_=new Array(l>2?l-2:0),E=2;E<l;E++)_[E-2]=arguments[E];return t.apply(c,_)});Tt||(Tt=function(t){for(var c=arguments.length,l=new Array(c>1?c-1:0),_=1;_<c;_++)l[_-1]=arguments[_];return new t(...l)});const Ie=U(Array.prototype.forEach),Un=U(Array.prototype.lastIndexOf),Xt=U(Array.prototype.pop),xe=U(Array.prototype.push),Hn=U(Array.prototype.splice),je=U(String.prototype.toLowerCase),ft=U(String.prototype.toString),dt=U(String.prototype.match),ye=U(String.prototype.replace),zn=U(String.prototype.indexOf),Gn=U(String.prototype.trim),X=U(Object.prototype.hasOwnProperty),P=U(RegExp.prototype.test),Ne=Bn(TypeError);function U(u){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var c=arguments.length,l=new Array(c>1?c-1:0),_=1;_<c;_++)l[_-1]=arguments[_];return gt(u,t,l)}}function Bn(u){return function(){for(var t=arguments.length,c=new Array(t),l=0;l<t;l++)c[l]=arguments[l];return Tt(u,c)}}function m(u,t){let c=arguments.length>2&&arguments[2]!==void 0?arguments[2]:je;Vt&&Vt(u,null);let l=t.length;for(;l--;){let _=t[l];if(typeof _=="string"){const E=c(_);E!==_&&(Nn(t)||(t[l]=E),_=E)}u[_]=!0}return u}function Wn(u){for(let t=0;t<u.length;t++)X(u,t)||(u[t]=null);return u}function Z(u){const t=Ue(null);for(const[c,l]of nn(u))X(u,c)&&(Array.isArray(l)?t[c]=Wn(l):l&&typeof l=="object"&&l.constructor===Object?t[c]=Z(l):t[c]=l);return t}function Pe(u,t){for(;u!==null;){const l=Fn(u,t);if(l){if(l.get)return U(l.get);if(typeof l.value=="function")return U(l.value)}u=Pn(u)}function c(){return null}return c}const jt=F(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),pt=F(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),mt=F(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Yn=F(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),_t=F(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),$n=F(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),qt=F(["#text"]),Kt=F(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns","slot"]),ht=F(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Qt=F(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Xe=F(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Vn=Y(/\{\{[\w\W]*|[\w\W]*\}\}/gm),Xn=Y(/<%[\w\W]*|[\w\W]*%>/gm),jn=Y(/\$\{[\w\W]*/gm),qn=Y(/^data-[\-\w.\u00B7-\uFFFF]+$/),Kn=Y(/^aria-[\-\w]+$/),sn=Y(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Qn=Y(/^(?:\w+script|data):/i),Zn=Y(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),an=Y(/^html$/i),Jn=Y(/^[a-z][.\w]*(-[.\w]+)+$/i);var Zt=Object.freeze({__proto__:null,ARIA_ATTR:Kn,ATTR_WHITESPACE:Zn,CUSTOM_ELEMENT:Jn,DATA_ATTR:qn,DOCTYPE_NAME:an,ERB_EXPR:Xn,IS_ALLOWED_URI:sn,IS_SCRIPT_OR_DATA:Qn,MUSTACHE_EXPR:Vn,TMPLIT_EXPR:jn});const Fe={element:1,text:3,progressingInstruction:7,comment:8,document:9},es=function(){return typeof window>"u"?null:window},ts=function(t,c){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let l=null;const _="data-tt-policy-suffix";c&&c.hasAttribute(_)&&(l=c.getAttribute(_));const E="dompurify"+(l?"#"+l:"");try{return t.createPolicy(E,{createHTML(x){return x},createScriptURL(x){return x}})}catch{return console.warn("TrustedTypes policy "+E+" could not be created."),null}},Jt=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function on(){let u=arguments.length>0&&arguments[0]!==void 0?arguments[0]:es();const t=i=>on(i);if(t.version="3.4.0",t.removed=[],!u||!u.document||u.document.nodeType!==Fe.document||!u.Element)return t.isSupported=!1,t;let{document:c}=u;const l=c,_=l.currentScript,{DocumentFragment:E,HTMLTemplateElement:x,Node:S,Element:z,NodeFilter:B,NamedNodeMap:re=u.NamedNodeMap||u.MozNamedAttrMap,HTMLFormElement:ve,DOMParser:ce,trustedTypes:J}=u,j=z.prototype,Se=Pe(j,"cloneNode"),Oe=Pe(j,"remove"),ne=Pe(j,"nextSibling"),ue=Pe(j,"childNodes"),A=Pe(j,"parentNode");if(typeof x=="function"){const i=c.createElement("template");i.content&&i.content.ownerDocument&&(c=i.content.ownerDocument)}let o,C="";const{implementation:fe,createNodeIterator:Re,createDocumentFragment:be,getElementsByTagName:d}=c,{importNode:h}=l;let g=Jt();t.isSupported=typeof nn=="function"&&typeof A=="function"&&fe&&fe.createHTMLDocument!==void 0;const{MUSTACHE_EXPR:a,ERB_EXPR:k,TMPLIT_EXPR:se,DATA_ATTR:ln,ARIA_ATTR:rn,IS_SCRIPT_OR_DATA:cn,ATTR_WHITESPACE:Et,CUSTOM_ELEMENT:un}=Zt;let{IS_ALLOWED_URI:At}=Zt,w=null;const yt=m({},[...jt,...pt,...mt,..._t,...qt]);let D=null;const vt=m({},[...Kt,...ht,...Qt,...Xe]);let O=Object.seal(Ue(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),we=null,ze=null;const ae=Object.seal(Ue(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let St=!0,qe=!0,Ot=!1,Rt=!0,de=!1,Ce=!0,pe=!1,Ke=!1,Qe=!1,ge=!1,Ge=!1,Be=!1,bt=!0,wt=!1;const fn="user-content-";let Ze=!0,De=!1,Te={},q=null;const Je=m({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Ct=null;const Dt=m({},["audio","video","img","source","image","track"]);let et=null;const Lt=m({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),We="http://www.w3.org/1998/Math/MathML",Ye="http://www.w3.org/2000/svg",K="http://www.w3.org/1999/xhtml";let Ee=K,tt=!1,nt=null;const dn=m({},[We,Ye,K],ft);let $e=m({},["mi","mo","mn","ms","mtext"]),Ve=m({},["annotation-xml"]);const pn=m({},["title","style","font","a","script"]);let Le=null;const mn=["application/xhtml+xml","text/html"],_n="text/html";let b=null,Ae=null;const hn=c.createElement("form"),kt=function(e){return e instanceof RegExp||e instanceof Function},st=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(!(Ae&&Ae===e)){if((!e||typeof e!="object")&&(e={}),e=Z(e),Le=mn.indexOf(e.PARSER_MEDIA_TYPE)===-1?_n:e.PARSER_MEDIA_TYPE,b=Le==="application/xhtml+xml"?ft:je,w=X(e,"ALLOWED_TAGS")?m({},e.ALLOWED_TAGS,b):yt,D=X(e,"ALLOWED_ATTR")?m({},e.ALLOWED_ATTR,b):vt,nt=X(e,"ALLOWED_NAMESPACES")?m({},e.ALLOWED_NAMESPACES,ft):dn,et=X(e,"ADD_URI_SAFE_ATTR")?m(Z(Lt),e.ADD_URI_SAFE_ATTR,b):Lt,Ct=X(e,"ADD_DATA_URI_TAGS")?m(Z(Dt),e.ADD_DATA_URI_TAGS,b):Dt,q=X(e,"FORBID_CONTENTS")?m({},e.FORBID_CONTENTS,b):Je,we=X(e,"FORBID_TAGS")?m({},e.FORBID_TAGS,b):Z({}),ze=X(e,"FORBID_ATTR")?m({},e.FORBID_ATTR,b):Z({}),Te=X(e,"USE_PROFILES")?e.USE_PROFILES:!1,St=e.ALLOW_ARIA_ATTR!==!1,qe=e.ALLOW_DATA_ATTR!==!1,Ot=e.ALLOW_UNKNOWN_PROTOCOLS||!1,Rt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,de=e.SAFE_FOR_TEMPLATES||!1,Ce=e.SAFE_FOR_XML!==!1,pe=e.WHOLE_DOCUMENT||!1,ge=e.RETURN_DOM||!1,Ge=e.RETURN_DOM_FRAGMENT||!1,Be=e.RETURN_TRUSTED_TYPE||!1,Qe=e.FORCE_BODY||!1,bt=e.SANITIZE_DOM!==!1,wt=e.SANITIZE_NAMED_PROPS||!1,Ze=e.KEEP_CONTENT!==!1,De=e.IN_PLACE||!1,At=e.ALLOWED_URI_REGEXP||sn,Ee=e.NAMESPACE||K,$e=e.MATHML_TEXT_INTEGRATION_POINTS||$e,Ve=e.HTML_INTEGRATION_POINTS||Ve,O=e.CUSTOM_ELEMENT_HANDLING||Ue(null),e.CUSTOM_ELEMENT_HANDLING&&kt(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(O.tagNameCheck=e.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&kt(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(O.attributeNameCheck=e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements=="boolean"&&(O.allowCustomizedBuiltInElements=e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),de&&(qe=!1),Ge&&(ge=!0),Te&&(w=m({},qt),D=Ue(null),Te.html===!0&&(m(w,jt),m(D,Kt)),Te.svg===!0&&(m(w,pt),m(D,ht),m(D,Xe)),Te.svgFilters===!0&&(m(w,mt),m(D,ht),m(D,Xe)),Te.mathMl===!0&&(m(w,_t),m(D,Qt),m(D,Xe))),ae.tagCheck=null,ae.attributeCheck=null,e.ADD_TAGS&&(typeof e.ADD_TAGS=="function"?ae.tagCheck=e.ADD_TAGS:(w===yt&&(w=Z(w)),m(w,e.ADD_TAGS,b))),e.ADD_ATTR&&(typeof e.ADD_ATTR=="function"?ae.attributeCheck=e.ADD_ATTR:(D===vt&&(D=Z(D)),m(D,e.ADD_ATTR,b))),e.ADD_URI_SAFE_ATTR&&m(et,e.ADD_URI_SAFE_ATTR,b),e.FORBID_CONTENTS&&(q===Je&&(q=Z(q)),m(q,e.FORBID_CONTENTS,b)),e.ADD_FORBID_CONTENTS&&(q===Je&&(q=Z(q)),m(q,e.ADD_FORBID_CONTENTS,b)),Ze&&(w["#text"]=!0),pe&&m(w,["html","head","body"]),w.table&&(m(w,["tbody"]),delete we.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!="function")throw Ne('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Ne('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');o=e.TRUSTED_TYPES_POLICY,C=o.createHTML("")}else o===void 0&&(o=ts(J,_)),o!==null&&typeof C=="string"&&(C=o.createHTML(""));F&&F(e),Ae=e}},Mt=m({},[...pt,...mt,...Yn]),It=m({},[..._t,...$n]),gn=function(e){let n=A(e);(!n||!n.tagName)&&(n={namespaceURI:Ee,tagName:"template"});const s=je(e.tagName),y=je(n.tagName);return nt[e.namespaceURI]?e.namespaceURI===Ye?n.namespaceURI===K?s==="svg":n.namespaceURI===We?s==="svg"&&(y==="annotation-xml"||$e[y]):!!Mt[s]:e.namespaceURI===We?n.namespaceURI===K?s==="math":n.namespaceURI===Ye?s==="math"&&Ve[y]:!!It[s]:e.namespaceURI===K?n.namespaceURI===Ye&&!Ve[y]||n.namespaceURI===We&&!$e[y]?!1:!It[s]&&(pn[s]||!Mt[s]):!!(Le==="application/xhtml+xml"&&nt[e.namespaceURI]):!1},$=function(e){xe(t.removed,{element:e});try{A(e).removeChild(e)}catch{Oe(e)}},me=function(e,n){try{xe(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{xe(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e==="is")if(ge||Ge)try{$(n)}catch{}else try{n.setAttribute(e,"")}catch{}},xt=function(e){let n=null,s=null;if(Qe)e="<remove></remove>"+e;else{const R=dt(e,/^[\r\n\t ]+/);s=R&&R[0]}Le==="application/xhtml+xml"&&Ee===K&&(e='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+e+"</body></html>");const y=o?o.createHTML(e):e;if(Ee===K)try{n=new ce().parseFromString(y,Le)}catch{}if(!n||!n.documentElement){n=fe.createDocument(Ee,"template",null);try{n.documentElement.innerHTML=tt?C:y}catch{}}const M=n.body||n.documentElement;return e&&s&&M.insertBefore(c.createTextNode(s),M.childNodes[0]||null),Ee===K?d.call(n,pe?"html":"body")[0]:pe?n.documentElement:M},Nt=function(e){return Re.call(e.ownerDocument||e,e,B.SHOW_ELEMENT|B.SHOW_COMMENT|B.SHOW_TEXT|B.SHOW_PROCESSING_INSTRUCTION|B.SHOW_CDATA_SECTION,null)},at=function(e){return e instanceof ve&&(typeof e.nodeName!="string"||typeof e.textContent!="string"||typeof e.removeChild!="function"||!(e.attributes instanceof re)||typeof e.removeAttribute!="function"||typeof e.setAttribute!="function"||typeof e.namespaceURI!="string"||typeof e.insertBefore!="function"||typeof e.hasChildNodes!="function")},ot=function(e){return typeof S=="function"&&e instanceof S};function ee(i,e,n){Ie(i,s=>{s.call(t,e,n,Ae)})}const Pt=function(e){let n=null;if(ee(g.beforeSanitizeElements,e,null),at(e))return $(e),!0;const s=b(e.nodeName);if(ee(g.uponSanitizeElement,e,{tagName:s,allowedTags:w}),Ce&&e.hasChildNodes()&&!ot(e.firstElementChild)&&P(/<[/\w!]/g,e.innerHTML)&&P(/<[/\w!]/g,e.textContent)||Ce&&e.namespaceURI===K&&s==="style"&&ot(e.firstElementChild)||e.nodeType===Fe.progressingInstruction||Ce&&e.nodeType===Fe.comment&&P(/<[/\w]/g,e.data))return $(e),!0;if(we[s]||!(ae.tagCheck instanceof Function&&ae.tagCheck(s))&&!w[s]){if(!we[s]&&Ut(s)&&(O.tagNameCheck instanceof RegExp&&P(O.tagNameCheck,s)||O.tagNameCheck instanceof Function&&O.tagNameCheck(s)))return!1;if(Ze&&!q[s]){const y=A(e)||e.parentNode,M=ue(e)||e.childNodes;if(M&&y){const R=M.length;for(let H=R-1;H>=0;--H){const G=Se(M[H],!0);G.__removalCount=(e.__removalCount||0)+1,y.insertBefore(G,ne(e))}}}return $(e),!0}return e instanceof z&&!gn(e)||(s==="noscript"||s==="noembed"||s==="noframes")&&P(/<\/no(script|embed|frames)/i,e.innerHTML)?($(e),!0):(de&&e.nodeType===Fe.text&&(n=e.textContent,Ie([a,k,se],y=>{n=ye(n,y," ")}),e.textContent!==n&&(xe(t.removed,{element:e.cloneNode()}),e.textContent=n)),ee(g.afterSanitizeElements,e,null),!1)},Ft=function(e,n,s){if(ze[n]||bt&&(n==="id"||n==="name")&&(s in c||s in hn))return!1;if(!(qe&&!ze[n]&&P(ln,n))){if(!(St&&P(rn,n))){if(!(ae.attributeCheck instanceof Function&&ae.attributeCheck(n,e))){if(!D[n]||ze[n]){if(!(Ut(e)&&(O.tagNameCheck instanceof RegExp&&P(O.tagNameCheck,e)||O.tagNameCheck instanceof Function&&O.tagNameCheck(e))&&(O.attributeNameCheck instanceof RegExp&&P(O.attributeNameCheck,n)||O.attributeNameCheck instanceof Function&&O.attributeNameCheck(n,e))||n==="is"&&O.allowCustomizedBuiltInElements&&(O.tagNameCheck instanceof RegExp&&P(O.tagNameCheck,s)||O.tagNameCheck instanceof Function&&O.tagNameCheck(s))))return!1}else if(!et[n]){if(!P(At,ye(s,Et,""))){if(!((n==="src"||n==="xlink:href"||n==="href")&&e!=="script"&&zn(s,"data:")===0&&Ct[e])){if(!(Ot&&!P(cn,ye(s,Et,"")))){if(s)return!1}}}}}}}return!0},Ut=function(e){return e!=="annotation-xml"&&dt(e,un)},Ht=function(e){ee(g.beforeSanitizeAttributes,e,null);const{attributes:n}=e;if(!n||at(e))return;const s={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:D,forceKeepAttr:void 0};let y=n.length;for(;y--;){const M=n[y],{name:R,namespaceURI:H,value:G}=M,oe=b(R),it=G;let L=R==="value"?it:Gn(it);if(s.attrName=oe,s.attrValue=L,s.keepAttr=!0,s.forceKeepAttr=void 0,ee(g.uponSanitizeAttribute,e,s),L=s.attrValue,wt&&(oe==="id"||oe==="name")&&(me(R,e),L=fn+L),Ce&&P(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,L)){me(R,e);continue}if(oe==="attributename"&&dt(L,"href")){me(R,e);continue}if(s.forceKeepAttr)continue;if(!s.keepAttr){me(R,e);continue}if(!Rt&&P(/\/>/i,L)){me(R,e);continue}de&&Ie([a,k,se],Bt=>{L=ye(L,Bt," ")});const Gt=b(e.nodeName);if(!Ft(Gt,oe,L)){me(R,e);continue}if(o&&typeof J=="object"&&typeof J.getAttributeType=="function"&&!H)switch(J.getAttributeType(Gt,oe)){case"TrustedHTML":{L=o.createHTML(L);break}case"TrustedScriptURL":{L=o.createScriptURL(L);break}}if(L!==it)try{H?e.setAttributeNS(H,R,L):e.setAttribute(R,L),at(e)?$(e):Xt(t.removed)}catch{me(R,e)}}ee(g.afterSanitizeAttributes,e,null)},zt=function(e){let n=null;const s=Nt(e);for(ee(g.beforeSanitizeShadowDOM,e,null);n=s.nextNode();)ee(g.uponSanitizeShadowNode,n,null),Pt(n),Ht(n),n.content instanceof E&&zt(n.content);ee(g.afterSanitizeShadowDOM,e,null)};return t.sanitize=function(i){let e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=null,s=null,y=null,M=null;if(tt=!i,tt&&(i="<!-->"),typeof i!="string"&&!ot(i))if(typeof i.toString=="function"){if(i=i.toString(),typeof i!="string")throw Ne("dirty is not a string, aborting")}else throw Ne("toString is not a function");if(!t.isSupported)return i;if(Ke||st(e),t.removed=[],typeof i=="string"&&(De=!1),De){if(i.nodeName){const G=b(i.nodeName);if(!w[G]||we[G])throw Ne("root node is forbidden and cannot be sanitized in-place")}}else if(i instanceof S)n=xt("<!---->"),s=n.ownerDocument.importNode(i,!0),s.nodeType===Fe.element&&s.nodeName==="BODY"||s.nodeName==="HTML"?n=s:n.appendChild(s);else{if(!ge&&!de&&!pe&&i.indexOf("<")===-1)return o&&Be?o.createHTML(i):i;if(n=xt(i),!n)return ge?null:Be?C:""}n&&Qe&&$(n.firstChild);const R=Nt(De?i:n);for(;y=R.nextNode();)Pt(y),Ht(y),y.content instanceof E&&zt(y.content);if(De)return i;if(ge){if(de){n.normalize();let G=n.innerHTML;Ie([a,k,se],oe=>{G=ye(G,oe," ")}),n.innerHTML=G}if(Ge)for(M=be.call(n.ownerDocument);n.firstChild;)M.appendChild(n.firstChild);else M=n;return(D.shadowroot||D.shadowrootmode)&&(M=h.call(l,M,!0)),M}let H=pe?n.outerHTML:n.innerHTML;return pe&&w["!doctype"]&&n.ownerDocument&&n.ownerDocument.doctype&&n.ownerDocument.doctype.name&&P(an,n.ownerDocument.doctype.name)&&(H="<!DOCTYPE "+n.ownerDocument.doctype.name+`>
2
+ `+H),de&&Ie([a,k,se],G=>{H=ye(H,G," ")}),o&&Be?o.createHTML(H):H},t.setConfig=function(){let i=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};st(i),Ke=!0},t.clearConfig=function(){Ae=null,Ke=!1},t.isValidAttribute=function(i,e,n){Ae||st({});const s=b(i),y=b(e);return Ft(s,y,n)},t.addHook=function(i,e){typeof e=="function"&&xe(g[i],e)},t.removeHook=function(i,e){if(e!==void 0){const n=Un(g[i],e);return n===-1?void 0:Hn(g[i],n,1)[0]}return Xt(g[i])},t.removeHooks=function(i){g[i]=[]},t.removeAllHooks=function(){g=Jt()},t}var en=on();const ns=[{id:"doc-convert",name:"文档格式转换",icon:"FileTextOutlined",category:"document",description:"Word、Markdown、HTML、PDF 之间的格式互转",examples:["把 report.docx 转成 PDF","合并多个 Markdown 为一个文档"],acceptsFiles:!0},{id:"media-process",name:"音视频处理",icon:"PlayCircleOutlined",category:"media",description:"视频压缩、音频提取、格式转换、剪辑",examples:["提取 MP4 的音频","压缩视频到 50MB 以内"],acceptsFiles:!0},{id:"data-analysis",name:"数据分析",icon:"BarChartOutlined",category:"data",description:"CSV/Excel 分析、统计、可视化图表",examples:["分析 sales.csv 的月度趋势"],acceptsFiles:!0},{id:"web-research",name:"信息检索与调研",icon:"SearchOutlined",category:"research",description:"网页抓取、API 调用、多源信息汇总",examples:["调研 AI Agent 框架对比"],acceptsFiles:!1},{id:"image-process",name:"图片处理",icon:"PictureOutlined",category:"media",description:"批量压缩、格式转换、加水印、OCR",examples:["批量压缩到 500KB"],acceptsFiles:!0},{id:"code-helper",name:"代码辅助",icon:"CodeOutlined",category:"development",description:"生成脚本、调试代码、自动化任务",examples:["写一个批量重命名脚本"],acceptsFiles:!0},{id:"system-admin",name:"系统运维",icon:"DesktopOutlined",category:"system",description:"磁盘分析、进程管理、日志分析",examples:["查看磁盘使用情况"],acceptsFiles:!1},{id:"file-organize",name:"文件整理",icon:"FolderOpenOutlined",category:"file",description:"批量重命名、分类整理、查找重复",examples:["按文件类型分类整理"],acceptsFiles:!1},{id:"network-tools",name:"网络工具",icon:"GlobalOutlined",category:"network",description:"API 调试、网页抓取、网络诊断",examples:["测试 API 接口"],acceptsFiles:!1},{id:"learning-assist",name:"学习辅助",icon:"ReadOutlined",category:"learning",description:"文档翻译、内容总结、论文分析",examples:["翻译 PDF 摘要"],acceptsFiles:!0}],ss=Tn("cowork",()=>{const u=I(ns),t=I(null),c=I([]),l=I(!1),_=I([]),E=I([]),x=I(null),S=I(null),z=I(null),B=I([]),re=he();tn(()=>re.isLoading,d=>{!d&&S.value&&(l.value=!1)});function ve(d){t.value=d,ce()}function ce(){_.value=[],E.value=[],x.value=null,l.value=!1,S.value=null,z.value=null}function J(d){c.value.includes(d)||c.value.push(d)}function j(d){c.value=c.value.filter(h=>h!==d)}async function Se(){const d=ut();try{await d.waitConnected(5e3);const h=await d.sendRaw({type:"cowork-templates"},1e4);h?.templates?.length&&(u.value=h.templates)}catch{}}async function Oe(){const d=ut();try{await d.waitConnected(5e3);const h=await d.sendRaw({type:"cowork-history",limit:50},1e4);h?.entries&&(B.value=h.entries)}catch{}}async function ne(d){z.value={mode:"session",message:d},l.value=!0;const h=t.value;let g="";h&&(g=`## 当前任务类型: ${h.name}
3
+ ${h.description||""}`);let a=d;c.value.length&&(a+=`
4
+
5
+ [用户提供的文件: ${c.value.join(", ")}]`),E.value.push({role:"user",content:d,timestamp:Date.now()});const k={systemPromptExtension:g};h?.shellPolicyOverrides&&(k.shellPolicyOverrides=h.shellPolicyOverrides);const se=await re.createSession("agent",k);S.value=se,await re.sendMessage(se,a)}async function ue(d){z.value={mode:"direct",message:d};const h=ut();l.value=!0,E.value.push({role:"user",content:d,timestamp:Date.now()});try{await h.waitConnected(8e3);const g=await h.sendRaw({type:"cowork-task",templateId:t.value?.id||null,userMessage:d,files:c.value},3e5);E.value.push({role:"assistant",content:g.summary||"(No output)",timestamp:Date.now(),toolsUsed:g.toolsUsed||[],iterationCount:g.iterationCount||0}),x.value=g}catch(g){E.value.push({role:"assistant",content:`Error: ${g.message}`,timestamp:Date.now()})}finally{l.value=!1}}const A=He(()=>S.value?he().getMessages(S.value):[]),o=He(()=>{if(!S.value)return null;const h=he().streaming[S.value];return h?.active?h.content:null}),C=He(()=>S.value&&he().pendingQuestion[S.value]||null);function fe(d){if(!S.value)return;he().answerQuestion(S.value,d)}async function Re(){if(!z.value)return;const{mode:d,message:h}=z.value;d==="direct"?await ue(h):await ne(h)}async function be(d){if(!S.value)return;const h=he();E.value.push({role:"user",content:d,timestamp:Date.now()});let g=d;c.value.length&&(g+=`
6
+
7
+ [用户提供的文件: ${c.value.join(", ")}]`),await h.sendMessage(S.value,g)}return{selectedTemplate:t,files:c,isRunning:l,steps:_,messages:E,result:x,agentSessionId:S,currentAgentMessages:A,currentStreaming:o,currentQuestion:C,selectTemplate:ve,reset:ce,addFile:J,removeFile:j,execute:ne,executeDirectWs:ue,sendFollowUp:be,answerQuestion:fe,loadTemplates:Se,templates:u,lastRequest:z,retry:Re,history:B,loadHistory:Oe}}),as={class:"cowork-root"},os={class:"template-panel"},is={class:"template-header"},ls={class:"template-list"},rs=["onClick"],cs={class:"card-icon"},us={class:"card-body"},fs={class:"card-name"},ds={class:"card-desc"},ps={class:"card-icon"},ms={class:"drop-text"},_s={key:0,class:"file-list"},hs={key:1,class:"history-section"},gs={key:0,class:"history-list"},Ts={class:"history-summary"},Es={class:"history-meta"},As={class:"exec-panel"},ys={key:0,class:"empty-state"},vs={class:"empty-icon"},Ss={class:"example-grid"},Os=["onClick"],Rs={key:1,class:"ready-state"},bs={class:"ready-header"},ws={class:"ready-name"},Cs={class:"ready-examples"},Ds=["onClick"],Ls={key:0,class:"tool-msg"},ks={class:"tool-input"},Ms={key:0,class:"tool-result-box"},Is={class:"tool-result"},xs={key:1,class:"user-msg"},Ns={class:"bubble user"},Ps={key:2,class:"assistant-msg"},Fs=["innerHTML"],Us={key:0,class:"assistant-msg"},Hs=["innerHTML"],zs={key:1,class:"question-card"},Gs={class:"question-text"},Bs={key:0,class:"question-choices"},Ws={key:3,class:"task-stats"},Ys={class:"input-area"},$s={key:0,class:"input-context"},Vs={class:"input-row"},Xs={__name:"Cowork",setup(u){Yt.setOptions({highlight:(A,o)=>o&&ct.getLanguage(o)?ct.highlight(A,{language:o}).value:ct.highlightAuto(A).value,breaks:!0});const t=ss(),c=he(),l=I(""),_=I(null),E=I(!1),x=I(""),S=I(!1),z=I(!1),B={FileTextOutlined:Mn,PlayCircleOutlined:kn,BarChartOutlined:Ln,SearchOutlined:Dn,PictureOutlined:Cn,CodeOutlined:wn,DesktopOutlined:bn,FolderOpenOutlined:$t,GlobalOutlined:Rn,ReadOutlined:On},re=["把 report.docx 转成 PDF","压缩视频到 50MB","分析 CSV 生成图表","查询今天的汇率","批量压缩图片","写一个自动化脚本"],ve=He(()=>c.isLoading?"等待响应中...":t.selectedTemplate?t.selectedTemplate.examples?.[0]||"描述你的需求...":"描述你想完成的任务,Agent 会帮你搞定"),ce=He(()=>t.currentAgentMessages);function J(A){try{return en.sanitize(Yt(A||""))}catch{return en.sanitize(A||"")}}function j(A){return A.split(/[\\/]/).pop()||A}function Se(A){E.value=!1;const o=A.dataTransfer?.files;if(o)for(const C of o)t.addFile(C.path||C.name)}function Oe(){const A=x.value.trim();A&&(t.addFile(A),x.value="")}async function ne(){const A=l.value.trim();!A||c.isLoading||(l.value="",t.agentSessionId?await t.sendFollowUp(A):await t.execute(A))}function ue(A){l.value=A,Wt(()=>ne())}return tn([ce,()=>t.currentStreaming],()=>{Wt(()=>{_.value&&(_.value.scrollTop=_.value.scrollHeight)})},{deep:!0}),En(()=>{c.loadSessions(),t.loadTemplates(),t.loadHistory()}),(A,o)=>{const C=_e("a-tag"),fe=_e("a-input"),Re=_e("a-collapse-panel"),be=_e("a-collapse"),d=_e("a-button"),h=_e("a-input-search"),g=_e("a-textarea");return p(),T("div",as,[f("div",os,[f("div",is,[N(r(Me),{class:"header-icon"}),o[7]||(o[7]=f("span",{class:"header-title"},"日常协作",-1))]),o[9]||(o[9]=f("div",{class:"template-hint"},"选择任务类型,或直接输入需求",-1)),f("div",ls,[(p(!0),T(ie,null,le(r(t).templates,a=>(p(),T("div",{key:a.id,class:ke(["template-card",{active:r(t).selectedTemplate?.id===a.id}]),onClick:k=>r(t).selectTemplate(a)},[f("div",cs,[(p(),te(rt(B[a.icon]||r(Me))))]),f("div",us,[f("div",fs,v(a.name),1),f("div",ds,v(a.description),1)])],10,rs))),128)),f("div",{class:ke(["template-card free",{active:r(t).selectedTemplate===null&&S.value}]),onClick:o[0]||(o[0]=a=>{r(t).selectTemplate(null),S.value=!0})},[f("div",ps,[N(r(vn))]),o[8]||(o[8]=f("div",{class:"card-body"},[f("div",{class:"card-name"},"自由提问"),f("div",{class:"card-desc"},"任意任务,Agent 自主完成")],-1))],2)]),r(t).selectedTemplate?.acceptsFiles!==!1?(p(),T("div",{key:0,class:ke(["file-zone",{dragging:E.value}]),onDragover:o[2]||(o[2]=lt(a=>E.value=!0,["prevent"])),onDragleave:o[3]||(o[3]=a=>E.value=!1),onDrop:lt(Se,["prevent"])},[N(r($t),{class:"drop-icon"}),f("div",ms,v(E.value?"松开以添加文件":"拖拽文件到此处"),1),r(t).files.length?(p(),T("div",_s,[(p(!0),T(ie,null,le(r(t).files,a=>(p(),te(C,{key:a,closable:"",onClose:k=>r(t).removeFile(a),class:"file-tag"},{default:W(()=>[Q(v(j(a)),1)]),_:2},1032,["onClose"]))),128))])):V("",!0),N(fe,{value:x.value,"onUpdate:value":o[1]||(o[1]=a=>x.value=a),placeholder:"或输入文件路径,按 Enter 添加",size:"small",class:"path-input",onPressEnter:Oe},null,8,["value"])],34)):V("",!0),r(t).history.length?(p(),T("div",hs,[f("div",{class:"history-header",onClick:o[4]||(o[4]=a=>z.value=!z.value)},[N(r(Sn)),Q(" 历史记录 ("+v(r(t).history.length)+") ",1)]),z.value?(p(),T("div",gs,[(p(!0),T(ie,null,le(r(t).history.slice().reverse().slice(0,20),(a,k)=>(p(),T("div",{key:k,class:ke(["history-item",a.status])},[f("div",Ts,v(a.userMessage),1),f("div",Es,[f("span",null,v(a.templateName||"自由模式"),1),f("span",null,v(a.status),1)])],2))),128))])):V("",!0)])):V("",!0)]),f("div",As,[!r(t).agentSessionId&&!r(t).selectedTemplate?(p(),T("div",ys,[f("div",vs,[N(r(Me))]),o[10]||(o[10]=f("div",{class:"empty-title"},"选择一个任务模板开始",-1)),o[11]||(o[11]=f("div",{class:"empty-sub"},"或选择「自由提问」处理任何问题",-1)),f("div",Ss,[(p(),T(ie,null,le(re,a=>f("div",{key:a,class:"example-chip",onClick:k=>ue(a)},v(a),9,Os)),64))])])):r(t).selectedTemplate&&!r(t).agentSessionId?(p(),T("div",Rs,[f("div",bs,[(p(),te(rt(B[r(t).selectedTemplate.icon]||r(Me)),{class:"ready-icon"})),f("span",ws,v(r(t).selectedTemplate.name),1)]),f("div",Cs,[o[12]||(o[12]=f("div",{class:"example-label"},"试试这些:",-1)),(p(!0),T(ie,null,le(r(t).selectedTemplate.examples,a=>(p(),T("div",{key:a,class:"example-chip",onClick:k=>ue(a)},v(a),9,Ds))),128))])])):(p(),T("div",{key:2,class:"messages-area",ref_key:"messagesEl",ref:_},[(p(!0),T(ie,null,le(ce.value,(a,k)=>(p(),T("div",{key:k,class:ke(["message-row",a.role])},[a.role==="tool"?(p(),T("div",Ls,[N(be,{ghost:"",size:"small"},{default:W(()=>[N(Re,{class:"tool-collapse"},{header:W(()=>[N(r(In)),Q(" "+v(a.tool)+" "+v(a.status==="running"?"(执行中...)":"✓"),1)]),default:W(()=>[f("pre",ks,v(JSON.stringify(a.input,null,2)),1),a.result?(p(),T("div",Ms,[f("pre",Is,v(typeof a.result=="string"?a.result:JSON.stringify(a.result,null,2)),1)])):V("",!0)]),_:2},1024)]),_:2},1024)])):a.role==="user"?(p(),T("div",xs,[f("div",Ns,v(a.content),1)])):(p(),T("div",Ps,[o[14]||(o[14]=f("div",{class:"avatar"},"AI",-1)),f("div",{class:"bubble assistant",innerHTML:J(a.content)},null,8,Fs),a.content?.startsWith("Error:")&&!r(t).isRunning&&r(t).lastRequest?(p(),te(d,{key:0,size:"small",type:"link",onClick:o[5]||(o[5]=se=>r(t).retry())},{default:W(()=>[...o[13]||(o[13]=[Q(" 重试 ",-1)])]),_:1})):V("",!0)]))],2))),128)),r(t).currentStreaming?(p(),T("div",Us,[o[15]||(o[15]=f("div",{class:"avatar"},"AI",-1)),f("div",{class:"bubble assistant streaming",innerHTML:J(r(t).currentStreaming)},null,8,Hs)])):V("",!0),r(t).currentQuestion?(p(),T("div",zs,[f("div",Gs,v(r(t).currentQuestion.question),1),r(t).currentQuestion.choices?.length?(p(),T("div",Bs,[(p(!0),T(ie,null,le(r(t).currentQuestion.choices,a=>(p(),te(d,{key:a,size:"small",onClick:k=>r(t).answerQuestion(a)},{default:W(()=>[Q(v(a),1)]),_:2},1032,["onClick"]))),128))])):(p(),te(h,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:r(t).answerQuestion},null,8,["onSearch"]))])):V("",!0)],512)),r(t).result&&!r(t).isRunning?(p(),T("div",Ws,[N(C,{color:"geekblue"},{default:W(()=>[Q(v(r(t).result.iterationCount||0)+" iterations",1)]),_:1}),N(C,{color:"cyan"},{default:W(()=>[Q("~"+v((r(t).result.tokenCount||0).toLocaleString())+" tokens",1)]),_:1}),r(t).result.toolsUsed?.length?(p(),te(C,{key:0,color:"green"},{default:W(()=>[Q(v(r(t).result.toolsUsed.length)+" tools",1)]),_:1})):V("",!0)])):V("",!0),f("div",Ys,[r(t).selectedTemplate?(p(),T("div",$s,[N(C,{color:"blue",class:"context-tag"},{default:W(()=>[(p(),te(rt(B[r(t).selectedTemplate.icon]||r(Me)))),Q(" "+v(r(t).selectedTemplate.name),1)]),_:1}),(p(!0),T(ie,null,le(r(t).files,a=>(p(),te(C,{key:a,class:"context-tag file"},{default:W(()=>[Q(v(j(a)),1)]),_:2},1024))),128))])):V("",!0),f("div",Vs,[N(g,{value:l.value,"onUpdate:value":o[6]||(o[6]=a=>l.value=a),placeholder:ve.value,"auto-size":{minRows:1,maxRows:6},disabled:r(c).isLoading,class:"msg-input",onKeydown:An(lt(ne,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),N(d,{type:"primary",loading:r(c).isLoading,class:"send-btn",onClick:ne},{icon:W(()=>[N(r(xn))]),_:1},8,["loading"])])])])])}}},ta=yn(Xs,[["__scopeId","data-v-4cf2adfc"]]);export{ta as default};
@@ -0,0 +1 @@
1
+ .cowork-root[data-v-4cf2adfc]{display:flex;height:calc(100vh - 104px);gap:16px}.template-panel[data-v-4cf2adfc]{width:280px;flex-shrink:0;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;overflow:hidden}.template-header[data-v-4cf2adfc]{padding:16px 16px 8px;display:flex;align-items:center;gap:8px;font-size:16px;font-weight:600;color:var(--text-primary)}.header-icon[data-v-4cf2adfc]{font-size:18px;color:#1677ff}.template-hint[data-v-4cf2adfc]{padding:0 16px 12px;font-size:12px;color:var(--text-muted);border-bottom:1px solid var(--border-color)}.template-list[data-v-4cf2adfc]{flex:1;overflow-y:auto;padding:8px}.template-card[data-v-4cf2adfc]{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:8px;cursor:pointer;transition:all .15s;margin-bottom:4px;border:1px solid transparent}.template-card[data-v-4cf2adfc]:hover{background:var(--bg-card-hover)}.template-card.active[data-v-4cf2adfc]{background:#1677ff14;border-color:#1677ff4d}.template-card.free .card-icon[data-v-4cf2adfc]{color:#faad14}.card-icon[data-v-4cf2adfc]{width:32px;height:32px;display:flex;align-items:center;justify-content:center;font-size:16px;color:#1677ff;background:#1677ff14;border-radius:8px;flex-shrink:0;margin-top:2px}.card-name[data-v-4cf2adfc]{font-size:13px;font-weight:500;color:var(--text-primary)}.card-desc[data-v-4cf2adfc]{font-size:11px;color:var(--text-muted);margin-top:2px;line-height:1.4}.file-zone[data-v-4cf2adfc]{padding:12px;border-top:1px solid var(--border-color);text-align:center;transition:background .2s}.file-zone.dragging[data-v-4cf2adfc]{background:#1677ff14}.drop-icon[data-v-4cf2adfc]{font-size:20px;color:var(--text-muted)}.drop-text[data-v-4cf2adfc]{font-size:11px;color:var(--text-muted);margin:4px 0 8px}.file-list[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px;justify-content:center}.file-tag[data-v-4cf2adfc]{max-width:140px;overflow:hidden;text-overflow:ellipsis;font-size:11px}.path-input[data-v-4cf2adfc]{font-size:11px}.exec-panel[data-v-4cf2adfc]{flex:1;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-color);display:flex;flex-direction:column;overflow:hidden}.empty-state[data-v-4cf2adfc],.ready-state[data-v-4cf2adfc]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 24px}.empty-icon[data-v-4cf2adfc]{font-size:48px;color:#1677ff40;margin-bottom:16px}.empty-title[data-v-4cf2adfc]{font-size:16px;color:var(--text-primary);margin-bottom:6px}.empty-sub[data-v-4cf2adfc]{font-size:13px;color:var(--text-muted);margin-bottom:24px}.ready-header[data-v-4cf2adfc]{display:flex;align-items:center;gap:10px;margin-bottom:20px}.ready-icon[data-v-4cf2adfc]{font-size:28px;color:#1677ff}.ready-name[data-v-4cf2adfc]{font-size:18px;font-weight:600;color:var(--text-primary)}.ready-examples[data-v-4cf2adfc]{text-align:center}.example-label[data-v-4cf2adfc]{font-size:13px;color:var(--text-muted);margin-bottom:12px}.example-grid[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;max-width:500px}.example-chip[data-v-4cf2adfc]{padding:6px 14px;border-radius:16px;font-size:12px;color:var(--text-primary);background:var(--bg-card-hover);border:1px solid var(--border-color);cursor:pointer;transition:all .15s}.example-chip[data-v-4cf2adfc]:hover{border-color:#1677ff;background:#1677ff14;color:#1677ff}.messages-area[data-v-4cf2adfc]{flex:1;overflow-y:auto;padding:20px}.message-row[data-v-4cf2adfc]{margin-bottom:16px}.user-msg[data-v-4cf2adfc]{display:flex;justify-content:flex-end}.assistant-msg[data-v-4cf2adfc]{display:flex;gap:10px;align-items:flex-start}.avatar[data-v-4cf2adfc]{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-4cf2adfc]{padding:10px 14px;border-radius:12px;max-width:80%;line-height:1.6;font-size:14px}.bubble.user[data-v-4cf2adfc]{background:#1677ff;color:var(--text-primary);border-bottom-right-radius:4px}.bubble.assistant[data-v-4cf2adfc]{background:var(--bg-card-hover);color:var(--text-primary);border-bottom-left-radius:4px}.bubble.streaming[data-v-4cf2adfc]:after{content:"○";animation:blink-4cf2adfc .7s step-start infinite;color:#1677ff}@keyframes blink-4cf2adfc{50%{opacity:0}}.tool-msg[data-v-4cf2adfc]{margin:8px 0}.tool-collapse[data-v-4cf2adfc]{border:1px solid var(--border-color);border-radius:6px;background:var(--bg-card)}.tool-input[data-v-4cf2adfc]{margin:0;font-size:11px;color:#aaa;white-space:pre-wrap}.tool-result-box[data-v-4cf2adfc]{margin-top:8px;padding-top:8px;border-top:1px solid var(--border-color)}.tool-result[data-v-4cf2adfc]{margin:0;font-size:11px;color:#52c41a;white-space:pre-wrap}.question-card[data-v-4cf2adfc]{background:var(--bg-card-hover);border:1px solid #1677ff40;border-radius:10px;padding:14px 16px;margin-top:8px}.question-text[data-v-4cf2adfc]{color:#aaa;font-size:13px}.question-choices[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.task-stats[data-v-4cf2adfc]{display:flex;gap:6px;padding:6px 16px;border-top:1px solid var(--border-color);justify-content:flex-end}.input-area[data-v-4cf2adfc]{padding:12px 16px 16px;border-top:1px solid var(--border-color)}.input-context[data-v-4cf2adfc]{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.context-tag[data-v-4cf2adfc]{font-size:11px}.context-tag.file[data-v-4cf2adfc]{background:var(--bg-card-hover)}.input-row[data-v-4cf2adfc]{display:flex;gap:8px;align-items:flex-end}.msg-input[data-v-4cf2adfc]{flex:1;background:var(--bg-card-hover);border-color:var(--border-color);color:var(--text-primary);resize:none}.send-btn[data-v-4cf2adfc]{height:40px}[data-v-4cf2adfc] .bubble.assistant pre{background:var(--bg-base);border-radius:6px;padding:12px;overflow-x:auto;font-size:12px}[data-v-4cf2adfc] .bubble.assistant code:not(pre code){background:var(--bg-card-hover);padding:1px 5px;border-radius:3px;font-size:12px;color:#f0a500}[data-v-4cf2adfc] .bubble.assistant p{margin:0 0 8px}[data-v-4cf2adfc] .bubble.assistant p:last-child{margin:0}.history-section[data-v-4cf2adfc]{margin-top:12px;border-top:1px solid var(--border-color);padding-top:8px}.history-header[data-v-4cf2adfc]{display:flex;align-items:center;gap:6px;font-size:12px;color:#888;cursor:pointer;padding:4px 0}.history-header[data-v-4cf2adfc]:hover{color:#1677ff}.history-list[data-v-4cf2adfc]{max-height:200px;overflow-y:auto}.history-item[data-v-4cf2adfc]{padding:6px 8px;border-radius:6px;margin-bottom:4px;background:var(--bg-card-hover);cursor:default}.history-item.failed[data-v-4cf2adfc]{border-left:2px solid #ff4d4f}.history-item.completed[data-v-4cf2adfc]{border-left:2px solid #52c41a}.history-summary[data-v-4cf2adfc]{font-size:12px;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.history-meta[data-v-4cf2adfc]{display:flex;justify-content:space-between;font-size:10px;color:#888;margin-top:2px}
@@ -1,2 +1,2 @@
1
- import{u as Q}from"./ws-B4fo9ew1.js";import{J as ee,p as ae,h as te,H as d}from"./antd-BQNxIyr-.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 j(){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 D(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 E(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 G(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"),H=s("a-row"),I=s("a-spin"),J=s("a-badge"),M=s("a-popconfirm"),R=s("a-table"),U=s("a-input"),g=s("a-form-item"),X=s("a-textarea"),Y=s("a-switch"),Z=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(H,{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(R,{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(J,{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=>D(r)},{default:t(()=>[...e[10]||(e[10]=[f("运行",-1)])]),_:1},8,["loading","onClick"]),a(c,{size:"small",type:"link",onClick:O=>E(r)},{default:t(()=>[f(w(r.enabled?"暂停":"启用"),1)]),_:2},1032,["onClick"]),a(M,{title:"确认删除此任务?",onConfirm:O=>G(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:j,width:"520px"},{default:t(()=>[a(Z,{"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(X,{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(Y,{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};
1
+ import{u as Q}from"./ws-Dma34ig_.js";import{N as ee,p as ae,h as te,J as d}from"./antd-D6h4fDFf.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 N,F as V,a7 as ne,a5 as w,W as B,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),L=[{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 j(){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 D(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 E(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 G(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"),I=s("a-row"),J=s("a-spin"),M=s("a-badge"),R=s("a-popconfirm"),X=s("a-table"),U=s("a-input"),g=s("a-form-item"),Y=s("a-textarea"),Z=s("a-switch"),H=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(N(ee))]),default:t(()=>[e[7]||(e[7]=f(" 新建任务 ",-1))]),_:1}),a(c,{ghost:"",loading:C.value,onClick:T},{icon:t(()=>[a(N(ae))]),default:t(()=>[e[8]||(e[8]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),a(I,{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:L.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(L,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(J,{size:"large"})])):(p(),B(X,{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(),B(M,{key:2,status:r.enabled?"success":"warning",text:r.enabled?"运行中":"已暂停"},null,8,["status","text"])):z("",!0),n.key==="actions"?(p(),B(k,{key:3,size:"small"},{default:t(()=>[a(c,{size:"small",type:"link",loading:r.running,onClick:O=>D(r)},{default:t(()=>[...e[10]||(e[10]=[f("运行",-1)])]),_:1},8,["loading","onClick"]),a(c,{size:"small",type:"link",onClick:O=>E(r)},{default:t(()=>[f(w(r.enabled?"暂停":"启用"),1)]),_:2},1032,["onClick"]),a(R,{title:"确认删除此任务?",onConfirm:O=>G(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(N(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:j,width:"520px"},{default:t(()=>[a(H,{"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(Y,{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(Z,{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-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}