chainlesschain 0.157.4 → 0.157.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/AIOps-Bfzpnnlg.css +1 -0
- package/src/assets/web-panel/assets/AIOps-CDadp-Le.js +1 -0
- package/src/assets/web-panel/assets/{ActionButton-CwL5V4rk.js → ActionButton-DiRyhKar.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-BlsG3Nvq.js → Analytics-C-wKOKnM.js} +1 -1
- package/src/assets/web-panel/assets/AppLayout-Byg_RLDB.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-Gkhl4thM.css +1 -0
- package/src/assets/web-panel/assets/Backup-Bk1_Tsej.js +1 -0
- package/src/assets/web-panel/assets/{BaseInput-nL30Uqw9.js → BaseInput-BZ74CVZs.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CArgL-BR.js → Chat-DZ__6l_m.js} +2 -2
- package/src/assets/web-panel/assets/{Checkbox-C2UDDSs8.js → Checkbox-CZEC61kY.js} +1 -1
- package/src/assets/web-panel/assets/{Col-B7ocl9Ww.js → Col-CNBJWyWl.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BRYhwndT.js → Community-DGQcJUCL.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Dya_aHuV.js → Compact-C8l08DTy.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-CKxw6vIq.css +1 -0
- package/src/assets/web-panel/assets/Compliance-DYB_MbmT.js +1 -0
- package/src/assets/web-panel/assets/{Cowork-Jz5Q55Gv.js → Cowork-DV3JWBAJ.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DbD6XGF3.js → Cron-DGQz9J9u.js} +1 -1
- package/src/assets/web-panel/assets/Crosschain-CIWQ4dI-.js +1 -0
- package/src/assets/web-panel/assets/{DID-BxckhNcy.js → DID-CKd_c4PX.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-C8vWq_IC.js → Dashboard-CtHAdcCn.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-Bjndts_O.js → Dropdown-a19vPJmP.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-bOF0FL5N.js → FormItemContext-B5ayZ9zK.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BtH4vugY.js → Git-CMTjLD8-.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CauuWTCg.js → KnowledgeGraph-CO-ivdDK.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DCfoGLWg.js → Logs-sCDOUYuS.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BNv5w-8n.js → Marketplace-Ch5Xd0CC.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-vh8oeQ_N.js → McpTools-CqnNMG6W.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-B-BtLRWD.js → Memory-D_O87sbR.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-D-V-KW8L.js → Notes-Bh7KP6cl.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-DE_QjJF0.js → Organization-CoonBV6s.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-CvGooyM4.js → Overflow-_g4V_Ju_.js} +1 -1
- package/src/assets/web-panel/assets/{OverrideContext-D01nzvZl.js → OverrideContext-DEW2m7K6.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-bmQWjcTu.js → P2P-DypZ1ege.js} +2 -2
- package/src/assets/web-panel/assets/{Permissions-C0kqPJfm.js → Permissions-BgZSIvcr.js} +3 -3
- package/src/assets/web-panel/assets/{Portal-CARXcQZJ.js → Portal-CHsntPCQ.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-DRqY-cna.js → ProjectSettings-juTiV4PS.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-C9N8_IbI.js → Projects-DmPNnqOJ.js} +2 -2
- package/src/assets/web-panel/assets/{Providers-D_UuBLoY.js → Providers-BJsAfkjy.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B_nOQOCt.js → Row-DrdDP98g.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-C7pFhGvD.js → RssFeed-dYFn7J6x.js} +1 -1
- package/src/assets/web-panel/assets/{Security-C81wAGw7.js → Security-kxRpCiKJ.js} +2 -2
- package/src/assets/web-panel/assets/Services-BP4AjEx_.js +2 -0
- package/src/assets/web-panel/assets/{Skeleton-pzCg9Pnc.js → Skeleton-Cpa-ty0l.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-0AKMVnae.js → Skills-CE8wG-A0.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-BobOO2E9.js → Tasks-DzX0K-kB.js} +1 -1
- package/src/assets/web-panel/assets/Templates-Bku01czW.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-Bvwds95J.js → Trigger-CoAAYYBt.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DF_v4mGP.js → VideoEditing-CkgIUHZZ.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-By5UwKVh.js → Wallet-CgA-lpLW.js} +3 -3
- package/src/assets/web-panel/assets/{WebAuthn-BwVVXAv2.js → WebAuthn-CY41bHIQ.js} +1 -1
- package/src/assets/web-panel/assets/WorkflowEditor-CE7u19Od.js +1 -0
- package/src/assets/web-panel/assets/{chat-DK35BNpC.js → chat-CVn-r3oV.js} +1 -1
- package/src/assets/web-panel/assets/{collapseMotion-D_K_bBA2.js → collapseMotion-D3P4mRvK.js} +1 -1
- package/src/assets/web-panel/assets/{colors-umO_4d2G.js → colors-CIKN8L8n.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DQizAYSA.js → compact-item-CrBQCz3V.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-B4cgNOPl.js → createContext-D1QXMs7U.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-BlpjKJek.js → hasIn-tTUZknBU.js} +1 -1
- package/src/assets/web-panel/assets/icons-Jk30QO6-.js +57 -0
- package/src/assets/web-panel/assets/{index-CUBfNblp.js → index-8nKSWBcm.js} +2 -2
- package/src/assets/web-panel/assets/index-B0z2XooE.js +1 -0
- package/src/assets/web-panel/assets/{index-Ho9akU7U.js → index-BDjky3rX.js} +2 -2
- package/src/assets/web-panel/assets/{index-CbEcq7vH.js → index-BIPWZw8B.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cqykb9ZW.js → index-BKHWN2tE.js} +2 -2
- package/src/assets/web-panel/assets/{index-ZPIbAiEU.js → index-BX3rXaHn.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-24swjx.js → index-Bi_6FYU5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CUqnZufL.js → index-BqDn_7rp.js} +3 -3
- package/src/assets/web-panel/assets/index-BwiOpWc5.js +1 -0
- package/src/assets/web-panel/assets/index-BzqrE9NR.js +3 -0
- package/src/assets/web-panel/assets/{index-BxkDaXvc.js → index-CNlblI8D.js} +2 -2
- package/src/assets/web-panel/assets/{index-lUKzY82L.js → index-COySbArp.js} +2 -2
- package/src/assets/web-panel/assets/{index-CHFoDNQ0.js → index-CP2liZYV.js} +2 -2
- package/src/assets/web-panel/assets/{index-oC0OINzs.js → index-CROBuVak.js} +2 -2
- package/src/assets/web-panel/assets/{index-BBXgHH-n.js → index-CYAkBhrQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtPNcQ4n.js → index-CclY9-28.js} +1 -1
- package/src/assets/web-panel/assets/{index-0Kan5LKq.js → index-ClrnG3mQ.js} +2 -2
- package/src/assets/web-panel/assets/{index-BWQQnruX.js → index-CqCf9te0.js} +3 -3
- package/src/assets/web-panel/assets/index-CwdYxBVA.js +1 -0
- package/src/assets/web-panel/assets/{index-Bxa12jHB.js → index-D06WGcI3.js} +1 -1
- package/src/assets/web-panel/assets/{index-ug3GpVu7.js → index-D7l8Uzgm.js} +2 -2
- package/src/assets/web-panel/assets/{index-BFCm-ez3.js → index-DVLZZQ5c.js} +2 -2
- package/src/assets/web-panel/assets/{index-g91q-v6w.js → index-DVRzAjWk.js} +1 -1
- package/src/assets/web-panel/assets/{index-DF_WAwo2.js → index-DZkS3V1X.js} +1 -1
- package/src/assets/web-panel/assets/index-DhUBtkRD.js +1 -0
- package/src/assets/web-panel/assets/{index-CmnzbK4b.js → index-DtayEBt0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bpn272aB.js → index-DvmvdIT_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BrLgYcYw.js → index-Dz_iVHtC.js} +2 -2
- package/src/assets/web-panel/assets/index-MzZGrA5i.js +36 -0
- package/src/assets/web-panel/assets/index-V6QCm9nt.js +1 -0
- package/src/assets/web-panel/assets/{index-DXYL4L2w.js → index-X4HbBQbI.js} +3 -3
- package/src/assets/web-panel/assets/{index-8iWNplHD.js → index-_3pzrgIO.js} +1 -1
- package/src/assets/web-panel/assets/{index-C-ri0NGO.js → index-cfS19Vfx.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLSfu07o.js → index-d8uIZmCQ.js} +2 -2
- package/src/assets/web-panel/assets/index-hU5rQLDQ.js +1 -0
- package/src/assets/web-panel/assets/{index-BzatTiIv.js → index-p1nJ70IV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjshxRqs.js → index-vkHwRzrk.js} +3 -3
- package/src/assets/web-panel/assets/{index-mHBrdFck.js → index-zKNadN9-.js} +4 -4
- package/src/assets/web-panel/assets/{initDefaultProps-D7cer4hW.js → initDefaultProps-Dl1s0-DH.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CnElQ3Xy.js → motion-Bo_wsn2G.js} +1 -1
- package/src/assets/web-panel/assets/{move-dvqokDN1.js → move-DkSBFThb.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DYHi-pbs.js → omit-D_kxdSL6.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DUC9etdU.js → pickAttrs-B4jAAmTy.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-CZyEeX_l.js → placementArrow-BQfy7E_I.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-CAycKNvy.js → responsiveObserve-DBrNeOOt.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BAObbkl7.js → slide-DSKBMx3Q.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bu8BSzrG.js → statusUtils-BdGzd5fx.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-CnYmg0_G.js → styleChecker-Ckbe4as7.js} +1 -1
- package/src/assets/web-panel/assets/{transition-8JSy_yCb.js → transition-6LOZvE9a.js} +1 -1
- package/src/assets/web-panel/assets/{useConfigInject-CypxEK_1.js → useConfigInject-BfCzqqat.js} +2 -2
- package/src/assets/web-panel/assets/useFlexGapSupport-C8nzL1g7.js +1 -0
- package/src/assets/web-panel/assets/{useMergedState-BUoJnBiL.js → useMergedState-DbHXwBgv.js} +1 -1
- package/src/assets/web-panel/assets/{useRefs-XiBYSxE0.js → useRefs-DRyTVik7.js} +1 -1
- package/src/assets/web-panel/assets/{useState-E1W-GoWe.js → useState-DoAhV80c.js} +1 -1
- package/src/assets/web-panel/assets/{vendor-xFZ6Jlpw.js → vendor-BVetwVfk.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-BE-GtqXI.js → vnode-kNIbBJfF.js} +1 -1
- package/src/assets/web-panel/assets/{ws-Dg01CdRG.js → ws-Bv7YH0VB.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-5CInnogB.js → zoom-DafJyqPh.js} +1 -1
- package/src/assets/web-panel/index.html +3 -3
- package/src/commands/db.js +1 -3
- package/src/assets/web-panel/assets/AppLayout-CDW-fEBB.css +0 -1
- package/src/assets/web-panel/assets/AppLayout-bQJ6NJkS.js +0 -1
- package/src/assets/web-panel/assets/Backup-CKjf2R2f.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-Dtu8IMai.js +0 -1
- package/src/assets/web-panel/assets/Services-CXO09HRi.js +0 -2
- package/src/assets/web-panel/assets/Templates-CDjBR3fZ.js +0 -1
- package/src/assets/web-panel/assets/WorkflowEditor-5U7bQ2W8.js +0 -1
- package/src/assets/web-panel/assets/icons-C0xSkzug.js +0 -57
- package/src/assets/web-panel/assets/index-BqEMjyrg.js +0 -1
- package/src/assets/web-panel/assets/index-C1kMaz6E.js +0 -1
- package/src/assets/web-panel/assets/index-Cf_9fnbE.js +0 -3
- package/src/assets/web-panel/assets/index-CqwDvOkw.js +0 -1
- package/src/assets/web-panel/assets/index-DKyOq7hH.js +0 -36
- package/src/assets/web-panel/assets/index-DbN_ZPnl.js +0 -1
- package/src/assets/web-panel/assets/index-LUf68SrL.js +0 -1
- package/src/assets/web-panel/assets/index-uzrAZgzY.js +0 -1
- package/src/assets/web-panel/assets/useFlexGapSupport-Ckda3t4R.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{k as U,r as b,j as B}from"./vendor-
|
|
1
|
+
import{k as U,r as b,j as B}from"./vendor-BVetwVfk.js";let F=0;const m=()=>`wp-${++F}`,O=new Set;function y(e,n={},r={}){return{type:e,kind:r.kind||"server",sessionId:r.sessionId||n.sessionId||null,timestamp:r.timestamp||Date.now(),payload:n}}function Q(e){const n=e?.type,r=e?.payload||{};switch(n){case"task:notification":return y("task:notification",{task:e.task||r.task},{kind:"server"});case"session-created":case"session.started":return y("session:start",{sessionId:e.sessionId||r.sessionId,sessionType:e.sessionType||r.sessionType||null,record:e.record||r.record||{id:e.sessionId||r.sessionId,type:e.sessionType||r.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId||r.sessionId});case"session-resumed":case"session.resumed":{const c=e.sessionId||r.sessionId,i=e.history||r.history||[];return y("session:resume",{sessionId:c,history:i,historyCount:Array.isArray(i)?i.length:0,record:e.record||r.record||{id:c,type:null,status:"resumed",history:i,messageCount:Array.isArray(i)?i.length:0}},{kind:"server",sessionId:c})}case"worktree-diff":case"worktree.diff":return y("worktree:diff:ready",{requestId:e.requestId||e.id||null,record:e.record||r.record||{branch:e.branch||r.branch||null,summary:e.summary||r.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||r.branch||null}]}},{kind:"server"});case"worktree-merged":case"worktree.merged":return y("worktree:merge:completed",{requestId:e.requestId||e.id||null,record:e.record||r.record||{branch:e.branch||r.branch||null,summary:e.summary||r.summary||null,conflicts:e.conflicts||r.conflicts||[],previewEntrypoints:e.previewEntrypoints||r.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":case"context.compaction.completed":return y("compression:summary",{requestId:e.requestId||e.id||null,summary:e.summary||r.summary||{}},{kind:"server"});default:return null}}function W(e,n=null){O.forEach(r=>r(e,n||e))}function K(e){if(!e)return null;const n=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||n.id,type:e.type||n.type,provider:e.provider||n.provider,model:e.model||n.model,projectRoot:e.projectRoot||n.projectRoot,messageCount:e.messageCount??n.messageCount??0,status:e.status||n.status||null,record:n}}const V=U("ws",()=>{const e=b(null),n=b("disconnected"),r=b(null),c=new Map,i=new Map;let l=null,h=1e3,k=!1;const f=window.__CC_CONFIG__||{},P=B(()=>`ws://${f.wsHost||"127.0.0.1"}:${f.wsPort||18800}`);function S(){if(!(e.value?.readyState===WebSocket.OPEN||e.value?.readyState===WebSocket.CONNECTING)){clearTimeout(l),l=null,k=!1,n.value="connecting",r.value=null;try{const t=new WebSocket(P.value);e.value=t,t.onopen=()=>{h=1e3,f.wsToken?d({type:"auth",id:m(),token:f.wsToken}).then(()=>{n.value="connected"}).catch(()=>{n.value="connected"}):n.value="connected"},t.onmessage=s=>{let o;try{o=JSON.parse(s.data)}catch{return}q(o)},t.onerror=()=>{r.value="WebSocket error",n.value="error"},t.onclose=()=>{if(n.value="disconnected",e.value=null,c.forEach(({reject:s})=>s(new Error("WebSocket closed"))),c.clear(),k){k=!1,l=null;return}l=setTimeout(()=>{h=Math.min(h*2,3e4),l=null,S()},h)}}catch(t){n.value="error",r.value=t.message}}}function x(){clearTimeout(l),l=null,k=!0,e.value?.close(),e.value=null,n.value="disconnected"}function N(t){if(!t.version&&!t.payload)return t;const s=t.payload||{};return{...t,...s,type:t.type,sessionId:t.sessionId||s.sessionId||null}}function q(t){const{type:s}=t,o=t.requestId||t.id;let u=!1;if(o&&c.has(o)){const{resolve:w,reject:R,timeout:I}=c.get(o);clearTimeout(I),c.delete(o),u=!0;const C=N(t);C.id=o,s==="error"?R(new Error(C.message||"Unknown error")):w(C)}const a=t.sessionId||t.payload&&t.payload.sessionId||null;if(a&&i.has(a)){const w=N(t);i.get(a).forEach(I=>I(w))}E.forEach(w=>w(t));const v=Q(t);return v&&W(v,t),u}const E=new Set;function J(t){return E.add(t),()=>E.delete(t)}function j(t){return O.add(t),()=>O.delete(t)}function A(t,s){return i.has(t)||i.set(t,new Set),i.get(t).add(s),()=>{i.get(t)?.delete(s),i.get(t)?.size===0&&i.delete(t)}}function d(t,s=15e3){return new Promise((o,u)=>{if(e.value?.readyState!==WebSocket.OPEN){u(new Error("WebSocket not connected"));return}const a=t.id||m(),v=setTimeout(()=>{c.delete(a),u(new Error("Request timeout"))},s);c.set(a,{resolve:o,reject:u,timeout:v}),e.value.send(JSON.stringify({...t,id:a}))})}function p(t=8e3){return n.value==="connected"?Promise.resolve():new Promise((s,o)=>{const u=Date.now()+t,a=()=>{if(n.value==="connected")return s();if(n.value==="error"||Date.now()>=u)return o(new Error(`WS not ready: ${n.value}`));setTimeout(a,150)};n.value==="disconnected"&&S(),a()})}async function T(t,s=3e4){await p(8e3);const o=await d({type:"execute",command:t},s),u=o.output??o.stdout??"",a=o.stderr??"";return{output:u||a,exitCode:o.exitCode??0}}async function M(t,s=3e4){const{output:o,exitCode:u}=await T(t,s);if(u!==0)throw new Error(`Command failed: ${o}`);try{return JSON.parse(o.trim())}catch{const a=o.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(a)return JSON.parse(a[0]);throw new Error(`Invalid JSON output: ${o.slice(0,200)}`)}}async function _(t="chat",s=null,o={}){await p(8e3);const a={type:"session-create",id:m(),sessionType:t,projectRoot:s||f.projectRoot||null};return o.systemPromptExtension&&(a.systemPromptExtension=o.systemPromptExtension),Array.isArray(o.shellPolicyOverrides)&&o.shellPolicyOverrides.length&&(a.shellPolicyOverrides=o.shellPolicyOverrides),(await d(a)).sessionId}function $(t,s){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:m(),sessionId:t,content:s}))}function D(t,s,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:m(),sessionId:t,requestId:s,answer:o}))}async function H(){return await p(8e3),((await d({type:"session-list"},1e4)).sessions||[]).map(K).filter(Boolean)}async function z(t){try{await d({type:"session-close",sessionId:t},5e3),W(y("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function G(t){return await p(8e3),await d({type:"session-resume",sessionId:t},1e4)}return{status:n,error:r,wsUrl:P,connect:S,disconnect:x,waitConnected:p,onMessage:J,onRuntimeEvent:j,onSession:A,sendRaw:d,execute:T,executeJson:M,createSession:_,resumeSession:G,sendSessionMessage:$,answerQuestion:D,listSessions:H,closeSession:z}});export{V as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./Keyframes-C7fCrnlS.js";import{i as f}from"./motion-
|
|
1
|
+
import{K as o}from"./Keyframes-C7fCrnlS.js";import{i as f}from"./motion-Bo_wsn2G.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
|
|
2
2
|
${t}-enter,
|
|
3
3
|
${t}-appear
|
|
4
4
|
`]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
|
|
@@ -8,9 +8,9 @@
|
|
|
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-
|
|
12
|
-
<link rel="modulepreload" crossorigin href="./assets/vendor-
|
|
13
|
-
<link rel="modulepreload" crossorigin href="./assets/icons-
|
|
11
|
+
<script type="module" crossorigin src="./assets/index-MzZGrA5i.js"></script>
|
|
12
|
+
<link rel="modulepreload" crossorigin href="./assets/vendor-BVetwVfk.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="./assets/icons-Jk30QO6-.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-CyGyEIVX.css">
|
|
15
15
|
</head>
|
|
16
16
|
<body>
|
package/src/commands/db.js
CHANGED
|
@@ -491,9 +491,7 @@ export function registerDbCommand(program) {
|
|
|
491
491
|
console.log(
|
|
492
492
|
" cc db repair – best-effort row salvage into a new file",
|
|
493
493
|
);
|
|
494
|
-
console.log(
|
|
495
|
-
" cc db reset – back up corrupt DB and start fresh",
|
|
496
|
-
);
|
|
494
|
+
console.log(" cc db reset – back up corrupt DB and start fresh");
|
|
497
495
|
}
|
|
498
496
|
exitCode = ok ? 0 : 2;
|
|
499
497
|
await shutdown();
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.app-root[data-v-fae09a5d]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-fae09a5d]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}[data-v-fae09a5d] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden}.main-area[data-v-fae09a5d]{background:var(--bg-base)}.logo[data-v-fae09a5d]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-fae09a5d]{padding:0;justify-content:center}.logo-icon[data-v-fae09a5d]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-fae09a5d]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-fae09a5d]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-fae09a5d]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-fae09a5d]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-fae09a5d]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-fae09a5d]{color:#722ed1}.banner-info[data-v-fae09a5d]{flex:1;min-width:0}.banner-name[data-v-fae09a5d]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-fae09a5d]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-fae09a5d]{color:#c084fc}.mode-icon-sm[data-v-fae09a5d]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-fae09a5d]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-fae09a5d]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-fae09a5d] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-fae09a5d] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-fae09a5d]{margin:4px 0!important}.sidebar-footer[data-v-fae09a5d]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-fae09a5d]{justify-content:center;padding:8px 0}.footer-text[data-v-fae09a5d]{color:var(--text-secondary);font-size:11px}.app-header[data-v-fae09a5d]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-fae09a5d],.header-right[data-v-fae09a5d]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-fae09a5d]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-fae09a5d]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-fae09a5d]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-fae09a5d]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-fae09a5d]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-fae09a5d]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-fae09a5d]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-fae09a5d]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-fae09a5d]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-fae09a5d]{margin:0!important;font-size:11px}.page-content[data-v-fae09a5d]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as Se,m as v,x as t,q as d,B as Te,C as Be,v as i,c as e,D as a,E as j,u as s,F as r,G as B,H as S,I as g,J as l,K as Re,L as Le,r as xe,j as y}from"./vendor-xFZ6Jlpw.js";import{u as Ae}from"./ws-Dg01CdRG.js";import{u as De,T as Ie}from"./index-DKyOq7hH.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as b,G as R,D,M as I,R as N,C as U,a as P,A as K,b as M,c as V,B as F,d as E,S as G,e as W,f as z,h as q,i as H,j as $,I as J,L as Y,W as Q,k as X,l as Z,P as h,m as ee,n as te,o as oe,p as se,q as ne,U as le,V as Ue,r as ae,K as ie,s as Pe}from"./icons-C0xSkzug.js";const Ke=["src"],Me={key:0,class:"logo-text"},Ve={key:0,class:"mode-banner project"},Fe={class:"banner-info"},Ee={class:"banner-name"},Ge={key:1,class:"mode-banner global"},We=["title"],ze={key:0,class:"footer-text"},qe={class:"header-left"},He={class:"header-right"},$e={class:"theme-switcher"},Je=["data-theme-key","onClick"],Ye={class:"version-tag"},Qe={__name:"AppLayout",setup(Xe){const de=Te(),ue=Be(),O=Ae(),T=De(),u=xe(!1),k=window.__CC_CONFIG__||{},m=y(()=>k.mode==="project"),re="v5.0.3.1",ce=new URL(""+new URL("logo-DBCYUiWP.png",import.meta.url).href,import.meta.url).href,pe=y(()=>T.current),me=y(()=>T.config.vars["--menu-mode"]),L=y(()=>{const c=ue.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),C=y(()=>O.status),ye=y(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[O.status]||"default"),ke=y(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[O.status]||"未知");function fe(c){T.setTheme(c)}function _e({key:c}){de.push({mcp:"/mcp"}[c]||`/${c}`)}return Se(()=>O.connect()),(c,o)=>{const n=d("a-menu-item"),p=d("a-menu-item-group"),f=d("a-menu-divider"),ve=d("a-menu"),ge=d("a-badge"),be=d("a-layout-sider"),x=d("a-tooltip"),Oe=d("a-tag"),Ce=d("a-layout-header"),we=d("router-view"),je=d("a-layout-content"),A=d("a-layout");return i(),v(A,{class:"app-root"},{default:t(()=>[e(be,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=_=>u.value=_),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:j(["logo",{collapsed:u.value}])},[a("img",{src:s(ce),alt:"ChainlessChain",class:"logo-icon"},null,8,Ke),u.value?B("",!0):(i(),r("span",Me,"ChainlessChain"))],2),u.value?(i(),r("div",{key:1,class:"mode-icon-sm",title:m.value?s(k).projectName:"全局模式"},[m.value?(i(),v(s(b),{key:0,style:{color:"#1677ff"}})):(i(),v(s(R),{key:1,style:{color:"#722ed1"}}))],8,We)):(i(),r(S,{key:0},[m.value?(i(),r("div",Ve,[e(s(b),{class:"banner-icon"}),a("div",Fe,[a("div",Ee,g(s(k).projectName||"项目"),1),o[2]||(o[2]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(i(),r("div",Ge,[e(s(R),{class:"banner-icon"}),o[3]||(o[3]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(ve,{selectedKeys:L.value,"onUpdate:selectedKeys":o[0]||(o[0]=_=>L.value=_),theme:me.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:_e},{default:t(()=>[u.value?(i(),r(S,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(I))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(N))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(U))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(P))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(K))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(M))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"project-settings"},{icon:t(()=>[e(s(b))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(E))]),_:1}),e(n,{key:"knowledge"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"marketplace"},{icon:t(()=>[e(s(W))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),_:1}),e(n,{key:"workflow"},{icon:t(()=>[e(s(q))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(H))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"security"},{icon:t(()=>[e(s($))]),_:1}),e(n,{key:"did"},{icon:t(()=>[e(s(J))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s(Y))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(Q))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Z))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(h))]),_:1}),e(n,{key:"crosschain"},{icon:t(()=>[e(s(ee))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"wallet"},{icon:t(()=>[e(s(te))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(oe))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(se))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(ne))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"community"},{icon:t(()=>[e(s(le))]),_:1}),e(f,{class:"divider-sm"}),e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ae))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(ie))]),_:1})],64)):(i(),r(S,{key:0},[e(p,null,{title:t(()=>[...o[4]||(o[4]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[5]||(o[5]=l("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[6]||(o[6]=l("AI 对话",-1))]),_:1}),e(n,{key:"cowork"},{icon:t(()=>[e(s(N))]),default:t(()=>[o[7]||(o[7]=l("日常协作",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(U))]),default:t(()=>[o[8]||(o[8]=l("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(P))]),default:t(()=>[o[9]||(o[9]=l("日志查看",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[10]||(o[10]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[11]||(o[11]=l("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(M))]),default:t(()=>[o[12]||(o[12]=l("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[13]||(o[13]=l("MCP 工具",-1))]),_:1}),e(n,{key:"project-settings"},{icon:t(()=>[e(s(b))]),default:t(()=>[o[14]||(o[14]=l("项目存储",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[15]||(o[15]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[16]||(o[16]=l("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[17]||(o[17]=l("记忆文件",-1))]),_:1}),e(n,{key:"knowledge"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[18]||(o[18]=l("知识图谱",-1))]),_:1}),e(n,{key:"marketplace"},{icon:t(()=>[e(s(W))]),default:t(()=>[o[19]||(o[19]=l("技能市场",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(z))]),default:t(()=>[o[20]||(o[20]=l("定时任务",-1))]),_:1}),e(n,{key:"workflow"},{icon:t(()=>[e(s(q))]),default:t(()=>[o[21]||(o[21]=l("工作流编辑",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s(H))]),default:t(()=>[o[22]||(o[22]=l("后台任务",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[23]||(o[23]=[a("span",{class:"group-label"},"高 级",-1)])]),default:t(()=>[e(n,{key:"security"},{icon:t(()=>[e(s($))]),default:t(()=>[o[24]||(o[24]=l("安全中心",-1))]),_:1}),e(n,{key:"did"},{icon:t(()=>[e(s(J))]),default:t(()=>[o[25]||(o[25]=l("DID 身份",-1))]),_:1}),e(n,{key:"permissions"},{icon:t(()=>[e(s(Y))]),default:t(()=>[o[26]||(o[26]=l("权限管理",-1))]),_:1}),e(n,{key:"p2p"},{icon:t(()=>[e(s(Q))]),default:t(()=>[o[27]||(o[27]=l("P2P 网络",-1))]),_:1}),e(n,{key:"backup"},{icon:t(()=>[e(s(X))]),default:t(()=>[o[28]||(o[28]=l("备份同步",-1))]),_:1}),e(n,{key:"git"},{icon:t(()=>[e(s(Z))]),default:t(()=>[o[29]||(o[29]=l("Git 与数据",-1))]),_:1}),e(n,{key:"projects"},{icon:t(()=>[e(s(h))]),default:t(()=>[o[30]||(o[30]=l("项目管理",-1))]),_:1}),e(n,{key:"crosschain"},{icon:t(()=>[e(s(ee))]),default:t(()=>[o[31]||(o[31]=l("跨链桥",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[32]||(o[32]=[a("span",{class:"group-label"},"企 业",-1)])]),default:t(()=>[e(n,{key:"wallet"},{icon:t(()=>[e(s(te))]),default:t(()=>[o[33]||(o[33]=l("钱包管理",-1))]),_:1}),e(n,{key:"organization"},{icon:t(()=>[e(s(oe))]),default:t(()=>[o[34]||(o[34]=l("组织管理",-1))]),_:1}),e(n,{key:"analytics"},{icon:t(()=>[e(s(se))]),default:t(()=>[o[35]||(o[35]=l("使用分析",-1))]),_:1}),e(n,{key:"templates"},{icon:t(()=>[e(s(ne))]),default:t(()=>[o[36]||(o[36]=l("模板中心",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[37]||(o[37]=[a("span",{class:"group-label"},"社 交",-1)])]),default:t(()=>[e(n,{key:"community"},{icon:t(()=>[e(s(le))]),default:t(()=>[o[38]||(o[38]=l("社区",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[39]||(o[39]=[a("span",{class:"group-label"},"媒 体",-1)])]),default:t(()=>[e(n,{key:"video"},{icon:t(()=>[e(s(Ue))]),default:t(()=>[o[40]||(o[40]=l("视频剪辑",-1))]),_:1})]),_:1}),e(p,null,{title:t(()=>[...o[41]||(o[41]=[a("span",{class:"group-label"},"扩 展",-1)])]),default:t(()=>[e(n,{key:"rssfeed"},{icon:t(()=>[e(s(ae))]),default:t(()=>[o[42]||(o[42]=l("RSS 订阅",-1))]),_:1}),e(n,{key:"webauthn"},{icon:t(()=>[e(s(ie))]),default:t(()=>[o[43]||(o[43]=l("身份认证",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:j(["sidebar-footer",{collapsed:u.value}])},[e(ge,{status:ye.value},null,8,["status"]),u.value?B("",!0):(i(),r("span",ze,g(ke.value),1))],2)]),_:1},8,["collapsed"]),e(A,{class:"main-area"},{default:t(()=>[e(Ce,{class:"app-header"},{default:t(()=>[a("div",qe,[a("div",{class:j(["scope-tag",m.value?"project":"global"])},[(i(),v(Re(m.value?s(b):s(R)))),a("span",null,g(m.value?s(k).projectName||"项目":"全局模式"),1),m.value&&s(k).projectRoot?(i(),v(x,{key:0,title:s(k).projectRoot},{default:t(()=>[e(s(Pe),{class:"info-icon"})]),_:1},8,["title"])):B("",!0)],2)]),a("div",He,[a("div",$e,[(i(!0),r(S,null,Le(s(Ie),(_,w)=>(i(),v(x,{key:w,title:_.label},{default:t(()=>[a("button",{class:j(["theme-btn",{active:pe.value===w}]),"data-theme-key":w,onClick:Ze=>fe(w)},g(_.icon),11,Je)]),_:2},1032,["title"]))),128))]),a("span",Ye,g(s(re)),1),e(Oe,{color:C.value==="connected"?"green":C.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(g(C.value==="connected"?"已连接":C.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(je,{class:"page-content"},{default:t(()=>[e(we)]),_:1})]),_:1})]),_:1})}}},nt=Ne(Qe,[["__scopeId","data-v-fae09a5d"]]);export{nt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as Me}from"./ws-Dg01CdRG.js";import{_ as Ne}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{t as Le,$ as me,k as re,a1 as N,ag as U,ae as Te}from"./icons-C0xSkzug.js";import{l as je,F as s,D as p,c as a,x as o,r as n,q as y,v as l,J as f,u as v,m as b,G as r,I as u,H as De}from"./vendor-xFZ6Jlpw.js";const Re={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ee={key:0,style:{"text-align":"center",padding:"30px"}},Ue={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Je={key:1},Ke={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ve={key:3,style:{"margin-top":"16px"}},Ge={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},He={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},qe={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},We={style:{"font-family":"monospace"}},Qe={key:0},Xe={key:1,style:{"margin-top":"12px"}},Ye={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},Ze={key:0,style:{"text-align":"center",padding:"30px"}},et={key:0,style:{"margin-bottom":"16px"}},tt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},at={key:0,style:{"font-family":"monospace","font-size":"12px"}},ot={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},lt={key:0,style:{"text-align":"center",padding:"30px"}},nt={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},st={key:0,style:{"text-align":"center",padding:"30px"}},rt={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},it={key:1},ut={key:2},ct={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},dt={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},pt={key:0,style:{"margin-top":"12px"}},vt={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},yt={__name:"Backup",setup(ft){const g=Me(),ie=n("backup"),J=n(!1),K=n(!1),V=n(!1),B=n(""),w=n([]),_=n(""),be=[{title:"备份 ID",key:"id"},{title:"大小",key:"size",width:120},{title:"创建时间",key:"createdAt"},{title:"操作",key:"action",width:100}];async function ue(){K.value=!0,B.value="";try{const{output:t}=await g.execute("backup list --json",15e3),e=M(t);Array.isArray(e)?w.value=e:e&&Array.isArray(e.backups)?w.value=e.backups:(w.value=[],t&&t.trim()&&(_.value=t))}catch(t){B.value=`加载备份列表失败: ${t.message}`}finally{K.value=!1}}async function xe(){V.value=!0,_.value="",B.value="";try{const{output:t}=await g.execute("backup create --json",3e4);_.value=t||"备份已创建",await ue()}catch(t){_.value=`创建备份失败: ${t.message}`}finally{V.value=!1}}const G=n(!1),H=n(!1),k=n(null),z=n("");function _e(t){k.value=t,z.value="",G.value=!0}async function ke(){if(k.value){H.value=!0,z.value="";try{const{output:t}=await g.execute(`backup restore ${k.value.id}`,6e4);z.value=t||"恢复完成"}catch(t){z.value=`恢复失败: ${t.message}`}finally{H.value=!1}}}const q=n(!1),L=n(""),I=n(!1),T=n("未知"),j=n(0),W=n(""),x=n(""),Q=n(!1),X=n(!1),S=n([]),he=[{title:"文件路径",key:"path"},{title:"冲突类型",key:"type",width:120}];async function Y(){q.value=!0,L.value="";try{const{output:t}=await g.execute("sync status --json",15e3),e=M(t);e?(I.value=e.online||e.synced||e.status==="online"||!1,T.value=I.value?"已同步":"未同步",j.value=e.pending??e.pendingChanges??0,W.value=e.lastSync||e.lastSyncTime||""):we(t)}catch(t){L.value=`加载同步状态失败: ${t.message}`}finally{q.value=!1}}function we(t){if(!t){T.value="未知";return}I.value=/synced|online|up.to.date/i.test(t),T.value=I.value?"已同步":"未同步";const e=t.match(/pending[:\s]+(\d+)/i);j.value=e?parseInt(e[1]):0;const c=t.match(/last[:\s]+(.+)/i);c&&(W.value=c[1].trim())}async function ze(){Q.value=!0,x.value="";try{const{output:t}=await g.execute("sync push",3e4);x.value=t||"推送完成",await Y()}catch(t){x.value=`推送失败: ${t.message}`}finally{Q.value=!1}}async function Se(){X.value=!0,x.value="";try{const{output:t}=await g.execute("sync pull",3e4);x.value=t||"拉取完成",await Y()}catch(t){x.value=`拉取失败: ${t.message}`}finally{X.value=!1}}async function Ce(){try{const{output:t}=await g.execute("sync conflicts --json",15e3),e=M(t);Array.isArray(e)?S.value=e:e&&Array.isArray(e.conflicts)?S.value=e.conflicts:S.value=[]}catch{S.value=[]}}const Z=n(!1),D=n(""),C=n(!1),ee=n(""),te=n(!1),O=n(""),A=n([]),Ae=[{title:"CID",key:"cid"},{title:"名称",key:"name"},{title:"大小",key:"size",width:120},{title:"固定时间",key:"pinnedAt"},{title:"操作",key:"action",width:120}];async function Pe(){Z.value=!0,D.value="";try{const{output:t}=await g.execute("ipfs status --json",15e3),e=M(t);if(e)C.value=e.online||e.status==="online"||e.connected||!1,ee.value=e.peerId||e.id||"";else{C.value=t?/online|connected|running/i.test(t):!1;const c=t?t.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;ee.value=c?c[1]:""}}catch(t){D.value=`加载 IPFS 状态失败: ${t.message}`}finally{Z.value=!1}}async function ae(){te.value=!0,O.value="";try{const{output:t}=await g.execute("ipfs pins --json",15e3),e=M(t);Array.isArray(e)?A.value=e:e&&Array.isArray(e.pins)?A.value=e.pins:A.value=[]}catch(t){O.value=`加载固定列表失败: ${t.message}`}finally{te.value=!1}}const oe=n(!1),le=n(!1),R=n(""),F=n("");async function ce(){if(R.value.trim()){le.value=!0,F.value="";try{const{output:t}=await g.execute(`ipfs pin "${R.value.trim()}"`,3e4);F.value=t||"固定成功",await ae()}catch(t){F.value=`固定失败: ${t.message}`}finally{le.value=!1}}}async function $e(t){try{await g.execute(`ipfs unpin ${t.cid}`,15e3),await ae()}catch(e){O.value=`取消固定失败: ${e.message}`}}function M(t){if(!t||!t.trim())return null;try{return JSON.parse(t.trim())}catch{const c=t.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(c)try{return JSON.parse(c[0])}catch{}return null}}function de(t){if(t==null||isNaN(t))return"-";const e=Number(t);if(e===0)return"0 B";const c=["B","KB","MB","GB","TB"],h=Math.floor(Math.log(e)/Math.log(1024));return(e/Math.pow(1024,h)).toFixed(h>0?1:0)+" "+c[h]}async function pe(){J.value=!0;try{await Promise.all([ue(),Y(),Ce(),Pe(),ae()])}finally{J.value=!1}}return je(pe),(t,e)=>{const c=y("a-button"),h=y("a-space"),E=y("a-spin"),ve=y("a-empty"),ne=y("a-table"),m=y("a-card"),ye=y("a-modal"),se=y("a-tab-pane"),P=y("a-statistic"),$=y("a-col"),fe=y("a-row"),ge=y("a-tag"),Be=y("a-popconfirm"),Ie=y("a-input"),Oe=y("a-tabs");return l(),s("div",null,[p("div",Re,[e[6]||(e[6]=p("div",null,[p("h2",{class:"page-title"},"备份与同步"),p("p",{class:"page-sub"},"备份管理 / 数据同步 / IPFS")],-1)),a(c,{type:"primary",ghost:"",loading:J.value,onClick:pe},{icon:o(()=>[a(v(Le))]),default:o(()=>[e[5]||(e[5]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),a(Oe,{activeKey:ie.value,"onUpdate:activeKey":e[4]||(e[4]=i=>ie.value=i),type:"card"},{default:o(()=>[a(se,{key:"backup"},{tab:o(()=>[a(v(re)),e[7]||(e[7]=f(" 备份管理",-1))]),default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:o(()=>[a(h,null,{default:o(()=>[a(v(re)),e[8]||(e[8]=p("span",null,"备份操作",-1))]),_:1})]),extra:o(()=>[a(c,{type:"primary",loading:V.value,onClick:xe},{icon:o(()=>[a(v(me))]),default:o(()=>[e[9]||(e[9]=f(" 创建备份 ",-1))]),_:1},8,["loading"])]),default:o(()=>[K.value?(l(),s("div",Ee,[a(E)])):w.value.length===0&&!_.value?(l(),b(ve,{key:1,description:"暂无备份记录"})):r("",!0),w.value.length>0?(l(),b(ne,{key:2,columns:be,"data-source":w.value,pagination:!1,size:"small","row-key":"id"},{bodyCell:o(({column:i,record:d})=>[i.key==="id"?(l(),s("span",Ue,u(d.id.length>20?d.id.slice(0,20)+"...":d.id),1)):r("",!0),i.key==="size"?(l(),s("span",Je,u(de(d.size)),1)):r("",!0),i.key==="createdAt"?(l(),s("span",Ke,u(d.createdAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(c,{key:3,size:"small",type:"link",onClick:Fe=>_e(d)},{default:o(()=>[...e[10]||(e[10]=[f(" 恢复 ",-1)])]),_:1},8,["onClick"])):r("",!0)]),_:1},8,["data-source"])):r("",!0),_.value?(l(),s("div",Ve,[e[11]||(e[11]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"最近操作结果",-1)),p("pre",Ge,u(_.value),1)])):r("",!0),B.value?(l(),s("div",He,u(B.value),1)):r("",!0)]),_:1}),a(ye,{open:G.value,"onUpdate:open":e[0]||(e[0]=i=>G.value=i),title:"确认恢复备份","ok-text":"确认恢复","cancel-text":"取消","confirm-loading":H.value,onOk:ke,"ok-type":"danger"},{default:o(()=>[e[15]||(e[15]=p("p",{style:{color:"var(--text-secondary)"}}," 确定要恢复以下备份吗?此操作将覆盖当前数据。 ",-1)),k.value?(l(),s("div",qe,[p("div",null,[e[12]||(e[12]=p("strong",null,"备份 ID:",-1)),e[13]||(e[13]=f()),p("span",We,u(k.value.id),1)]),k.value.createdAt?(l(),s("div",Qe,[e[14]||(e[14]=p("strong",null,"创建时间:",-1)),f(" "+u(k.value.createdAt),1)])):r("",!0)])):r("",!0),z.value?(l(),s("div",Xe,[p("pre",Ye,u(z.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1}),a(se,{key:"sync"},{tab:o(()=>[a(v(N)),e[16]||(e[16]=f(" 数据同步",-1))]),default:o(()=>[q.value?(l(),s("div",Ze,[a(E)])):(l(),s(De,{key:1},[a(fe,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"同步状态",value:T.value,"value-style":{color:I.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"待同步变更",value:j.value,"value-style":{color:j.value>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"最近同步",value:W.value||"无","value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:o(()=>[a(v(N))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a(h,{style:{"margin-bottom":"16px"}},{default:o(()=>[a(c,{loading:Q.value,onClick:ze,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(re))]),default:o(()=>[e[17]||(e[17]=f(" 推送 ",-1))]),_:1},8,["loading"]),a(c,{loading:X.value,onClick:Se,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(N))]),default:o(()=>[e[18]||(e[18]=f(" 拉取 ",-1))]),_:1},8,["loading"])]),_:1}),x.value?(l(),s("div",et,[e[19]||(e[19]=p("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"操作结果",-1)),p("pre",tt,u(x.value),1)])):r("",!0),S.value.length>0?(l(),b(m,{key:1,title:"冲突列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(ne,{columns:he,"data-source":S.value,pagination:!1,size:"small","row-key":"path"},{bodyCell:o(({column:i,record:d})=>[i.key==="path"?(l(),s("span",at,u(d.path),1)):r("",!0),i.key==="type"?(l(),b(ge,{key:1,color:"red"},{default:o(()=>[f(u(d.type||"冲突"),1)]),_:2},1024)):r("",!0)]),_:1},8,["data-source"])]),_:1})):r("",!0)],64)),L.value?(l(),s("div",ot,u(L.value),1)):r("",!0)]),_:1}),a(se,{key:"ipfs"},{tab:o(()=>[a(v(U)),e[20]||(e[20]=f(" IPFS 存储",-1))]),default:o(()=>[a(m,{title:"IPFS 状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:o(()=>[a(ge,{color:C.value?"green":"default"},{default:o(()=>[f(u(C.value?"在线":"离线"),1)]),_:1},8,["color"])]),default:o(()=>[Z.value?(l(),s("div",lt,[a(E)])):(l(),b(fe,{key:1,gutter:[16,16]},{default:o(()=>[a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"节点状态",value:C.value?"已连接":"未连接","value-style":{color:C.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value","value-style"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"已固定文件",value:A.value.length,"value-style":{fontSize:"16px"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1}),a($,{xs:24,sm:8},{default:o(()=>[a(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(P,{title:"Peer ID",value:ee.value||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:o(()=>[a(v(U))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1})),D.value?(l(),s("div",nt,u(D.value),1)):r("",!0)]),_:1}),a(m,{title:"固定文件列表",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:o(()=>[a(c,{size:"small",onClick:e[1]||(e[1]=i=>oe.value=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:o(()=>[a(v(me))]),default:o(()=>[e[21]||(e[21]=f(" 固定文件 ",-1))]),_:1})]),default:o(()=>[te.value?(l(),s("div",st,[a(E)])):A.value.length===0?(l(),b(ve,{key:1,description:"暂无固定文件"})):(l(),b(ne,{key:2,columns:Ae,"data-source":A.value,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:o(({column:i,record:d})=>[i.key==="cid"?(l(),s("span",rt,u(d.cid.length>24?d.cid.slice(0,24)+"...":d.cid),1)):r("",!0),i.key==="name"?(l(),s("span",it,u(d.name||"-"),1)):r("",!0),i.key==="size"?(l(),s("span",ut,u(de(d.size)),1)):r("",!0),i.key==="pinnedAt"?(l(),s("span",ct,u(d.pinnedAt||"-"),1)):r("",!0),i.key==="action"?(l(),b(Be,{key:4,title:"确定取消固定?","ok-text":"确定","cancel-text":"取消",onConfirm:Fe=>$e(d)},{default:o(()=>[a(c,{size:"small",type:"link",danger:""},{default:o(()=>[a(v(Te)),e[22]||(e[22]=f(" 取消固定 ",-1))]),_:1})]),_:1},8,["onConfirm"])):r("",!0)]),_:1},8,["data-source"])),O.value?(l(),s("div",dt,u(O.value),1)):r("",!0)]),_:1}),a(ye,{open:oe.value,"onUpdate:open":e[3]||(e[3]=i=>oe.value=i),title:"固定文件到 IPFS","confirm-loading":le.value,onOk:ce,"ok-text":"固定","cancel-text":"取消"},{default:o(()=>[e[23]||(e[23]=p("div",{style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},"请输入要固定的文件路径",-1)),a(Ie,{value:R.value,"onUpdate:value":e[2]||(e[2]=i=>R.value=i),placeholder:"文件路径,例如: /path/to/file.txt",onPressEnter:ce},null,8,["value"]),F.value?(l(),s("div",pt,[p("pre",vt,u(F.value),1)])):r("",!0)]),_:1},8,["open","confirm-loading"])]),_:1})]),_:1},8,["activeKey"])])}}},_t=Ne(yt,[["__scopeId","data-v-3d5d81e6"]]);export{_t as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as Ne}from"./ws-Dg01CdRG.js";import{s as Be}from"./community-parser-CO25nZFt.js";import{_ as qe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{a as x}from"./index-CHFoDNQ0.js";import{t as Ie,$ as Re,m as re,as as ie,at as ue,au as Ve,a2 as De,ac as Je,av as de}from"./icons-C0xSkzug.js";import{l as Pe,F as f,D as m,c as a,x as s,m as C,G as h,q as v,r as k,v as i,J as y,u as b,H as A,L as w,I as u,a as Q}from"./vendor-xFZ6Jlpw.js";import"./index-DKyOq7hH.js";import"./useConfigInject-CypxEK_1.js";import"./transition-8JSy_yCb.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CARXcQZJ.js";import"./index-U4Zd5IK6.js";function N(t){const l=Be(t);if(!l)return null;try{return JSON.parse(l)}catch{}const r=l.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}function S(t,l=0){return typeof t=="number"&&Number.isFinite(t)?t:l}function Ee(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,name:String(t.name||r),symbol:String(t.symbol||""),chainId:S(t.chainId??t.chain_id,0),_idx:l}:null}function Ke(t){const l=N(t);return Array.isArray(l)?l.map(Ee).filter(Boolean):[]}function Ge(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",asset:String(t.asset||"native"),amount:S(t.amount,0),senderAddress:t.senderAddress??t.sender_address??"",recipientAddress:t.recipientAddress??t.recipient_address??"",lockTxHash:t.lockTxHash??t.lock_tx_hash??"",mintTxHash:t.mintTxHash??t.mint_tx_hash??"",status:String(t.status||"pending").toLowerCase(),feeAmount:S(t.feeAmount??t.fee_amount,0),feeChain:t.feeChain??t.fee_chain??"",errorMessage:t.errorMessage??t.error_message??"",createdAt:t.createdAt??t.created_at??null,completedAt:t.completedAt??t.completed_at??null,_idx:l}:null}function We(t){const l=N(t);return Array.isArray(l)?l.map(Ge).filter(Boolean):[]}function Xe(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",fromAsset:t.fromAsset??t.from_asset??"native",toAsset:t.toAsset??t.to_asset??"native",amount:S(t.amount,0),counterpartyAddress:t.counterpartyAddress??t.counterparty_address??"",hashLock:t.hashLock??t.hash_lock??"",expiresAt:t.expiresAt??t.expires_at??null,status:String(t.status||"initiated").toLowerCase(),claimTxHash:t.claimTxHash??t.claim_tx_hash??"",refundTxHash:t.refundTxHash??t.refund_tx_hash??"",createdAt:t.createdAt??t.created_at??null,_idx:l}:null}function Qe(t){const l=N(t);return Array.isArray(l)?l.map(Xe).filter(Boolean):[]}function Ye(t,l=0){if(!t||typeof t!="object")return null;const r=t.id||"";return r?{key:r,id:r,fromChain:t.fromChain??t.from_chain??"",toChain:t.toChain??t.to_chain??"",payload:String(t.payload||""),targetContract:t.targetContract??t.target_contract??"",sourceTxHash:t.sourceTxHash??t.source_tx_hash??"",destinationTxHash:t.destinationTxHash??t.destination_tx_hash??"",status:String(t.status||"pending").toLowerCase(),retries:S(t.retries,0),createdAt:t.createdAt??t.created_at??null,deliveredAt:t.deliveredAt??t.delivered_at??null,_idx:l}:null}function Ze(t){const l=N(t);return Array.isArray(l)?l.map(Ye).filter(Boolean):[]}const et={bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}};function tt(t){const l=JSON.parse(JSON.stringify(et)),r=N(t);return!r||typeof r!="object"||Array.isArray(r)||(r.bridges&&typeof r.bridges=="object"&&(l.bridges.total=S(r.bridges.total,0),l.bridges.totalVolume=S(r.bridges.totalVolume??r.bridges.total_volume,0),l.bridges.totalFees=S(r.bridges.totalFees??r.bridges.total_fees,0),r.bridges.byStatus&&typeof r.bridges.byStatus=="object"&&(l.bridges.byStatus={...r.bridges.byStatus})),r.swaps&&typeof r.swaps=="object"&&(l.swaps.total=S(r.swaps.total,0),r.swaps.byStatus&&typeof r.swaps.byStatus=="object"&&(l.swaps.byStatus={...r.swaps.byStatus})),r.messages&&typeof r.messages=="object"&&(l.messages.total=S(r.messages.total,0),r.messages.byStatus&&typeof r.messages.byStatus=="object"&&(l.messages.byStatus={...r.messages.byStatus}))),l}function at(t){const l=N(t);return!l||typeof l!="object"||Array.isArray(l)?null:{fee:S(l.fee,0),breakdown:{sourceFee:S(l?.breakdown?.sourceFee??l?.breakdown?.source_fee,0),destFee:S(l?.breakdown?.destFee??l?.breakdown?.dest_fee,0),bridgeFee:S(l?.breakdown?.bridgeFee??l?.breakdown?.bridge_fee,0)},currency:String(l.currency||"USD")}}function pe(t){if(t==null||t==="")return"—";const l=typeof t=="number"?new Date(t):new Date(String(t));return isNaN(l.getTime())?String(t):l.toLocaleString("zh-CN",{hour12:!1})}const ot={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},st={style:{opacity:"0.7"}},nt={key:0,style:{opacity:"0.55","font-size":"10px","margin-left":"4px"}},lt={style:{color:"var(--text-primary)"}},rt={style:{color:"var(--text-primary)"}},it={style:{color:"#722ed1","font-weight":"500"}},ut={style:{color:"var(--text-secondary)","margin-left":"4px","font-size":"11px"}},dt={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},pt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},ct={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ft={style:{color:"var(--text-primary)"}},mt={style:{color:"var(--text-secondary)","font-size":"11px",margin:"0 4px"}},yt={style:{color:"var(--text-primary)"}},vt={style:{color:"var(--text-secondary)","font-size":"11px","margin-left":"4px"}},gt={key:1,style:{color:"#722ed1","font-weight":"500"}},_t={key:0,style:{color:"var(--text-secondary)","font-family":"monospace","font-size":"11px"}},bt={key:1,style:{color:"var(--text-muted)"}},ht={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},xt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},kt={style:{color:"var(--text-primary)"}},Ct={style:{color:"var(--text-primary)"}},At={key:1,style:{color:"var(--text-secondary)","font-size":"12px"}},St={key:1,style:{color:"var(--text-muted)"}},zt={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},Tt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Ft={style:{"margin-top":"12px","font-size":"12px",color:"var(--text-secondary)"}},Ut={__name:"Crosschain",setup(t){const l=Ne(),r=k(!1),Y=k(!1),Z=k(!1),ee=k(!1),te=k(!1),z=k([]),ce=k([]),fe=k([]),me=k([]),B=k({bridges:{total:0,byStatus:{},totalVolume:0,totalFees:0},swaps:{total:0,byStatus:{}},messages:{total:0,byStatus:{}}}),q=k("bridges"),J=k(!1),P=k(!1),E=k(!1),ae=k(!1),p=Q({fromChain:"",toChain:"",amount:null,asset:"",sender:"",recipient:""}),d=Q({fromChain:"",toChain:"",amount:null,fromAsset:"",toAsset:"",counterparty:"",timeoutMs:null}),g=Q({fromChain:"",toChain:"",payload:"",contract:""}),T=Q({fromChain:"",toChain:"",amount:null}),F=k(null),be=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"160px"},{title:"费用",key:"fee",width:"100px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],he=[{title:"路径",key:"route"},{title:"金额",key:"amount",width:"110px"},{title:"哈希锁",key:"hashLock",width:"160px"},{title:"状态",key:"status",width:"120px"},{title:"过期时间",key:"expiresAt",width:"160px"}],xe=[{title:"路径",key:"route",width:"220px"},{title:"消息",key:"payload"},{title:"重试",key:"retries",width:"80px"},{title:"状态",key:"status",width:"110px"},{title:"创建时间",key:"createdAt",width:"160px"}],ke={ethereum:"blue",polygon:"purple",bsc:"gold",arbitrum:"cyan",solana:"magenta"};function Ce(n){return ke[n]||"default"}function O(n){const o=z.value.find(U=>U.id===n);return o?o.name:n||"—"}function oe(n){return{pending:"待处理",locked:"已锁定",minted:"已铸造",completed:"已完成",refunded:"已退款",failed:"失败",initiated:"已发起",hash_locked:"哈希锁定",claimed:"已领取",expired:"已过期",sent:"已发送",delivered:"已送达"}[n]||n}function Ae(n){return{pending:"default",locked:"processing",minted:"cyan",completed:"green",refunded:"orange",failed:"red"}[n]||"default"}function Se(n){return{initiated:"default",hash_locked:"processing",claimed:"green",refunded:"orange",expired:"red"}[n]||"default"}function ze(n){return{pending:"default",sent:"processing",delivered:"green",failed:"red"}[n]||"default"}function Te(n,o){return n?n.length>o?n.slice(0,o)+"...":n:""}function Fe({key:n}){n==="bridge"?J.value=!0:n==="swap"?P.value=!0:n==="message"&&(E.value=!0)}async function I(){r.value=!0;try{const[n,o,U,R,se]=await Promise.all([l.execute("crosschain chains --json",8e3).catch(()=>({output:""})),l.execute("crosschain bridges --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain swaps --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain messages --limit 200 --json",1e4).catch(()=>({output:""})),l.execute("crosschain stats --json",8e3).catch(()=>({output:""}))]);z.value=Ke(n.output),ce.value=We(o.output),fe.value=Qe(U.output),me.value=Ze(R.output),B.value=tt(se.output)}catch(n){x.error("加载跨链数据失败: "+(n?.message||n))}finally{r.value=!1}}function K(n){return!n.fromChain||!n.toChain?(x.warning("请选择源链和目标链"),!1):n.fromChain===n.toChain?(x.warning("源链和目标链必须不同"),!1):!0}async function Ue(){if(K(p)){if(!p.amount||p.amount<=0){x.warning("请输入正数金额");return}Y.value=!0;try{const n=[`crosschain bridge ${p.fromChain} ${p.toChain} ${p.amount}`];p.asset.trim()&&n.push(`--asset "${p.asset.trim().replace(/"/g,'\\"')}"`),p.sender.trim()&&n.push(`--sender "${p.sender.trim().replace(/"/g,'\\"')}"`),p.recipient.trim()&&n.push(`--recipient "${p.recipient.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:o}=await l.execute(n.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"bridgeId"/.test(o)){x.error("桥接发起失败: "+o.slice(0,120));return}x.success("桥接已发起"),J.value=!1,ye(),q.value="bridges",await I()}catch(n){x.error("桥接失败: "+(n?.message||n))}finally{Y.value=!1}}}async function we(){if(K(d)){if(!d.amount||d.amount<=0){x.warning("请输入正数金额");return}Z.value=!0;try{const n=[`crosschain swap ${d.fromChain} ${d.toChain} ${d.amount}`];d.fromAsset.trim()&&n.push(`--from-asset "${d.fromAsset.trim().replace(/"/g,'\\"')}"`),d.toAsset.trim()&&n.push(`--to-asset "${d.toAsset.trim().replace(/"/g,'\\"')}"`),d.counterparty.trim()&&n.push(`--counterparty "${d.counterparty.trim().replace(/"/g,'\\"')}"`),d.timeoutMs!=null&&n.push(`--timeout ${d.timeoutMs}`),n.push("--json");const{output:o}=await l.execute(n.join(" "),15e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"swapId"/.test(o)){x.error("原子交换发起失败: "+o.slice(0,120));return}x.success("原子交换已发起"),P.value=!1,ve(),q.value="swaps",await I()}catch(n){x.error("原子交换失败: "+(n?.message||n))}finally{Z.value=!1}}}async function je(){if(K(g)){ee.value=!0;try{const n=[`crosschain send ${g.fromChain} ${g.toChain}`];g.payload.trim()&&n.push(`--payload "${g.payload.trim().replace(/"/g,'\\"')}"`),g.contract.trim()&&n.push(`--contract "${g.contract.trim().replace(/"/g,'\\"')}"`),n.push("--json");const{output:o}=await l.execute(n.join(" "),12e3);if(/error|failed|失败|unsupported/i.test(o)&&!/"messageId"/.test(o)){x.error("消息发送失败: "+o.slice(0,120));return}x.success("消息已发送"),E.value=!1,ge(),q.value="messages",await I()}catch(n){x.error("发送失败: "+(n?.message||n))}finally{ee.value=!1}}}async function $e(){if(K(T)){if(!T.amount||T.amount<=0){x.warning("请输入正数金额");return}te.value=!0,F.value=null;try{const n=`crosschain estimate-fee ${T.fromChain} ${T.toChain} ${T.amount} --json`,{output:o}=await l.execute(n,8e3),U=at(o);if(!U){x.error("费用估算失败: "+o.slice(0,120));return}F.value=U}catch(n){x.error("估算失败: "+(n?.message||n))}finally{te.value=!1}}}function ye(){p.fromChain="",p.toChain="",p.amount=null,p.asset="",p.sender="",p.recipient=""}function ve(){d.fromChain="",d.toChain="",d.amount=null,d.fromAsset="",d.toAsset="",d.counterparty="",d.timeoutMs=null}function ge(){g.fromChain="",g.toChain="",g.payload="",g.contract=""}return Pe(I),(n,o)=>{const U=v("a-button"),R=v("a-menu-item"),se=v("a-menu"),Le=v("a-dropdown"),_e=v("a-space"),H=v("a-statistic"),L=v("a-card"),V=v("a-col"),Me=v("a-row"),D=v("a-tag"),ne=v("a-table"),le=v("a-tab-pane"),Oe=v("a-tabs"),j=v("a-select-option"),$=v("a-select"),_=v("a-form-item"),G=v("a-input-number"),M=v("a-input"),W=v("a-form"),X=v("a-modal"),He=v("a-textarea");return i(),f("div",null,[m("div",ot,[o[32]||(o[32]=m("div",null,[m("h2",{class:"page-title"},"跨链桥"),m("p",{class:"page-sub"},"链间资产桥接 · HTLC 原子交换 · 跨链消息")],-1)),a(_e,null,{default:s(()=>[a(U,{loading:r.value,onClick:I},{icon:s(()=>[a(b(Ie))]),default:s(()=>[o[26]||(o[26]=y(" 刷新 ",-1))]),_:1},8,["loading"]),a(Le,{trigger:["click"]},{overlay:s(()=>[a(se,{onClick:Fe},{default:s(()=>[a(R,{key:"bridge"},{default:s(()=>[a(b(re)),o[28]||(o[28]=y(" 桥接资产",-1))]),_:1}),a(R,{key:"swap"},{default:s(()=>[a(b(ie)),o[29]||(o[29]=y(" HTLC 原子交换",-1))]),_:1}),a(R,{key:"message"},{default:s(()=>[a(b(ue)),o[30]||(o[30]=y(" 跨链消息",-1))]),_:1})]),_:1})]),default:s(()=>[a(U,{type:"primary"},{icon:s(()=>[a(b(Re))]),default:s(()=>[o[27]||(o[27]=y(" 新建 ▼ ",-1))]),_:1})]),_:1}),a(U,{onClick:o[0]||(o[0]=e=>ae.value=!0)},{icon:s(()=>[a(b(Ve))]),default:s(()=>[o[31]||(o[31]=y(" 费用估算 ",-1))]),_:1})]),_:1})]),a(Me,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:s(()=>[a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"支持链",value:z.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:s(()=>[a(b(De))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"桥接交易",value:B.value.bridges.total,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:s(()=>[a(b(re))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"原子交换",value:B.value.swaps.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:s(()=>[a(b(ie))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:12,sm:8,lg:5},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"跨链消息",value:B.value.messages.total,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:s(()=>[a(b(ue))]),_:1},8,["value"])]),_:1})]),_:1}),a(V,{xs:24,sm:8,lg:4},{default:s(()=>[a(L,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:s(()=>[a(H,{title:"总交易额",value:B.value.bridges.totalVolume,precision:2,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:s(()=>[a(b(Je))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),z.value.length?(i(),C(L,{key:0,title:"支持的区块链",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:s(()=>[a(_e,{size:[12,8],wrap:""},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(D,{key:e.id,color:Ce(e.id)},{default:s(()=>[y(u(e.name)+" ",1),m("span",st,"("+u(e.symbol)+")",1),e.chainId>0?(i(),f("span",nt,"#"+u(e.chainId),1)):h("",!0)]),_:2},1032,["color"]))),128))]),_:1})]),_:1})):h("",!0),a(Oe,{activeKey:q.value,"onUpdate:activeKey":o[1]||(o[1]=e=>q.value=e),class:"xchain-tabs"},{default:s(()=>[a(le,{key:"bridges",tab:"桥接交易"},{default:s(()=>[a(ne,{columns:be,"data-source":ce.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:s(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",lt,u(O(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",rt,u(O(c.toChain)),1)],64)):h("",!0),e.key==="amount"?(i(),f(A,{key:1},[m("span",it,u(c.amount),1),m("span",ut,u(c.asset),1)],64)):h("",!0),e.key==="fee"?(i(),f("span",dt,u(c.feeAmount),1)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Ae(c.status)},{default:s(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",pt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:s(()=>[m("div",ct,[a(b(re),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[33]||(o[33]=y(' 暂无桥接交易,点"新建 → 桥接资产"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"swaps",tab:"原子交换"},{default:s(()=>[a(ne,{columns:he,"data-source":fe.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:s(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",ft,u(O(c.fromChain)),1),m("span",mt,"("+u(c.fromAsset)+")",1),a(b(de),{style:{margin:"0 4px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",yt,u(O(c.toChain)),1),m("span",vt,"("+u(c.toAsset)+")",1)],64)):h("",!0),e.key==="amount"?(i(),f("span",gt,u(c.amount),1)):h("",!0),e.key==="hashLock"?(i(),f(A,{key:2},[c.hashLock?(i(),f("span",_t,u(c.hashLock.slice(0,14))+"... ",1)):(i(),f("span",bt,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:Se(c.status)},{default:s(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="expiresAt"?(i(),f("span",ht,u(b(pe)(c.expiresAt)),1)):h("",!0)]),emptyText:s(()=>[m("div",xt,[a(b(ie),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[34]||(o[34]=y(' 暂无原子交换,点"新建 → HTLC 原子交换"发起 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1}),a(le,{key:"messages",tab:"跨链消息"},{default:s(()=>[a(ne,{columns:xe,"data-source":me.value,pagination:{pageSize:20,showTotal:e=>`共 ${e} 条`},size:"small",loading:r.value,style:{background:"var(--bg-card)"}},{bodyCell:s(({column:e,record:c})=>[e.key==="route"?(i(),f(A,{key:0},[m("span",kt,u(O(c.fromChain)),1),a(b(de),{style:{margin:"0 6px",color:"var(--text-secondary)","font-size":"11px"}}),m("span",Ct,u(O(c.toChain)),1)],64)):h("",!0),e.key==="payload"?(i(),f("span",At,u(Te(c.payload,60)||"—"),1)):h("",!0),e.key==="retries"?(i(),f(A,{key:2},[c.retries>0?(i(),C(D,{key:0,color:"orange",style:{"font-size":"11px"}},{default:s(()=>[y(u(c.retries)+" 次",1)]),_:2},1024)):(i(),f("span",St,"—"))],64)):h("",!0),e.key==="status"?(i(),C(D,{key:3,color:ze(c.status)},{default:s(()=>[y(u(oe(c.status)),1)]),_:2},1032,["color"])):h("",!0),e.key==="createdAt"?(i(),f("span",zt,u(b(pe)(c.createdAt)),1)):h("",!0)]),emptyText:s(()=>[m("div",Tt,[a(b(ue),{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),o[35]||(o[35]=y(' 暂无跨链消息,点"新建 → 跨链消息"发送 ',-1))])]),_:1},8,["data-source","pagination","loading"])]),_:1})]),_:1},8,["activeKey"]),a(X,{open:J.value,"onUpdate:open":o[8]||(o[8]=e=>J.value=e),title:"桥接资产","confirm-loading":Y.value,width:540,"ok-text":"发起桥接","cancel-text":"取消",onOk:Ue,onCancel:ye},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:p.fromChain,"onUpdate:value":o[2]||(o[2]=e=>p.fromChain=e),placeholder:"选择源链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:p.toChain,"onUpdate:value":o[3]||(o[3]=e=>p.toChain=e),placeholder:"选择目标链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===p.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:s(()=>[a(G,{value:p.amount,"onUpdate:value":o[4]||(o[4]=e=>p.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"资产"},{default:s(()=>[a(M,{value:p.asset,"onUpdate:value":o[5]||(o[5]=e=>p.asset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"发送方"},{default:s(()=>[a(M,{value:p.sender,"onUpdate:value":o[6]||(o[6]=e=>p.sender=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"接收方"},{default:s(()=>[a(M,{value:p.recipient,"onUpdate:value":o[7]||(o[7]=e=>p.recipient=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:P.value,"onUpdate:open":o[16]||(o[16]=e=>P.value=e),title:"HTLC 原子交换","confirm-loading":Z.value,width:540,"ok-text":"发起交换","cancel-text":"取消",onOk:we,onCancel:ve},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:d.fromChain,"onUpdate:value":o[9]||(o[9]=e=>d.fromChain=e),placeholder:"选择源链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:d.toChain,"onUpdate:value":o[10]||(o[10]=e=>d.toChain=e),placeholder:"选择目标链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===d.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:s(()=>[a(G,{value:d.amount,"onUpdate:value":o[11]||(o[11]=e=>d.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1}),a(_,{label:"源资产"},{default:s(()=>[a(M,{value:d.fromAsset,"onUpdate:value":o[12]||(o[12]=e=>d.fromAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"目标资产"},{default:s(()=>[a(M,{value:d.toAsset,"onUpdate:value":o[13]||(o[13]=e=>d.toAsset=e),placeholder:"native(默认)"},null,8,["value"])]),_:1}),a(_,{label:"对手方"},{default:s(()=>[a(M,{value:d.counterparty,"onUpdate:value":o[14]||(o[14]=e=>d.counterparty=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1}),a(_,{label:"超时 (ms)"},{default:s(()=>[a(G,{value:d.timeoutMs,"onUpdate:value":o[15]||(o[15]=e=>d.timeoutMs=e),min:0,placeholder:"默认 24h",style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:E.value,"onUpdate:open":o[21]||(o[21]=e=>E.value=e),title:"发送跨链消息","confirm-loading":ee.value,width:520,"ok-text":"发送","cancel-text":"取消",onOk:je,onCancel:ge},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:g.fromChain,"onUpdate:value":o[17]||(o[17]=e=>g.fromChain=e),placeholder:"选择源链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:g.toChain,"onUpdate:value":o[18]||(o[18]=e=>g.toChain=e),placeholder:"选择目标链"},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===g.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"消息"},{default:s(()=>[a(He,{value:g.payload,"onUpdate:value":o[19]||(o[19]=e=>g.payload=e),"auto-size":{minRows:3,maxRows:8}},null,8,["value"])]),_:1}),a(_,{label:"目标合约"},{default:s(()=>[a(M,{value:g.contract,"onUpdate:value":o[20]||(o[20]=e=>g.contract=e),placeholder:"0x...(可选)"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),a(X,{open:ae.value,"onUpdate:open":o[25]||(o[25]=e=>ae.value=e),title:"费用估算","confirm-loading":te.value,width:480,"ok-text":"估算","cancel-text":"关闭",onOk:$e},{default:s(()=>[a(W,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:s(()=>[a(_,{label:"源链",required:""},{default:s(()=>[a($,{value:T.fromChain,"onUpdate:value":o[22]||(o[22]=e=>T.fromChain=e)},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"目标链",required:""},{default:s(()=>[a($,{value:T.toChain,"onUpdate:value":o[23]||(o[23]=e=>T.toChain=e)},{default:s(()=>[(i(!0),f(A,null,w(z.value,e=>(i(),C(j,{key:e.id,value:e.id,disabled:e.id===T.fromChain},{default:s(()=>[y(u(e.name),1)]),_:2},1032,["value","disabled"]))),128))]),_:1},8,["value"])]),_:1}),a(_,{label:"金额",required:""},{default:s(()=>[a(G,{value:T.amount,"onUpdate:value":o[24]||(o[24]=e=>T.amount=e),min:0,precision:6,style:{width:"100%"}},null,8,["value"])]),_:1})]),_:1}),F.value?(i(),C(L,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:s(()=>[a(H,{title:"预估费用",value:F.value.fee,precision:4,suffix:F.value.currency,"value-style":{color:"#1677ff"}},null,8,["value","suffix"]),m("div",Ft,[m("div",null,"源链费: "+u(F.value.breakdown.sourceFee)+" "+u(F.value.currency),1),m("div",null,"目标链费: "+u(F.value.breakdown.destFee)+" "+u(F.value.currency),1),m("div",null,"桥接费: "+u(F.value.breakdown.bridgeFee)+" "+u(F.value.currency),1)])]),_:1})):h("",!0)]),_:1},8,["open","confirm-loading"])])}}},Vt=qe(Ut,[["__scopeId","data-v-04225cba"]]);export{Vt as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{u as J}from"./ws-Dg01CdRG.js";import{_ as P}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{t as Z,v as K,b as R,u as Q,Z as U,_ as X,a as Y}from"./icons-C0xSkzug.js";import{l as ee,F as d,D as m,c as e,x as t,r,q as n,v as s,J as y,u as c,I as u,G as g,m as V,j as te}from"./vendor-xFZ6Jlpw.js";const oe={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ae={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},re={style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},le={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},se={key:0,style:{"margin-top":"6px",color:"var(--text-muted)","font-size":"11px"}},ne={key:0,style:{"text-align":"center",padding:"30px"}},ce={key:1,style:{"font-family":"monospace",color:"#ccc"}},ie={key:0,style:{color:"var(--text-secondary)","font-size":"13px",padding:"8px 0"}},de={key:1,style:{color:"var(--text-muted)","font-size":"13px",padding:"8px 0"}},ue={key:0,style:{"margin-top":"16px"}},ve={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"300px","overflow-y":"auto","white-space":"pre-wrap"}},pe={__name:"Services",setup(fe){const S=J(),B=window.__CC_CONFIG__||{},x=r(!1),C=r(!1),b=r(""),F=r(""),z=r(!1),D=r(""),k=r(""),L=r(""),M=r(!1),h=r(""),w=r(""),I=r([]),N=te(()=>S.status==="connected"),W=[{title:"服务",dataIndex:"name",key:"name"},{title:"端口",dataIndex:"port",key:"port"},{title:"状态",key:"status"}];async function $(){x.value=!0;try{const{output:o}=await S.execute("status",15e3);F.value=o,j(o)}catch(o){console.error("status failed:",o)}finally{x.value=!1}}function j(o){z.value=o.includes("Desktop app running")||o.includes("Running");const a=o.match(/Edition:\s+(\S+)/i);a&&(D.value=a[1]);const v=o.match(/LLM:\s+(\S+)\s+\(([^)]+)\)/i);if(v)k.value=v[1],L.value=v[2];else{const l=o.match(/LLM:\s+(\S+)/i);l&&(k.value=l[1])}M.value=o.includes("Setup completed");const p=o.match(/Setup completed \(([^)]+)\)/i);if(p)try{h.value=new Date(p[1]).toLocaleDateString("zh-CN")}catch{h.value=""}o.includes("docker-compose.yml not found")?w.value="未找到 docker-compose.yml":o.includes("Docker Services")&&(w.value="已检测到 Docker 配置");const i=o.split(`
|
|
2
|
-
`).filter(l=>l.match(/[○●]\s+\w+:\s+\d+/));I.value=i.map(l=>{const f=l.match(/([○●])\s+(\w+):\s+(\d+)/);return f?{key:f[2],name:f[2],port:parseInt(f[3]),active:f[1]==="●"}:null}).filter(Boolean)}async function E(){C.value=!0,b.value="";try{const{output:o}=await S.execute("doctor",3e4);b.value=o}catch(o){b.value=`诊断失败: ${o.message}`}finally{C.value=!1}}return ee($),(o,a)=>{const v=n("a-button"),p=n("a-statistic"),i=n("a-card"),l=n("a-col"),f=n("a-row"),G=n("a-tag"),T=n("a-spin"),q=n("a-badge"),A=n("a-table"),H=n("a-space");return s(),d("div",null,[m("div",oe,[a[3]||(a[3]=m("div",null,[m("h2",{class:"page-title"},"服务管理"),m("p",{class:"page-sub"},"ChainlessChain 运行状态与服务控制")],-1)),e(v,{type:"primary",ghost:"",loading:x.value,onClick:$},{icon:t(()=>[e(c(Z))]),default:t(()=>[a[2]||(a[2]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),e(f,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"应用状态",value:z.value?"运行中":"未运行","value-style":{color:z.value?"#52c41a":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(K))]),_:1},8,["value","value-style"]),D.value?(s(),d("div",ae,"版本: "+u(D.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"WebSocket 服务",value:"运行中","value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:t(()=>[e(c(R))]),_:1}),m("div",re," 端口: "+u(c(B).wsPort||18800)+" · "+u(c(B).wsHost||"127.0.0.1"),1)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"LLM 提供商",value:k.value||"未配置","value-style":{color:k.value?"#1677ff":"#888",fontSize:"16px"}},{prefix:t(()=>[e(c(Q))]),_:1},8,["value","value-style"]),L.value?(s(),d("div",le,u(L.value),1)):g("",!0)]),_:1})]),_:1}),e(l,{xs:24,sm:12,lg:6},{default:t(()=>[e(i,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(p,{title:"初始化",value:M.value?"已完成":"未完成","value-style":{color:M.value?"#52c41a":"#faad14",fontSize:"16px"}},{prefix:t(()=>[e(c(U))]),_:1},8,["value","value-style"]),h.value?(s(),d("div",se,u(h.value),1)):g("",!0)]),_:1})]),_:1})]),_:1}),e(i,{title:"端口状态",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:t(()=>[e(G,{color:N.value?"green":"red"},{default:t(()=>[y(" WS "+u(N.value?"已连接":"断开"),1)]),_:1},8,["color"])]),default:t(()=>[x.value?(s(),d("div",ne,[e(T)])):(s(),V(A,{key:1,columns:W,"data-source":I.value,pagination:!1,size:"small","row-class-name":_=>_.active?"port-active":""},{bodyCell:t(({column:_,record:O})=>[_.key==="status"?(s(),V(q,{key:0,status:O.active?"success":"default",text:O.active?"运行中":"未运行"},null,8,["status","text"])):g("",!0),_.key==="port"?(s(),d("span",ce,u(O.port),1)):g("",!0)]),_:1},8,["data-source","row-class-name"]))]),_:1}),e(i,{title:"Docker 服务",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{default:t(()=>[w.value?(s(),d("div",ie,u(w.value),1)):(s(),d("div",de,"未检测到 Docker 服务"))]),_:1}),e(i,{title:"快速操作",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[e(H,{wrap:""},{default:t(()=>[e(v,{loading:C.value,onClick:E,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(X))]),default:t(()=>[a[4]||(a[4]=y(" 环境诊断 ",-1))]),_:1},8,["loading"]),e(v,{onClick:a[0]||(a[0]=_=>o.$router.push("/logs")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(Y))]),default:t(()=>[a[5]||(a[5]=y(" 查看日志 ",-1))]),_:1}),e(v,{onClick:a[1]||(a[1]=_=>o.$router.push("/providers")),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:t(()=>[e(c(R))]),default:t(()=>[a[6]||(a[6]=y(" LLM 配置 ",-1))]),_:1})]),_:1}),b.value?(s(),d("div",ue,[a[7]||(a[7]=m("div",{style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},"诊断结果",-1)),m("pre",ve,u(b.value),1)])):g("",!0)]),_:1})])}}},ye=P(pe,[["__scopeId","data-v-13be6bfe"]]);export{ye as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{l as fe,F as x,D as n,c as t,x as o,r as c,q as l,a as ye,B as ge,v as p,H as N,L as R,u,I as d,J as i,m as y,G as U}from"./vendor-xFZ6Jlpw.js";import{u as _e}from"./ws-Dg01CdRG.js";import{_ as xe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as M,Y as G,A as be,p as Y,$ as ke,a as H,af as we,ae as Ce}from"./icons-C0xSkzug.js";import{a as h}from"./index-CHFoDNQ0.js";import"./index-DKyOq7hH.js";import"./useConfigInject-CypxEK_1.js";import"./transition-8JSy_yCb.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CARXcQZJ.js";import"./index-U4Zd5IK6.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"}},Ie={style:{margin:"0","font-size":"12px","white-space":"pre-wrap","max-height":"200px","overflow-y":"auto"}},Te={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"}},Ae={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},Ne={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"}},Le={style:{display:"flex","align-items":"center",gap:"8px","margin-bottom":"8px"}},qe={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px",flex:"1",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"}},Fe={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5","max-height":"60px",overflow:"hidden","text-overflow":"ellipsis","white-space":"pre-wrap"}},Je={style:{"margin-top":"12px",display:"flex",gap:"8px","justify-content":"flex-end"}},W="cc_prompt_templates",Ke={__name:"Templates",setup(Ve){const P=_e(),Q=ge(),D=c("project"),O=c(""),v=c(null),b=c(!1),$=c(""),X=[{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 Z(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 I=c(!1),k=c([]),T=c(""),f=c(null);async function te(){I.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{I.value=!1}}async function oe(s){T.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{T.value=""}}const g=c([]),w=c(!1),r=ye({name:"",category:"general",content:""});function ae(){try{const s=localStorage.getItem(W);g.value=s?JSON.parse(s):[]}catch{g.value=[]}}function L(){localStorage.setItem(W,JSON.stringify(g.value))}function ne(){!r.name||!r.content||(g.value.push({name:r.name,category:r.category,content:r.content}),L(),q(),h.success("模板已保存"))}function q(){w.value=!1,r.name="",r.category="general",r.content=""}function se(s){g.value.splice(s,1),L(),h.success("模板已删除")}function le(s){navigator.clipboard.writeText(s.content).then(()=>{h.success("已复制到剪贴板")}).catch(()=>{h.error("复制失败")})}function ie(s){Q.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"),F=l("a-alert"),S=l("a-tab-pane"),pe=l("a-spin"),J=l("a-empty"),K=l("a-tag"),ue=l("a-tabs"),V=l("a-modal"),ce=l("a-input"),A=l("a-form-item"),C=l("a-select-option"),de=l("a-select"),me=l("a-textarea"),ve=l("a-form");return p(),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(ue,{activeKey:D.value,"onUpdate:activeKey":e[3]||(e[3]=a=>D.value=a),type:"card"},{default:o(()=>[t(S,{key:"project"},{tab:o(()=>[t(u(be)),e[10]||(e[10]=i(" 项目模板 ",-1))]),default:o(()=>[t(j,{gutter:[16,16]},{default:o(()=>[(p(),x(N,null,R(X,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(u(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=>Z(a.name)},{icon:o(()=>[t(u(G))]),default:o(()=>[e[11]||(e[11]=i(" 初始化 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024)),64))]),_:1}),v.value?(p(),y(F,{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",Ie,d(v.value.output),1)]),_:1},8,["message","type"])):U("",!0)]),_:1}),t(S,{key:"bi"},{tab:o(()=>[t(u(Y)),e[12]||(e[12]=i(" BI 模板 ",-1))]),default:o(()=>[I.value?(p(),x("div",Te,[t(pe),e[13]||(e[13]=n("div",{style:{color:"var(--text-muted)","margin-top":"8px"}},"加载 BI 模板...",-1))])):k.value.length?(p(),y(j,{key:2,gutter:[16,16]},{default:o(()=>[(p(!0),x(N,null,R(k.value,a=>(p(),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(u(Y),{style:{"font-size":"24px",color:"#722ed1","flex-shrink":"0","margin-top":"2px"}}),n("div",je,[n("div",Se,d(a.name),1),n("div",Ae,d(a.description||"暂无描述"),1),a.id?(p(),x("div",Ne,[t(K,{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:T.value===a.id,onClick:z=>oe(a.id)},{icon:o(()=>[t(u(G))]),default:o(()=>[e[14]||(e[14]=i(" 创建仪表板 ",-1))]),_:1},8,["loading","onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),y(J,{key:1,description:"暂无 BI 模板"})),f.value?(p(),y(F,{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(u(H)),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(u(ke))]),default:o(()=>[e[16]||(e[16]=i(" 新建模板 ",-1))]),_:1})]),g.value.length?(p(),y(j,{key:1,gutter:[16,16]},{default:o(()=>[(p(!0),x(N,null,R(g.value,(a,z)=>(p(),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",Le,[t(u(H),{style:{"font-size":"18px",color:"#52c41a"}}),n("span",qe,d(a.name),1),t(K,{color:re(a.category),size:"small"},{default:o(()=>[i(d(a.category),1)]),_:2},1032,["color"])]),n("div",Fe,d(a.content.length>120?a.content.slice(0,120)+"...":a.content),1),n("div",Je,[t(m,{size:"small",onClick:E=>ie(a)},{icon:o(()=>[t(u(M))]),default:o(()=>[e[17]||(e[17]=i(" 使用 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",onClick:E=>le(a)},{icon:o(()=>[t(u(we))]),default:o(()=>[e[18]||(e[18]=i(" 复制 ",-1))]),_:1},8,["onClick"]),t(m,{size:"small",danger:"",onClick:E=>se(z)},{icon:o(()=>[t(u(Ce))]),default:o(()=>[e[19]||(e[19]=i(" 删除 ",-1))]),_:1},8,["onClick"])])]),_:2},1024)]),_:2},1024))),128))]),_:1})):(p(),y(J,{key:0,description:"暂无 Prompt 模板,点击上方按钮创建"}))]),_:1})]),_:1},8,["activeKey"]),t(V,{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(V,{open:w.value,"onUpdate:open":e[9]||(e[9]=a=>w.value=a),title:"新建 Prompt 模板",onOk:ne,onCancel:q,"ok-text":"保存","cancel-text":"取消","ok-button-props":{disabled:!r.name||!r.content}},{default:o(()=>[t(ve,{layout:"vertical"},{default:o(()=>[t(A,{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(A,{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(A,{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"])])}}},ot=xe(Ke,[["__scopeId","data-v-22e50acf"]]);export{ot as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{k as T,r as b,l as K,F as v,D as _,c as s,x as o,q as p,v as c,J as m,u as h,m as j,E as Y,I as y,P as Q,H as V,L as D,G as N,j as X}from"./vendor-xFZ6Jlpw.js";import{u as Z}from"./ws-Dg01CdRG.js";import{_ as ee}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{$ as te,t as ae}from"./icons-C0xSkzug.js";import{a as C}from"./index-CHFoDNQ0.js";import"./index-DKyOq7hH.js";import"./useConfigInject-CypxEK_1.js";import"./transition-8JSy_yCb.js";import"./Keyframes-C7fCrnlS.js";import"./Portal-CARXcQZJ.js";import"./index-U4Zd5IK6.js";const se=T("workflow",()=>{const f=Z(),l=b([]),t=b(null),x=b([]),w=b("idle"),R=b(!1),z=b(null);async function J(){R.value=!0,z.value=null;try{await f.waitConnected();const e=await f.sendRaw({type:"workflow-list"});return l.value=Array.isArray(e.workflows)?e.workflows:[],l.value}catch(e){throw z.value=e.message,e}finally{R.value=!1}}async function W(e){await f.waitConnected();const n=await f.sendRaw({type:"workflow-get",id:e});return t.value=n.workflow||null,t.value}async function A(e){await f.waitConnected();const n=await f.sendRaw({type:"workflow-save",workflow:e});if(n.saved){const u=l.value.findIndex(r=>r.id===e.id);u>=0?l.value.splice(u,1,e):l.value.push(e)}return n}async function B(e){await f.waitConnected();const n=await f.sendRaw({type:"workflow-remove",id:e});return n.removed&&(l.value=l.value.filter(u=>u.id!==e)),n}async function q(e,{onEvent:n}={}){await f.waitConnected(),x.value=[],w.value="running";const u=f.onMessage(r=>{!r||typeof r.type!="string"||r.type.startsWith("workflow:")&&(x.value.push(r),n&&n(r),r.type==="workflow:done"&&(w.value=r.status||"completed"))});try{return await f.sendRaw({type:"workflow-run",id:e},12e4)}catch(r){throw w.value="failed",z.value=r.message,r}finally{u()}}function M(e){const n=[];if(!e||typeof e!="object")return{valid:!1,errors:["workflow must be an object"]};if(e.id||n.push("id required"),e.name||n.push("name required"),!Array.isArray(e.steps)||e.steps.length===0)n.push("steps required");else{let g=function(i){$.set(i,E);for(const O of r.get(i)||[]){if(!r.has(O)){n.push(`unknown dependency: ${O}`);continue}const I=$.get(O);if(I===E){n.push(`cycle via ${i} -> ${O}`);return}I===L&&g(O)}$.set(i,S)};const u=new Set;for(const i of e.steps)i.id||n.push("step.id required"),u.has(i.id)&&n.push(`duplicate step id: ${i.id}`),u.add(i.id);const r=new Map;for(const i of e.steps)r.set(i.id,i.dependsOn||[]);const L=0,E=1,S=2,$=new Map([...r.keys()].map(i=>[i,L]));for(const i of r.keys())$.get(i)===L&&g(i)}return{valid:n.length===0,errors:n}}function d(e){return JSON.stringify(e,null,2)}return{workflows:l,current:t,runEvents:x,runStatus:w,loading:R,error:z,list:J,get:W,save:A,remove:B,run:q,validateLocal:M,exportJson:d}}),ne={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},oe={style:{flex:"1"}},le={style:{"font-weight":"500"}},re={style:{color:"#888","font-size":"12px"}},ie={style:{color:"#888","font-size":"12px"}},ue={key:0,style:{"margin-top":"12px",color:"#d32f2f"}},de={style:{color:"#1976d2"}},ce={key:0},pe={key:1},fe={key:2,style:{color:"#555"}},ve={__name:"WorkflowEditor",setup(f){const l=se(),t=b(null),x=b(!1),w=X(()=>t.value?l.validateLocal(t.value):null);K(()=>l.list().catch(()=>{}));function R(){t.value={id:"",name:"",description:"",steps:[{id:"step1",message:"",dependsOn:[]}]}}async function z(d){try{const e=await l.get(d);e&&(t.value=JSON.parse(JSON.stringify(e)),t.value.steps||(t.value.steps=[]))}catch(e){C.error(`加载失败: ${e.message}`)}}function J(){t.value.steps||(t.value.steps=[]),t.value.steps.push({id:`step${t.value.steps.length+1}`,message:"",dependsOn:[]})}function W(d){t.value.steps.splice(d,1)}async function A(){const d=l.validateLocal(t.value);if(!d.valid){C.error(d.errors[0]);return}try{await l.save(t.value),C.success("保存成功")}catch(e){C.error(`保存失败: ${e.message}`)}}async function B(d){try{await l.remove(d),t.value?.id===d&&(t.value=null),C.success("已删除")}catch(e){C.error(`删除失败: ${e.message}`)}}async function q(){x.value=!0;try{await l.run(t.value.id),C.success(`运行完成:${l.runStatus}`)}catch(d){C.error(`运行失败: ${d.message}`)}finally{x.value=!1}}function M(){const d=l.exportJson(t.value),e=new Blob([d],{type:"application/json"}),n=URL.createObjectURL(e),u=document.createElement("a");u.href=n,u.download=`${t.value.id||"workflow"}.json`,u.click(),URL.revokeObjectURL(n)}return(d,e)=>{const n=p("a-button"),u=p("a-space"),r=p("a-empty"),L=p("a-list-item"),E=p("a-list"),S=p("a-card"),$=p("a-col"),g=p("a-input"),i=p("a-form-item"),O=p("a-divider"),I=p("a-select"),F=p("a-input-group"),G=p("a-textarea"),H=p("a-form"),P=p("a-row");return c(),v("div",null,[_("div",ne,[e[6]||(e[6]=_("div",null,[_("h2",{class:"page-title"},"工作流编辑器"),_("p",{class:"page-sub"},"创建、编辑、运行 Cowork 工作流(N1 — 初版:表单编辑,画布视图规划中)")],-1)),s(u,null,{default:o(()=>[s(n,{onClick:R,type:"primary"},{icon:o(()=>[s(h(te))]),default:o(()=>[e[4]||(e[4]=m(" 新建 ",-1))]),_:1}),s(n,{ghost:"",loading:h(l).loading,onClick:e[0]||(e[0]=a=>h(l).list())},{icon:o(()=>[s(h(ae))]),default:o(()=>[e[5]||(e[5]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),s(P,{gutter:16},{default:o(()=>[s($,{span:8},{default:o(()=>[s(S,{title:"工作流列表",size:"small"},{default:o(()=>[h(l).workflows.length?(c(),j(E,{key:1,"data-source":h(l).workflows,size:"small"},{renderItem:o(({item:a})=>[s(L,{class:Y({active:t.value?.id===a.id}),style:{cursor:"pointer"},onClick:U=>z(a.id)},{default:o(()=>[_("div",oe,[_("div",le,y(a.name||a.id),1),_("div",re,y((a.steps||[]).length)+" 步骤 ",1)]),s(n,{size:"small",danger:"",type:"text",onClick:Q(U=>B(a.id),["stop"])},{default:o(()=>[...e[7]||(e[7]=[m("删除",-1)])]),_:1},8,["onClick"])]),_:2},1032,["class","onClick"])]),_:1},8,["data-source"])):(c(),j(r,{key:0,description:"暂无工作流"}))]),_:1})]),_:1}),s($,{span:16},{default:o(()=>[t.value?(c(),j(S,{key:0,size:"small"},{title:o(()=>[m(" 编辑: "+y(t.value.name||t.value.id),1)]),extra:o(()=>[s(u,null,{default:o(()=>[s(n,{size:"small",onClick:M},{default:o(()=>[...e[8]||(e[8]=[m("导出 JSON",-1)])]),_:1}),s(n,{size:"small",loading:x.value,onClick:q,disabled:!t.value.id},{default:o(()=>[...e[9]||(e[9]=[m(" 运行 ",-1)])]),_:1},8,["loading","disabled"]),s(n,{size:"small",type:"primary",onClick:A},{default:o(()=>[...e[10]||(e[10]=[m("保存",-1)])]),_:1})]),_:1})]),default:o(()=>[s(H,{layout:"vertical",model:t.value},{default:o(()=>[s(i,{label:"ID (唯一标识)"},{default:o(()=>[s(g,{value:t.value.id,"onUpdate:value":e[1]||(e[1]=a=>t.value.id=a),placeholder:"my-workflow"},null,8,["value"])]),_:1}),s(i,{label:"名称"},{default:o(()=>[s(g,{value:t.value.name,"onUpdate:value":e[2]||(e[2]=a=>t.value.name=a),placeholder:"我的工作流"},null,8,["value"])]),_:1}),s(i,{label:"描述"},{default:o(()=>[s(g,{value:t.value.description,"onUpdate:value":e[3]||(e[3]=a=>t.value.description=a),placeholder:"(可选)"},null,8,["value"])]),_:1}),s(O,null,{default:o(()=>[...e[11]||(e[11]=[m("步骤",-1)])]),_:1}),(c(!0),v(V,null,D(t.value.steps,(a,U)=>(c(),v("div",{key:U,class:"step-card"},[s(u,{style:{width:"100%","margin-bottom":"8px"},direction:"vertical"},{default:o(()=>[s(F,{compact:""},{default:o(()=>[s(g,{value:a.id,"onUpdate:value":k=>a.id=k,placeholder:"step-id",style:{width:"30%"}},null,8,["value","onUpdate:value"]),s(I,{value:a.dependsOn,"onUpdate:value":k=>a.dependsOn=k,mode:"tags",placeholder:"dependsOn",style:{width:"70%"}},null,8,["value","onUpdate:value"])]),_:2},1024),s(G,{value:a.message,"onUpdate:value":k=>a.message=k,rows:2,placeholder:"任务 prompt(支持 \\${step.<id>.summary} 占位)"},null,8,["value","onUpdate:value"]),s(g,{value:a.when,"onUpdate:value":k=>a.when=k,placeholder:"when 条件(可选,如 step.s1.status === 'completed')"},null,8,["value","onUpdate:value"]),s(u,null,{default:o(()=>[s(n,{size:"small",danger:"",onClick:k=>W(U)},{default:o(()=>[...e[12]||(e[12]=[m("删除",-1)])]),_:1},8,["onClick"]),_("span",ie," step "+y(U+1)+" / "+y(t.value.steps.length),1)]),_:2},1024)]),_:2},1024)]))),128)),s(n,{block:"",onClick:J},{default:o(()=>[...e[13]||(e[13]=[m("+ 添加步骤",-1)])]),_:1})]),_:1},8,["model"]),w.value&&!w.value.valid?(c(),v("div",ue,[(c(!0),v(V,null,D(w.value.errors,a=>(c(),v("div",{key:a},"• "+y(a),1))),128))])):N("",!0)]),_:1})):(c(),j(S,{key:1,size:"small"},{default:o(()=>[s(r,{description:"从左侧选择工作流或新建一个"})]),_:1})),h(l).runEvents.length?(c(),j(S,{key:2,size:"small",title:"运行日志",style:{"margin-top":"12px"}},{default:o(()=>[(c(!0),v(V,null,D(h(l).runEvents,(a,U)=>(c(),v("div",{key:U,style:{"font-family":"monospace","font-size":"12px","margin-bottom":"4px"}},[_("span",de,y(a.type),1),a.stepId?(c(),v("span",ce," ["+y(a.stepId)+"]",1)):N("",!0),a.status?(c(),v("span",pe," → "+y(a.status),1)):N("",!0),a.summary?(c(),v("span",fe," — "+y(a.summary),1)):N("",!0)]))),128))]),_:1})):N("",!0)]),_:1})]),_:1})])}}},Oe=ee(ve,[["__scopeId","data-v-0d6dcf38"]]);export{Oe as default};
|