chainlesschain 0.45.77 → 0.45.79

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 (37) hide show
  1. package/README.md +31 -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-Dd2DjBH5.js → Analytics-CoH0P1ux.js} +1 -1
  5. package/src/assets/web-panel/assets/{AppLayout-CP9fATUN.js → AppLayout-Dk1eV3Xp.js} +1 -1
  6. package/src/assets/web-panel/assets/{Backup-D6Tc7sf3.js → Backup-Cv97eAjW.js} +1 -1
  7. package/src/assets/web-panel/assets/{Chat-DDUJZJ9I.js → Chat-DSbYaPuD.js} +1 -1
  8. package/src/assets/web-panel/assets/Cowork-DY0Jcql7.js +48 -0
  9. package/src/assets/web-panel/assets/{Cron-BnWzy_ZB.js → Cron-BcH0ckxq.js} +1 -1
  10. package/src/assets/web-panel/assets/{Dashboard-D2vCkoGu.js → Dashboard-DSOE-azo.js} +1 -1
  11. package/src/assets/web-panel/assets/{Git-DYlvK4sh.js → Git-zd3CuuXJ.js} +1 -1
  12. package/src/assets/web-panel/assets/{Logs-4VgUbfP0.js → Logs-BUKXg48N.js} +1 -1
  13. package/src/assets/web-panel/assets/{McpTools-ChaiHoWY.js → McpTools-WVxDlw0C.js} +1 -1
  14. package/src/assets/web-panel/assets/{Memory-PFtpuOwf.js → Memory-BLFTgTpY.js} +1 -1
  15. package/src/assets/web-panel/assets/{Notes-wc_n6Rh1.js → Notes-CFypT876.js} +1 -1
  16. package/src/assets/web-panel/assets/{Organization-D1qUa8NQ.js → Organization-BOOqeyu_.js} +1 -1
  17. package/src/assets/web-panel/assets/{P2P-DIG2gnR8.js → P2P-D9xrbb8q.js} +1 -1
  18. package/src/assets/web-panel/assets/{Permissions-CpE-Ar1e.js → Permissions-CidrpFWd.js} +1 -1
  19. package/src/assets/web-panel/assets/{Projects-GjuS-C6U.js → Projects-D3Ycn8xG.js} +1 -1
  20. package/src/assets/web-panel/assets/{Providers-CCfGeqh_.js → Providers-D0kMUvHz.js} +1 -1
  21. package/src/assets/web-panel/assets/{RssFeed-5TkrXK7Z.js → RssFeed-OQLesJxb.js} +1 -1
  22. package/src/assets/web-panel/assets/{Security-CcfBWT1D.js → Security-BR4hAAkF.js} +1 -1
  23. package/src/assets/web-panel/assets/{Services-Cnm5Zs5h.js → Services-BFMDfXE5.js} +1 -1
  24. package/src/assets/web-panel/assets/{Skills-BHapMb9h.js → Skills-BAf_mFKw.js} +1 -1
  25. package/src/assets/web-panel/assets/{Tasks-DPb9OMck.js → Tasks-DuNOWfjU.js} +1 -1
  26. package/src/assets/web-panel/assets/{Templates-Dij5t-rf.js → Templates-buh__Yll.js} +1 -1
  27. package/src/assets/web-panel/assets/{Wallet-BJV5KmWA.js → Wallet-vgS5USvW.js} +1 -1
  28. package/src/assets/web-panel/assets/{WebAuthn-DLkvYwSc.js → WebAuthn-BoL2UJ5Z.js} +1 -1
  29. package/src/assets/web-panel/assets/chat-BwUxWn7i.js +1 -0
  30. package/src/assets/web-panel/assets/{index-CB5YlndO.js → index-CCRLEutJ.js} +2 -2
  31. package/src/assets/web-panel/assets/ws-B4fo9ew1.js +1 -0
  32. package/src/assets/web-panel/index.html +1 -1
  33. package/src/gateways/ws/session-protocol.js +2 -0
  34. package/src/gateways/ws/ws-session-gateway.js +6 -1
  35. package/src/assets/web-panel/assets/Cowork-XRFqGfqJ.js +0 -48
  36. package/src/assets/web-panel/assets/chat-DWBA4-cl.js +0 -1
  37. package/src/assets/web-panel/assets/ws-CU7Gvoom.js +0 -1
@@ -1 +1 @@
1
- import{o as fe,a3 as x,a1 as n,k as t,Z as o,f as c,X as l,r as ye,$ as ge,Y as u,F as A,a7 as R,u as p,a5 as d,G as i,W as y,a4 as U}from"./vendor-CN0Iv_qZ.js";import{u as _e}from"./ws-CU7Gvoom.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as M,y as G,c as be,m as W,J as ke,b as Y,a3 as we,a2 as Ce,H as h}from"./antd-BQNxIyr-.js";const ze={style:{display:"flex","align-items":"flex-start",gap:"10px"}},he={style:{flex:"1","min-width":"0"}},Pe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Oe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},$e={style:{"margin-top":"12px","text-align":"right"}},Te={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Ie={key:0,style:{"text-align":"center",padding:"40px"}},Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},je={style:{flex:"1","min-width":"0"}},Se={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Ne={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ae={key:0,style:{"margin-top":"4px"}},Re={style:{"margin-top":"12px","text-align":"right"}},Ue={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},De={style:{"margin-bottom":"16px"}},Fe={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Je={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ke={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Le={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},H="cc_prompt_templates",Ve={__name:"Templates",setup(qe){const P=_e(),X=ge(),D=c("project"),O=c(""),v=c(null),b=c(!1),$=c(""),Z=[{name:"code-project",description:"代码项目 — 代码审查、重构、单元测试"},{name:"data-science",description:"数据科学 — ML/数据分析、可视化"},{name:"devops",description:"DevOps — 基础设施、部署、监控"},{name:"medical-triage",description:"医疗分诊 — 症状分析、分诊建议"},{name:"agriculture-expert",description:"农业专家 — 作物管理、病虫害"},{name:"general-assistant",description:"通用助手 — 日常问答、任务管理"},{name:"ai-media-creator",description:"AI 媒体创作 — 图文生成、视频脚本"},{name:"ai-doc-creator",description:"AI 文档创作 — 文档生成、格式转换"},{name:"empty",description:"空白模板 — 最小项目结构"}];function Q(s){$.value=s,b.value=!0}async function ee(){b.value=!1;const s=$.value;if(s){O.value=s,v.value=null;try{const e=`init --template ${s} --yes`,{output:m,exitCode:_}=await P.execute(e,3e4);v.value={success:_===0,output:m}}catch(e){v.value={success:!1,output:`初始化失败: ${e.message}`}}finally{O.value=""}}}const T=c(!1),k=c([]),I=c(""),f=c(null);async function te(){T.value=!0;try{const{output:s}=await P.execute("bi templates --json",15e3),e=JSON.parse(s);k.value=Array.isArray(e)?e:e.templates||[]}catch{k.value=[]}finally{T.value=!1}}async function oe(s){I.value=s,f.value=null;try{const e=`bi dashboard create --template ${s} --json`,{output:m,exitCode:_}=await P.execute(e,3e4);f.value={success:_===0,output:m}}catch(e){f.value={success:!1,output:`创建失败: ${e.message}`}}finally{I.value=""}}const g=c([]),w=c(!1),r=ye({name:"",category:"general",content:""});function ae(){try{const s=localStorage.getItem(H);g.value=s?JSON.parse(s):[]}catch{g.value=[]}}function F(){localStorage.setItem(H,JSON.stringify(g.value))}function ne(){!r.name||!r.content||(g.value.push({name:r.name,category:r.category,content:r.content}),F(),J(),h.success("模板已保存"))}function J(){w.value=!1,r.name="",r.category="general",r.content=""}function se(s){g.value.splice(s,1),F(),h.success("模板已删除")}function le(s){navigator.clipboard.writeText(s.content).then(()=>{h.success("已复制到剪贴板")}).catch(()=>{h.error("复制失败")})}function ie(s){X.push({path:"/chat",query:{prompt:s.content}})}function re(s){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[s]||"default"}return fe(()=>{ae(),te()}),(s,e)=>{const m=l("a-button"),_=l("a-card"),B=l("a-col"),j=l("a-row"),K=l("a-alert"),S=l("a-tab-pane"),ue=l("a-spin"),L=l("a-empty"),V=l("a-tag"),pe=l("a-tabs"),q=l("a-modal"),ce=l("a-input"),N=l("a-form-item"),C=l("a-select-option"),de=l("a-select"),me=l("a-textarea"),ve=l("a-form");return u(),x("div",null,[e[27]||(e[27]=n("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[n("div",null,[n("h2",{class:"page-title"},"模板中心"),n("p",{class:"page-sub"},"项目模板 / BI 模板 / Prompt 模板")])],-1)),t(pe,{activeKey:D.value,"onUpdate:activeKey":e[3]||(e[3]=a=>D.value=a),type:"card"},{default:o(()=>[t(S,{key:"project"},{tab:o(()=>[t(p(be)),e[10]||(e[10]=i(" 项目模板 ",-1))]),default:o(()=>[t(j,{gutter:[16,16]},{default:o(()=>[(u(),x(A,null,R(Z,a=>t(B,{key:a.name,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",ze,[t(p(M),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),n("div",he,[n("div",Pe,d(a.name),1),n("div",Oe,d(a.description),1)])]),n("div",$e,[t(m,{type:"primary",size:"small",loading:O.value===a.name,onClick:z=>Q(a.name)},{icon:o(()=>[t(p(G))]),default:o(()=>[e[11]||(e[11]=i(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),v.value?(u(),y(K,{key:0,message:v.value.success?"初始化成功":"初始化失败",type:v.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=a=>v.value=null)},{description:o(()=>[n("pre",Te,d(v.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"bi"},{tab:o(()=>[t(p(W)),e[12]||(e[12]=i(" BI 模板 ",-1))]),default:o(()=>[T.value?(u(),x("div",Ie,[t(ue),e[13]||(e[13]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):k.value.length?(u(),y(j,{key:2,gutter:[16,16]},{default:o(()=>[(u(!0),x(A,null,R(k.value,a=>(u(),y(B,{key:a.id,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Be,[t(p(W),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),n("div",je,[n("div",Se,d(a.name),1),n("div",Ne,d(a.description||"暂无描述"),1),a.id?(u(),x("div",Ae,[t(V,{size:"small",color:"purple"},{default:o(()=>[i(d(a.id),1)]),_:2},1024)])):U("",!0)])]),n("div",Re,[t(m,{type:"primary",size:"small",loading:I.value===a.id,onClick:z=>oe(a.id)},{icon:o(()=>[t(p(G))]),default:o(()=>[e[14]||(e[14]=i(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(u(),y(L,{key:1,description:"暂无 BI 模板"})),f.value?(u(),y(K,{key:3,message:f.value.success?"仪表板创建成功":"创建失败",type:f.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[1]||(e[1]=a=>f.value=null)},{description:o(()=>[n("pre",Ue,d(f.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"prompts"},{tab:o(()=>[t(p(Y)),e[15]||(e[15]=i(" Prompt 模板 ",-1))]),default:o(()=>[n("div",De,[t(m,{type:"primary",onClick:e[2]||(e[2]=a=>w.value=!0)},{icon:o(()=>[t(p(ke))]),default:o(()=>[e[16]||(e[16]=i(" 新建模板 ",-1))]),_:1})]),g.value.length?(u(),y(j,{key:1,gutter:[16,16]},{default:o(()=>[(u(!0),x(A,null,R(g.value,(a,z)=>(u(),y(B,{key:z,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Fe,[t(p(Y),{style:{"font-size":"18px",color:"#52c41a"}}),n("span",Je,d(a.name),1),t(V,{color:re(a.category),size:"small"},{default:o(()=>[i(d(a.category),1)]),_:2},1032,["color"])]),n("div",Ke,d(a.content.length>120?a.content.slice(0,120)+"...":a.content),1),n("div",Le,[t(m,{size:"small",onClick:E=>ie(a)},{icon:o(()=>[t(p(M))]),default:o(()=>[e[17]||(e[17]=i(" 使用 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",onClick:E=>le(a)},{icon:o(()=>[t(p(we))]),default:o(()=>[e[18]||(e[18]=i(" 复制 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",danger:"",onClick:E=>se(z)},{icon:o(()=>[t(p(Ce))]),default:o(()=>[e[19]||(e[19]=i(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(u(),y(L,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(q,{open:b.value,"onUpdate:open":e[4]||(e[4]=a=>b.value=a),title:"确认初始化",onOk:ee,onCancel:e[5]||(e[5]=a=>b.value=!1),"ok-text":"确认","cancel-text":"取消"},{default:o(()=>[n("p",null,[e[20]||(e[20]=i("确定要使用模板 ",-1)),n("strong",null,d($.value),1),e[21]||(e[21]=i(" 初始化项目吗?",-1))]),e[22]||(e[22]=n("p",{style:{color:"var(--text-muted)","font-size":"12px"}},"这将在当前工作目录创建项目结构。",-1))]),_:1},8,["open"]),t(q,{open:w.value,"onUpdate:open":e[9]||(e[9]=a=>w.value=a),title:"新建 Prompt 模板",onOk:ne,onCancel:J,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!r.name||!r.content}},{default:o(()=>[t(ve,{layout:"vertical"},{default:o(()=>[t(N,{label:"模板名称",required:""},{default:o(()=>[t(ce,{value:r.name,"onUpdate:value":e[6]||(e[6]=a=>r.name=a),placeholder:"输入模板名称"},null,8,["value"])]),_:1}),t(N,{label:"分类"},{default:o(()=>[t(de,{value:r.category,"onUpdate:value":e[7]||(e[7]=a=>r.category=a),style:{width:"100%"}},{default:o(()=>[t(C,{value:"general"},{default:o(()=>[...e[23]||(e[23]=[i("general",-1)])]),_:1}),t(C,{value:"code"},{default:o(()=>[...e[24]||(e[24]=[i("code",-1)])]),_:1}),t(C,{value:"writing"},{default:o(()=>[...e[25]||(e[25]=[i("writing",-1)])]),_:1}),t(C,{value:"analysis"},{default:o(()=>[...e[26]||(e[26]=[i("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(N,{label:"模板内容",required:""},{default:o(()=>[t(me,{value:r.content,"onUpdate:value":e[8]||(e[8]=a=>r.content=a),rows:6,placeholder:"输入 Prompt 模板内容"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","ok-button-props"])])}}},Ye=xe(Ve,[["__scopeId","data-v-22e50acf"]]);export{Ye as default};
1
+ import{o as fe,a3 as x,a1 as n,k as t,Z as o,f as c,X as l,r as ye,$ as ge,Y as u,F as A,a7 as R,u as p,a5 as d,G as i,W as y,a4 as U}from"./vendor-CN0Iv_qZ.js";import{u as _e}from"./ws-B4fo9ew1.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as M,y as G,c as be,m as W,J as ke,b as Y,a3 as we,a2 as Ce,H as h}from"./antd-BQNxIyr-.js";const ze={style:{display:"flex","align-items":"flex-start",gap:"10px"}},he={style:{flex:"1","min-width":"0"}},Pe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","font-family":"monospace","margin-bottom":"4px"}},Oe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},$e={style:{"margin-top":"12px","text-align":"right"}},Te={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Ie={key:0,style:{"text-align":"center",padding:"40px"}},Be={style:{display:"flex","align-items":"flex-start",gap:"10px"}},je={style:{flex:"1","min-width":"0"}},Se={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px"}},Ne={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ae={key:0,style:{"margin-top":"4px"}},Re={style:{"margin-top":"12px","text-align":"right"}},Ue={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},De={style:{"margin-bottom":"16px"}},Fe={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},Je={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Ke={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Le={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},H="cc_prompt_templates",Ve={__name:"Templates",setup(qe){const P=_e(),X=ge(),D=c("project"),O=c(""),v=c(null),b=c(!1),$=c(""),Z=[{name:"code-project",description:"代码项目 — 代码审查、重构、单元测试"},{name:"data-science",description:"数据科学 — ML/数据分析、可视化"},{name:"devops",description:"DevOps — 基础设施、部署、监控"},{name:"medical-triage",description:"医疗分诊 — 症状分析、分诊建议"},{name:"agriculture-expert",description:"农业专家 — 作物管理、病虫害"},{name:"general-assistant",description:"通用助手 — 日常问答、任务管理"},{name:"ai-media-creator",description:"AI 媒体创作 — 图文生成、视频脚本"},{name:"ai-doc-creator",description:"AI 文档创作 — 文档生成、格式转换"},{name:"empty",description:"空白模板 — 最小项目结构"}];function Q(s){$.value=s,b.value=!0}async function ee(){b.value=!1;const s=$.value;if(s){O.value=s,v.value=null;try{const e=`init --template ${s} --yes`,{output:m,exitCode:_}=await P.execute(e,3e4);v.value={success:_===0,output:m}}catch(e){v.value={success:!1,output:`初始化失败: ${e.message}`}}finally{O.value=""}}}const T=c(!1),k=c([]),I=c(""),f=c(null);async function te(){T.value=!0;try{const{output:s}=await P.execute("bi templates --json",15e3),e=JSON.parse(s);k.value=Array.isArray(e)?e:e.templates||[]}catch{k.value=[]}finally{T.value=!1}}async function oe(s){I.value=s,f.value=null;try{const e=`bi dashboard create --template ${s} --json`,{output:m,exitCode:_}=await P.execute(e,3e4);f.value={success:_===0,output:m}}catch(e){f.value={success:!1,output:`创建失败: ${e.message}`}}finally{I.value=""}}const g=c([]),w=c(!1),r=ye({name:"",category:"general",content:""});function ae(){try{const s=localStorage.getItem(H);g.value=s?JSON.parse(s):[]}catch{g.value=[]}}function F(){localStorage.setItem(H,JSON.stringify(g.value))}function ne(){!r.name||!r.content||(g.value.push({name:r.name,category:r.category,content:r.content}),F(),J(),h.success("模板已保存"))}function J(){w.value=!1,r.name="",r.category="general",r.content=""}function se(s){g.value.splice(s,1),F(),h.success("模板已删除")}function le(s){navigator.clipboard.writeText(s.content).then(()=>{h.success("已复制到剪贴板")}).catch(()=>{h.error("复制失败")})}function ie(s){X.push({path:"/chat",query:{prompt:s.content}})}function re(s){return{general:"blue",code:"green",writing:"orange",analysis:"purple"}[s]||"default"}return fe(()=>{ae(),te()}),(s,e)=>{const m=l("a-button"),_=l("a-card"),B=l("a-col"),j=l("a-row"),K=l("a-alert"),S=l("a-tab-pane"),ue=l("a-spin"),L=l("a-empty"),V=l("a-tag"),pe=l("a-tabs"),q=l("a-modal"),ce=l("a-input"),N=l("a-form-item"),C=l("a-select-option"),de=l("a-select"),me=l("a-textarea"),ve=l("a-form");return u(),x("div",null,[e[27]||(e[27]=n("div",{style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},[n("div",null,[n("h2",{class:"page-title"},"模板中心"),n("p",{class:"page-sub"},"项目模板 / BI 模板 / Prompt 模板")])],-1)),t(pe,{activeKey:D.value,"onUpdate:activeKey":e[3]||(e[3]=a=>D.value=a),type:"card"},{default:o(()=>[t(S,{key:"project"},{tab:o(()=>[t(p(be)),e[10]||(e[10]=i(" 项目模板 ",-1))]),default:o(()=>[t(j,{gutter:[16,16]},{default:o(()=>[(u(),x(A,null,R(Z,a=>t(B,{key:a.name,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",ze,[t(p(M),{style:{"font-size":"24px",color:"#1677ff","flex-shrink":"0","margin-top":"2px"}}),n("div",he,[n("div",Pe,d(a.name),1),n("div",Oe,d(a.description),1)])]),n("div",$e,[t(m,{type:"primary",size:"small",loading:O.value===a.name,onClick:z=>Q(a.name)},{icon:o(()=>[t(p(G))]),default:o(()=>[e[11]||(e[11]=i(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),v.value?(u(),y(K,{key:0,message:v.value.success?"初始化成功":"初始化失败",type:v.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[0]||(e[0]=a=>v.value=null)},{description:o(()=>[n("pre",Te,d(v.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"bi"},{tab:o(()=>[t(p(W)),e[12]||(e[12]=i(" BI 模板 ",-1))]),default:o(()=>[T.value?(u(),x("div",Ie,[t(ue),e[13]||(e[13]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):k.value.length?(u(),y(j,{key:2,gutter:[16,16]},{default:o(()=>[(u(!0),x(A,null,R(k.value,a=>(u(),y(B,{key:a.id,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",hoverable:"",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Be,[t(p(W),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),n("div",je,[n("div",Se,d(a.name),1),n("div",Ne,d(a.description||"暂无描述"),1),a.id?(u(),x("div",Ae,[t(V,{size:"small",color:"purple"},{default:o(()=>[i(d(a.id),1)]),_:2},1024)])):U("",!0)])]),n("div",Re,[t(m,{type:"primary",size:"small",loading:I.value===a.id,onClick:z=>oe(a.id)},{icon:o(()=>[t(p(G))]),default:o(()=>[e[14]||(e[14]=i(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(u(),y(L,{key:1,description:"暂无 BI 模板"})),f.value?(u(),y(K,{key:3,message:f.value.success?"仪表板创建成功":"创建失败",type:f.value.success?"success":"error","show-icon":"",closable:"",style:{"margin-top":"16px"},onClose:e[1]||(e[1]=a=>f.value=null)},{description:o(()=>[n("pre",Ue,d(f.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"prompts"},{tab:o(()=>[t(p(Y)),e[15]||(e[15]=i(" Prompt 模板 ",-1))]),default:o(()=>[n("div",De,[t(m,{type:"primary",onClick:e[2]||(e[2]=a=>w.value=!0)},{icon:o(()=>[t(p(ke))]),default:o(()=>[e[16]||(e[16]=i(" 新建模板 ",-1))]),_:1})]),g.value.length?(u(),y(j,{key:1,gutter:[16,16]},{default:o(()=>[(u(!0),x(A,null,R(g.value,(a,z)=>(u(),y(B,{key:z,xs:24,sm:12,lg:8},{default:o(()=>[t(_,{size:"small",class:"template-card",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[n("div",Fe,[t(p(Y),{style:{"font-size":"18px",color:"#52c41a"}}),n("span",Je,d(a.name),1),t(V,{color:re(a.category),size:"small"},{default:o(()=>[i(d(a.category),1)]),_:2},1032,["color"])]),n("div",Ke,d(a.content.length>120?a.content.slice(0,120)+"...":a.content),1),n("div",Le,[t(m,{size:"small",onClick:E=>ie(a)},{icon:o(()=>[t(p(M))]),default:o(()=>[e[17]||(e[17]=i(" 使用 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",onClick:E=>le(a)},{icon:o(()=>[t(p(we))]),default:o(()=>[e[18]||(e[18]=i(" 复制 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",danger:"",onClick:E=>se(z)},{icon:o(()=>[t(p(Ce))]),default:o(()=>[e[19]||(e[19]=i(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(u(),y(L,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(q,{open:b.value,"onUpdate:open":e[4]||(e[4]=a=>b.value=a),title:"确认初始化",onOk:ee,onCancel:e[5]||(e[5]=a=>b.value=!1),"ok-text":"确认","cancel-text":"取消"},{default:o(()=>[n("p",null,[e[20]||(e[20]=i("确定要使用模板 ",-1)),n("strong",null,d($.value),1),e[21]||(e[21]=i(" 初始化项目吗?",-1))]),e[22]||(e[22]=n("p",{style:{color:"var(--text-muted)","font-size":"12px"}},"这将在当前工作目录创建项目结构。",-1))]),_:1},8,["open"]),t(q,{open:w.value,"onUpdate:open":e[9]||(e[9]=a=>w.value=a),title:"新建 Prompt 模板",onOk:ne,onCancel:J,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!r.name||!r.content}},{default:o(()=>[t(ve,{layout:"vertical"},{default:o(()=>[t(N,{label:"模板名称",required:""},{default:o(()=>[t(ce,{value:r.name,"onUpdate:value":e[6]||(e[6]=a=>r.name=a),placeholder:"输入模板名称"},null,8,["value"])]),_:1}),t(N,{label:"分类"},{default:o(()=>[t(de,{value:r.category,"onUpdate:value":e[7]||(e[7]=a=>r.category=a),style:{width:"100%"}},{default:o(()=>[t(C,{value:"general"},{default:o(()=>[...e[23]||(e[23]=[i("general",-1)])]),_:1}),t(C,{value:"code"},{default:o(()=>[...e[24]||(e[24]=[i("code",-1)])]),_:1}),t(C,{value:"writing"},{default:o(()=>[...e[25]||(e[25]=[i("writing",-1)])]),_:1}),t(C,{value:"analysis"},{default:o(()=>[...e[26]||(e[26]=[i("analysis",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(N,{label:"模板内容",required:""},{default:o(()=>[t(me,{value:r.content,"onUpdate:value":e[8]||(e[8]=a=>r.content=a),rows:6,placeholder:"输入 Prompt 模板内容"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","ok-button-props"])])}}},Ye=xe(Ve,[["__scopeId","data-v-22e50acf"]]);export{Ye as default};
@@ -1,4 +1,4 @@
1
- import{u as De}from"./ws-CU7Gvoom.js";import{_ as Te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{H as v,p as K,k as P,Z as $e,J as re,u as ie}from"./antd-BQNxIyr-.js";import{o as Se,a3 as _,a1 as x,k as t,Z as s,f,X as u,Y as r,G as m,u as b,W as C,a5 as y,a4 as k,F as We,c as Ue,r as de}from"./vendor-CN0Iv_qZ.js";const Oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ne={key:0,style:{"text-align":"center",padding:"60px"}},je={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},qe={key:1,style:{color:"var(--text-primary)"}},Fe={key:3,style:{color:"#52c41a","font-family":"monospace"}},Le={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Be={key:0,style:{color:"#e0e0e0"}},He={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={key:3,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Je={key:0,style:{"margin-top":"8px"}},Ke={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Pe={key:0,style:{"text-align":"center",padding:"30px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ze={key:2,style:{color:"#e0e0e0","font-family":"monospace"}},Ee={key:3,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},Ge={style:{"margin-top":"16px"}},Xe={style:{"font-family":"monospace",color:"#ccc"}},Ye={style:{"font-family":"monospace",color:"#ccc"}},Qe={style:{"font-family":"monospace",color:"#52c41a"}},et={__name:"Wallet",setup(tt){const A=De(),$=f("wallets"),R=f(!1);function Z(l){try{return JSON.parse(l)}catch{return null}}async function ue(){R.value=!0;try{$.value==="wallets"?await W():$.value==="assets"?await L():$.value==="transfer"&&await H()}finally{R.value=!1}}function pe(l){l==="assets"&&I.value.length===0&&L(),l==="transfer"&&T.value.length===0&&H()}const N=f(!1),E=f(!1),G=f(""),z=f([]),j=f(!1),S=f(""),ce=[{title:"地址",key:"address",dataIndex:"address",ellipsis:!0},{title:"名称",key:"name",dataIndex:"name",width:"150px"},{title:"默认",key:"isDefault",width:"80px"},{title:"余额",key:"balance",dataIndex:"balance",width:"120px"},{title:"操作",key:"action",width:"100px"}],ne=Ue(()=>{const l=z.value.find(a=>a.isDefault);if(!l||!l.address)return"未设置";const e=l.address;return e.length>16?e.slice(0,8)+"..."+e.slice(-6):e});async function W(){N.value=!0;try{const{output:l}=await A.execute("wallet list --json",15e3),e=Z(l);e&&Array.isArray(e)?z.value=e.map((a,i)=>({key:a.address||a.id||i,address:a.address||a.id||"-",name:a.name||a.label||"-",isDefault:a.isDefault||a.default||!1,balance:a.balance??"-"})):e&&e.wallets&&Array.isArray(e.wallets)?z.value=e.wallets.map((a,i)=>({key:a.address||a.id||i,address:a.address||a.id||"-",name:a.name||a.label||"-",isDefault:a.isDefault||a.default||!1,balance:a.balance??"-"})):z.value=fe(l)}catch(l){v.error("加载钱包列表失败: "+l.message)}finally{N.value=!1}}function fe(l){const e=[],a=l.split(`
1
+ import{u as De}from"./ws-B4fo9ew1.js";import{_ as Te}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{H as v,p as K,k as P,Z as $e,J as re,u as ie}from"./antd-BQNxIyr-.js";import{o as Se,a3 as _,a1 as x,k as t,Z as s,f,X as u,Y as r,G as m,u as b,W as C,a5 as y,a4 as k,F as We,c as Ue,r as de}from"./vendor-CN0Iv_qZ.js";const Oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ne={key:0,style:{"text-align":"center",padding:"60px"}},je={key:0,style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},qe={key:1,style:{color:"var(--text-primary)"}},Fe={key:3,style:{color:"#52c41a","font-family":"monospace"}},Le={key:1,style:{color:"var(--text-muted)","font-size":"12px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Be={key:0,style:{color:"#e0e0e0"}},He={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={key:3,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"12px"}},Je={key:0,style:{"margin-top":"8px"}},Ke={style:{"white-space":"pre-wrap","word-break":"break-all",color:"var(--text-secondary)","font-size":"11px","margin-top":"8px",background:"var(--bg-base)",padding:"10px","border-radius":"6px",border:"1px solid var(--border-color)"}},Pe={key:0,style:{"text-align":"center",padding:"30px"}},Re={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ze={key:2,style:{color:"#e0e0e0","font-family":"monospace"}},Ee={key:3,style:{color:"var(--text-muted)","font-family":"monospace","font-size":"11px"}},Ge={style:{"margin-top":"16px"}},Xe={style:{"font-family":"monospace",color:"#ccc"}},Ye={style:{"font-family":"monospace",color:"#ccc"}},Qe={style:{"font-family":"monospace",color:"#52c41a"}},et={__name:"Wallet",setup(tt){const A=De(),$=f("wallets"),R=f(!1);function Z(l){try{return JSON.parse(l)}catch{return null}}async function ue(){R.value=!0;try{$.value==="wallets"?await W():$.value==="assets"?await L():$.value==="transfer"&&await H()}finally{R.value=!1}}function pe(l){l==="assets"&&I.value.length===0&&L(),l==="transfer"&&T.value.length===0&&H()}const N=f(!1),E=f(!1),G=f(""),z=f([]),j=f(!1),S=f(""),ce=[{title:"地址",key:"address",dataIndex:"address",ellipsis:!0},{title:"名称",key:"name",dataIndex:"name",width:"150px"},{title:"默认",key:"isDefault",width:"80px"},{title:"余额",key:"balance",dataIndex:"balance",width:"120px"},{title:"操作",key:"action",width:"100px"}],ne=Ue(()=>{const l=z.value.find(a=>a.isDefault);if(!l||!l.address)return"未设置";const e=l.address;return e.length>16?e.slice(0,8)+"..."+e.slice(-6):e});async function W(){N.value=!0;try{const{output:l}=await A.execute("wallet list --json",15e3),e=Z(l);e&&Array.isArray(e)?z.value=e.map((a,i)=>({key:a.address||a.id||i,address:a.address||a.id||"-",name:a.name||a.label||"-",isDefault:a.isDefault||a.default||!1,balance:a.balance??"-"})):e&&e.wallets&&Array.isArray(e.wallets)?z.value=e.wallets.map((a,i)=>({key:a.address||a.id||i,address:a.address||a.id||"-",name:a.name||a.label||"-",isDefault:a.isDefault||a.default||!1,balance:a.balance??"-"})):z.value=fe(l)}catch(l){v.error("加载钱包列表失败: "+l.message)}finally{N.value=!1}}function fe(l){const e=[],a=l.split(`
2
2
  `);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ wallet/i))continue;const d=n.match(/(0x[a-fA-F0-9]{8,})/);if(d){const V=/default|默认|\*/.test(n),U=n.match(/name[:\s]+(\S+)/i);e.push({key:d[1],address:d[1],name:U?U[1]:"-",isDefault:V,balance:"-"})}}return e}async function me(){if(!S.value.trim()){v.warning("请输入钱包名称");return}E.value=!0;try{const{output:l}=await A.execute(`wallet create --name "${S.value.trim()}" --json`,2e4);l.includes("error")||l.includes("失败")?v.error("创建失败: "+l.slice(0,120)):(v.success("钱包已创建"),j.value=!1,S.value="",await W())}catch(l){v.error("创建失败: "+l.message)}finally{E.value=!1}}async function ye(l){G.value=l;try{const{output:e}=await A.execute(`wallet set-default ${l}`,15e3);e.includes("error")||e.includes("失败")?v.error("设置失败: "+e.slice(0,120)):(v.success("已设为默认钱包"),await W())}catch(e){v.error("设置失败: "+e.message)}finally{G.value=""}}const q=f(!1),X=f(!1),I=f([]),F=f(!1),g=de({name:"",type:"token",description:""}),ve=[{title:"名称",key:"name",dataIndex:"name",width:"180px"},{title:"类型",key:"type",dataIndex:"type",width:"100px"},{title:"描述",key:"description",dataIndex:"description",ellipsis:!0},{title:"地址",key:"address",dataIndex:"address",ellipsis:!0}];function _e(l){return{token:"blue",nft:"purple",data:"cyan"}[(l||"").toLowerCase()]||"default"}async function L(){q.value=!0;try{const{output:l}=await A.execute("wallet assets --json",15e3),e=Z(l);e&&Array.isArray(e)?I.value=e.map((a,i)=>({key:a.id||a.address||i,name:a.name||"-",type:a.type||"-",description:a.description||"",address:a.address||a.id||"-"})):e&&e.assets&&Array.isArray(e.assets)?I.value=e.assets.map((a,i)=>({key:a.id||a.address||i,name:a.name||"-",type:a.type||"-",description:a.description||"",address:a.address||a.id||"-"})):I.value=ge(l)}catch(l){v.error("加载资产列表失败: "+l.message)}finally{q.value=!1}}function ge(l){const e=[],a=l.split(`
3
3
  `);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ asset/i))continue;const d=n.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,name:d[0]||"-",type:d[1]||"-",description:d[2]||"",address:d[3]||"-"})}return e}async function ke(){if(!g.name.trim()){v.warning("请输入资产名称");return}X.value=!0;try{let l=`wallet asset "${g.name.trim()}" --type ${g.type}`;g.description.trim()&&(l+=` --description "${g.description.trim().replace(/"/g,'\\"')}"`),l+=" --json";const{output:e}=await A.execute(l,2e4);e.includes("error")||e.includes("失败")?v.error("注册失败: "+e.slice(0,120)):(v.success("资产已注册"),F.value=!1,g.name="",g.type="token",g.description="",await L())}catch(l){v.error("注册失败: "+l.message)}finally{X.value=!1}}const M=f(!1),B=f(!1),D=f(!1),w=f(null),T=f([]),c=de({assetId:"",toAddress:"",amount:null}),be=[{title:"时间",key:"time",dataIndex:"time",width:"150px"},{title:"类型",key:"type",dataIndex:"type",width:"80px"},{title:"数量",key:"amount",dataIndex:"amount",width:"100px"},{title:"目标",key:"to",dataIndex:"to",ellipsis:!0}];function xe(){if(!c.assetId.trim()||!c.toAddress.trim()||!c.amount){v.warning("请填写完整的转账信息");return}D.value=!0}async function we(){M.value=!0,w.value=null;try{const l=`wallet transfer ${c.assetId.trim()} ${c.toAddress.trim()} --amount ${c.amount}`,{output:e,exitCode:a}=await A.execute(l,3e4);w.value={success:a===0&&!e.includes("error")&&!e.includes("失败"),output:e||"转账已提交"},w.value.success?(v.success("转账成功"),D.value=!1,await H()):D.value=!1}catch(l){w.value={success:!1,output:"转账失败: "+l.message},D.value=!1}finally{M.value=!1}}async function H(){B.value=!0;try{const{output:l}=await A.execute("wallet history --limit 20 --json",15e3),e=Z(l);e&&Array.isArray(e)?T.value=e.map((a,i)=>({key:a.id||a.hash||i,time:a.time||a.timestamp||a.createdAt||"-",type:a.type||a.direction||"-",amount:a.amount??"-",to:a.to||a.recipient||"-"})):e&&e.history&&Array.isArray(e.history)?T.value=e.history.map((a,i)=>({key:a.id||a.hash||i,time:a.time||a.timestamp||a.createdAt||"-",type:a.type||a.direction||"-",amount:a.amount??"-",to:a.to||a.recipient||"-"})):T.value=he(l)}catch(l){v.error("加载交易历史失败: "+l.message)}finally{B.value=!1}}function he(l){const e=[],a=l.split(`
4
4
  `);for(const i of a){const n=i.trim();if(!n||n.startsWith("─")||n.match(/^\d+ transaction/i))continue;const d=n.split(/\s*[|│]\s*/);d.length>=3&&e.push({key:e.length,time:d[0]||"-",type:d[1]||"-",amount:d[2]||"-",to:d[3]||"-"})}return e}return Se(()=>{W()}),(l,e)=>{const a=u("a-button"),i=u("a-statistic"),n=u("a-card"),d=u("a-col"),V=u("a-row"),U=u("a-space"),Y=u("a-spin"),J=u("a-tag"),Q=u("a-empty"),ee=u("a-table"),O=u("a-input"),h=u("a-form-item"),te=u("a-form"),ae=u("a-modal"),se=u("a-tab-pane"),le=u("a-select-option"),Ae=u("a-select"),Ce=u("a-input-number"),oe=u("a-descriptions-item"),ze=u("a-descriptions"),Ie=u("a-tabs");return r(),_("div",null,[x("div",Oe,[e[14]||(e[14]=x("div",null,[x("h2",{class:"page-title"},"钱包管理"),x("p",{class:"page-sub"},"资产 / 转账 / 历史")],-1)),t(a,{type:"primary",ghost:"",loading:R.value,onClick:ue},{icon:s(()=>[t(b(K))]),default:s(()=>[e[13]||(e[13]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),t(V,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"钱包数量",value:z.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[t(b(P))]),_:1},8,["value"])]),_:1})]),_:1}),t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"总资产数",value:I.value.length,"value-style":{color:"#52c41a",fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"默认钱包",value:ne.value,"value-style":{color:ne.value!=="未设置"?"#faad14":"#888",fontSize:"14px",fontFamily:"monospace"}},{prefix:s(()=>[t(b(P))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),t(d,{xs:24,sm:12,lg:6},{default:s(()=>[t(n,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(i,{title:"总交易数",value:T.value.length,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:s(()=>[t(b($e))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),t(Ie,{activeKey:$.value,"onUpdate:activeKey":e[12]||(e[12]=o=>$.value=o),type:"card",onChange:pe},{default:s(()=>[t(se,{key:"wallets"},{tab:s(()=>[t(b(P)),e[15]||(e[15]=m(" 钱包列表 ",-1))]),default:s(()=>[t(U,{style:{"margin-bottom":"16px"}},{default:s(()=>[t(a,{type:"primary",loading:N.value,onClick:W},{icon:s(()=>[t(b(K))]),default:s(()=>[e[16]||(e[16]=m(" 刷新列表 ",-1))]),_:1},8,["loading"]),t(a,{onClick:e[0]||(e[0]=o=>j.value=!0)},{icon:s(()=>[t(b(re))]),default:s(()=>[e[17]||(e[17]=m(" 创建钱包 ",-1))]),_:1})]),_:1}),N.value?(r(),_("div",Ne,[t(Y,{size:"large"})])):(r(),C(ee,{key:1,columns:ce,"data-source":z.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"wallet-row"},{bodyCell:s(({column:o,record:p})=>[o.key==="address"?(r(),_("span",je,y(p.address),1)):k("",!0),o.key==="name"?(r(),_("span",qe,y(p.name||"-"),1)):k("",!0),o.key==="isDefault"?(r(),C(J,{key:2,color:p.isDefault?"green":"default"},{default:s(()=>[m(y(p.isDefault?"默认":"-"),1)]),_:2},1032,["color"])):k("",!0),o.key==="balance"?(r(),_("span",Fe,y(p.balance??"-"),1)):k("",!0),o.key==="action"?(r(),_(We,{key:4},[p.isDefault?(r(),_("span",Le,"当前默认")):(r(),C(a,{key:0,size:"small",type:"link",loading:G.value===p.address,onClick:at=>ye(p.address)},{default:s(()=>[...e[18]||(e[18]=[m(" 设为默认 ",-1)])]),_:1},8,["loading","onClick"]))],64)):k("",!0)]),emptyText:s(()=>[t(Q,{description:"暂无钱包,点击「创建钱包」添加"})]),_:1},8,["data-source","pagination"])),t(ae,{open:j.value,"onUpdate:open":e[2]||(e[2]=o=>j.value=o),title:"创建钱包","confirm-loading":E.value,onOk:me,"ok-text":"创建","cancel-text":"取消"},{default:s(()=>[t(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:s(()=>[t(h,{label:"钱包名称",required:""},{default:s(()=>[t(O,{value:S.value,"onUpdate:value":e[1]||(e[1]=o=>S.value=o),placeholder:"请输入钱包名称"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),t(se,{key:"assets"},{tab:s(()=>[t(b(P)),e[19]||(e[19]=m(" 资产管理 ",-1))]),default:s(()=>[t(U,{style:{"margin-bottom":"16px"}},{default:s(()=>[t(a,{type:"primary",loading:q.value,onClick:L},{icon:s(()=>[t(b(K))]),default:s(()=>[e[20]||(e[20]=m(" 刷新资产 ",-1))]),_:1},8,["loading"]),t(a,{onClick:e[3]||(e[3]=o=>F.value=!0)},{icon:s(()=>[t(b(re))]),default:s(()=>[e[21]||(e[21]=m(" 注册资产 ",-1))]),_:1})]),_:1}),q.value?(r(),_("div",Me,[t(Y,{size:"large"})])):(r(),C(ee,{key:1,columns:ve,"data-source":I.value,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"wallet-row"},{bodyCell:s(({column:o,record:p})=>[o.key==="name"?(r(),_("span",Be,y(p.name),1)):k("",!0),o.key==="type"?(r(),C(J,{key:1,color:_e(p.type)},{default:s(()=>[m(y(p.type),1)]),_:2},1032,["color"])):k("",!0),o.key==="description"?(r(),_("span",He,y(p.description||"-"),1)):k("",!0),o.key==="address"?(r(),_("span",Ve,y(p.address||"-"),1)):k("",!0)]),emptyText:s(()=>[t(Q,{description:"暂无资产,点击「注册资产」添加"})]),_:1},8,["data-source","pagination"])),t(ae,{open:F.value,"onUpdate:open":e[7]||(e[7]=o=>F.value=o),title:"注册资产","confirm-loading":X.value,onOk:ke,"ok-text":"注册","cancel-text":"取消"},{default:s(()=>[t(te,{"label-col":{span:6},"wrapper-col":{span:18},style:{"margin-top":"16px"}},{default:s(()=>[t(h,{label:"资产名称",required:""},{default:s(()=>[t(O,{value:g.name,"onUpdate:value":e[4]||(e[4]=o=>g.name=o),placeholder:"请输入资产名称"},null,8,["value"])]),_:1}),t(h,{label:"资产类型",required:""},{default:s(()=>[t(Ae,{value:g.type,"onUpdate:value":e[5]||(e[5]=o=>g.type=o),placeholder:"请选择类型"},{default:s(()=>[t(le,{value:"token"},{default:s(()=>[...e[22]||(e[22]=[m("Token",-1)])]),_:1}),t(le,{value:"nft"},{default:s(()=>[...e[23]||(e[23]=[m("NFT",-1)])]),_:1}),t(le,{value:"data"},{default:s(()=>[...e[24]||(e[24]=[m("Data",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(h,{label:"描述"},{default:s(()=>[t(O,{value:g.description,"onUpdate:value":e[6]||(e[6]=o=>g.description=o),placeholder:"资产描述(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"])]),_:1}),t(se,{key:"transfer"},{tab:s(()=>[t(b(ie)),e[25]||(e[25]=m(" 转账 ",-1))]),default:s(()=>[t(V,{gutter:[24,24]},{default:s(()=>[t(d,{xs:24,md:12},{default:s(()=>[t(n,{title:"发起转账",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[t(te,{"label-col":{span:6},"wrapper-col":{span:18}},{default:s(()=>[t(h,{label:"资产 ID",required:""},{default:s(()=>[t(O,{value:c.assetId,"onUpdate:value":e[8]||(e[8]=o=>c.assetId=o),placeholder:"请输入资产 ID"},null,8,["value"])]),_:1}),t(h,{label:"目标地址",required:""},{default:s(()=>[t(O,{value:c.toAddress,"onUpdate:value":e[9]||(e[9]=o=>c.toAddress=o),placeholder:"请输入接收方地址"},null,8,["value"])]),_:1}),t(h,{label:"数量",required:""},{default:s(()=>[t(Ce,{value:c.amount,"onUpdate:value":e[10]||(e[10]=o=>c.amount=o),min:0,step:.01,placeholder:"转账数量",style:{width:"100%"}},null,8,["value"])]),_:1}),t(h,{"wrapper-col":{offset:6,span:18}},{default:s(()=>[t(a,{type:"primary",loading:M.value,disabled:!c.assetId.trim()||!c.toAddress.trim()||!c.amount,onClick:xe},{icon:s(()=>[t(b(ie))]),default:s(()=>[e[26]||(e[26]=m(" 确认转账 ",-1))]),_:1},8,["loading","disabled"])]),_:1})]),_:1}),w.value?(r(),_("div",Je,[t(J,{color:w.value.success?"green":"red"},{default:s(()=>[m(y(w.value.success?"成功":"失败"),1)]),_:1},8,["color"]),x("pre",Ke,y(w.value.output),1)])):k("",!0)]),_:1})]),_:1}),t(d,{xs:24,md:12},{default:s(()=>[t(n,{title:"交易历史",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:s(()=>[t(a,{size:"small",loading:B.value,onClick:H},{icon:s(()=>[t(b(K))]),_:1},8,["loading"])]),default:s(()=>[B.value?(r(),_("div",Pe,[t(Y)])):(r(),C(ee,{key:1,columns:be,"data-source":T.value,pagination:{pageSize:10,showTotal:o=>`共 ${o} 条`,size:"small"},size:"small","row-class-name":()=>"wallet-row"},{bodyCell:s(({column:o,record:p})=>[o.key==="time"?(r(),_("span",Re,y(p.time),1)):k("",!0),o.key==="type"?(r(),C(J,{key:1,color:p.type==="send"?"orange":"green"},{default:s(()=>[m(y(p.type),1)]),_:2},1032,["color"])):k("",!0),o.key==="amount"?(r(),_("span",Ze,y(p.amount),1)):k("",!0),o.key==="to"?(r(),_("span",Ee,y(p.to),1)):k("",!0)]),emptyText:s(()=>[t(Q,{description:"暂无交易记录"})]),_:1},8,["data-source","pagination"]))]),_:1})]),_:1})]),_:1}),t(ae,{open:D.value,"onUpdate:open":e[11]||(e[11]=o=>D.value=o),title:"确认转账","confirm-loading":M.value,onOk:we,"ok-text":"确认","cancel-text":"取消","ok-type":"primary"},{default:s(()=>[x("div",Ge,[e[27]||(e[27]=x("p",{style:{color:"var(--text-primary)"}},"请确认以下转账信息:",-1)),t(ze,{column:1,bordered:"",size:"small",style:{"margin-top":"12px"}},{default:s(()=>[t(oe,{label:"资产 ID"},{default:s(()=>[x("span",Xe,y(c.assetId),1)]),_:1}),t(oe,{label:"目标地址"},{default:s(()=>[x("span",Ye,y(c.toAddress),1)]),_:1}),t(oe,{label:"数量"},{default:s(()=>[x("span",Qe,y(c.amount),1)]),_:1})]),_:1})])]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},rt=Te(et,[["__scopeId","data-v-01e6c0f1"]]);export{rt as default};
@@ -1,4 +1,4 @@
1
- import{u as Ie}from"./ws-CU7Gvoom.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{H as u,p as le,J as Te,a2 as ze,K as ne,a6 as Le,L as oe}from"./antd-BQNxIyr-.js";import{o as $e,a3 as y,a1 as g,k as a,Z as l,f as r,X as s,Y as i,G as c,u as k,W as I,a5 as m,a4 as h,F as j,a7 as se}from"./vendor-CN0Iv_qZ.js";const De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Pe={key:0,style:{"text-align":"center",padding:"60px"}},We=["title"],Ne={key:1,style:{color:"var(--text-primary)"}},Re={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},je={key:4,style:{color:"var(--text-secondary)","font-size":"12px"}},Ke={key:0,style:{"text-align":"center",padding:"60px"}},Me={style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={style:{"margin-top":"16px"}},qe={key:0,style:{"text-align":"center",padding:"60px"}},Fe={style:{display:"flex","align-items":"center",gap:"16px","margin-bottom":"16px"}},Je={key:0,style:{"margin-top":"16px"}},Ee={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ye={key:0,style:{"margin-top":"16px"}},Ze={style:{background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ge={__name:"WebAuthn",setup(He){const x=Ie(),O=r("webauthn"),K=r(!1);async function re(){K.value=!0;try{O.value==="webauthn"?await P():O.value==="sso"?await E():O.value==="2fa"&&await ee()}finally{K.value=!1}}function ie(t){t==="sso"&&!q.value&&E(),t==="2fa"&&!Z.value&&ee()}function T(t){try{return JSON.parse(t)}catch{return null}}function ue(t){return t?t.length<=16?t:t.slice(0,8)+"..."+t.slice(-8):"-"}const M=r(!1),B=r(!1),L=r([]),$=r(!1),D=r(""),de=[{title:"ID",key:"id",dataIndex:"id",width:"180px"},{title:"名称",key:"name",dataIndex:"name",width:"160px"},{title:"类型",key:"type",dataIndex:"type",width:"120px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"180px"},{title:"最后使用",key:"lastUsed",dataIndex:"lastUsed",width:"180px"},{title:"操作",key:"actions",width:"100px",fixed:"right"}];async function P(){M.value=!0;try{const{output:t}=await x.execute("webauthn list --json",15e3),e=T(t);e&&Array.isArray(e)?L.value=e.map((n,v)=>({key:n.id||v,id:n.id||"-",name:n.name||n.displayName||"-",type:n.type||"public-key",createdAt:n.createdAt||n.created||"-",lastUsed:n.lastUsed||n.lastAuthentication||"-"})):e&&e.credentials?L.value=e.credentials.map((n,v)=>({key:n.id||v,id:n.id||"-",name:n.name||n.displayName||"-",type:n.type||"public-key",createdAt:n.createdAt||n.created||"-",lastUsed:n.lastUsed||n.lastAuthentication||"-"})):L.value=ce(t)}catch(t){u.error("加载 WebAuthn 凭证失败: "+t.message)}finally{M.value=!1}}function ce(t){const e=[],n=t.split(`
1
+ import{u as Ie}from"./ws-B4fo9ew1.js";import{_ as Oe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{H as u,p as le,J as Te,a2 as ze,K as ne,a6 as Le,L as oe}from"./antd-BQNxIyr-.js";import{o as $e,a3 as y,a1 as g,k as a,Z as l,f as r,X as s,Y as i,G as c,u as k,W as I,a5 as m,a4 as h,F as j,a7 as se}from"./vendor-CN0Iv_qZ.js";const De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Pe={key:0,style:{"text-align":"center",padding:"60px"}},We=["title"],Ne={key:1,style:{color:"var(--text-primary)"}},Re={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},je={key:4,style:{color:"var(--text-secondary)","font-size":"12px"}},Ke={key:0,style:{"text-align":"center",padding:"60px"}},Me={style:{color:"#e0e0e0","font-family":"monospace","font-size":"12px"}},Be={style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={style:{"margin-top":"16px"}},qe={key:0,style:{"text-align":"center",padding:"60px"}},Fe={style:{display:"flex","align-items":"center",gap:"16px","margin-bottom":"16px"}},Je={key:0,style:{"margin-top":"16px"}},Ee={style:{"white-space":"pre-wrap","word-break":"break-all",color:"#52c41a","font-size":"11px",background:"var(--bg-base)",padding:"12px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ye={key:0,style:{"margin-top":"16px"}},Ze={style:{background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}},Ge={__name:"WebAuthn",setup(He){const x=Ie(),O=r("webauthn"),K=r(!1);async function re(){K.value=!0;try{O.value==="webauthn"?await P():O.value==="sso"?await E():O.value==="2fa"&&await ee()}finally{K.value=!1}}function ie(t){t==="sso"&&!q.value&&E(),t==="2fa"&&!Z.value&&ee()}function T(t){try{return JSON.parse(t)}catch{return null}}function ue(t){return t?t.length<=16?t:t.slice(0,8)+"..."+t.slice(-8):"-"}const M=r(!1),B=r(!1),L=r([]),$=r(!1),D=r(""),de=[{title:"ID",key:"id",dataIndex:"id",width:"180px"},{title:"名称",key:"name",dataIndex:"name",width:"160px"},{title:"类型",key:"type",dataIndex:"type",width:"120px"},{title:"创建时间",key:"createdAt",dataIndex:"createdAt",width:"180px"},{title:"最后使用",key:"lastUsed",dataIndex:"lastUsed",width:"180px"},{title:"操作",key:"actions",width:"100px",fixed:"right"}];async function P(){M.value=!0;try{const{output:t}=await x.execute("webauthn list --json",15e3),e=T(t);e&&Array.isArray(e)?L.value=e.map((n,v)=>({key:n.id||v,id:n.id||"-",name:n.name||n.displayName||"-",type:n.type||"public-key",createdAt:n.createdAt||n.created||"-",lastUsed:n.lastUsed||n.lastAuthentication||"-"})):e&&e.credentials?L.value=e.credentials.map((n,v)=>({key:n.id||v,id:n.id||"-",name:n.name||n.displayName||"-",type:n.type||"public-key",createdAt:n.createdAt||n.created||"-",lastUsed:n.lastUsed||n.lastAuthentication||"-"})):L.value=ce(t)}catch(t){u.error("加载 WebAuthn 凭证失败: "+t.message)}finally{M.value=!1}}function ce(t){const e=[],n=t.split(`
2
2
  `);for(const v of n){const b=v.trim();if(!b||b.startsWith("─")||b.startsWith("No "))continue;const d=b.split(/\s*[|│]\s*/);d.length>=2&&e.push({key:e.length,id:d[0]||"-",name:d[1]||"-",type:d[2]||"public-key",createdAt:d[3]||"-",lastUsed:d[4]||"-"})}return e}async function pe(){const t=D.value.trim();if(!t){u.warning("请输入凭证名称");return}B.value=!0;try{const e=t.replace(/"/g,'\\"'),{output:n}=await x.execute(`webauthn register --name "${e}" --json`,3e4);n.includes("error")||n.includes("失败")?u.error("注册失败: "+n.slice(0,120)):(u.success("WebAuthn 凭证已注册"),$.value=!1,D.value="",await P())}catch(e){u.error("注册失败: "+e.message)}finally{B.value=!1}}async function fe(t){try{const{output:e}=await x.execute(`webauthn delete "${t.id}"`,15e3);e.includes("error")||e.includes("失败")?u.error("删除失败: "+e.slice(0,120)):(u.success("凭证已删除"),await P())}catch(e){u.error("删除失败: "+e.message)}}const V=r(!1),q=r(!1),F=r(!1),W=r(!1),p=r({provider:"",clientId:"",redirectUrl:"",enabled:!1}),f=r({provider:void 0,clientId:"",clientSecret:"",issuerUrl:""}),J=r([]);async function E(){V.value=!0;try{const{output:t}=await x.execute("sso status --json",15e3),e=T(t);if(e)p.value={provider:e.provider||"",clientId:e.clientId||e.client_id||"",redirectUrl:e.redirectUrl||e.redirect_url||e.callbackUrl||"",enabled:e.enabled||e.active||!1};else{const n=t.split(`
3
3
  `);for(const v of n){const b=v.trim().match(/^(.+?)\s*[:=:]\s*(.+)$/);if(b){const d=b[1].toLowerCase(),C=b[2].trim();d.includes("provider")?p.value.provider=C:d.includes("client")&&d.includes("id")?p.value.clientId=C:d.includes("redirect")||d.includes("callback")?p.value.redirectUrl=C:(d.includes("status")||d.includes("enabled"))&&(p.value.enabled=/true|enabled|active|已启用/i.test(C))}}}J.value=[{label:"提供商",value:p.value.provider||"未配置",color:p.value.provider?"#1677ff":"#999"},{label:"状态",value:p.value.enabled?"已启用":"未启用",color:p.value.enabled?"#52c41a":"#faad14"}],q.value=!0}catch{p.value={provider:"",clientId:"",redirectUrl:"",enabled:!1},J.value=[{label:"提供商",value:"未配置",color:"#999"},{label:"状态",value:"未启用",color:"#faad14"}],q.value=!0}finally{V.value=!1}}async function ve(){if(!f.value.provider){u.warning("请选择 SSO 提供商");return}if(!f.value.clientId.trim()){u.warning("请输入 Client ID");return}F.value=!0;try{const t=[`config set sso.provider ${f.value.provider}`,`config set sso.clientId ${f.value.clientId.trim()}`];f.value.clientSecret.trim()&&t.push(`config set sso.clientSecret ${f.value.clientSecret.trim()}`),f.value.issuerUrl.trim()&&t.push(`config set sso.issuerUrl ${f.value.issuerUrl.trim()}`);for(const e of t)await x.execute(e,1e4);u.success("SSO 配置已保存"),W.value=!1,await E()}catch(t){u.error("保存失败: "+t.message)}finally{F.value=!1}}const Y=r(!1),Z=r(!1),w=r(!1),U=r(!1),A=r(""),G=r(!1),S=r([]);async function ee(){Y.value=!0;try{const{output:t}=await x.execute("auth 2fa status --json",15e3),e=T(t);e?w.value=e.enabled||e.active||!1:w.value=/enabled|已启用|active/i.test(t),Z.value=!0}catch{w.value=!1,Z.value=!0}finally{Y.value=!1}}async function ye(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa enable --type totp --json",2e4);if(t.includes("error")||t.includes("失败"))u.error("启用失败: "+t.slice(0,120));else{const e=T(t);e&&e.secret?A.value=`TOTP Secret: ${e.secret}
4
4
  OTP Auth URL: ${e.otpAuthUrl||e.uri||""}`:A.value=t,w.value=!0,u.success("TOTP 已启用")}}catch(t){u.error("启用失败: "+t.message)}finally{U.value=!1}}async function me(){U.value=!0,A.value="";try{const{output:t}=await x.execute("auth 2fa disable",15e3);t.includes("error")||t.includes("失败")?u.error("禁用失败: "+t.slice(0,120)):(w.value=!1,u.success("双因素认证已禁用"))}catch(t){u.error("禁用失败: "+t.message)}finally{U.value=!1}}async function be(){G.value=!0,S.value=[];try{const{output:t}=await x.execute("auth 2fa recovery-codes --json",15e3),e=T(t);if(e&&Array.isArray(e.codes))S.value=e.codes;else if(e&&Array.isArray(e))S.value=e;else{const n=t.split(`
@@ -0,0 +1 @@
1
+ import{V as M,f as g,r as w}from"./vendor-CN0Iv_qZ.js";import{u as f}from"./ws-B4fo9ew1.js";const S="新对话",T="新 Agent",b={"assistant.delta":"response-token","assistant.final":"response-complete","assistant.message":"response-complete","tool.call.started":"tool-executing","tool.call.completed":"tool-result","tool.call.failed":"tool-result","slot.filling":"question","approval.requested":"question",error:"error"},U=M("chat",()=>{const c=g([]),p=g(null),i=w({}),a=w({}),m=w({}),d=g(!1);let q=null;const A=new Set;function h(t){return i[t]||(i[t]=[]),i[t]}function y(t){if(!t?.id)return;const e=c.value.find(n=>n.id===t.id);if(e){Object.assign(e,t);return}c.value.unshift(t)}function C(t,e=f()){i[t]||(i[t]=[]),a[t]||(a[t]={content:"",active:!1}),!A.has(t)&&(A.add(t),e.onSession(t,n=>_(t,n)))}function v(t=f()){q||(q=t.onRuntimeEvent(e=>{const n=e.payload||{},s=n.record||{};if(e.type==="session:start"){const o=n.sessionType||s.type||"chat";y({id:n.sessionId,type:o,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"created",title:o==="chat"?S:T,createdAt:Date.now(),messageCount:s.messageCount??0})}else if(e.type==="session:resume"){const o=n.sessionId;if(!o)return;Array.isArray(n.history)&&(i[o]=n.history.map(r=>({role:r.role,content:r.content,timestamp:r.timestamp||Date.now()}))),a[o]||(a[o]={content:"",active:!1}),y({id:o,type:s.type||null,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"resumed",messageCount:s.messageCount??(Array.isArray(n.history)?n.history.length:0)})}else if(e.type==="session:end"){const o=n.sessionId;c.value=c.value.filter(r=>r.id!==o),p.value===o&&(p.value=c.value[0]?.id||null)}}))}async function D(){const t=f();v(t),c.value=await t.listSessions()}async function E(t="chat",e={}){const n=f();v(n);const s=await n.createSession(t,null,e);return y({id:s,type:t,title:t==="chat"?S:T,createdAt:Date.now(),messageCount:0}),C(s,n),p.value=s,s}function _(t,e){const n=h(t),s=b[e.type]||e.type,o=e.payload||{};if(s==="response-token"){a[t]||(a[t]={content:"",active:!0});const r=e.token||o.token||o.delta||o.content||"";a[t].content+=r,a[t].active=!0}else if(s==="response-complete"){const r=e.content||o.content||a[t]?.content||"";n.push({role:"assistant",content:r,timestamp:Date.now()}),a[t]&&(a[t].content="",a[t].active=!1);const l=c.value.find(u=>u.id===t);if(l&&(l.title===S||l.title===T)){const u=n.find(j=>j.role==="user");u&&(l.title=u.content.slice(0,30))}l&&(l.messageCount=n.filter(u=>u.role!=="tool").length),d.value=!1}else if(s==="tool-executing")n.push({role:"tool",tool:e.tool||o.tool||o.toolName||"unknown",input:e.input||o.input||o.args||null,status:"running",timestamp:Date.now()});else if(s==="tool-result"){const r=e.tool||o.tool||o.toolName||"unknown",l=[...n].reverse().find(u=>u.role==="tool"&&u.tool===r);l&&(l.result=e.result||o.result||o.output||null,l.status="done")}else if(s==="question")m[t]={requestId:e.requestId||o.requestId||e.id,question:e.question||o.question||o.message||"",choices:e.choices||o.choices||o.options||[]};else if(s==="error"){const r=e.message||o.message||"Unknown error";n.push({role:"assistant",content:`Error: ${r}`,timestamp:Date.now()}),d.value=!1,a[t]&&(a[t].active=!1)}}async function k(t,e){const n=f();v(n),h(t).push({role:"user",content:e,timestamp:Date.now()}),a[t]||(a[t]={content:"",active:!1}),a[t].active=!0,d.value=!0,n.sendSessionMessage(t,e)}function R(t,e){const n=f(),s=m[t];s&&(n.answerQuestion(t,s.requestId,e),delete m[t])}async function L(t){const e=f();if(v(e),p.value=t,C(t,e),!i[t]||i[t].length===0)try{await e.resumeSession(t)}catch{}}return{sessions:c,currentSessionId:p,messages:i,streaming:a,pendingQuestion:m,isLoading:d,loadSessions:D,createSession:E,sendMessage:k,answerQuestion:R,switchSession:L,getMessages:h}});export{U as u};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-CP9fATUN.js","./vendor-CN0Iv_qZ.js","./ws-CU7Gvoom.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-BQNxIyr-.js","./AppLayout-cxfKLu-m.css","./Dashboard-D2vCkoGu.js","./chat-DWBA4-cl.js","./Dashboard-CKeMmCoT.css","./Chat-DDUJZJ9I.js","./markdown-BeVIhIzs.js","./Chat-DfR76jyX.css","./github-dark-Dfs9RUU9.css","./Cowork-XRFqGfqJ.js","./Cowork-CPqYhoMI.css","./Services-Cnm5Zs5h.js","./Services-C8Qs6KXv.css","./Logs-4VgUbfP0.js","./Logs-Gf_Mv9Nx.css","./Skills-BHapMb9h.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-CCfGeqh_.js","./Providers-BEakqcO5.css","./McpTools-ChaiHoWY.js","./McpTools-CyhSLDwf.css","./Notes-wc_n6Rh1.js","./Notes-BG69sJKi.css","./Memory-PFtpuOwf.js","./Memory-DRghrGJr.css","./Cron-BnWzy_ZB.js","./Tasks-DPb9OMck.js","./Tasks-BJjN_YEm.css","./Security-CcfBWT1D.js","./Security-Dwxw7rfP.css","./Permissions-CpE-Ar1e.js","./Permissions-C9WlkGl-.css","./P2P-DIG2gnR8.js","./P2P-OEzOeMZX.css","./Git-DYlvK4sh.js","./Git-DGcuBXST.css","./Projects-GjuS-C6U.js","./Projects-DxKelI5h.css","./Wallet-BJV5KmWA.js","./Wallet-DnIumafl.css","./Organization-D1qUa8NQ.js","./Organization-DdOOM4ic.css","./Analytics-Dd2DjBH5.js","./Analytics-B4OM8S8X.css","./Templates-Dij5t-rf.js","./Templates-DOY_oZnm.css","./Backup-D6Tc7sf3.js","./Backup-fZqtfC1m.css","./RssFeed-5TkrXK7Z.js","./RssFeed-BlFC20eg.css","./WebAuthn-DLkvYwSc.js","./WebAuthn-CNPl2VQR.css"])))=>i.map(i=>d[i]);
2
- import{S as B,U as L,V as I,f as T,c as E,o as R,W as O,u as k,X as y,Y as V,Z as x,k as D,R as S,_ as w}from"./vendor-CN0Iv_qZ.js";import{a as g,A as M}from"./antd-BQNxIyr-.js";(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))m(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const n of o.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&m(n)}).observe(document,{childList:!0,subtree:!0});function c(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function m(t){if(t.ep)return;t.ep=!0;const o=c(t);fetch(t.href,o)}})();const C="modulepreload",N=function(s,a){return new URL(s,a).href},P={},e=function(a,c,m){let t=Promise.resolve();if(c&&c.length>0){let b=function(i){return Promise.all(i.map(d=>Promise.resolve(d).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};const n=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),u=r?.nonce||r?.getAttribute("nonce");t=b(c.map(i=>{if(i=N(i,m),i in P)return;P[i]=!0;const d=i.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(m)for(let f=n.length-1;f>=0;f--){const _=n[f];if(_.href===i&&(!d||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${p}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":C,d||(l.as="script"),l.crossOrigin="",l.href=i,u&&l.setAttribute("nonce",u),document.head.appendChild(l),d)return new Promise((f,_)=>{l.addEventListener("load",f),l.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${i}`)))})}))}function o(n){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=n,window.dispatchEvent(r),!r.defaultPrevented)throw n}return t.then(n=>{for(const r of n||[])r.status==="rejected"&&o(r.reason);return a().catch(o)})},U=[{path:"/",component:()=>e(()=>import("./AppLayout-CP9fATUN.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>e(()=>import("./Dashboard-D2vCkoGu.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>e(()=>import("./Chat-DDUJZJ9I.js"),__vite__mapDeps([9,1,10,4,7,2,3,11,12]),import.meta.url)},{path:"cowork",name:"Cowork",component:()=>e(()=>import("./Cowork-XRFqGfqJ.js"),__vite__mapDeps([13,1,10,4,2,7,3,14,12]),import.meta.url)},{path:"services",name:"Services",component:()=>e(()=>import("./Services-Cnm5Zs5h.js"),__vite__mapDeps([15,2,1,3,4,16]),import.meta.url)},{path:"logs",name:"Logs",component:()=>e(()=>import("./Logs-4VgUbfP0.js"),__vite__mapDeps([17,2,1,3,4,18]),import.meta.url)},{path:"skills",name:"Skills",component:()=>e(()=>import("./Skills-BHapMb9h.js"),__vite__mapDeps([19,1,2,20,7,3,4,21]),import.meta.url)},{path:"providers",name:"Providers",component:()=>e(()=>import("./Providers-CCfGeqh_.js"),__vite__mapDeps([22,1,2,20,3,4,23]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>e(()=>import("./McpTools-ChaiHoWY.js"),__vite__mapDeps([24,2,1,3,4,25]),import.meta.url)},{path:"notes",name:"Notes",component:()=>e(()=>import("./Notes-wc_n6Rh1.js"),__vite__mapDeps([26,2,1,3,4,27]),import.meta.url)},{path:"memory",name:"Memory",component:()=>e(()=>import("./Memory-PFtpuOwf.js"),__vite__mapDeps([28,2,1,3,4,29]),import.meta.url)},{path:"cron",name:"Cron",component:()=>e(()=>import("./Cron-BnWzy_ZB.js"),__vite__mapDeps([30,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>e(()=>import("./Tasks-DPb9OMck.js"),__vite__mapDeps([31,1,2,3,4,32]),import.meta.url)},{path:"security",name:"Security",component:()=>e(()=>import("./Security-CcfBWT1D.js"),__vite__mapDeps([33,2,1,3,4,34]),import.meta.url)},{path:"permissions",name:"Permissions",component:()=>e(()=>import("./Permissions-CpE-Ar1e.js"),__vite__mapDeps([35,2,1,3,4,36]),import.meta.url)},{path:"p2p",name:"P2P",component:()=>e(()=>import("./P2P-DIG2gnR8.js"),__vite__mapDeps([37,2,1,3,4,38]),import.meta.url)},{path:"git",name:"Git",component:()=>e(()=>import("./Git-DYlvK4sh.js"),__vite__mapDeps([39,2,1,3,4,40]),import.meta.url)},{path:"projects",name:"Projects",component:()=>e(()=>import("./Projects-GjuS-C6U.js"),__vite__mapDeps([41,2,1,3,4,42]),import.meta.url)},{path:"wallet",name:"Wallet",component:()=>e(()=>import("./Wallet-BJV5KmWA.js"),__vite__mapDeps([43,2,1,3,4,44]),import.meta.url)},{path:"organization",name:"Organization",component:()=>e(()=>import("./Organization-D1qUa8NQ.js"),__vite__mapDeps([45,1,2,3,4,46]),import.meta.url)},{path:"analytics",name:"Analytics",component:()=>e(()=>import("./Analytics-Dd2DjBH5.js"),__vite__mapDeps([47,2,1,3,4,48]),import.meta.url)},{path:"templates",name:"Templates",component:()=>e(()=>import("./Templates-Dij5t-rf.js"),__vite__mapDeps([49,1,2,3,4,50]),import.meta.url)},{path:"backup",name:"Backup",component:()=>e(()=>import("./Backup-D6Tc7sf3.js"),__vite__mapDeps([51,2,1,3,4,52]),import.meta.url)},{path:"rssfeed",name:"RssFeed",component:()=>e(()=>import("./RssFeed-5TkrXK7Z.js"),__vite__mapDeps([53,1,2,3,4,54]),import.meta.url)},{path:"webauthn",name:"WebAuthn",component:()=>e(()=>import("./WebAuthn-DLkvYwSc.js"),__vite__mapDeps([55,2,1,3,4,56]),import.meta.url)}]}],F=B({history:L(),routes:U}),A="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:g.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},j=I("theme",()=>{const s=T(localStorage.getItem(A)||"light"),a=E(()=>v[s.value]||v.dark),c=E(()=>a.value.antd),m=E(()=>s.value!=="light");function t(){const r=a.value.vars,u=document.documentElement;for(const[b,i]of Object.entries(r))u.style.setProperty(b,i);u.setAttribute("data-theme",s.value)}function o(r){v[r]&&(s.value=r,localStorage.setItem(A,r),t())}function n(){t()}return{current:s,config:a,antdTheme:c,isDark:m,setTheme:o,init:n}}),W={__name:"App",setup(s){const a=j();return R(()=>a.init()),(c,m)=>{const t=y("router-view"),o=y("a-config-provider");return V(),O(o,{theme:k(a).antdTheme},{default:x(()=>[D(t)]),_:1},8,["theme"])}}},h=S(W);h.use(w());h.use(F);h.use(M);h.mount("#app");export{v as T,j as u};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-Dk1eV3Xp.js","./vendor-CN0Iv_qZ.js","./ws-B4fo9ew1.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-BQNxIyr-.js","./AppLayout-cxfKLu-m.css","./Dashboard-DSOE-azo.js","./chat-BwUxWn7i.js","./Dashboard-CKeMmCoT.css","./Chat-DSbYaPuD.js","./markdown-BeVIhIzs.js","./Chat-DfR76jyX.css","./github-dark-Dfs9RUU9.css","./Cowork-DY0Jcql7.js","./Cowork-CPqYhoMI.css","./Services-BFMDfXE5.js","./Services-C8Qs6KXv.css","./Logs-BUKXg48N.js","./Logs-Gf_Mv9Nx.css","./Skills-BAf_mFKw.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-D0kMUvHz.js","./Providers-BEakqcO5.css","./McpTools-WVxDlw0C.js","./McpTools-CyhSLDwf.css","./Notes-CFypT876.js","./Notes-BG69sJKi.css","./Memory-BLFTgTpY.js","./Memory-DRghrGJr.css","./Cron-BcH0ckxq.js","./Tasks-DuNOWfjU.js","./Tasks-BJjN_YEm.css","./Security-BR4hAAkF.js","./Security-Dwxw7rfP.css","./Permissions-CidrpFWd.js","./Permissions-C9WlkGl-.css","./P2P-D9xrbb8q.js","./P2P-OEzOeMZX.css","./Git-zd3CuuXJ.js","./Git-DGcuBXST.css","./Projects-D3Ycn8xG.js","./Projects-DxKelI5h.css","./Wallet-vgS5USvW.js","./Wallet-DnIumafl.css","./Organization-BOOqeyu_.js","./Organization-DdOOM4ic.css","./Analytics-CoH0P1ux.js","./Analytics-B4OM8S8X.css","./Templates-buh__Yll.js","./Templates-DOY_oZnm.css","./Backup-Cv97eAjW.js","./Backup-fZqtfC1m.css","./RssFeed-OQLesJxb.js","./RssFeed-BlFC20eg.css","./WebAuthn-BoL2UJ5Z.js","./WebAuthn-CNPl2VQR.css"])))=>i.map(i=>d[i]);
2
+ import{S as B,U as L,V as I,f as T,c as E,o as R,W as O,u as k,X as y,Y as V,Z as x,k as D,R as S,_ as w}from"./vendor-CN0Iv_qZ.js";import{a as g,A as M}from"./antd-BQNxIyr-.js";(function(){const a=document.createElement("link").relList;if(a&&a.supports&&a.supports("modulepreload"))return;for(const t of document.querySelectorAll('link[rel="modulepreload"]'))m(t);new MutationObserver(t=>{for(const o of t)if(o.type==="childList")for(const n of o.addedNodes)n.tagName==="LINK"&&n.rel==="modulepreload"&&m(n)}).observe(document,{childList:!0,subtree:!0});function c(t){const o={};return t.integrity&&(o.integrity=t.integrity),t.referrerPolicy&&(o.referrerPolicy=t.referrerPolicy),t.crossOrigin==="use-credentials"?o.credentials="include":t.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function m(t){if(t.ep)return;t.ep=!0;const o=c(t);fetch(t.href,o)}})();const C="modulepreload",N=function(s,a){return new URL(s,a).href},P={},e=function(a,c,m){let t=Promise.resolve();if(c&&c.length>0){let b=function(i){return Promise.all(i.map(d=>Promise.resolve(d).then(p=>({status:"fulfilled",value:p}),p=>({status:"rejected",reason:p}))))};const n=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),u=r?.nonce||r?.getAttribute("nonce");t=b(c.map(i=>{if(i=N(i,m),i in P)return;P[i]=!0;const d=i.endsWith(".css"),p=d?'[rel="stylesheet"]':"";if(m)for(let f=n.length-1;f>=0;f--){const _=n[f];if(_.href===i&&(!d||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${i}"]${p}`))return;const l=document.createElement("link");if(l.rel=d?"stylesheet":C,d||(l.as="script"),l.crossOrigin="",l.href=i,u&&l.setAttribute("nonce",u),document.head.appendChild(l),d)return new Promise((f,_)=>{l.addEventListener("load",f),l.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${i}`)))})}))}function o(n){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=n,window.dispatchEvent(r),!r.defaultPrevented)throw n}return t.then(n=>{for(const r of n||[])r.status==="rejected"&&o(r.reason);return a().catch(o)})},U=[{path:"/",component:()=>e(()=>import("./AppLayout-Dk1eV3Xp.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>e(()=>import("./Dashboard-DSOE-azo.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>e(()=>import("./Chat-DSbYaPuD.js"),__vite__mapDeps([9,1,10,4,7,2,3,11,12]),import.meta.url)},{path:"cowork",name:"Cowork",component:()=>e(()=>import("./Cowork-DY0Jcql7.js"),__vite__mapDeps([13,1,10,4,2,7,3,14,12]),import.meta.url)},{path:"services",name:"Services",component:()=>e(()=>import("./Services-BFMDfXE5.js"),__vite__mapDeps([15,2,1,3,4,16]),import.meta.url)},{path:"logs",name:"Logs",component:()=>e(()=>import("./Logs-BUKXg48N.js"),__vite__mapDeps([17,2,1,3,4,18]),import.meta.url)},{path:"skills",name:"Skills",component:()=>e(()=>import("./Skills-BAf_mFKw.js"),__vite__mapDeps([19,1,2,20,7,3,4,21]),import.meta.url)},{path:"providers",name:"Providers",component:()=>e(()=>import("./Providers-D0kMUvHz.js"),__vite__mapDeps([22,1,2,20,3,4,23]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>e(()=>import("./McpTools-WVxDlw0C.js"),__vite__mapDeps([24,2,1,3,4,25]),import.meta.url)},{path:"notes",name:"Notes",component:()=>e(()=>import("./Notes-CFypT876.js"),__vite__mapDeps([26,2,1,3,4,27]),import.meta.url)},{path:"memory",name:"Memory",component:()=>e(()=>import("./Memory-BLFTgTpY.js"),__vite__mapDeps([28,2,1,3,4,29]),import.meta.url)},{path:"cron",name:"Cron",component:()=>e(()=>import("./Cron-BcH0ckxq.js"),__vite__mapDeps([30,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>e(()=>import("./Tasks-DuNOWfjU.js"),__vite__mapDeps([31,1,2,3,4,32]),import.meta.url)},{path:"security",name:"Security",component:()=>e(()=>import("./Security-BR4hAAkF.js"),__vite__mapDeps([33,2,1,3,4,34]),import.meta.url)},{path:"permissions",name:"Permissions",component:()=>e(()=>import("./Permissions-CidrpFWd.js"),__vite__mapDeps([35,2,1,3,4,36]),import.meta.url)},{path:"p2p",name:"P2P",component:()=>e(()=>import("./P2P-D9xrbb8q.js"),__vite__mapDeps([37,2,1,3,4,38]),import.meta.url)},{path:"git",name:"Git",component:()=>e(()=>import("./Git-zd3CuuXJ.js"),__vite__mapDeps([39,2,1,3,4,40]),import.meta.url)},{path:"projects",name:"Projects",component:()=>e(()=>import("./Projects-D3Ycn8xG.js"),__vite__mapDeps([41,2,1,3,4,42]),import.meta.url)},{path:"wallet",name:"Wallet",component:()=>e(()=>import("./Wallet-vgS5USvW.js"),__vite__mapDeps([43,2,1,3,4,44]),import.meta.url)},{path:"organization",name:"Organization",component:()=>e(()=>import("./Organization-BOOqeyu_.js"),__vite__mapDeps([45,1,2,3,4,46]),import.meta.url)},{path:"analytics",name:"Analytics",component:()=>e(()=>import("./Analytics-CoH0P1ux.js"),__vite__mapDeps([47,2,1,3,4,48]),import.meta.url)},{path:"templates",name:"Templates",component:()=>e(()=>import("./Templates-buh__Yll.js"),__vite__mapDeps([49,1,2,3,4,50]),import.meta.url)},{path:"backup",name:"Backup",component:()=>e(()=>import("./Backup-Cv97eAjW.js"),__vite__mapDeps([51,2,1,3,4,52]),import.meta.url)},{path:"rssfeed",name:"RssFeed",component:()=>e(()=>import("./RssFeed-OQLesJxb.js"),__vite__mapDeps([53,1,2,3,4,54]),import.meta.url)},{path:"webauthn",name:"WebAuthn",component:()=>e(()=>import("./WebAuthn-BoL2UJ5Z.js"),__vite__mapDeps([55,2,1,3,4,56]),import.meta.url)}]}],F=B({history:L(),routes:U}),A="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:g.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:g.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},j=I("theme",()=>{const s=T(localStorage.getItem(A)||"light"),a=E(()=>v[s.value]||v.dark),c=E(()=>a.value.antd),m=E(()=>s.value!=="light");function t(){const r=a.value.vars,u=document.documentElement;for(const[b,i]of Object.entries(r))u.style.setProperty(b,i);u.setAttribute("data-theme",s.value)}function o(r){v[r]&&(s.value=r,localStorage.setItem(A,r),t())}function n(){t()}return{current:s,config:a,antdTheme:c,isDark:m,setTheme:o,init:n}}),W={__name:"App",setup(s){const a=j();return R(()=>a.init()),(c,m)=>{const t=y("router-view"),o=y("a-config-provider");return V(),O(o,{theme:k(a).antdTheme},{default:x(()=>[D(t)]),_:1},8,["theme"])}}},h=S(W);h.use(w());h.use(F);h.use(M);h.mount("#app");export{v as T,j as u};
@@ -0,0 +1 @@
1
+ import{V as U,f as I,c as B}from"./vendor-CN0Iv_qZ.js";let F=0;const v=()=>`wp-${++F}`,b=new Set;function d(e,r={},n={}){return{type:e,kind:n.kind||"server",sessionId:n.sessionId||r.sessionId||null,timestamp:n.timestamp||Date.now(),payload:r}}function G(e){const r=e?.type,n=e?.payload||{};switch(r){case"task:notification":return d("task:notification",{task:e.task||n.task},{kind:"server"});case"session-created":case"session.started":return d("session:start",{sessionId:e.sessionId||n.sessionId,sessionType:e.sessionType||n.sessionType||null,record:e.record||n.record||{id:e.sessionId||n.sessionId,type:e.sessionType||n.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId||n.sessionId});case"session-resumed":case"session.resumed":{const u=e.sessionId||n.sessionId,c=e.history||n.history||[];return d("session:resume",{sessionId:u,history:c,historyCount:Array.isArray(c)?c.length:0,record:e.record||n.record||{id:u,type:null,status:"resumed",history:c,messageCount:Array.isArray(c)?c.length:0}},{kind:"server",sessionId:u})}case"worktree-diff":case"worktree.diff":return d("worktree:diff:ready",{requestId:e.requestId||e.id||null,record:e.record||n.record||{branch:e.branch||n.branch||null,summary:e.summary||n.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||n.branch||null}]}},{kind:"server"});case"worktree-merged":case"worktree.merged":return d("worktree:merge:completed",{requestId:e.requestId||e.id||null,record:e.record||n.record||{branch:e.branch||n.branch||null,summary:e.summary||n.summary||null,conflicts:e.conflicts||n.conflicts||[],previewEntrypoints:e.previewEntrypoints||n.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":case"context.compaction.completed":return d("compression:summary",{requestId:e.requestId||e.id||null,summary:e.summary||n.summary||{}},{kind:"server"});default:return null}}function P(e,r=null){b.forEach(n=>n(e,r||e))}function Q(e){if(!e)return null;const r=e.record||{id:e.id||null,type:e.type||null,provider:e.provider||null,model:e.model||null,projectRoot:e.projectRoot||null,messageCount:e.messageCount??0,history:e.history||[],status:e.status||null};return{...e,id:e.id||r.id,type:e.type||r.type,provider:e.provider||r.provider,model:e.model||r.model,projectRoot:e.projectRoot||r.projectRoot,messageCount:e.messageCount??r.messageCount??0,status:e.status||r.status||null,record:r}}const K=U("ws",()=>{const e=I(null),r=I("disconnected"),n=I(null),u=new Map,c=new Map;let C=null,m=1e3;const y=window.__CC_CONFIG__||{},R=B(()=>`ws://${y.wsHost||"127.0.0.1"}:${y.wsPort||18800}`);function h(){if(e.value?.readyState!==WebSocket.OPEN){r.value="connecting",n.value=null;try{const t=new WebSocket(R.value);e.value=t,t.onopen=()=>{m=1e3,y.wsToken?l({type:"auth",id:v(),token:y.wsToken}).then(()=>{r.value="connected"}).catch(()=>{r.value="connected"}):r.value="connected"},t.onmessage=o=>{let s;try{s=JSON.parse(o.data)}catch{return}x(s)},t.onerror=()=>{n.value="WebSocket error",r.value="error"},t.onclose=()=>{r.value="disconnected",e.value=null,u.forEach(({reject:o})=>o(new Error("WebSocket closed"))),u.clear(),C=setTimeout(()=>{m=Math.min(m*2,3e4),h()},m)}}catch(t){r.value="error",n.value=t.message}}}function W(){clearTimeout(C),e.value?.close(),e.value=null,r.value="disconnected"}function T(t){if(!t.version&&!t.payload)return t;const o=t.payload||{};return{...t,...o,type:t.type,sessionId:t.sessionId||o.sessionId||null}}function x(t){const{type:o}=t,s=t.requestId||t.id;let i=!1;if(s&&u.has(s)){const{resolve:w,reject:O,timeout:S}=u.get(s);clearTimeout(S),u.delete(s),i=!0;const E=T(t);E.id=s,o==="error"?O(new Error(E.message||"Unknown error")):w(E)}const a=t.sessionId||t.payload&&t.payload.sessionId||null;if(a&&c.has(a)){const w=T(t);c.get(a).forEach(S=>S(w))}k.forEach(w=>w(t));const f=G(t);return f&&P(f,t),i}const k=new Set;function q(t){return k.add(t),()=>k.delete(t)}function J(t){return b.add(t),()=>b.delete(t)}function j(t,o){return c.has(t)||c.set(t,new Set),c.get(t).add(o),()=>{c.get(t)?.delete(o),c.get(t)?.size===0&&c.delete(t)}}function l(t,o=15e3){return new Promise((s,i)=>{if(e.value?.readyState!==WebSocket.OPEN){i(new Error("WebSocket not connected"));return}const a=t.id||v(),f=setTimeout(()=>{u.delete(a),i(new Error("Request timeout"))},o);u.set(a,{resolve:s,reject:i,timeout:f}),e.value.send(JSON.stringify({...t,id:a}))})}function p(t=8e3){return r.value==="connected"?Promise.resolve():new Promise((o,s)=>{const i=Date.now()+t,a=()=>{if(r.value==="connected")return o();if(r.value==="error"||Date.now()>=i)return s(new Error(`WS not ready: ${r.value}`));setTimeout(a,150)};r.value==="disconnected"&&h(),a()})}async function N(t,o=3e4){await p(8e3);const s=await l({type:"execute",command:t},o),i=s.output??s.stdout??"",a=s.stderr??"";return{output:i||a,exitCode:s.exitCode??0}}async function M(t,o=3e4){const{output:s,exitCode:i}=await N(t,o);if(i!==0)throw new Error(`Command failed: ${s}`);try{return JSON.parse(s.trim())}catch{const a=s.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(a)return JSON.parse(a[0]);throw new Error(`Invalid JSON output: ${s.slice(0,200)}`)}}async function _(t="chat",o=null,s={}){await p(8e3);const a={type:"session-create",id:v(),sessionType:t,projectRoot:o||y.projectRoot||null};return s.systemPromptExtension&&(a.systemPromptExtension=s.systemPromptExtension),(await l(a)).sessionId}function $(t,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:v(),sessionId:t,content:o}))}function A(t,o,s){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:v(),sessionId:t,requestId:o,answer:s}))}async function D(){return await p(8e3),((await l({type:"session-list"},1e4)).sessions||[]).map(Q).filter(Boolean)}async function H(t){try{await l({type:"session-close",sessionId:t},5e3),P(d("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function z(t){return await p(8e3),await l({type:"session-resume",sessionId:t},1e4)}return{status:r,error:n,wsUrl:R,connect:h,disconnect:W,waitConnected:p,onMessage:q,onRuntimeEvent:J,onSession:j,sendRaw:l,execute:N,executeJson:M,createSession:_,resumeSession:z,sendSessionMessage:$,answerQuestion:A,listSessions:D,closeSession:H}});export{K as u};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-CB5YlndO.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-CCRLEutJ.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-CN0Iv_qZ.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/antd-BQNxIyr-.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-CyGyEIVX.css">
@@ -81,6 +81,7 @@ export async function handleSessionCreate(server, id, ws, message) {
81
81
  enabledToolNames,
82
82
  hostManagedToolPolicy,
83
83
  worktreeIsolation,
84
+ systemPromptExtension,
84
85
  } = message;
85
86
 
86
87
  try {
@@ -94,6 +95,7 @@ export async function handleSessionCreate(server, id, ws, message) {
94
95
  enabledToolNames,
95
96
  hostManagedToolPolicy,
96
97
  worktreeIsolation,
98
+ systemPromptExtension,
97
99
  });
98
100
 
99
101
  const session = server.sessionManager.getSession(sessionId);
@@ -318,7 +318,12 @@ export class WSSessionManager {
318
318
  }
319
319
 
320
320
  // Build initial system prompt (includes persona + rules.md)
321
- const systemPrompt = buildSystemPrompt(projectRoot);
321
+ let systemPrompt = buildSystemPrompt(projectRoot);
322
+
323
+ // Append optional extension (e.g. cowork template instructions)
324
+ if (options.systemPromptExtension) {
325
+ systemPrompt += "\n\n" + options.systemPromptExtension;
326
+ }
322
327
 
323
328
  const messages = [{ role: "system", content: systemPrompt }];
324
329
 
@@ -1,48 +0,0 @@
1
- import{V as ee,f as m,c as D,w as te,o as se,a3 as o,a1 as n,k as g,u as a,F as y,a7 as k,a2 as E,A as V,a5 as d,a4 as F,W as w,a6 as H,Z as S,a9 as ae,X as x,Y as l,G as B,n as J}from"./vendor-CN0Iv_qZ.js";import{m as K,H as U}from"./markdown-BeVIhIzs.js";/* empty css */import{u as ne}from"./ws-CU7Gvoom.js";import{u as T}from"./chat-DWBA4-cl.js";import{_ as le}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as P,T as oe,v as W,o as ie,G as ce,r as re,j as ue,w as de,x as pe,m as me,y as ve,b as ge,u as he}from"./antd-BQNxIyr-.js";const Z=[{id:"doc-convert",name:"文档格式转换",icon:"FileTextOutlined",category:"document",description:"Word、Markdown、HTML、PDF 之间的格式互转",examples:["把 report.docx 转成 PDF","合并多个 Markdown 为一个文档","把 Excel 导出为 PDF"],acceptsFiles:!0},{id:"media-process",name:"音视频处理",icon:"PlayCircleOutlined",category:"media",description:"视频压缩、音频提取、格式转换、剪辑",examples:["提取 MP4 的音频","压缩视频到 50MB 以内","剪辑 10:30 到 25:00 的片段"],acceptsFiles:!0},{id:"data-analysis",name:"数据分析",icon:"BarChartOutlined",category:"data",description:"CSV/Excel 分析、统计、可视化图表",examples:["分析 sales.csv 的月度趋势","清洗数据去重修复格式","比较两个 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","加水印文字","识别图上的文字 (OCR)"],acceptsFiles:!0},{id:"code-helper",name:"代码辅助",icon:"CodeOutlined",category:"development",description:"生成脚本、调试代码、自动化任务",examples:["写一个批量重命名脚本","调试这段报错代码","生成 REST API 脚手架"],acceptsFiles:!0},{id:"system-admin",name:"系统运维",icon:"DesktopOutlined",category:"system",description:"磁盘分析、进程管理、日志分析",examples:["查看磁盘使用情况","找出最大的 10 个文件","列出占用端口的进程"],acceptsFiles:!1},{id:"file-organize",name:"文件整理",icon:"FolderOpenOutlined",category:"file",description:"批量重命名、分类整理、查找重复",examples:["按文件类型分类整理","批量重命名去空格","打包排除 node_modules"],acceptsFiles:!1},{id:"network-tools",name:"网络工具",icon:"GlobalOutlined",category:"network",description:"API 调试、网页抓取、网络诊断",examples:["测试 API 接口","抓取网页图片链接","ping 测试网络延迟"],acceptsFiles:!1},{id:"learning-assist",name:"学习辅助",icon:"ReadOutlined",category:"learning",description:"文档翻译、内容总结、论文分析",examples:["翻译 PDF 摘要","总结长文档要点","解释代码工作原理"],acceptsFiles:!0}],_e=ee("cowork",()=>{const b=m(null),t=m([]),v=m(!1),_=m([]),p=m([]),h=m(null),r=m(null);function I(e){b.value=e,C()}function C(){_.value=[],p.value=[],h.value=null,v.value=!1,r.value=null}function G(e){t.value.includes(e)||t.value.push(e)}function N(e){t.value=t.value.filter(c=>c!==e)}const A=`## 开源工具优先 + 自动安装规则
2
-
3
- ### 第一步: 检查 cli-anything 已注册技能
4
- 先执行 list_skills 查看是否已有 cli-anything-* 技能(如 cli-anything-ffmpeg、cli-anything-pandoc)。
5
- 如果有,优先用 run_skill 调用:
6
- run_skill cli-anything-ffmpeg "用户的自然语言需求"
7
- cli-anything 会自动将自然语言翻译为正确的 CLI 命令,成功率更高。
8
-
9
- ### 第二步: 工具不存在时自动安装
10
- 当所需工具未安装时,直接自动安装,不要询问用户:
11
- 1. Python 包 (pandas/Pillow/pytesseract/...): run_code 的 auto-install 自动处理
12
- 2. npm 包: run_shell: npm install -g <package>
13
- 3. 系统级开源工具:
14
- - Windows: winget install <winget-id> --accept-package-agreements --accept-source-agreements
15
- - 备选: choco install <pkg> -y
16
- - macOS: brew install <pkg>
17
- 4. 安装后验证: <tool> --version
18
- 5. 只有在安装失败且无替代方案时才告知用户
19
-
20
- ### 第三步: 尝试注册为 cli-anything 技能
21
- 安装完底层工具后,尝试为其创建 cli-anything 包装器:
22
- run_shell: chainlesschain cli-anything register <tool> --force --json
23
- 如果成功,后续可用 run_skill cli-anything-<tool> 自然语言调用。
24
- 如果失败(如 cli-anything 未装),直接 run_shell 调用原始工具也可以。
25
-
26
- ### 工具优先级总结
27
- cli-anything 已注册技能 > 直接调用开源工具 CLI > Python/Node 开源库 > 告知用户
28
-
29
- ### 常用开源工具速查
30
- | 工具 | winget ID | 用途 |
31
- | ffmpeg | Gyan.FFmpeg | 音视频处理 |
32
- | pandoc | JohnMacFarlane.Pandoc | 文档格式转换 |
33
- | LibreOffice | TheDocumentFoundation.LibreOffice | Office 文档 |
34
- | Tesseract | UB-Mannheim.TesseractOCR | OCR 文字识别 |
35
- | ImageMagick | ImageMagick.ImageMagick | 图片处理 |
36
- | Ghostscript | ArtifexSoftware.GhostScript | PDF 处理 |
37
- | 7-Zip | 7zip.7zip | 压缩解压 |
38
- | GraphViz | Graphviz.Graphviz | 图表生成 |
39
- | yt-dlp | yt-dlp.yt-dlp | 视频下载 |
40
- | jq | jqlang.jq | JSON 处理 |
41
- `;async function L(e){const c=T();v.value=!0;const u=b.value;let f="";f+=A+`
42
- `,u&&(f+=`[任务类型: ${u.name}]
43
-
44
- `),f+=e,t.value.length&&(f+=`
45
-
46
- [用户提供的文件: ${t.value.join(", ")}]`),p.value.push({role:"user",content:e,timestamp:Date.now()});const z=await c.createSession("agent");r.value=z,await c.sendMessage(z,f)}async function R(e){const c=ne();v.value=!0,p.value.push({role:"user",content:e,timestamp:Date.now()});try{await c.waitConnected(8e3);const u=await c.sendRaw({type:"cowork-task",templateId:b.value?.id||null,userMessage:e,files:t.value},3e5);p.value.push({role:"assistant",content:u.summary||"(No output)",timestamp:Date.now(),toolsUsed:u.toolsUsed||[],iterationCount:u.iterationCount||0}),h.value=u}catch(u){p.value.push({role:"assistant",content:`Error: ${u.message}`,timestamp:Date.now()})}finally{v.value=!1}}const Q=D(()=>r.value?T().getMessages(r.value):[]),q=D(()=>{if(!r.value)return null;const c=T().streaming[r.value];return c?.active?c.content:null}),M=D(()=>r.value&&T().pendingQuestion[r.value]||null);function $(e){if(!r.value)return;T().answerQuestion(r.value,e)}async function i(e){if(!r.value)return;const c=T();p.value.push({role:"user",content:e,timestamp:Date.now()});let u=e;t.value.length&&(u+=`
47
-
48
- [用户提供的文件: ${t.value.join(", ")}]`),await c.sendMessage(r.value,u)}return{selectedTemplate:b,files:t,isRunning:v,steps:_,messages:p,result:h,agentSessionId:r,currentAgentMessages:Q,currentStreaming:q,currentQuestion:M,selectTemplate:I,reset:C,addFile:G,removeFile:N,execute:L,executeDirectWs:R,sendFollowUp:i,answerQuestion:$,TASK_TEMPLATES:Z}}),fe={class:"cowork-root"},ye={class:"template-panel"},ke={class:"template-header"},we={class:"template-list"},Se=["onClick"],xe={class:"card-icon"},Te={class:"card-body"},Ce={class:"card-name"},Oe={class:"card-desc"},Fe={class:"card-icon"},be={class:"drop-text"},Me={key:0,class:"file-list"},Pe={class:"exec-panel"},De={key:0,class:"empty-state"},Ie={class:"empty-icon"},Ae={class:"example-grid"},Le=["onClick"],Re={key:1,class:"ready-state"},$e={class:"ready-header"},ze={class:"ready-name"},Ee={class:"ready-examples"},Be=["onClick"],Ge={key:0,class:"tool-msg"},Ne={class:"tool-input"},Qe={key:0,class:"tool-result-box"},qe={class:"tool-result"},Ve={key:1,class:"user-msg"},He={class:"bubble user"},Ue={key:2,class:"assistant-msg"},je=["innerHTML"],Je={key:0,class:"assistant-msg"},Ke=["innerHTML"],We={key:1,class:"question-card"},Ze={class:"question-text"},Xe={key:0,class:"question-choices"},Ye={class:"input-area"},et={key:0,class:"input-context"},tt={class:"input-row"},st={__name:"Cowork",setup(b){K.setOptions({highlight:(i,e)=>e&&U.getLanguage(e)?U.highlight(i,{language:e}).value:U.highlightAuto(i).value,breaks:!0});const t=_e(),v=T(),_=m(""),p=m(null),h=m(!1),r=m(""),I=m(!1),C={FileTextOutlined:ge,PlayCircleOutlined:ve,BarChartOutlined:me,SearchOutlined:pe,PictureOutlined:de,CodeOutlined:ue,DesktopOutlined:re,FolderOpenOutlined:W,GlobalOutlined:ce,ReadOutlined:ie},G=["把 report.docx 转成 PDF","压缩视频到 50MB","分析 CSV 生成图表","查询今天的汇率","批量压缩图片","写一个自动化脚本"],N=D(()=>v.isLoading?"等待响应中...":t.selectedTemplate?t.selectedTemplate.examples?.[0]||"描述你的需求...":"描述你想完成的任务,Agent 会帮你搞定"),A=D(()=>t.currentAgentMessages);function L(i){try{return K(i||"")}catch{return i||""}}function R(i){return i.split(/[\\/]/).pop()||i}function Q(i){h.value=!1;const e=i.dataTransfer?.files;if(e)for(const c of e)t.addFile(c.path||c.name)}function q(){const i=r.value.trim();i&&(t.addFile(i),r.value="")}async function M(){const i=_.value.trim();!i||v.isLoading||(_.value="",t.agentSessionId?await t.sendFollowUp(i):await t.execute(i))}function $(i){_.value=i,J(()=>M())}return te([A,()=>t.currentStreaming],()=>{J(()=>{p.value&&(p.value.scrollTop=p.value.scrollHeight)})},{deep:!0}),se(()=>{v.loadSessions()}),(i,e)=>{const c=x("a-tag"),u=x("a-input"),f=x("a-collapse-panel"),z=x("a-collapse"),j=x("a-button"),X=x("a-input-search"),Y=x("a-textarea");return l(),o("div",fe,[n("div",ye,[n("div",ke,[g(a(P),{class:"header-icon"}),e[5]||(e[5]=n("span",{class:"header-title"},"日常协作",-1))]),e[7]||(e[7]=n("div",{class:"template-hint"},"选择任务类型,或直接输入需求",-1)),n("div",we,[(l(!0),o(y,null,k(a(Z),s=>(l(),o("div",{key:s.id,class:E(["template-card",{active:a(t).selectedTemplate?.id===s.id}]),onClick:O=>a(t).selectTemplate(s)},[n("div",xe,[(l(),w(H(C[s.icon]||a(P))))]),n("div",Te,[n("div",Ce,d(s.name),1),n("div",Oe,d(s.description),1)])],10,Se))),128)),n("div",{class:E(["template-card free",{active:a(t).selectedTemplate===null&&I.value}]),onClick:e[0]||(e[0]=s=>{a(t).selectTemplate(null),I.value=!0})},[n("div",Fe,[g(a(oe))]),e[6]||(e[6]=n("div",{class:"card-body"},[n("div",{class:"card-name"},"自由提问"),n("div",{class:"card-desc"},"任意任务,Agent 自主完成")],-1))],2)]),a(t).selectedTemplate?.acceptsFiles!==!1?(l(),o("div",{key:0,class:E(["file-zone",{dragging:h.value}]),onDragover:e[2]||(e[2]=V(s=>h.value=!0,["prevent"])),onDragleave:e[3]||(e[3]=s=>h.value=!1),onDrop:V(Q,["prevent"])},[g(a(W),{class:"drop-icon"}),n("div",be,d(h.value?"松开以添加文件":"拖拽文件到此处"),1),a(t).files.length?(l(),o("div",Me,[(l(!0),o(y,null,k(a(t).files,s=>(l(),w(c,{key:s,closable:"",onClose:O=>a(t).removeFile(s),class:"file-tag"},{default:S(()=>[B(d(R(s)),1)]),_:2},1032,["onClose"]))),128))])):F("",!0),g(u,{value:r.value,"onUpdate:value":e[1]||(e[1]=s=>r.value=s),placeholder:"或输入文件路径,按 Enter 添加",size:"small",class:"path-input",onPressEnter:q},null,8,["value"])],34)):F("",!0)]),n("div",Pe,[!a(t).agentSessionId&&!a(t).selectedTemplate?(l(),o("div",De,[n("div",Ie,[g(a(P))]),e[8]||(e[8]=n("div",{class:"empty-title"},"选择一个任务模板开始",-1)),e[9]||(e[9]=n("div",{class:"empty-sub"},"或选择「自由提问」处理任何问题",-1)),n("div",Ae,[(l(),o(y,null,k(G,s=>n("div",{key:s,class:"example-chip",onClick:O=>$(s)},d(s),9,Le)),64))])])):a(t).selectedTemplate&&!a(t).agentSessionId?(l(),o("div",Re,[n("div",$e,[(l(),w(H(C[a(t).selectedTemplate.icon]||a(P)),{class:"ready-icon"})),n("span",ze,d(a(t).selectedTemplate.name),1)]),n("div",Ee,[e[10]||(e[10]=n("div",{class:"example-label"},"试试这些:",-1)),(l(!0),o(y,null,k(a(t).selectedTemplate.examples,s=>(l(),o("div",{key:s,class:"example-chip",onClick:O=>$(s)},d(s),9,Be))),128))])])):(l(),o("div",{key:2,class:"messages-area",ref_key:"messagesEl",ref:p},[(l(!0),o(y,null,k(A.value,(s,O)=>(l(),o("div",{key:O,class:E(["message-row",s.role])},[s.role==="tool"?(l(),o("div",Ge,[g(z,{ghost:"",size:"small"},{default:S(()=>[g(f,{header:`🔧 ${s.tool} ${s.status==="running"?"(执行中...)":"✓"}`,class:"tool-collapse"},{default:S(()=>[n("pre",Ne,d(JSON.stringify(s.input,null,2)),1),s.result?(l(),o("div",Qe,[n("pre",qe,d(typeof s.result=="string"?s.result:JSON.stringify(s.result,null,2)),1)])):F("",!0)]),_:2},1032,["header"])]),_:2},1024)])):s.role==="user"?(l(),o("div",Ve,[n("div",He,d(s.content),1)])):(l(),o("div",Ue,[e[11]||(e[11]=n("div",{class:"avatar"},"AI",-1)),n("div",{class:"bubble assistant",innerHTML:L(s.content)},null,8,je)]))],2))),128)),a(t).currentStreaming?(l(),o("div",Je,[e[12]||(e[12]=n("div",{class:"avatar"},"AI",-1)),n("div",{class:"bubble assistant streaming",innerHTML:L(a(t).currentStreaming)},null,8,Ke)])):F("",!0),a(t).currentQuestion?(l(),o("div",We,[n("div",Ze,d(a(t).currentQuestion.question),1),a(t).currentQuestion.choices?.length?(l(),o("div",Xe,[(l(!0),o(y,null,k(a(t).currentQuestion.choices,s=>(l(),w(j,{key:s,size:"small",onClick:O=>a(t).answerQuestion(s)},{default:S(()=>[B(d(s),1)]),_:2},1032,["onClick"]))),128))])):(l(),w(X,{key:1,placeholder:"输入回答...","enter-button":"发送",style:{"margin-top":"10px"},onSearch:a(t).answerQuestion},null,8,["onSearch"]))])):F("",!0)],512)),n("div",Ye,[a(t).selectedTemplate?(l(),o("div",et,[g(c,{color:"blue",class:"context-tag"},{default:S(()=>[(l(),w(H(C[a(t).selectedTemplate.icon]||a(P)))),B(" "+d(a(t).selectedTemplate.name),1)]),_:1}),(l(!0),o(y,null,k(a(t).files,s=>(l(),w(c,{key:s,class:"context-tag file"},{default:S(()=>[B(d(R(s)),1)]),_:2},1024))),128))])):F("",!0),n("div",tt,[g(Y,{value:_.value,"onUpdate:value":e[4]||(e[4]=s=>_.value=s),placeholder:N.value,"auto-size":{minRows:1,maxRows:6},disabled:a(v).isLoading,class:"msg-input",onKeydown:ae(V(M,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),g(j,{type:"primary",loading:a(v).isLoading,class:"send-btn",onClick:M},{icon:S(()=>[g(a(he))]),_:1},8,["loading"])])])])])}}},ut=le(st,[["__scopeId","data-v-4c6b3e9c"]]);export{ut as default};
@@ -1 +0,0 @@
1
- import{V as M,f as g,r as w}from"./vendor-CN0Iv_qZ.js";import{u as f}from"./ws-CU7Gvoom.js";const S="新对话",T="新 Agent",b={"assistant.delta":"response-token","assistant.final":"response-complete","assistant.message":"response-complete","tool.call.started":"tool-executing","tool.call.completed":"tool-result","tool.call.failed":"tool-result","slot.filling":"question","approval.requested":"question",error:"error"},U=M("chat",()=>{const c=g([]),p=g(null),i=w({}),a=w({}),m=w({}),d=g(!1);let q=null;const A=new Set;function h(t){return i[t]||(i[t]=[]),i[t]}function y(t){if(!t?.id)return;const e=c.value.find(o=>o.id===t.id);if(e){Object.assign(e,t);return}c.value.unshift(t)}function C(t,e=f()){i[t]||(i[t]=[]),a[t]||(a[t]={content:"",active:!1}),!A.has(t)&&(A.add(t),e.onSession(t,o=>_(t,o)))}function v(t=f()){q||(q=t.onRuntimeEvent(e=>{const o=e.payload||{},s=o.record||{};if(e.type==="session:start"){const n=o.sessionType||s.type||"chat";y({id:o.sessionId,type:n,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"created",title:n==="chat"?S:T,createdAt:Date.now(),messageCount:s.messageCount??0})}else if(e.type==="session:resume"){const n=o.sessionId;if(!n)return;Array.isArray(o.history)&&(i[n]=o.history.map(r=>({role:r.role,content:r.content,timestamp:r.timestamp||Date.now()}))),a[n]||(a[n]={content:"",active:!1}),y({id:n,type:s.type||null,provider:s.provider||null,model:s.model||null,projectRoot:s.projectRoot||null,status:s.status||"resumed",messageCount:s.messageCount??(Array.isArray(o.history)?o.history.length:0)})}else if(e.type==="session:end"){const n=o.sessionId;c.value=c.value.filter(r=>r.id!==n),p.value===n&&(p.value=c.value[0]?.id||null)}}))}async function D(){const t=f();v(t),c.value=await t.listSessions()}async function E(t="chat"){const e=f();v(e);const o=await e.createSession(t);return y({id:o,type:t,title:t==="chat"?S:T,createdAt:Date.now(),messageCount:0}),C(o,e),p.value=o,o}function _(t,e){const o=h(t),s=b[e.type]||e.type,n=e.payload||{};if(s==="response-token"){a[t]||(a[t]={content:"",active:!0});const r=e.token||n.token||n.delta||n.content||"";a[t].content+=r,a[t].active=!0}else if(s==="response-complete"){const r=e.content||n.content||a[t]?.content||"";o.push({role:"assistant",content:r,timestamp:Date.now()}),a[t]&&(a[t].content="",a[t].active=!1);const l=c.value.find(u=>u.id===t);if(l&&(l.title===S||l.title===T)){const u=o.find(j=>j.role==="user");u&&(l.title=u.content.slice(0,30))}l&&(l.messageCount=o.filter(u=>u.role!=="tool").length),d.value=!1}else if(s==="tool-executing")o.push({role:"tool",tool:e.tool||n.tool||n.toolName||"unknown",input:e.input||n.input||n.args||null,status:"running",timestamp:Date.now()});else if(s==="tool-result"){const r=e.tool||n.tool||n.toolName||"unknown",l=[...o].reverse().find(u=>u.role==="tool"&&u.tool===r);l&&(l.result=e.result||n.result||n.output||null,l.status="done")}else if(s==="question")m[t]={requestId:e.requestId||n.requestId||e.id,question:e.question||n.question||n.message||"",choices:e.choices||n.choices||n.options||[]};else if(s==="error"){const r=e.message||n.message||"Unknown error";o.push({role:"assistant",content:`Error: ${r}`,timestamp:Date.now()}),d.value=!1,a[t]&&(a[t].active=!1)}}async function k(t,e){const o=f();v(o),h(t).push({role:"user",content:e,timestamp:Date.now()}),a[t]||(a[t]={content:"",active:!1}),a[t].active=!0,d.value=!0,o.sendSessionMessage(t,e)}function R(t,e){const o=f(),s=m[t];s&&(o.answerQuestion(t,s.requestId,e),delete m[t])}async function L(t){const e=f();if(v(e),p.value=t,C(t,e),!i[t]||i[t].length===0)try{await e.resumeSession(t)}catch{}}return{sessions:c,currentSessionId:p,messages:i,streaming:a,pendingQuestion:m,isLoading:d,loadSessions:D,createSession:E,sendMessage:k,answerQuestion:R,switchSession:L,getMessages:h}});export{U as u};
@@ -1 +0,0 @@
1
- import{V as U,f as E,c as B}from"./vendor-CN0Iv_qZ.js";let F=0;const w=()=>`wp-${++F}`,b=new Set;function d(e,r={},n={}){return{type:e,kind:n.kind||"server",sessionId:n.sessionId||r.sessionId||null,timestamp:n.timestamp||Date.now(),payload:r}}function G(e){const r=e?.type,n=e?.payload||{};switch(r){case"task:notification":return d("task:notification",{task:e.task||n.task},{kind:"server"});case"session-created":case"session.started":return d("session:start",{sessionId:e.sessionId||n.sessionId,sessionType:e.sessionType||n.sessionType||null,record:e.record||n.record||{id:e.sessionId||n.sessionId,type:e.sessionType||n.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId||n.sessionId});case"session-resumed":case"session.resumed":{const i=e.sessionId||n.sessionId,a=e.history||n.history||[];return d("session:resume",{sessionId:i,history:a,historyCount:Array.isArray(a)?a.length:0,record:e.record||n.record||{id:i,type:null,status:"resumed",history:a,messageCount:Array.isArray(a)?a.length:0}},{kind:"server",sessionId:i})}case"worktree-diff":case"worktree.diff":return d("worktree:diff:ready",{requestId:e.requestId||e.id||null,record:e.record||n.record||{branch:e.branch||n.branch||null,summary:e.summary||n.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||n.branch||null}]}},{kind:"server"});case"worktree-merged":case"worktree.merged":return d("worktree:merge:completed",{requestId:e.requestId||e.id||null,record:e.record||n.record||{branch:e.branch||n.branch||null,summary:e.summary||n.summary||null,conflicts:e.conflicts||n.conflicts||[],previewEntrypoints:e.previewEntrypoints||n.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":case"context.compaction.completed":return d("compression:summary",{requestId:e.requestId||e.id||null,summary:e.summary||n.summary||{}},{kind:"server"});default:return null}}function W(e,r=null){b.forEach(n=>n(e,r||e))}function Q(e){if(!e)return null;const r=e.record||{id:e.id||null,type:e.type||null,provider:e.provider||null,model:e.model||null,projectRoot:e.projectRoot||null,messageCount:e.messageCount??0,history:e.history||[],status:e.status||null};return{...e,id:e.id||r.id,type:e.type||r.type,provider:e.provider||r.provider,model:e.model||r.model,projectRoot:e.projectRoot||r.projectRoot,messageCount:e.messageCount??r.messageCount??0,status:e.status||r.status||null,record:r}}const K=U("ws",()=>{const e=E(null),r=E("disconnected"),n=E(null),i=new Map,a=new Map;let C=null,v=1e3;const y=window.__CC_CONFIG__||{},R=B(()=>`ws://${y.wsHost||"127.0.0.1"}:${y.wsPort||18800}`);function h(){if(e.value?.readyState!==WebSocket.OPEN){r.value="connecting",n.value=null;try{const t=new WebSocket(R.value);e.value=t,t.onopen=()=>{v=1e3,y.wsToken?l({type:"auth",id:w(),token:y.wsToken}).then(()=>{r.value="connected"}).catch(()=>{r.value="connected"}):r.value="connected"},t.onmessage=o=>{let s;try{s=JSON.parse(o.data)}catch{return}q(s)},t.onerror=()=>{n.value="WebSocket error",r.value="error"},t.onclose=()=>{r.value="disconnected",e.value=null,i.forEach(({reject:o})=>o(new Error("WebSocket closed"))),i.clear(),C=setTimeout(()=>{v=Math.min(v*2,3e4),h()},v)}}catch(t){r.value="error",n.value=t.message}}}function P(){clearTimeout(C),e.value?.close(),e.value=null,r.value="disconnected"}function T(t){if(!t.version&&!t.payload)return t;const o=t.payload||{};return{...t,...o,type:t.type,sessionId:t.sessionId||o.sessionId||null}}function q(t){const{type:o}=t,s=t.requestId||t.id;let u=!1;if(s&&i.has(s)){const{resolve:f,reject:O,timeout:S}=i.get(s);clearTimeout(S),i.delete(s),u=!0;const I=T(t);I.id=s,o==="error"?O(new Error(I.message||"Unknown error")):f(I)}const c=t.sessionId||t.payload&&t.payload.sessionId||null;if(c&&a.has(c)){const f=T(t);a.get(c).forEach(S=>S(f))}k.forEach(f=>f(t));const m=G(t);return m&&W(m,t),u}const k=new Set;function J(t){return k.add(t),()=>k.delete(t)}function j(t){return b.add(t),()=>b.delete(t)}function x(t,o){return a.has(t)||a.set(t,new Set),a.get(t).add(o),()=>{a.get(t)?.delete(o),a.get(t)?.size===0&&a.delete(t)}}function l(t,o=15e3){return new Promise((s,u)=>{if(e.value?.readyState!==WebSocket.OPEN){u(new Error("WebSocket not connected"));return}const c=t.id||w(),m=setTimeout(()=>{i.delete(c),u(new Error("Request timeout"))},o);i.set(c,{resolve:s,reject:u,timeout:m}),e.value.send(JSON.stringify({...t,id:c}))})}function p(t=8e3){return r.value==="connected"?Promise.resolve():new Promise((o,s)=>{const u=Date.now()+t,c=()=>{if(r.value==="connected")return o();if(r.value==="error"||Date.now()>=u)return s(new Error(`WS not ready: ${r.value}`));setTimeout(c,150)};r.value==="disconnected"&&h(),c()})}async function N(t,o=3e4){await p(8e3);const s=await l({type:"execute",command:t},o),u=s.output??s.stdout??"",c=s.stderr??"";return{output:u||c,exitCode:s.exitCode??0}}async function M(t,o=3e4){const{output:s,exitCode:u}=await N(t,o);if(u!==0)throw new Error(`Command failed: ${s}`);try{return JSON.parse(s.trim())}catch{const c=s.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(c)return JSON.parse(c[0]);throw new Error(`Invalid JSON output: ${s.slice(0,200)}`)}}async function _(t="chat",o=null){await p(8e3);const s=w();return(await l({type:"session-create",id:s,sessionType:t,projectRoot:o||y.projectRoot||null})).sessionId}function $(t,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:w(),sessionId:t,content:o}))}function A(t,o,s){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:w(),sessionId:t,requestId:o,answer:s}))}async function D(){return await p(8e3),((await l({type:"session-list"},1e4)).sessions||[]).map(Q).filter(Boolean)}async function H(t){try{await l({type:"session-close",sessionId:t},5e3),W(d("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function z(t){return await p(8e3),await l({type:"session-resume",sessionId:t},1e4)}return{status:r,error:n,wsUrl:R,connect:h,disconnect:P,waitConnected:p,onMessage:J,onRuntimeEvent:j,onSession:x,sendRaw:l,execute:N,executeJson:M,createSession:_,resumeSession:z,sendSessionMessage:$,answerQuestion:A,listSessions:D,closeSession:H}});export{K as u};