chainlesschain 0.162.46 → 0.162.48
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 +2 -2
- package/src/assets/web-panel/assets/{AIOps-QzHleqCS.js → AIOps-BeMOUkMq.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-CZ3F-KVY.js → ActionButton-DrRegmIt.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-CHml-drq.js → Analytics-BM7hvUn8.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-a-fczvRH.js → AppLayout-BfLLYSz_.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-CtMWsXwm.js → Audit-BpiPR-rs.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-ErWTcS0A.js → Backup-BLq4IRI9.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-B4w2b2dA.js → BaseInput-Bv89IFrM.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CFPKVfmV.js → Chat-BUM9MdnH.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-WGpUTY92.js → ChatBubbleRenderer-rH_t53ZW.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-C4vasfJc.js → Checkbox-82jih_zU.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DHmDAbSg.js → Codegen-ygmM1mNL.js} +1 -1
- package/src/assets/web-panel/assets/{Col-LhgveyhM.js → Col-CqXc8_ft.js} +1 -1
- package/src/assets/web-panel/assets/{Community-CB8gtudt.js → Community-CqPPfyR3.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CTndsUSy.js → Compact-LR8Z206-.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-CCpGUHPm.js → Compliance-D4alm_Gx.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CQmJiOM_.js → Cowork-D-DLVanT.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-TrTmpnSB.js → Cron-UDtmjvd4.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DvaR1Xq4.js → Crosschain-iqbVDPNE.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CdDdiRs3.js → DID-DzdUfzc9.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-S6gCBQDc.js → Dashboard-DvKp1skY.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CWO-Kwzl.js → Dropdown-S6ORlfef.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-Crnrr1-p.js → EmailListRenderer-mJViHjiq.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-OpG9ZtfR.js → FamilyGuardDashboard-A4Lu5m_e.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B0sybW7G.js → Federation-Bv-6737r.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DjHMvxwJ.js → FormItemContext-DNcZoiWu.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DtU5cWwE.js → GenericCardRenderer-B_a0l9U4.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BhOjZX2a.js → Git-BbVAsh_N.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D3_hjjA-.js → Governance-ChxUMZEU.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-DwxLXmgA.js → Inference-Buu_bAQ-.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-C8-FVs02.js → KnowledgeGraph-BMmMjxEu.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CrHjnzfr.js → Logs-BeGHcPEC.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-KW1Am18o.js → Marketplace-CP2Qg_xJ.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-ezYH1J8m.js → McpTools-C42B4JYb.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-Dcv8Gume.js → Memory-D5VeitFY.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-v18J0LN4.js → MobileBridge-BouoJ2FQ.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-kk6hAwkK.js → MobileProjects-mAJsyk7U.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Cm35-vh_.js → Mtc-Chn6ES5y.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DyeKAlI_.js → MtcAudit-D0_Q6GEn.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-Dy-imleB.js → Multisig-BWaCi_wo.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-DMVmWNAH.js → NLProgramming-CoSEiroa.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-Dq6oHKbl.js → Notes-CiqCbDw3.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CCaSupDi.js → NotificationSettings-BXmzKL9F.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-BhlKyGrE.js +1 -0
- package/src/assets/web-panel/assets/{Organization-8TF96XtV.js → Organization-CAVgSxyI.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-BnYnh84b.js → Overflow-BIVUo8YB.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CZk3Qkec.js → P2P-DX-Ov-eJ.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-D1HrzBx2.js → PdhVaultBrowser-6clRu-J6.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-CwJ6hcaI.js → Permissions-CANl-V55.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-BGnPTj1G.js → PersonalDataHub-BE90gjUO.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-BzXhXLBz.js → Pipeline-Ck8lV8Pn.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-BaVQ3GwL.js → Privacy-BBYUDK4T.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Bik3h4R7.js → ProjectInit-DcbOrnbt.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CIuC6Hpr.js → ProjectSettings-DZ6-whxP.js} +2 -2
- package/src/assets/web-panel/assets/Projects-DO25SEFT.js +1 -0
- package/src/assets/web-panel/assets/{Providers-mhxZrHiK.js → Providers-VWoO_Y9u.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-Dk9mayL0.js → QuickAsk-RJfSXWYg.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BHC2sBZY.js → Recommend-Y7MWWkXa.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-DV26B11J.js → Reputation-nG8nut3l.js} +1 -1
- package/src/assets/web-panel/assets/{Row-bJlVEnFC.js → Row-DAio6Dx2.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-D_XucmWY.js → RssFeed-DwY72Lc7.js} +2 -2
- package/src/assets/web-panel/assets/{Search-uKXcm_Kf.js → Search-qGG6AUWY.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DEzqsQLn.js → Security-Djsmom8n.js} +3 -3
- package/src/assets/web-panel/assets/{Services-I8qKgcom.js → Services-DTEgHkUO.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-BmrglBMu.js → Skeleton-R5xY0J9Y.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-CHN4ZDyP.js → Skills-CFaRLO3o.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Ca6FsUS2.js → Sla-B5bzoY1I.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CP8IikWb.js → SpeechSettings-B_al6SiQ.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bqp-kPAA.js → SyncSettings-DkUU63oJ.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-C2y4XdrQ.js +1 -0
- package/src/assets/web-panel/assets/{Templates-Bq51Irli.js → Templates-CcYJxTNB.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-OTducEVg.js → Tenant-B0_sIpl2.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-B_waZb0O.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-kCmFL2wc.js → TimelineRenderer-DuMkErBx.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BUfD650M.js → Tokens-BXjPA6rV.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-CqpM6xE7.js → Trigger-BMAAx3Uu.js} +1 -1
- package/src/assets/web-panel/assets/{Trust--4gS7a0j.js → Trust-BPeNXpsi.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-B7wfki-b.js → UkeySign-A0qabV14.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-FwDEX2S-.js → VideoEditing-BMLfYykd.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-DS_c2rMk.js → Wallet-BfDI3zjs.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-CdMhP-GP.js → WebAuthn-BCnZEScW.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-DVvpoOmg.js → WorkflowEditor-DvtS5Asf.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BQyTT2BS.js → chat-CDJZtBM7.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DvylfUTx.js → colors-fbH1Saco.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-Budvh2nW.js → compact-item-CuZFa9l8.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DkNa84zG.js → createContext-CQuPOqqD.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-mhGhHpNs.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Dc1juUIf.js → hasIn-CDZlDrhJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-B0u5DW4Z.js → index--SCX46Az.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGHLsKyb.js → index-14gri6Vh.js} +1 -1
- package/src/assets/web-panel/assets/{index-BEviVulf.js → index-BJCXJCUA.js} +1 -1
- package/src/assets/web-panel/assets/{index-CbCIBifY.js → index-BKaue5Pv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DRNJnXik.js → index-BNEG9-EK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTnZ44a_.js → index-BSy0noke.js} +1 -1
- package/src/assets/web-panel/assets/{index-DxCPTrC-.js → index-BdORz0iZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DecFF9je.js → index-BhZkMMey.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFMS9PKh.js → index-BivMeInw.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCD2L2SI.js → index-Bt1j0mjJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-BC08UMEf.js → index-Bz5_6E63.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgxdM7b_.js → index-BzIDfObk.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cz41iB_M.js → index-C6epsHef.js} +1 -1
- package/src/assets/web-panel/assets/{index-jTGSFnNF.js → index-CAzMdnkI.js} +1 -1
- package/src/assets/web-panel/assets/{index-BgYKjtNP.js → index-CD9ml9ZJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DwJ0d_2Z.js → index-CNmJrCxV.js} +1 -1
- package/src/assets/web-panel/assets/{index-C8he-Xo0.js → index-COSyGm80.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQJA__yH.js → index-CQ5FVEji.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKoWcis9.js → index-CdiNFWPp.js} +1 -1
- package/src/assets/web-panel/assets/{index-eD_MN29w.js → index-CkhudJH0.js} +1 -1
- package/src/assets/web-panel/assets/{index-By8Bs_eN.js → index-CmeO_DfK.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTzrvuB0.js → index-CnfR7qmj.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_0nyIY9.js → index-Cr_shi_7.js} +1 -1
- package/src/assets/web-panel/assets/{index-D7FYxxFT.js → index-CzeRvhia.js} +3 -3
- package/src/assets/web-panel/assets/{index-BCv_FUY5.js → index-D365qmj8.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1X5QpSy.js → index-DGAK9Dj4.js} +1 -1
- package/src/assets/web-panel/assets/index-DGBjZXvW.js +1 -0
- package/src/assets/web-panel/assets/{index-DMCqz0wy.js → index-DNN-xBWV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTcZkWJ7.js → index-Deqod8La.js} +1 -1
- package/src/assets/web-panel/assets/{index-TsPv8m1Z.js → index-DhFyStIG.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYuozZuh.js → index-DjgZRX0_.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2dcbmzD.js → index-Dkuecn17.js} +1 -1
- package/src/assets/web-panel/assets/index-DujMkFuc.js +1 -0
- package/src/assets/web-panel/assets/{index-yx5Y6xb7.js → index-DvBgQoaw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bk_Uhu49.js → index-DwAiu9LT.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWcGURYh.js → index-WDQkyh-E.js} +1 -1
- package/src/assets/web-panel/assets/{index-YVdWdhK_.js → index-kGzPbvry.js} +1 -1
- package/src/assets/web-panel/assets/{index-D74oTZL7.js → index-oe9ZPRtQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DO9Lvv1w.js → index-ycBlRXAf.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-gLjyJG0Q.js → initDefaultProps-DHRWNV-y.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BtXv1r2p.js → motion-MJ2jhdVO.js} +1 -1
- package/src/assets/web-panel/assets/{move-BgFqW2gA.js → move-Bly0QFE5.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CeIwl-eJ.js → omit-DkoMB0pZ.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-VlY4igbs.js → pickAttrs-9M-gsXIc.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-B9Wjn3oR.js → placementArrow-Bnht1xci.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-BBgHTvYX.js → responsiveObserve-B0Cn1i64.js} +1 -1
- package/src/assets/web-panel/assets/{slide-DWw81KAi.js → slide-BdI4DDyM.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Bsho38w-.js → statusUtils-DdBktcMD.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BNvVEdm1.js → styleChecker-aYEwS4Pw.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DG9bkwrT.js → useFlexGapSupport-y8cUyKiP.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DU7qrIrQ.js → useFs-Bk1SrPFp.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-DX-Bf7VJ.js → usePersonalDataHub-Dp04zAB3.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-B1UcnNoK.js → vnode-B52a38TC.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BFgJuvLv.js → zoom-DFwyL43U.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +62 -0
- package/src/lib/agent-worktree.js +78 -0
- package/src/lib/ide-context.js +168 -0
- package/src/lib/memory-injection.js +2 -0
- package/src/lib/safe-mode.js +31 -0
- package/src/lib/sensitive-file-guard.js +58 -0
- package/src/lib/settings-hooks.cjs +5 -0
- package/src/lib/sub-agent-context.js +3 -0
- package/src/repl/agent-repl.js +72 -17
- package/src/repl/ide-status.js +76 -0
- package/src/runtime/agent-core.js +76 -0
- package/src/runtime/headless-runner.js +11 -2
- package/src/runtime/headless-stream.js +48 -5
- package/src/assets/web-panel/assets/OrderTableRenderer-DOwptdNb.js +0 -1
- package/src/assets/web-panel/assets/Projects-DLjnWEe6.js +0 -1
- package/src/assets/web-panel/assets/Tasks-C7FvJjze.js +0 -1
- package/src/assets/web-panel/assets/Terminal-ywwPryM5.js +0 -3
- package/src/assets/web-panel/assets/devWarning-CG_75MBJ.js +0 -1
- package/src/assets/web-panel/assets/index-Ba6DLEa1.js +0 -1
- package/src/assets/web-panel/assets/index-CLycnSs-.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as m,J as f,U as b,R as c,c as o,K as e,V as y,S as h,o as tt,b as J,r as x,P as d,Q as _,F as T,Z as V,$ as xt}from"./vendor-BvqAck49.js";import{_ as Lt,b as et,u as at,d as A}from"./index-D7FYxxFT.js";import{u as ot}from"./useFs-DU7qrIrQ.js";import{s as nt}from"./community-parser-CO25nZFt.js";import{s as St,am as Ct,f as Tt,d as Et,m as Ot,az as At,R as wt}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";function it(n){const i=nt(n);if(!i)return null;try{return JSON.parse(i)}catch{}const r=i.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}const st=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),ct=Object.freeze(["low","medium","high","critical"]);function q(n,i=0){return typeof n=="number"&&Number.isFinite(n)?n:i}function G(n){if(!n)return{noDb:!1,error:""};const i=nt(n),r=/Database not available/i.test(i);return{noDb:r,error:r?"Database not available":""}}function zt(n,i=0){if(!n||typeof n!="object")return null;const r=n.id||"";if(!r)return null;let t=n.details;if(typeof t=="string"&&t)try{t=JSON.parse(t)}catch{}const L=typeof n.success=="boolean"?n.success:n.success===1||n.success==="1"||n.success===!0,M=n.audit_mtc_event_id??n.auditMtcEventId??null;return{key:r,id:r,eventType:String(n.event_type??n.eventType??"").toLowerCase(),operation:String(n.operation||""),actor:n.actor??"",target:n.target??"",details:t??null,riskLevel:String(n.risk_level??n.riskLevel??"low").toLowerCase(),ipAddress:n.ip_address??n.ipAddress??"",userAgent:n.user_agent??n.userAgent??"",success:L,errorMessage:n.error_message??n.errorMessage??"",createdAt:n.created_at??n.createdAt??"",auditMtcEventId:M,_idx:i}}function rt(n){const i=it(n);return Array.isArray(i)?i.map(zt).filter(Boolean):[]}const Rt={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function lt(n){const i=JSON.parse(JSON.stringify(Rt));for(const t of st)i.byEventType[t]=0;for(const t of ct)i.byRiskLevel[t]=0;const r=it(n);if(!r||typeof r!="object"||Array.isArray(r))return i;if(i.total=q(r.total,0),i.failures=q(r.failures,0),i.highRisk=q(r.highRisk,0),r.byEventType&&typeof r.byEventType=="object")for(const[t,L]of Object.entries(r.byEventType))typeof L=="number"&&Number.isFinite(L)&&(i.byEventType[t]=L);if(r.byRiskLevel&&typeof r.byRiskLevel=="object")for(const[t,L]of Object.entries(r.byRiskLevel))typeof L=="number"&&Number.isFinite(L)&&(i.byRiskLevel[t]=L);return i}function It(n){return!n||!n.auditMtcEventId?"none":"tracked"}function Mt(n){if(n==null||n==="")return"—";const i=String(n),r=i.includes(" ")&&!i.includes("T")?i.replace(" ","T")+"Z":i,t=new Date(r);return isNaN(t.getTime())?i:t.toLocaleString("zh-CN",{hour12:!1})}const Dt={__name:"Audit",setup(n,{expose:i}){i();const{t:r}=et(),t=at(),L=ot(),M=x(!1),w=x([]),E=x({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),N=x({noDb:!1,error:""}),z=x("events"),S=x(""),p=x(""),O=x(""),v=x(""),F=x(!1),R=x(!1),j=x(null),U=J(()=>[{title:r("audit.logColumns.createdAt"),key:"createdAt",width:"160px"},{title:r("audit.logColumns.eventType"),key:"eventType",width:"110px"},{title:r("audit.logColumns.operation"),key:"operation"},{title:r("audit.logColumns.actor"),key:"actor",width:"140px"},{title:r("audit.logColumns.target"),key:"target",width:"180px"},{title:r("audit.logColumns.riskLevel"),key:"riskLevel",width:"90px"},{title:r("audit.logColumns.success"),key:"success",width:"80px"},{title:r("audit.logColumns.mtc"),key:"mtc",width:"110px"},{title:r("audit.logColumns.action"),key:"action",width:"80px"}]),I=x({});function D(a){return a.auditMtcEventId&&I.value[a.id]||null}function B(a){const s=D(a);return s?s.state==="staging"?r("audit.mtc.stagingLabel"):s.state==="batched"?r("audit.mtc.batchedLabel",{batchId:s.batchId||"?"}):r("audit.mtc.unknownLabel"):r("audit.mtc.signedNotChecked")}function P(a){const s=D(a);return s?s.state==="staging"?"orange":s.state==="batched"?"green":"default":"blue"}function W(a){if(!a.auditMtcEventId)return"";const s=D(a),u=r("audit.mtc.tooltipBase",{id:a.auditMtcEventId});return s?s.state==="staging"?r("audit.mtc.tooltipStaging",{base:u}):s.state==="batched"?r("audit.mtc.tooltipBatched",{base:u,batchId:s.batchId,treeHead:s.treeHeadId||""}):u:r("audit.mtc.tooltipNotChecked",{base:u})}async function k(a){if(!a.auditMtcEventId)return;const s=a.auditMtcEventId.replace(/"/g,'\\"');try{const u=await t.execute(`audit mtc reconcile-check "${s}" --json`,8e3);let C;try{C=JSON.parse(u.output.trim())}catch{const $=u.output.match(/\{[\s\S]*\}/);C=$?JSON.parse($[0]):null}if(!C){A.warning(r("audit.mtc.noJson"));return}const ht=C.found?{state:"batched",batchId:C.batchId,treeHeadId:C.treeHeadId}:C.staging?{state:"staging"}:{state:"unknown"};I.value={...I.value,[a.id]:ht}}catch(u){A.error(r("audit.mtc.checkFailed",{err:u?.message||u}))}}const H=J(()=>E.value.total?(E.value.total-E.value.failures)/E.value.total*100:100),Y=J(()=>!!(p.value||O.value||v.value||F.value)),l=J(()=>{let a=w.value;if(O.value&&(a=a.filter(s=>s.eventType===O.value)),v.value&&(a=a.filter(s=>s.riskLevel===v.value)),F.value&&(a=a.filter(s=>!s.success)),p.value){const s=p.value.toLowerCase();a=a.filter(u=>(u.operation||"").toLowerCase().includes(s)||(u.actor||"").toLowerCase().includes(s)||(u.target||"").toLowerCase().includes(s))}return a});function g(a){const s=`audit.type.${a}`,u=r(s);return u===s?a:u}function Z(a){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[a]||"default"}function dt(a){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[a]||"#888"}function ut(a){const s=`audit.risk.${a}`,u=r(s);return u===s?a:u}function ft(a){return{low:"default",medium:"gold",high:"orange",critical:"red"}[a]||"default"}function yt(a){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[a]||"#888"}function gt(a,s){return s?Math.round(a/s*100):0}function _t(a,s){return a?a.length<=s?a:a.slice(0,s)+"…":""}function mt(a){if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}let K=null;function bt(){clearTimeout(K),K=setTimeout(()=>{p.value=S.value.trim()},300)}function vt(){p.value=S.value.trim()}async function Q(){M.value=!0,N.value={noDb:!1,error:""};try{const[a,s]=await Promise.all([t.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),t.execute("audit stats --json",8e3).catch(()=>({output:""}))]),u=[a,s].map(C=>G(C.output)).find(C=>C.noDb);u&&(N.value=u),w.value=rt(a.output),E.value=lt(s.output)}catch(a){A.error(r("audit.messages.loadFailed",{err:a?.message||a}))}finally{M.value=!1}}function pt(a){j.value=a,R.value=!0}async function kt(){try{const{output:a}=await t.execute("audit export -f json -n 10000",2e4);if(G(a).noDb){A.error(r("audit.messages.needInit"));return}if(!a.trim().startsWith("[")){A.error(r("audit.messages.exportFailed",{err:a.slice(0,120)}));return}const u=await L.saveText(a.trim(),{defaultPath:`audit-${new Date().toISOString().slice(0,10)}.json`,filters:[{name:"JSON",extensions:["json"]}]});if(u.canceled)return;A.success(u.path?r("audit.messages.exportOk",{path:u.path}):r("audit.messages.exportOkDefault"))}catch(a){A.error(r("audit.messages.exportFailed",{err:a?.message||a}))}}tt(Q);const X={t:r,ws:t,fs:L,loading:M,logs:w,stats:E,errorState:N,activeTab:z,searchInput:S,searchTerm:p,typeFilter:O,riskFilter:v,failuresOnly:F,showDetailsModal:R,currentLog:j,logColumns:U,mtcStatusCache:I,getMtcStatusEntry:D,getMtcLabel:B,getMtcColor:P,getMtcTooltip:W,checkMtcStatus:k,successRate:H,hasFilters:Y,filteredLogs:l,typeLabel:g,typeColor:Z,typeBarColor:dt,riskLabel:ut,riskColor:ft,riskBarColor:yt,pctOfTotal:gt,truncate:_t,formatDetails:mt,get searchDebounce(){return K},set searchDebounce(a){K=a},onSearchInput:bt,runSearch:vt,loadAll:Q,viewLogDetails:pt,exportJson:kt,ref:x,computed:J,onMounted:tt,get useI18n(){return et},get ReloadOutlined(){return wt},get DownloadOutlined(){return At},get FileSearchOutlined(){return Ot},get CloseCircleOutlined(){return Et},get CheckCircleOutlined(){return Tt},get WarningOutlined(){return Ct},get AlertOutlined(){return St},get message(){return A},get useWsStore(){return at},get useFs(){return ot},get parseLogs(){return rt},get parseStats(){return lt},get detectAuditError(){return G},get formatAuditTime(){return Mt},get classifyMtcStatus(){return It},get EVENT_TYPES(){return st},get RISK_LEVELS(){return ct}};return Object.defineProperty(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},Nt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},jt={class:"page-sub"},Jt={class:"type-name"},Vt={class:"type-count"},Bt={class:"filter-bar"},Pt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},Ut={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Ht={key:1,style:{color:"var(--text-muted)"}},Yt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Zt={key:1,style:{color:"var(--text-muted)"}},qt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Gt={key:0,style:{"padding-top":"8px"}},Qt={style:{"font-family":"monospace","font-size":"12px"}},Xt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},$t={style:{"font-family":"monospace"}},te={key:0,style:{"font-family":"monospace","font-size":"12px"}},ee={key:1,style:{color:"var(--text-muted)"}},ae={key:0,style:{"font-family":"monospace","font-size":"12px"}},oe={key:1,style:{color:"var(--text-muted)"}},re={style:{"font-family":"monospace","font-size":"12px"}},le={style:{"font-family":"monospace","font-size":"11px"}},ne={style:{color:"#ff4d4f"}},ie={class:"details-pre"};function se(n,i,r,t,L,M){const w=m("a-button"),E=m("a-space"),N=m("a-alert"),z=m("a-statistic"),S=m("a-card"),p=m("a-col"),O=m("a-row"),v=m("a-tag"),F=m("a-input-search"),R=m("a-radio-button"),j=m("a-radio-group"),U=m("a-checkbox"),I=m("a-tooltip"),D=m("a-table"),B=m("a-tab-pane"),P=m("a-progress"),W=m("a-tabs"),k=m("a-descriptions-item"),H=m("a-descriptions"),Y=m("a-modal");return d(),f("div",null,[b("div",Nt,[b("div",null,[b("h2",Ft,c(t.t("audit.title")),1),b("p",jt,c(t.t("audit.subtitle")),1)]),o(E,null,{default:e(()=>[o(w,{loading:t.loading,onClick:t.loadAll},{icon:e(()=>[o(t.ReloadOutlined)]),default:e(()=>[_(" "+c(t.t("audit.refresh")),1)]),_:1},8,["loading"]),o(w,{onClick:t.exportJson},{icon:e(()=>[o(t.DownloadOutlined)]),default:e(()=>[_(" "+c(t.t("audit.exportJson")),1)]),_:1})]),_:1})]),y(" noDb banner "),t.errorState.noDb?(d(),h(N,{key:0,type:"info","show-icon":"",message:t.t("audit.noDb.message"),description:t.t("audit.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("v-if",!0),y(" Stat cards "),o(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:e(()=>[o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(z,{title:t.t("audit.stats.total"),value:t.stats.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:e(()=>[o(t.FileSearchOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(z,{title:t.t("audit.stats.failures"),value:t.stats.failures,"value-style":{color:t.stats.failures>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[o(t.CloseCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(z,{title:t.t("audit.stats.highRisk"),value:t.stats.highRisk,"value-style":{color:t.stats.highRisk>0?"#fa8c16":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[o(t.WarningOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(z,{title:t.t("audit.stats.critical"),value:t.stats.byRiskLevel.critical||0,"value-style":{color:(t.stats.byRiskLevel.critical||0)>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:e(()=>[o(t.AlertOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:24,sm:8,lg:4},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(z,{title:t.t("audit.stats.successRate"),value:t.successRate,suffix:"%",precision:1,"value-style":{color:t.successRate>=95?"#52c41a":t.successRate>=80?"#faad14":"#ff4d4f",fontSize:"20px"}},{prefix:e(()=>[o(t.CheckCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),y(" Event type catalogue "),o(S,{title:t.t("audit.typeCatalogueTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:e(()=>[o(O,{gutter:[12,12]},{default:e(()=>[(d(!0),f(T,null,V(t.EVENT_TYPES,l=>(d(),h(p,{key:l,xs:12,sm:8,lg:3},{default:e(()=>[b("div",{class:"type-pill",style:xt({borderLeftColor:t.typeBarColor(l)})},[o(v,{color:t.typeColor(l),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[_(c(l),1)]),_:2},1032,["color"]),b("div",Jt,c(t.typeLabel(l)),1),b("div",Vt,c(t.stats.byEventType[l]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),y(" Tabs "),o(W,{activeKey:t.activeTab,"onUpdate:activeKey":i[4]||(i[4]=l=>t.activeTab=l),class:"audit-tabs"},{default:e(()=>[y(" ── Events tab ──────────────────────────────────────────── "),o(B,{key:"events",tab:t.t("audit.tabs.events")},{default:e(()=>[b("div",Bt,[o(F,{value:t.searchInput,"onUpdate:value":i[0]||(i[0]=l=>t.searchInput=l),placeholder:t.t("audit.filter.searchPlaceholder"),"allow-clear":"",style:{"max-width":"280px"},onSearch:t.runSearch,onInput:t.onSearchInput},null,8,["value","placeholder"]),o(j,{value:t.typeFilter,"onUpdate:value":i[1]||(i[1]=l=>t.typeFilter=l),size:"small","button-style":"solid"},{default:e(()=>[o(R,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allTypes")),1)]),_:1}),(d(!0),f(T,null,V(t.EVENT_TYPES,l=>(d(),h(R,{key:l,value:l},{default:e(()=>[_(c(t.typeLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(j,{value:t.riskFilter,"onUpdate:value":i[2]||(i[2]=l=>t.riskFilter=l),size:"small"},{default:e(()=>[o(R,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allRisks")),1)]),_:1}),(d(!0),f(T,null,V(t.RISK_LEVELS,l=>(d(),h(R,{key:l,value:l},{default:e(()=>[_(c(t.riskLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(U,{checked:t.failuresOnly,"onUpdate:checked":i[3]||(i[3]=l=>t.failuresOnly=l)},{default:e(()=>[_(c(t.t("audit.filter.failuresOnly")),1)]),_:1},8,["checked"])]),o(D,{columns:t.logColumns,"data-source":t.filteredLogs,pagination:{pageSize:20,showTotal:l=>t.t("audit.totals.rows",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:l,record:g})=>[l.key==="createdAt"?(d(),f("span",Pt,c(t.formatAuditTime(g.createdAt)),1)):y("v-if",!0),l.key==="eventType"?(d(),h(v,{key:1,color:t.typeColor(g.eventType),style:{"font-family":"monospace"}},{default:e(()=>[_(c(g.eventType),1)]),_:2},1032,["color"])):y("v-if",!0),l.key==="operation"?(d(),f(T,{key:2},[b("span",Kt,c(g.operation),1),g.errorMessage?(d(),f("div",Ut,c(g.errorMessage),1)):y("v-if",!0)],64)):y("v-if",!0),l.key==="actor"?(d(),f(T,{key:3},[g.actor?(d(),f("span",Wt,c(g.actor),1)):(d(),f("span",Ht,"—"))],64)):y("v-if",!0),l.key==="target"?(d(),f(T,{key:4},[g.target?(d(),f("span",Yt,c(t.truncate(g.target,32)),1)):(d(),f("span",Zt,"—"))],64)):y("v-if",!0),l.key==="riskLevel"?(d(),h(v,{key:5,color:t.riskColor(g.riskLevel)},{default:e(()=>[_(c(t.riskLabel(g.riskLevel)),1)]),_:2},1032,["color"])):y("v-if",!0),l.key==="success"?(d(),h(v,{key:6,color:g.success?"green":"red"},{default:e(()=>[_(c(g.success?"OK":"FAIL"),1)]),_:2},1032,["color"])):y("v-if",!0),l.key==="mtc"?(d(),f(T,{key:7},[t.classifyMtcStatus(g)==="none"?(d(),h(I,{key:0,title:t.t("audit.mtc.noneTooltip")},{default:e(()=>[o(v,{color:"default"},{default:e(()=>[...i[6]||(i[6]=[_("—",-1)])]),_:1})]),_:1},8,["title"])):(d(),h(I,{key:1,title:t.getMtcTooltip(g)},{default:e(()=>[o(v,{color:t.getMtcColor(g),style:{cursor:"pointer"},onClick:Z=>t.checkMtcStatus(g)},{default:e(()=>[_(c(t.getMtcLabel(g)),1)]),_:2},1032,["color","onClick"])]),_:2},1032,["title"]))],64)):y("v-if",!0),l.key==="action"?(d(),h(w,{key:8,size:"small",type:"link",onClick:Z=>t.viewLogDetails(g)},{default:e(()=>[_(c(t.t("audit.rowAction.details")),1)]),_:1},8,["onClick"])):y("v-if",!0)]),emptyText:e(()=>[b("div",qt,[o(t.FileSearchOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+c(t.hasFilters?t.t("audit.empty.filtered"):t.t("audit.empty.noEvents")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Breakdown tab ───────────────────────────────────────── "),o(B,{key:"breakdown",tab:t.t("audit.tabs.breakdown")},{default:e(()=>[o(O,{gutter:[16,16]},{default:e(()=>[o(p,{xs:24,lg:12},{default:e(()=>[o(S,{title:t.t("audit.breakdown.byType"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(d(!0),f(T,null,V(t.EVENT_TYPES,l=>(d(),f("div",{key:l,class:"bd-row"},[o(v,{color:t.typeColor(l),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[_(c(l),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byEventType[l]||0,t.stats.total),"stroke-color":t.typeBarColor(l),format:()=>`${t.stats.byEventType[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(p,{xs:24,lg:12},{default:e(()=>[o(S,{title:t.t("audit.breakdown.byRisk"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(d(!0),f(T,null,V(t.RISK_LEVELS,l=>(d(),f("div",{key:l,class:"bd-row"},[o(v,{color:t.riskColor(l),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[_(c(t.riskLabel(l)),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byRiskLevel[l]||0,t.stats.total),"stroke-color":t.riskBarColor(l),format:()=>`${t.stats.byRiskLevel[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Event details modal ─────────────────────────────────── "),o(Y,{open:t.showDetailsModal,"onUpdate:open":i[5]||(i[5]=l=>t.showDetailsModal=l),title:t.t("audit.details.title",{id:t.currentLog?.id?.slice(0,8)||""}),width:720,footer:null},{default:e(()=>[t.currentLog?(d(),f("div",Gt,[o(H,{column:2,size:"small",bordered:""},{default:e(()=>[o(k,{label:t.t("audit.details.id"),span:2},{default:e(()=>[b("span",Qt,c(t.currentLog.id),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.eventType")},{default:e(()=>[o(v,{color:t.typeColor(t.currentLog.eventType),style:{"font-family":"monospace"}},{default:e(()=>[_(c(t.currentLog.eventType),1)]),_:1},8,["color"]),b("span",Xt,c(t.typeLabel(t.currentLog.eventType)),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.riskLevel")},{default:e(()=>[o(v,{color:t.riskColor(t.currentLog.riskLevel)},{default:e(()=>[_(c(t.riskLabel(t.currentLog.riskLevel)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(k,{label:t.t("audit.details.operation"),span:2},{default:e(()=>[b("span",$t,c(t.currentLog.operation),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.status")},{default:e(()=>[o(v,{color:t.currentLog.success?"green":"red"},{default:e(()=>[_(c(t.currentLog.success?t.t("audit.details.success"):t.t("audit.details.failure")),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(k,{label:t.t("audit.details.time")},{default:e(()=>[_(c(t.formatAuditTime(t.currentLog.createdAt)),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.actor")},{default:e(()=>[t.currentLog.actor?(d(),f("span",te,c(t.currentLog.actor),1)):(d(),f("span",ee,"—"))]),_:1},8,["label"]),o(k,{label:t.t("audit.details.target")},{default:e(()=>[t.currentLog.target?(d(),f("span",ae,c(t.currentLog.target),1)):(d(),f("span",oe,"—"))]),_:1},8,["label"]),t.currentLog.ipAddress?(d(),h(k,{key:0,label:t.t("audit.details.ip")},{default:e(()=>[b("span",re,c(t.currentLog.ipAddress),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.userAgent?(d(),h(k,{key:1,label:t.t("audit.details.userAgent")},{default:e(()=>[b("span",le,c(t.currentLog.userAgent),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.errorMessage?(d(),h(k,{key:2,label:t.t("audit.details.errorMessage"),span:2},{default:e(()=>[b("span",ne,c(t.currentLog.errorMessage),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.details?(d(),h(k,{key:3,label:t.t("audit.details.details"),span:2},{default:e(()=>[b("pre",ie,c(t.formatDetails(t.currentLog.details)),1)]),_:1},8,["label"])):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"])])}const _e=Lt(Dt,[["render",se],["__scopeId","data-v-be9f4fc3"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/views/Audit.vue"]]);export{_e as default};
|
|
1
|
+
import{I as m,J as f,U as b,R as c,c as o,K as e,V as y,S as h,o as tt,b as J,r as x,P as d,Q as _,F as C,Z as V,$ as xt}from"./vendor-BvqAck49.js";import{_ as Lt,b as et,u as at,d as A}from"./index-CzeRvhia.js";import{u as ot}from"./useFs-Bk1SrPFp.js";import{s as nt}from"./community-parser-CO25nZFt.js";import{s as St,am as Tt,f as Ct,d as Et,m as Ot,az as At,R as wt}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";function it(n){const i=nt(n);if(!i)return null;try{return JSON.parse(i)}catch{}const r=i.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!r)return null;try{return JSON.parse(r[0])}catch{return null}}const st=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),ct=Object.freeze(["low","medium","high","critical"]);function q(n,i=0){return typeof n=="number"&&Number.isFinite(n)?n:i}function Q(n){if(!n)return{noDb:!1,error:""};const i=nt(n),r=/Database not available/i.test(i);return{noDb:r,error:r?"Database not available":""}}function Rt(n,i=0){if(!n||typeof n!="object")return null;const r=n.id||"";if(!r)return null;let t=n.details;if(typeof t=="string"&&t)try{t=JSON.parse(t)}catch{}const L=typeof n.success=="boolean"?n.success:n.success===1||n.success==="1"||n.success===!0,M=n.audit_mtc_event_id??n.auditMtcEventId??null;return{key:r,id:r,eventType:String(n.event_type??n.eventType??"").toLowerCase(),operation:String(n.operation||""),actor:n.actor??"",target:n.target??"",details:t??null,riskLevel:String(n.risk_level??n.riskLevel??"low").toLowerCase(),ipAddress:n.ip_address??n.ipAddress??"",userAgent:n.user_agent??n.userAgent??"",success:L,errorMessage:n.error_message??n.errorMessage??"",createdAt:n.created_at??n.createdAt??"",auditMtcEventId:M,_idx:i}}function rt(n){const i=it(n);return Array.isArray(i)?i.map(Rt).filter(Boolean):[]}const zt={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function lt(n){const i=JSON.parse(JSON.stringify(zt));for(const t of st)i.byEventType[t]=0;for(const t of ct)i.byRiskLevel[t]=0;const r=it(n);if(!r||typeof r!="object"||Array.isArray(r))return i;if(i.total=q(r.total,0),i.failures=q(r.failures,0),i.highRisk=q(r.highRisk,0),r.byEventType&&typeof r.byEventType=="object")for(const[t,L]of Object.entries(r.byEventType))typeof L=="number"&&Number.isFinite(L)&&(i.byEventType[t]=L);if(r.byRiskLevel&&typeof r.byRiskLevel=="object")for(const[t,L]of Object.entries(r.byRiskLevel))typeof L=="number"&&Number.isFinite(L)&&(i.byRiskLevel[t]=L);return i}function It(n){return!n||!n.auditMtcEventId?"none":"tracked"}function Mt(n){if(n==null||n==="")return"—";const i=String(n),r=i.includes(" ")&&!i.includes("T")?i.replace(" ","T")+"Z":i,t=new Date(r);return isNaN(t.getTime())?i:t.toLocaleString("zh-CN",{hour12:!1})}const Dt={__name:"Audit",setup(n,{expose:i}){i();const{t:r}=et(),t=at(),L=ot(),M=x(!1),w=x([]),E=x({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),N=x({noDb:!1,error:""}),R=x("events"),S=x(""),p=x(""),O=x(""),v=x(""),F=x(!1),z=x(!1),j=x(null),U=J(()=>[{title:r("audit.logColumns.createdAt"),key:"createdAt",width:"160px"},{title:r("audit.logColumns.eventType"),key:"eventType",width:"110px"},{title:r("audit.logColumns.operation"),key:"operation"},{title:r("audit.logColumns.actor"),key:"actor",width:"140px"},{title:r("audit.logColumns.target"),key:"target",width:"180px"},{title:r("audit.logColumns.riskLevel"),key:"riskLevel",width:"90px"},{title:r("audit.logColumns.success"),key:"success",width:"80px"},{title:r("audit.logColumns.mtc"),key:"mtc",width:"110px"},{title:r("audit.logColumns.action"),key:"action",width:"80px"}]),I=x({});function D(a){return a.auditMtcEventId&&I.value[a.id]||null}function B(a){const s=D(a);return s?s.state==="staging"?r("audit.mtc.stagingLabel"):s.state==="batched"?r("audit.mtc.batchedLabel",{batchId:s.batchId||"?"}):r("audit.mtc.unknownLabel"):r("audit.mtc.signedNotChecked")}function P(a){const s=D(a);return s?s.state==="staging"?"orange":s.state==="batched"?"green":"default":"blue"}function W(a){if(!a.auditMtcEventId)return"";const s=D(a),u=r("audit.mtc.tooltipBase",{id:a.auditMtcEventId});return s?s.state==="staging"?r("audit.mtc.tooltipStaging",{base:u}):s.state==="batched"?r("audit.mtc.tooltipBatched",{base:u,batchId:s.batchId,treeHead:s.treeHeadId||""}):u:r("audit.mtc.tooltipNotChecked",{base:u})}async function k(a){if(!a.auditMtcEventId)return;const s=a.auditMtcEventId.replace(/"/g,'\\"');try{const u=await t.execute(`audit mtc reconcile-check "${s}" --json`,8e3);let T;try{T=JSON.parse(u.output.trim())}catch{const $=u.output.match(/\{[\s\S]*\}/);T=$?JSON.parse($[0]):null}if(!T){A.warning(r("audit.mtc.noJson"));return}const ht=T.found?{state:"batched",batchId:T.batchId,treeHeadId:T.treeHeadId}:T.staging?{state:"staging"}:{state:"unknown"};I.value={...I.value,[a.id]:ht}}catch(u){A.error(r("audit.mtc.checkFailed",{err:u?.message||u}))}}const Y=J(()=>E.value.total?(E.value.total-E.value.failures)/E.value.total*100:100),H=J(()=>!!(p.value||O.value||v.value||F.value)),l=J(()=>{let a=w.value;if(O.value&&(a=a.filter(s=>s.eventType===O.value)),v.value&&(a=a.filter(s=>s.riskLevel===v.value)),F.value&&(a=a.filter(s=>!s.success)),p.value){const s=p.value.toLowerCase();a=a.filter(u=>(u.operation||"").toLowerCase().includes(s)||(u.actor||"").toLowerCase().includes(s)||(u.target||"").toLowerCase().includes(s))}return a});function g(a){const s=`audit.type.${a}`,u=r(s);return u===s?a:u}function Z(a){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[a]||"default"}function dt(a){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[a]||"#888"}function ut(a){const s=`audit.risk.${a}`,u=r(s);return u===s?a:u}function ft(a){return{low:"default",medium:"gold",high:"orange",critical:"red"}[a]||"default"}function yt(a){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[a]||"#888"}function gt(a,s){return s?Math.round(a/s*100):0}function _t(a,s){return a?a.length<=s?a:a.slice(0,s)+"…":""}function mt(a){if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}let K=null;function bt(){clearTimeout(K),K=setTimeout(()=>{p.value=S.value.trim()},300)}function vt(){p.value=S.value.trim()}async function G(){M.value=!0,N.value={noDb:!1,error:""};try{const[a,s]=await Promise.all([t.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),t.execute("audit stats --json",8e3).catch(()=>({output:""}))]),u=[a,s].map(T=>Q(T.output)).find(T=>T.noDb);u&&(N.value=u),w.value=rt(a.output),E.value=lt(s.output)}catch(a){A.error(r("audit.messages.loadFailed",{err:a?.message||a}))}finally{M.value=!1}}function pt(a){j.value=a,z.value=!0}async function kt(){try{const{output:a}=await t.execute("audit export -f json -n 10000",2e4);if(Q(a).noDb){A.error(r("audit.messages.needInit"));return}if(!a.trim().startsWith("[")){A.error(r("audit.messages.exportFailed",{err:a.slice(0,120)}));return}const u=await L.saveText(a.trim(),{defaultPath:`audit-${new Date().toISOString().slice(0,10)}.json`,filters:[{name:"JSON",extensions:["json"]}]});if(u.canceled)return;A.success(u.path?r("audit.messages.exportOk",{path:u.path}):r("audit.messages.exportOkDefault"))}catch(a){A.error(r("audit.messages.exportFailed",{err:a?.message||a}))}}tt(G);const X={t:r,ws:t,fs:L,loading:M,logs:w,stats:E,errorState:N,activeTab:R,searchInput:S,searchTerm:p,typeFilter:O,riskFilter:v,failuresOnly:F,showDetailsModal:z,currentLog:j,logColumns:U,mtcStatusCache:I,getMtcStatusEntry:D,getMtcLabel:B,getMtcColor:P,getMtcTooltip:W,checkMtcStatus:k,successRate:Y,hasFilters:H,filteredLogs:l,typeLabel:g,typeColor:Z,typeBarColor:dt,riskLabel:ut,riskColor:ft,riskBarColor:yt,pctOfTotal:gt,truncate:_t,formatDetails:mt,get searchDebounce(){return K},set searchDebounce(a){K=a},onSearchInput:bt,runSearch:vt,loadAll:G,viewLogDetails:pt,exportJson:kt,ref:x,computed:J,onMounted:tt,get useI18n(){return et},get ReloadOutlined(){return wt},get DownloadOutlined(){return At},get FileSearchOutlined(){return Ot},get CloseCircleOutlined(){return Et},get CheckCircleOutlined(){return Ct},get WarningOutlined(){return Tt},get AlertOutlined(){return St},get message(){return A},get useWsStore(){return at},get useFs(){return ot},get parseLogs(){return rt},get parseStats(){return lt},get detectAuditError(){return Q},get formatAuditTime(){return Mt},get classifyMtcStatus(){return It},get EVENT_TYPES(){return st},get RISK_LEVELS(){return ct}};return Object.defineProperty(X,"__isScriptSetup",{enumerable:!1,value:!0}),X}},Nt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},jt={class:"page-sub"},Jt={class:"type-name"},Vt={class:"type-count"},Bt={class:"filter-bar"},Pt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Kt={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},Ut={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Yt={key:1,style:{color:"var(--text-muted)"}},Ht={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Zt={key:1,style:{color:"var(--text-muted)"}},qt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Qt={key:0,style:{"padding-top":"8px"}},Gt={style:{"font-family":"monospace","font-size":"12px"}},Xt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},$t={style:{"font-family":"monospace"}},te={key:0,style:{"font-family":"monospace","font-size":"12px"}},ee={key:1,style:{color:"var(--text-muted)"}},ae={key:0,style:{"font-family":"monospace","font-size":"12px"}},oe={key:1,style:{color:"var(--text-muted)"}},re={style:{"font-family":"monospace","font-size":"12px"}},le={style:{"font-family":"monospace","font-size":"11px"}},ne={style:{color:"#ff4d4f"}},ie={class:"details-pre"};function se(n,i,r,t,L,M){const w=m("a-button"),E=m("a-space"),N=m("a-alert"),R=m("a-statistic"),S=m("a-card"),p=m("a-col"),O=m("a-row"),v=m("a-tag"),F=m("a-input-search"),z=m("a-radio-button"),j=m("a-radio-group"),U=m("a-checkbox"),I=m("a-tooltip"),D=m("a-table"),B=m("a-tab-pane"),P=m("a-progress"),W=m("a-tabs"),k=m("a-descriptions-item"),Y=m("a-descriptions"),H=m("a-modal");return d(),f("div",null,[b("div",Nt,[b("div",null,[b("h2",Ft,c(t.t("audit.title")),1),b("p",jt,c(t.t("audit.subtitle")),1)]),o(E,null,{default:e(()=>[o(w,{loading:t.loading,onClick:t.loadAll},{icon:e(()=>[o(t.ReloadOutlined)]),default:e(()=>[_(" "+c(t.t("audit.refresh")),1)]),_:1},8,["loading"]),o(w,{onClick:t.exportJson},{icon:e(()=>[o(t.DownloadOutlined)]),default:e(()=>[_(" "+c(t.t("audit.exportJson")),1)]),_:1})]),_:1})]),y(" noDb banner "),t.errorState.noDb?(d(),h(N,{key:0,type:"info","show-icon":"",message:t.t("audit.noDb.message"),description:t.t("audit.noDb.description"),style:{"margin-bottom":"16px"}},null,8,["message","description"])):y("v-if",!0),y(" Stat cards "),o(O,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:e(()=>[o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.total"),value:t.stats.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:e(()=>[o(t.FileSearchOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.failures"),value:t.stats.failures,"value-style":{color:t.stats.failures>0?"#ff4d4f":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[o(t.CloseCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.highRisk"),value:t.stats.highRisk,"value-style":{color:t.stats.highRisk>0?"#fa8c16":"#52c41a",fontSize:"20px"}},{prefix:e(()=>[o(t.WarningOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:12,sm:8,lg:5},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.critical"),value:t.stats.byRiskLevel.critical||0,"value-style":{color:(t.stats.byRiskLevel.critical||0)>0?"#ff4d4f":"#888",fontSize:"20px"}},{prefix:e(()=>[o(t.AlertOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),o(p,{xs:24,sm:8,lg:4},{default:e(()=>[o(S,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[o(R,{title:t.t("audit.stats.successRate"),value:t.successRate,suffix:"%",precision:1,"value-style":{color:t.successRate>=95?"#52c41a":t.successRate>=80?"#faad14":"#ff4d4f",fontSize:"20px"}},{prefix:e(()=>[o(t.CheckCircleOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1})]),_:1}),y(" Event type catalogue "),o(S,{title:t.t("audit.typeCatalogueTitle"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:e(()=>[o(O,{gutter:[12,12]},{default:e(()=>[(d(!0),f(C,null,V(t.EVENT_TYPES,l=>(d(),h(p,{key:l,xs:12,sm:8,lg:3},{default:e(()=>[b("div",{class:"type-pill",style:xt({borderLeftColor:t.typeBarColor(l)})},[o(v,{color:t.typeColor(l),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[_(c(l),1)]),_:2},1032,["color"]),b("div",Jt,c(t.typeLabel(l)),1),b("div",Vt,c(t.stats.byEventType[l]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),y(" Tabs "),o(W,{activeKey:t.activeTab,"onUpdate:activeKey":i[4]||(i[4]=l=>t.activeTab=l),class:"audit-tabs"},{default:e(()=>[y(" ── Events tab ──────────────────────────────────────────── "),o(B,{key:"events",tab:t.t("audit.tabs.events")},{default:e(()=>[b("div",Bt,[o(F,{value:t.searchInput,"onUpdate:value":i[0]||(i[0]=l=>t.searchInput=l),placeholder:t.t("audit.filter.searchPlaceholder"),"allow-clear":"",style:{"max-width":"280px"},onSearch:t.runSearch,onInput:t.onSearchInput},null,8,["value","placeholder"]),o(j,{value:t.typeFilter,"onUpdate:value":i[1]||(i[1]=l=>t.typeFilter=l),size:"small","button-style":"solid"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allTypes")),1)]),_:1}),(d(!0),f(C,null,V(t.EVENT_TYPES,l=>(d(),h(z,{key:l,value:l},{default:e(()=>[_(c(t.typeLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(j,{value:t.riskFilter,"onUpdate:value":i[2]||(i[2]=l=>t.riskFilter=l),size:"small"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allRisks")),1)]),_:1}),(d(!0),f(C,null,V(t.RISK_LEVELS,l=>(d(),h(z,{key:l,value:l},{default:e(()=>[_(c(t.riskLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(U,{checked:t.failuresOnly,"onUpdate:checked":i[3]||(i[3]=l=>t.failuresOnly=l)},{default:e(()=>[_(c(t.t("audit.filter.failuresOnly")),1)]),_:1},8,["checked"])]),o(D,{columns:t.logColumns,"data-source":t.filteredLogs,pagination:{pageSize:20,showTotal:l=>t.t("audit.totals.rows",{count:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:l,record:g})=>[l.key==="createdAt"?(d(),f("span",Pt,c(t.formatAuditTime(g.createdAt)),1)):y("v-if",!0),l.key==="eventType"?(d(),h(v,{key:1,color:t.typeColor(g.eventType),style:{"font-family":"monospace"}},{default:e(()=>[_(c(g.eventType),1)]),_:2},1032,["color"])):y("v-if",!0),l.key==="operation"?(d(),f(C,{key:2},[b("span",Kt,c(g.operation),1),g.errorMessage?(d(),f("div",Ut,c(g.errorMessage),1)):y("v-if",!0)],64)):y("v-if",!0),l.key==="actor"?(d(),f(C,{key:3},[g.actor?(d(),f("span",Wt,c(g.actor),1)):(d(),f("span",Yt,"—"))],64)):y("v-if",!0),l.key==="target"?(d(),f(C,{key:4},[g.target?(d(),f("span",Ht,c(t.truncate(g.target,32)),1)):(d(),f("span",Zt,"—"))],64)):y("v-if",!0),l.key==="riskLevel"?(d(),h(v,{key:5,color:t.riskColor(g.riskLevel)},{default:e(()=>[_(c(t.riskLabel(g.riskLevel)),1)]),_:2},1032,["color"])):y("v-if",!0),l.key==="success"?(d(),h(v,{key:6,color:g.success?"green":"red"},{default:e(()=>[_(c(g.success?"OK":"FAIL"),1)]),_:2},1032,["color"])):y("v-if",!0),l.key==="mtc"?(d(),f(C,{key:7},[t.classifyMtcStatus(g)==="none"?(d(),h(I,{key:0,title:t.t("audit.mtc.noneTooltip")},{default:e(()=>[o(v,{color:"default"},{default:e(()=>[...i[6]||(i[6]=[_("—",-1)])]),_:1})]),_:1},8,["title"])):(d(),h(I,{key:1,title:t.getMtcTooltip(g)},{default:e(()=>[o(v,{color:t.getMtcColor(g),style:{cursor:"pointer"},onClick:Z=>t.checkMtcStatus(g)},{default:e(()=>[_(c(t.getMtcLabel(g)),1)]),_:2},1032,["color","onClick"])]),_:2},1032,["title"]))],64)):y("v-if",!0),l.key==="action"?(d(),h(w,{key:8,size:"small",type:"link",onClick:Z=>t.viewLogDetails(g)},{default:e(()=>[_(c(t.t("audit.rowAction.details")),1)]),_:1},8,["onClick"])):y("v-if",!0)]),emptyText:e(()=>[b("div",qt,[o(t.FileSearchOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),_(" "+c(t.hasFilters?t.t("audit.empty.filtered"):t.t("audit.empty.noEvents")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),y(" ── Breakdown tab ───────────────────────────────────────── "),o(B,{key:"breakdown",tab:t.t("audit.tabs.breakdown")},{default:e(()=>[o(O,{gutter:[16,16]},{default:e(()=>[o(p,{xs:24,lg:12},{default:e(()=>[o(S,{title:t.t("audit.breakdown.byType"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(d(!0),f(C,null,V(t.EVENT_TYPES,l=>(d(),f("div",{key:l,class:"bd-row"},[o(v,{color:t.typeColor(l),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[_(c(l),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byEventType[l]||0,t.stats.total),"stroke-color":t.typeBarColor(l),format:()=>`${t.stats.byEventType[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1}),o(p,{xs:24,lg:12},{default:e(()=>[o(S,{title:t.t("audit.breakdown.byRisk"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:e(()=>[(d(!0),f(C,null,V(t.RISK_LEVELS,l=>(d(),f("div",{key:l,class:"bd-row"},[o(v,{color:t.riskColor(l),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[_(c(t.riskLabel(l)),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byRiskLevel[l]||0,t.stats.total),"stroke-color":t.riskBarColor(l),format:()=>`${t.stats.byRiskLevel[l]||0}`,size:"small",style:{flex:"1","margin-left":"12px"}},null,8,["percent","stroke-color","format"])]))),128))]),_:1},8,["title"])]),_:1})]),_:1})]),_:1},8,["tab"])]),_:1},8,["activeKey"]),y(" ── Event details modal ─────────────────────────────────── "),o(H,{open:t.showDetailsModal,"onUpdate:open":i[5]||(i[5]=l=>t.showDetailsModal=l),title:t.t("audit.details.title",{id:t.currentLog?.id?.slice(0,8)||""}),width:720,footer:null},{default:e(()=>[t.currentLog?(d(),f("div",Qt,[o(Y,{column:2,size:"small",bordered:""},{default:e(()=>[o(k,{label:t.t("audit.details.id"),span:2},{default:e(()=>[b("span",Gt,c(t.currentLog.id),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.eventType")},{default:e(()=>[o(v,{color:t.typeColor(t.currentLog.eventType),style:{"font-family":"monospace"}},{default:e(()=>[_(c(t.currentLog.eventType),1)]),_:1},8,["color"]),b("span",Xt,c(t.typeLabel(t.currentLog.eventType)),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.riskLevel")},{default:e(()=>[o(v,{color:t.riskColor(t.currentLog.riskLevel)},{default:e(()=>[_(c(t.riskLabel(t.currentLog.riskLevel)),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(k,{label:t.t("audit.details.operation"),span:2},{default:e(()=>[b("span",$t,c(t.currentLog.operation),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.status")},{default:e(()=>[o(v,{color:t.currentLog.success?"green":"red"},{default:e(()=>[_(c(t.currentLog.success?t.t("audit.details.success"):t.t("audit.details.failure")),1)]),_:1},8,["color"])]),_:1},8,["label"]),o(k,{label:t.t("audit.details.time")},{default:e(()=>[_(c(t.formatAuditTime(t.currentLog.createdAt)),1)]),_:1},8,["label"]),o(k,{label:t.t("audit.details.actor")},{default:e(()=>[t.currentLog.actor?(d(),f("span",te,c(t.currentLog.actor),1)):(d(),f("span",ee,"—"))]),_:1},8,["label"]),o(k,{label:t.t("audit.details.target")},{default:e(()=>[t.currentLog.target?(d(),f("span",ae,c(t.currentLog.target),1)):(d(),f("span",oe,"—"))]),_:1},8,["label"]),t.currentLog.ipAddress?(d(),h(k,{key:0,label:t.t("audit.details.ip")},{default:e(()=>[b("span",re,c(t.currentLog.ipAddress),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.userAgent?(d(),h(k,{key:1,label:t.t("audit.details.userAgent")},{default:e(()=>[b("span",le,c(t.currentLog.userAgent),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.errorMessage?(d(),h(k,{key:2,label:t.t("audit.details.errorMessage"),span:2},{default:e(()=>[b("span",ne,c(t.currentLog.errorMessage),1)]),_:1},8,["label"])):y("v-if",!0),t.currentLog.details?(d(),h(k,{key:3,label:t.t("audit.details.details"),span:2},{default:e(()=>[b("pre",ie,c(t.formatDetails(t.currentLog.details)),1)]),_:1},8,["label"])):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"])])}const _e=Lt(Dt,[["render",se],["__scopeId","data-v-be9f4fc3"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/views/Audit.vue"]]);export{_e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as b,J as d,U as y,R as l,c as t,K as n,o as pe,b as G,r as c,P as s,Q as k,V as r,S as x,F as Ce}from"./vendor-BvqAck49.js";import{_ as ze,b as fe,u as ye,d as ie}from"./index-D7FYxxFT.js";import{u as be}from"./useFs-DU7qrIrQ.js";import{az as Pe,R as Be,aQ as Le,as as Ae,aS as Te,S as Fe,z as Me}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const Re={__name:"Backup",setup(ke,{expose:v}){v();const{t:i}=fe(),e=ye(),Q=be(),E=c(!1),g=c("backup"),C=c(!1),h=c(!1),B=c(!1),w=c(""),f=c([]),O=c(""),F=G(()=>[{title:i("backup.backupColumns.id"),key:"id"},{title:i("backup.backupColumns.size"),key:"size",width:120},{title:i("backup.backupColumns.createdAt"),key:"createdAt"},{title:i("backup.backupColumns.action"),key:"action",width:100}]);async function m(){h.value=!0,w.value="";try{const{output:a}=await e.execute("backup list --json",15e3),o=T(a);Array.isArray(o)?f.value=o:o&&Array.isArray(o.backups)?f.value=o.backups:(f.value=[],a&&a.trim()&&(O.value=a))}catch(a){w.value=i("backup.messages.loadBackupsFailed",{err:a.message})}finally{h.value=!1}}async function S(){B.value=!0,O.value="",w.value="";try{const{output:a}=await e.execute("backup create --json",3e4);O.value=a||i("backup.backup.createDefaultMessage"),await m()}catch(a){O.value=i("backup.messages.createBackupFailed",{err:a.message})}finally{B.value=!1}}const M=c(!1),L=c(!1),A=c(null),z=c("");function W(a){A.value=a,z.value="",M.value=!0}async function u(){if(A.value){L.value=!0,z.value="";try{const{output:a}=await e.execute(`backup restore ${A.value.id}`,6e4);z.value=a||i("backup.backup.restoreDefaultMessage")}catch(a){z.value=i("backup.messages.restoreFailed",{err:a.message})}finally{L.value=!1}}}const p=c(!1),R=c(""),D=c(!1),U=c(""),Z=c(0),q=c(""),P=c(""),X=c(!1),Y=c(!1),I=c([]),ve=G(()=>[{title:i("backup.conflictColumns.path"),key:"path"},{title:i("backup.conflictColumns.type"),key:"type",width:120}]);async function j(){p.value=!0,R.value="";try{const{output:a}=await e.execute("sync status --json",15e3),o=T(a);o?(D.value=o.online||o.synced||o.status==="online"||!1,U.value=D.value?i("backup.sync.synced"):i("backup.sync.notSynced"),Z.value=o.pending??o.pendingChanges??0,q.value=o.lastSync||o.lastSyncTime||""):ce(a)}catch(a){R.value=i("backup.messages.loadSyncFailed",{err:a.message})}finally{p.value=!1}}function ce(a){if(!a){U.value=i("backup.sync.unknown");return}D.value=/synced|online|up.to.date/i.test(a),U.value=D.value?i("backup.sync.synced"):i("backup.sync.notSynced");const o=a.match(/pending[:\s]+(\d+)/i);Z.value=o?parseInt(o[1]):0;const _=a.match(/last[:\s]+(.+)/i);_&&(q.value=_[1].trim())}async function ge(){X.value=!0,P.value="";try{const{output:a}=await e.execute("sync push",3e4);P.value=a||i("backup.sync.pushDefaultMessage"),await j()}catch(a){P.value=i("backup.messages.pushFailed",{err:a.message})}finally{X.value=!1}}async function me(){Y.value=!0,P.value="";try{const{output:a}=await e.execute("sync pull",3e4);P.value=a||i("backup.sync.pullDefaultMessage"),await j()}catch(a){P.value=i("backup.messages.pullFailed",{err:a.message})}finally{Y.value=!1}}async function se(){try{const{output:a}=await e.execute("sync conflicts --json",15e3),o=T(a);Array.isArray(o)?I.value=o:o&&Array.isArray(o.conflicts)?I.value=o.conflicts:I.value=[]}catch{I.value=[]}}const $=c(!1),ee=c(""),ae=c(!1),te=c(""),ne=c(!1),N=c(""),H=c([]),_e=G(()=>[{title:i("backup.pinColumns.cid"),key:"cid"},{title:i("backup.pinColumns.name"),key:"name"},{title:i("backup.pinColumns.size"),key:"size",width:120},{title:i("backup.pinColumns.pinnedAt"),key:"pinnedAt"},{title:i("backup.pinColumns.action"),key:"action",width:120}]);async function re(){$.value=!0,ee.value="";try{const{output:a}=await e.execute("ipfs status --json",15e3),o=T(a);if(o)ae.value=o.online||o.status==="online"||o.connected||!1,te.value=o.peerId||o.id||"";else{ae.value=a?/online|connected|running/i.test(a):!1;const _=a?a.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=_?_[1]:""}}catch(a){ee.value=i("backup.messages.loadIpfsFailed",{err:a.message})}finally{$.value=!1}}async function J(){ne.value=!0,N.value="";try{const{output:a}=await e.execute("ipfs pins --json",15e3),o=T(a);Array.isArray(o)?H.value=o:o&&Array.isArray(o.pins)?H.value=o.pins:H.value=[]}catch(a){N.value=i("backup.messages.loadPinsFailed",{err:a.message})}finally{ne.value=!1}}const xe=c(!1),oe=c(!1),le=c(""),K=c("");async function he(){if(le.value.trim()){oe.value=!0,K.value="";try{const{output:a}=await e.execute(`ipfs pin "${le.value.trim()}"`,3e4);K.value=a||i("backup.ipfs.pinDefaultSuccess"),await J()}catch(a){K.value=i("backup.messages.pinFailed",{err:a.message})}finally{oe.value=!1}}}async function we(a){try{await e.execute(`ipfs unpin ${a.cid}`,15e3),await J()}catch(o){N.value=i("backup.messages.unpinFailed",{err:o.message})}}function T(a){if(!a||!a.trim())return null;try{return JSON.parse(a.trim())}catch{const _=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(_)try{return JSON.parse(_[0])}catch{}return null}}async function Oe(){if(f.value.length){E.value=!0;try{const a=await Q.saveJson({schema:1,exportedAt:new Date().toISOString(),count:f.value.length,backups:f.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;ie.success(a.path?i("backup.messages.exportOk",{count:f.value.length,path:a.path}):i("backup.messages.exportOkDefault"))}catch(a){ie.error(i("backup.messages.exportFailed",{err:a.message||a}))}finally{E.value=!1}}}function Se(a){if(a==null||isNaN(a))return"-";const o=Number(a);if(o===0)return"0 B";const _=["B","KB","MB","GB","TB"],V=Math.floor(Math.log(o)/Math.log(1024));return(o/Math.pow(1024,V)).toFixed(V>0?1:0)+" "+_[V]}async function ue(){C.value=!0;try{await Promise.all([m(),j(),se(),re(),J()])}finally{C.value=!1}}pe(ue);const de={t:i,ws:e,fs:Q,exportingList:E,activeTab:g,refreshing:C,backupLoading:h,backupCreating:B,backupError:w,backups:f,lastBackupResult:O,backupColumns:F,loadBackups:m,createBackup:S,showRestoreModal:M,restoreLoading:L,restoreTarget:A,restoreResult:z,confirmRestore:W,doRestore:u,syncLoading:p,syncError:R,syncOnline:D,syncStatusText:U,syncPending:Z,lastSyncTime:q,syncOutput:P,pushLoading:X,pullLoading:Y,conflicts:I,conflictColumns:ve,loadSync:j,parseSyncStatusText:ce,syncPush:ge,syncPull:me,loadConflicts:se,ipfsLoading:$,ipfsError:ee,ipfsOnline:ae,ipfsPeerId:te,pinsLoading:ne,pinsError:N,pins:H,pinColumns:_e,loadIpfsStatus:re,loadPins:J,showPinModal:xe,pinLoading:oe,pinFilePath:le,pinResult:K,doPin:he,unpinFile:we,safeParseJson:T,exportBackupList:Oe,formatSize:Se,refreshAll:ue,ref:c,computed:G,onMounted:pe,get useI18n(){return fe},get CloudUploadOutlined(){return Me},get SyncOutlined(){return Fe},get HddOutlined(){return Te},get PlusOutlined(){return Ae},get DeleteOutlined(){return Le},get ReloadOutlined(){return Be},get DownloadOutlined(){return Pe},get message(){return ie},get useWsStore(){return ye},get useFs(){return be}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={class:"page-title"},Ee={class:"page-sub"},Ue={key:0,style:{"text-align":"center",padding:"30px"}},je={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},Ne={key:1},He={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Je={key:3,style:{"margin-top":"16px"}},Ke={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Ve={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"}},Ge={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Qe={style:{color:"var(--text-secondary)"}},We={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},Ze={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"}},$e={key:0,style:{"text-align":"center",padding:"30px"}},ea={key:0,style:{"margin-bottom":"16px"}},aa={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},ta={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"}},na={key:0,style:{"font-family":"monospace","font-size":"12px"}},oa={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},la={key:0,style:{"text-align":"center",padding:"30px"}},ia={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ca={key:0,style:{"text-align":"center",padding:"30px"}},sa={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ra={key:1},ua={key:2},da={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},pa={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},fa={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},ya={key:0,style:{"margin-top":"12px"}},ba={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"}};function ka(ke,v,i,e,Q,E){const g=b("a-button"),C=b("a-space"),h=b("a-spin"),B=b("a-empty"),w=b("a-table"),f=b("a-card"),O=b("a-modal"),F=b("a-tab-pane"),m=b("a-statistic"),S=b("a-col"),M=b("a-row"),L=b("a-tag"),A=b("a-popconfirm"),z=b("a-input"),W=b("a-tabs");return s(),d("div",null,[y("div",De,[y("div",null,[y("h2",Ie,l(e.t("backup.title")),1),y("p",Ee,l(e.t("backup.subtitle")),1)]),t(g,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshAll},{icon:n(()=>[t(e.ReloadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.refresh")),1)]),_:1},8,["loading"])]),t(W,{activeKey:e.activeTab,"onUpdate:activeKey":v[4]||(v[4]=u=>e.activeTab=u),type:"card"},{default:n(()=>[r(" Tab 1: Backup management "),t(F,{key:"backup"},{tab:n(()=>[t(e.CloudUploadOutlined),k(" "+l(e.t("backup.tabs.backup")),1)]),default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:n(()=>[t(C,null,{default:n(()=>[t(e.CloudUploadOutlined),y("span",null,l(e.t("backup.backup.cardTitle")),1)]),_:1})]),extra:n(()=>[t(C,null,{default:n(()=>[t(g,{disabled:!e.backups.length,loading:e.exportingList,onClick:e.exportBackupList},{icon:n(()=>[t(e.DownloadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.backup.exportButton")),1)]),_:1},8,["disabled","loading"]),t(g,{type:"primary",loading:e.backupCreating,onClick:e.createBackup},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[k(" "+l(e.t("backup.backup.createButton")),1)]),_:1},8,["loading"])]),_:1})]),default:n(()=>[e.backupLoading?(s(),d("div",Ue,[t(h)])):e.backups.length===0&&!e.lastBackupResult?(s(),x(B,{key:1,description:e.t("backup.backup.emptyText")},null,8,["description"])):r("v-if",!0),e.backups.length>0?(s(),x(w,{key:2,columns:e.backupColumns,"data-source":e.backups,pagination:!1,size:"small","row-key":"id"},{bodyCell:n(({column:u,record:p})=>[u.key==="id"?(s(),d("span",je,l(p.id.length>20?p.id.slice(0,20)+"...":p.id),1)):r("v-if",!0),u.key==="size"?(s(),d("span",Ne,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="createdAt"?(s(),d("span",He,l(p.createdAt||"-"),1)):r("v-if",!0),u.key==="action"?(s(),x(g,{key:3,size:"small",type:"link",onClick:R=>e.confirmRestore(p)},{default:n(()=>[k(l(e.t("backup.backupColumns.restore")),1)]),_:1},8,["onClick"])):r("v-if",!0)]),_:1},8,["columns","data-source"])):r("v-if",!0),e.lastBackupResult?(s(),d("div",Je,[y("div",Ke,l(e.t("backup.backup.lastResultLabel")),1),y("pre",Ve,l(e.lastBackupResult),1)])):r("v-if",!0),e.backupError?(s(),d("div",Ge,l(e.backupError),1)):r("v-if",!0)]),_:1}),t(O,{open:e.showRestoreModal,"onUpdate:open":v[0]||(v[0]=u=>e.showRestoreModal=u),title:e.t("backup.backup.restoreTitle"),"ok-text":e.t("backup.backup.restoreOk"),"cancel-text":e.t("common.cancel"),"confirm-loading":e.restoreLoading,onOk:e.doRestore,"ok-type":"danger"},{default:n(()=>[y("p",Qe,l(e.t("backup.backup.restoreIntro")),1),e.restoreTarget?(s(),d("div",We,[y("div",null,[y("strong",null,l(e.t("backup.backup.backupIdPrefix")),1),v[5]||(v[5]=k()),y("span",Ze,l(e.restoreTarget.id),1)]),e.restoreTarget.createdAt?(s(),d("div",qe,[y("strong",null,l(e.t("backup.backup.createdAtPrefix")),1),k(" "+l(e.restoreTarget.createdAt),1)])):r("v-if",!0)])):r("v-if",!0),e.restoreResult?(s(),d("div",Xe,[y("pre",Ye,l(e.restoreResult),1)])):r("v-if",!0)]),_:1},8,["open","title","ok-text","cancel-text","confirm-loading"])]),_:1}),r(" Tab 2: Data sync "),t(F,{key:"sync"},{tab:n(()=>[t(e.SyncOutlined),k(" "+l(e.t("backup.tabs.sync")),1)]),default:n(()=>[e.syncLoading?(s(),d("div",$e,[t(h)])):(s(),d(Ce,{key:1},[t(M,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.statusLabel"),value:e.syncStatusText,"value-style":{color:e.syncOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.pendingLabel"),value:e.syncPending,"value-style":{color:e.syncPending>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.lastSyncLabel"),value:e.lastSyncTime||e.t("backup.sync.noLastSync"),"value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(C,{style:{"margin-bottom":"16px"}},{default:n(()=>[t(g,{loading:e.pushLoading,onClick:e.syncPush,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.CloudUploadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.sync.pushButton")),1)]),_:1},8,["loading"]),t(g,{loading:e.pullLoading,onClick:e.syncPull,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.SyncOutlined)]),default:n(()=>[k(" "+l(e.t("backup.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),e.syncOutput?(s(),d("div",ea,[y("div",aa,l(e.t("backup.sync.outputLabel")),1),y("pre",ta,l(e.syncOutput),1)])):r("v-if",!0),r(" Conflicts "),e.conflicts.length>0?(s(),x(f,{key:1,title:e.t("backup.sync.conflictsTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(w,{columns:e.conflictColumns,"data-source":e.conflicts,pagination:!1,size:"small","row-key":"path"},{bodyCell:n(({column:u,record:p})=>[u.key==="path"?(s(),d("span",na,l(p.path),1)):r("v-if",!0),u.key==="type"?(s(),x(L,{key:1,color:"red"},{default:n(()=>[k(l(p.type||e.t("backup.sync.conflictDefault")),1)]),_:2},1024)):r("v-if",!0)]),_:1},8,["columns","data-source"])]),_:1},8,["title"])):r("v-if",!0)],64)),e.syncError?(s(),d("div",oa,l(e.syncError),1)):r("v-if",!0)]),_:1}),r(" Tab 3: IPFS storage "),t(F,{key:"ipfs"},{tab:n(()=>[t(e.HddOutlined),k(" "+l(e.t("backup.tabs.ipfs")),1)]),default:n(()=>[t(f,{title:e.t("backup.ipfs.statusCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:n(()=>[t(L,{color:e.ipfsOnline?"green":"default"},{default:n(()=>[k(l(e.ipfsOnline?e.t("backup.ipfs.online"):e.t("backup.ipfs.offline")),1)]),_:1},8,["color"])]),default:n(()=>[e.ipfsLoading?(s(),d("div",la,[t(h)])):(s(),x(M,{key:1,gutter:[16,16]},{default:n(()=>[t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.nodeStatusLabel"),value:e.ipfsOnline?e.t("backup.ipfs.connected"):e.t("backup.ipfs.disconnected"),"value-style":{color:e.ipfsOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.pinnedLabel"),value:e.pins.length,"value-style":{fontSize:"16px"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.peerIdLabel"),value:e.ipfsPeerId||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1})),e.ipfsError?(s(),d("div",ia,l(e.ipfsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(f,{title:e.t("backup.ipfs.pinListTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[t(g,{size:"small",onClick:v[1]||(v[1]=u=>e.showPinModal=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[k(" "+l(e.t("backup.ipfs.pinFileButton")),1)]),_:1})]),default:n(()=>[e.pinsLoading?(s(),d("div",ca,[t(h)])):e.pins.length===0?(s(),x(B,{key:1,description:e.t("backup.ipfs.pinEmptyText")},null,8,["description"])):(s(),x(w,{key:2,columns:e.pinColumns,"data-source":e.pins,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:n(({column:u,record:p})=>[u.key==="cid"?(s(),d("span",sa,l(p.cid.length>24?p.cid.slice(0,24)+"...":p.cid),1)):r("v-if",!0),u.key==="name"?(s(),d("span",ra,l(p.name||"-"),1)):r("v-if",!0),u.key==="size"?(s(),d("span",ua,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="pinnedAt"?(s(),d("span",da,l(p.pinnedAt||"-"),1)):r("v-if",!0),u.key==="action"?(s(),x(A,{key:4,title:e.t("backup.ipfs.unpinConfirm"),"ok-text":e.t("backup.ipfs.unpinOk"),"cancel-text":e.t("common.cancel"),onConfirm:R=>e.unpinFile(p)},{default:n(()=>[t(g,{size:"small",type:"link",danger:""},{default:n(()=>[t(e.DeleteOutlined),k(" "+l(e.t("backup.ipfs.unpinAction")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):r("v-if",!0)]),_:1},8,["columns","data-source"])),e.pinsError?(s(),d("div",pa,l(e.pinsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(O,{open:e.showPinModal,"onUpdate:open":v[3]||(v[3]=u=>e.showPinModal=u),title:e.t("backup.ipfs.pinModalTitle"),"confirm-loading":e.pinLoading,onOk:e.doPin,"ok-text":e.t("backup.ipfs.pinModalOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[y("div",fa,l(e.t("backup.ipfs.pinModalIntro")),1),t(z,{value:e.pinFilePath,"onUpdate:value":v[2]||(v[2]=u=>e.pinFilePath=u),placeholder:e.t("backup.ipfs.pinModalPlaceholder"),onPressEnter:e.doPin},null,8,["value","placeholder"]),e.pinResult?(s(),d("div",ya,[y("pre",ba,l(e.pinResult),1)])):r("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}const ha=ze(Re,[["render",ka],["__scopeId","data-v-077902a5"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/views/Backup.vue"]]);export{ha as default};
|
|
1
|
+
import{I as b,J as d,U as y,R as l,c as t,K as n,o as pe,b as Q,r as s,P as c,Q as k,V as r,S as x,F as Ce}from"./vendor-BvqAck49.js";import{_ as ze,b as fe,u as ye,d as ie}from"./index-CzeRvhia.js";import{u as be}from"./useFs-Bk1SrPFp.js";import{az as Pe,R as Be,aQ as Le,as as Te,aS as Ae,S as Fe,z as Me}from"./icons-DP3uiYxy.js";import"./useShellMode-CgR0wCYM.js";const Re={__name:"Backup",setup(ke,{expose:v}){v();const{t:i}=fe(),e=ye(),W=be(),E=s(!1),g=s("backup"),C=s(!1),h=s(!1),B=s(!1),w=s(""),f=s([]),O=s(""),F=Q(()=>[{title:i("backup.backupColumns.id"),key:"id"},{title:i("backup.backupColumns.size"),key:"size",width:120},{title:i("backup.backupColumns.createdAt"),key:"createdAt"},{title:i("backup.backupColumns.action"),key:"action",width:100}]);async function m(){h.value=!0,w.value="";try{const{output:a}=await e.execute("backup list --json",15e3),o=A(a);Array.isArray(o)?f.value=o:o&&Array.isArray(o.backups)?f.value=o.backups:(f.value=[],a&&a.trim()&&(O.value=a))}catch(a){w.value=i("backup.messages.loadBackupsFailed",{err:a.message})}finally{h.value=!1}}async function S(){B.value=!0,O.value="",w.value="";try{const{output:a}=await e.execute("backup create --json",3e4);O.value=a||i("backup.backup.createDefaultMessage"),await m()}catch(a){O.value=i("backup.messages.createBackupFailed",{err:a.message})}finally{B.value=!1}}const M=s(!1),L=s(!1),T=s(null),z=s("");function G(a){T.value=a,z.value="",M.value=!0}async function u(){if(T.value){L.value=!0,z.value="";try{const{output:a}=await e.execute(`backup restore ${T.value.id}`,6e4);z.value=a||i("backup.backup.restoreDefaultMessage")}catch(a){z.value=i("backup.messages.restoreFailed",{err:a.message})}finally{L.value=!1}}}const p=s(!1),R=s(""),D=s(!1),N=s(""),q=s(0),X=s(""),P=s(""),Y=s(!1),Z=s(!1),I=s([]),ve=Q(()=>[{title:i("backup.conflictColumns.path"),key:"path"},{title:i("backup.conflictColumns.type"),key:"type",width:120}]);async function U(){p.value=!0,R.value="";try{const{output:a}=await e.execute("sync status --json",15e3),o=A(a);o?(D.value=o.online||o.synced||o.status==="online"||!1,N.value=D.value?i("backup.sync.synced"):i("backup.sync.notSynced"),q.value=o.pending??o.pendingChanges??0,X.value=o.lastSync||o.lastSyncTime||""):se(a)}catch(a){R.value=i("backup.messages.loadSyncFailed",{err:a.message})}finally{p.value=!1}}function se(a){if(!a){N.value=i("backup.sync.unknown");return}D.value=/synced|online|up.to.date/i.test(a),N.value=D.value?i("backup.sync.synced"):i("backup.sync.notSynced");const o=a.match(/pending[:\s]+(\d+)/i);q.value=o?parseInt(o[1]):0;const _=a.match(/last[:\s]+(.+)/i);_&&(X.value=_[1].trim())}async function ge(){Y.value=!0,P.value="";try{const{output:a}=await e.execute("sync push",3e4);P.value=a||i("backup.sync.pushDefaultMessage"),await U()}catch(a){P.value=i("backup.messages.pushFailed",{err:a.message})}finally{Y.value=!1}}async function me(){Z.value=!0,P.value="";try{const{output:a}=await e.execute("sync pull",3e4);P.value=a||i("backup.sync.pullDefaultMessage"),await U()}catch(a){P.value=i("backup.messages.pullFailed",{err:a.message})}finally{Z.value=!1}}async function ce(){try{const{output:a}=await e.execute("sync conflicts --json",15e3),o=A(a);Array.isArray(o)?I.value=o:o&&Array.isArray(o.conflicts)?I.value=o.conflicts:I.value=[]}catch{I.value=[]}}const $=s(!1),ee=s(""),ae=s(!1),te=s(""),ne=s(!1),j=s(""),H=s([]),_e=Q(()=>[{title:i("backup.pinColumns.cid"),key:"cid"},{title:i("backup.pinColumns.name"),key:"name"},{title:i("backup.pinColumns.size"),key:"size",width:120},{title:i("backup.pinColumns.pinnedAt"),key:"pinnedAt"},{title:i("backup.pinColumns.action"),key:"action",width:120}]);async function re(){$.value=!0,ee.value="";try{const{output:a}=await e.execute("ipfs status --json",15e3),o=A(a);if(o)ae.value=o.online||o.status==="online"||o.connected||!1,te.value=o.peerId||o.id||"";else{ae.value=a?/online|connected|running/i.test(a):!1;const _=a?a.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=_?_[1]:""}}catch(a){ee.value=i("backup.messages.loadIpfsFailed",{err:a.message})}finally{$.value=!1}}async function J(){ne.value=!0,j.value="";try{const{output:a}=await e.execute("ipfs pins --json",15e3),o=A(a);Array.isArray(o)?H.value=o:o&&Array.isArray(o.pins)?H.value=o.pins:H.value=[]}catch(a){j.value=i("backup.messages.loadPinsFailed",{err:a.message})}finally{ne.value=!1}}const xe=s(!1),oe=s(!1),le=s(""),K=s("");async function he(){if(le.value.trim()){oe.value=!0,K.value="";try{const{output:a}=await e.execute(`ipfs pin "${le.value.trim()}"`,3e4);K.value=a||i("backup.ipfs.pinDefaultSuccess"),await J()}catch(a){K.value=i("backup.messages.pinFailed",{err:a.message})}finally{oe.value=!1}}}async function we(a){try{await e.execute(`ipfs unpin ${a.cid}`,15e3),await J()}catch(o){j.value=i("backup.messages.unpinFailed",{err:o.message})}}function A(a){if(!a||!a.trim())return null;try{return JSON.parse(a.trim())}catch{const _=a.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(_)try{return JSON.parse(_[0])}catch{}return null}}async function Oe(){if(f.value.length){E.value=!0;try{const a=await W.saveJson({schema:1,exportedAt:new Date().toISOString(),count:f.value.length,backups:f.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;ie.success(a.path?i("backup.messages.exportOk",{count:f.value.length,path:a.path}):i("backup.messages.exportOkDefault"))}catch(a){ie.error(i("backup.messages.exportFailed",{err:a.message||a}))}finally{E.value=!1}}}function Se(a){if(a==null||isNaN(a))return"-";const o=Number(a);if(o===0)return"0 B";const _=["B","KB","MB","GB","TB"],V=Math.floor(Math.log(o)/Math.log(1024));return(o/Math.pow(1024,V)).toFixed(V>0?1:0)+" "+_[V]}async function ue(){C.value=!0;try{await Promise.all([m(),U(),ce(),re(),J()])}finally{C.value=!1}}pe(ue);const de={t:i,ws:e,fs:W,exportingList:E,activeTab:g,refreshing:C,backupLoading:h,backupCreating:B,backupError:w,backups:f,lastBackupResult:O,backupColumns:F,loadBackups:m,createBackup:S,showRestoreModal:M,restoreLoading:L,restoreTarget:T,restoreResult:z,confirmRestore:G,doRestore:u,syncLoading:p,syncError:R,syncOnline:D,syncStatusText:N,syncPending:q,lastSyncTime:X,syncOutput:P,pushLoading:Y,pullLoading:Z,conflicts:I,conflictColumns:ve,loadSync:U,parseSyncStatusText:se,syncPush:ge,syncPull:me,loadConflicts:ce,ipfsLoading:$,ipfsError:ee,ipfsOnline:ae,ipfsPeerId:te,pinsLoading:ne,pinsError:j,pins:H,pinColumns:_e,loadIpfsStatus:re,loadPins:J,showPinModal:xe,pinLoading:oe,pinFilePath:le,pinResult:K,doPin:he,unpinFile:we,safeParseJson:A,exportBackupList:Oe,formatSize:Se,refreshAll:ue,ref:s,computed:Q,onMounted:pe,get useI18n(){return fe},get CloudUploadOutlined(){return Me},get SyncOutlined(){return Fe},get HddOutlined(){return Ae},get PlusOutlined(){return Te},get DeleteOutlined(){return Le},get ReloadOutlined(){return Be},get DownloadOutlined(){return Pe},get message(){return ie},get useWsStore(){return ye},get useFs(){return be}};return Object.defineProperty(de,"__isScriptSetup",{enumerable:!1,value:!0}),de}},De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ie={class:"page-title"},Ee={class:"page-sub"},Ne={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},He={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Je={key:3,style:{"margin-top":"16px"}},Ke={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Ve={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"}},Qe={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},We={style:{color:"var(--text-secondary)"}},Ge={key:0,style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px","margin-top":"8px"}},qe={style:{"font-family":"monospace"}},Xe={key:0},Ye={key:1,style:{"margin-top":"12px"}},Ze={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","white-space":"pre-wrap"}},$e={key:0,style:{"text-align":"center",padding:"30px"}},ea={key:0,style:{"margin-bottom":"16px"}},aa={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},ta={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"}},na={key:0,style:{"font-family":"monospace","font-size":"12px"}},oa={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},la={key:0,style:{"text-align":"center",padding:"30px"}},ia={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},sa={key:0,style:{"text-align":"center",padding:"30px"}},ca={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ra={key:1},ua={key:2},da={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},pa={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},fa={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},ya={key:0,style:{"margin-top":"12px"}},ba={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"}};function ka(ke,v,i,e,W,E){const g=b("a-button"),C=b("a-space"),h=b("a-spin"),B=b("a-empty"),w=b("a-table"),f=b("a-card"),O=b("a-modal"),F=b("a-tab-pane"),m=b("a-statistic"),S=b("a-col"),M=b("a-row"),L=b("a-tag"),T=b("a-popconfirm"),z=b("a-input"),G=b("a-tabs");return c(),d("div",null,[y("div",De,[y("div",null,[y("h2",Ie,l(e.t("backup.title")),1),y("p",Ee,l(e.t("backup.subtitle")),1)]),t(g,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshAll},{icon:n(()=>[t(e.ReloadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.refresh")),1)]),_:1},8,["loading"])]),t(G,{activeKey:e.activeTab,"onUpdate:activeKey":v[4]||(v[4]=u=>e.activeTab=u),type:"card"},{default:n(()=>[r(" Tab 1: Backup management "),t(F,{key:"backup"},{tab:n(()=>[t(e.CloudUploadOutlined),k(" "+l(e.t("backup.tabs.backup")),1)]),default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:n(()=>[t(C,null,{default:n(()=>[t(e.CloudUploadOutlined),y("span",null,l(e.t("backup.backup.cardTitle")),1)]),_:1})]),extra:n(()=>[t(C,null,{default:n(()=>[t(g,{disabled:!e.backups.length,loading:e.exportingList,onClick:e.exportBackupList},{icon:n(()=>[t(e.DownloadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.backup.exportButton")),1)]),_:1},8,["disabled","loading"]),t(g,{type:"primary",loading:e.backupCreating,onClick:e.createBackup},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[k(" "+l(e.t("backup.backup.createButton")),1)]),_:1},8,["loading"])]),_:1})]),default:n(()=>[e.backupLoading?(c(),d("div",Ne,[t(h)])):e.backups.length===0&&!e.lastBackupResult?(c(),x(B,{key:1,description:e.t("backup.backup.emptyText")},null,8,["description"])):r("v-if",!0),e.backups.length>0?(c(),x(w,{key:2,columns:e.backupColumns,"data-source":e.backups,pagination:!1,size:"small","row-key":"id"},{bodyCell:n(({column:u,record:p})=>[u.key==="id"?(c(),d("span",Ue,l(p.id.length>20?p.id.slice(0,20)+"...":p.id),1)):r("v-if",!0),u.key==="size"?(c(),d("span",je,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="createdAt"?(c(),d("span",He,l(p.createdAt||"-"),1)):r("v-if",!0),u.key==="action"?(c(),x(g,{key:3,size:"small",type:"link",onClick:R=>e.confirmRestore(p)},{default:n(()=>[k(l(e.t("backup.backupColumns.restore")),1)]),_:1},8,["onClick"])):r("v-if",!0)]),_:1},8,["columns","data-source"])):r("v-if",!0),e.lastBackupResult?(c(),d("div",Je,[y("div",Ke,l(e.t("backup.backup.lastResultLabel")),1),y("pre",Ve,l(e.lastBackupResult),1)])):r("v-if",!0),e.backupError?(c(),d("div",Qe,l(e.backupError),1)):r("v-if",!0)]),_:1}),t(O,{open:e.showRestoreModal,"onUpdate:open":v[0]||(v[0]=u=>e.showRestoreModal=u),title:e.t("backup.backup.restoreTitle"),"ok-text":e.t("backup.backup.restoreOk"),"cancel-text":e.t("common.cancel"),"confirm-loading":e.restoreLoading,onOk:e.doRestore,"ok-type":"danger"},{default:n(()=>[y("p",We,l(e.t("backup.backup.restoreIntro")),1),e.restoreTarget?(c(),d("div",Ge,[y("div",null,[y("strong",null,l(e.t("backup.backup.backupIdPrefix")),1),v[5]||(v[5]=k()),y("span",qe,l(e.restoreTarget.id),1)]),e.restoreTarget.createdAt?(c(),d("div",Xe,[y("strong",null,l(e.t("backup.backup.createdAtPrefix")),1),k(" "+l(e.restoreTarget.createdAt),1)])):r("v-if",!0)])):r("v-if",!0),e.restoreResult?(c(),d("div",Ye,[y("pre",Ze,l(e.restoreResult),1)])):r("v-if",!0)]),_:1},8,["open","title","ok-text","cancel-text","confirm-loading"])]),_:1}),r(" Tab 2: Data sync "),t(F,{key:"sync"},{tab:n(()=>[t(e.SyncOutlined),k(" "+l(e.t("backup.tabs.sync")),1)]),default:n(()=>[e.syncLoading?(c(),d("div",$e,[t(h)])):(c(),d(Ce,{key:1},[t(M,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.statusLabel"),value:e.syncStatusText,"value-style":{color:e.syncOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.pendingLabel"),value:e.syncPending,"value-style":{color:e.syncPending>0?"#faad14":"#52c41a",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.sync.lastSyncLabel"),value:e.lastSyncTime||e.t("backup.sync.noLastSync"),"value-style":{color:"var(--text-secondary)",fontSize:"16px"}},{prefix:n(()=>[t(e.SyncOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(C,{style:{"margin-bottom":"16px"}},{default:n(()=>[t(g,{loading:e.pushLoading,onClick:e.syncPush,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.CloudUploadOutlined)]),default:n(()=>[k(" "+l(e.t("backup.sync.pushButton")),1)]),_:1},8,["loading"]),t(g,{loading:e.pullLoading,onClick:e.syncPull,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.SyncOutlined)]),default:n(()=>[k(" "+l(e.t("backup.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),e.syncOutput?(c(),d("div",ea,[y("div",aa,l(e.t("backup.sync.outputLabel")),1),y("pre",ta,l(e.syncOutput),1)])):r("v-if",!0),r(" Conflicts "),e.conflicts.length>0?(c(),x(f,{key:1,title:e.t("backup.sync.conflictsTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(w,{columns:e.conflictColumns,"data-source":e.conflicts,pagination:!1,size:"small","row-key":"path"},{bodyCell:n(({column:u,record:p})=>[u.key==="path"?(c(),d("span",na,l(p.path),1)):r("v-if",!0),u.key==="type"?(c(),x(L,{key:1,color:"red"},{default:n(()=>[k(l(p.type||e.t("backup.sync.conflictDefault")),1)]),_:2},1024)):r("v-if",!0)]),_:1},8,["columns","data-source"])]),_:1},8,["title"])):r("v-if",!0)],64)),e.syncError?(c(),d("div",oa,l(e.syncError),1)):r("v-if",!0)]),_:1}),r(" Tab 3: IPFS storage "),t(F,{key:"ipfs"},{tab:n(()=>[t(e.HddOutlined),k(" "+l(e.t("backup.tabs.ipfs")),1)]),default:n(()=>[t(f,{title:e.t("backup.ipfs.statusCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:n(()=>[t(L,{color:e.ipfsOnline?"green":"default"},{default:n(()=>[k(l(e.ipfsOnline?e.t("backup.ipfs.online"):e.t("backup.ipfs.offline")),1)]),_:1},8,["color"])]),default:n(()=>[e.ipfsLoading?(c(),d("div",la,[t(h)])):(c(),x(M,{key:1,gutter:[16,16]},{default:n(()=>[t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.nodeStatusLabel"),value:e.ipfsOnline?e.t("backup.ipfs.connected"):e.t("backup.ipfs.disconnected"),"value-style":{color:e.ipfsOnline?"#52c41a":"#888",fontSize:"16px"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.pinnedLabel"),value:e.pins.length,"value-style":{fontSize:"16px"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(S,{xs:24,sm:8},{default:n(()=>[t(f,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(m,{title:e.t("backup.ipfs.peerIdLabel"),value:e.ipfsPeerId||"-","value-style":{color:"var(--text-muted)",fontSize:"12px",fontFamily:"monospace"}},{prefix:n(()=>[t(e.HddOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1})),e.ipfsError?(c(),d("div",ia,l(e.ipfsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(f,{title:e.t("backup.ipfs.pinListTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[t(g,{size:"small",onClick:v[1]||(v[1]=u=>e.showPinModal=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[k(" "+l(e.t("backup.ipfs.pinFileButton")),1)]),_:1})]),default:n(()=>[e.pinsLoading?(c(),d("div",sa,[t(h)])):e.pins.length===0?(c(),x(B,{key:1,description:e.t("backup.ipfs.pinEmptyText")},null,8,["description"])):(c(),x(w,{key:2,columns:e.pinColumns,"data-source":e.pins,pagination:{pageSize:10},size:"small","row-key":"cid"},{bodyCell:n(({column:u,record:p})=>[u.key==="cid"?(c(),d("span",ca,l(p.cid.length>24?p.cid.slice(0,24)+"...":p.cid),1)):r("v-if",!0),u.key==="name"?(c(),d("span",ra,l(p.name||"-"),1)):r("v-if",!0),u.key==="size"?(c(),d("span",ua,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="pinnedAt"?(c(),d("span",da,l(p.pinnedAt||"-"),1)):r("v-if",!0),u.key==="action"?(c(),x(T,{key:4,title:e.t("backup.ipfs.unpinConfirm"),"ok-text":e.t("backup.ipfs.unpinOk"),"cancel-text":e.t("common.cancel"),onConfirm:R=>e.unpinFile(p)},{default:n(()=>[t(g,{size:"small",type:"link",danger:""},{default:n(()=>[t(e.DeleteOutlined),k(" "+l(e.t("backup.ipfs.unpinAction")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):r("v-if",!0)]),_:1},8,["columns","data-source"])),e.pinsError?(c(),d("div",pa,l(e.pinsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(O,{open:e.showPinModal,"onUpdate:open":v[3]||(v[3]=u=>e.showPinModal=u),title:e.t("backup.ipfs.pinModalTitle"),"confirm-loading":e.pinLoading,onOk:e.doPin,"ok-text":e.t("backup.ipfs.pinModalOk"),"cancel-text":e.t("common.cancel")},{default:n(()=>[y("div",fa,l(e.t("backup.ipfs.pinModalIntro")),1),t(z,{value:e.pinFilePath,"onUpdate:value":v[2]||(v[2]=u=>e.pinFilePath=u),placeholder:e.t("backup.ipfs.pinModalPlaceholder"),onPressEnter:e.doPin},null,8,["value","placeholder"]),e.pinResult?(c(),d("div",ya,[y("pre",ba,l(e.pinResult),1)])):r("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}const ha=ze(Re,[["render",ka],["__scopeId","data-v-077902a5"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/views/Backup.vue"]]);export{ha as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as s,f}from"./index-
|
|
1
|
+
import{P as s,f}from"./index-CzeRvhia.js";import{d as w,c as O,s as h,w as k,b,r as S}from"./vendor-BvqAck49.js";var z=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const K=w({compatConfig:{MODE:3},props:{disabled:s.looseBool,type:s.string,value:s.any,tag:{type:String,default:"input"},size:s.string,onChange:Function,onInput:Function,onBlur:Function,onFocus:Function,onKeydown:Function,onCompositionstart:Function,onCompositionend:Function,onKeyup:Function,onPaste:Function,onMousedown:Function},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{expose:o}=u;const t=h(null);return o({focus:()=>{t.value&&t.value.focus()},blur:()=>{t.value&&t.value.blur()},input:t,setSelectionRange:(l,c,d)=>{var v;(v=t.value)===null||v===void 0||v.setSelectionRange(l,c,d)},select:()=>{var l;(l=t.value)===null||l===void 0||l.select()},getSelectionStart:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionStart},getSelectionEnd:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.selectionEnd},getScrollTop:()=>{var l;return(l=t.value)===null||l===void 0?void 0:l.scrollTop}}),()=>{const{tag:l,value:c}=n,d=z(n,["tag","value"]);return O(l,f(f({},d),{},{ref:t,value:c}),null)}}});function D(n){const u=n.getBoundingClientRect(),o=document.documentElement;return{left:u.left+(window.scrollX||o.scrollLeft)-(o.clientLeft||document.body.clientLeft||0),top:u.top+(window.scrollY||o.scrollTop)-(o.clientTop||document.body.clientTop||0)}}function N(n){return Array.prototype.slice.apply(n).map(o=>`${o}: ${n.getPropertyValue(o)};`).join("")}function M(n){return Object.keys(n).reduce((u,o)=>{const t=n[o];return typeof t>"u"||t===null||(u+=`${o}: ${n[o]};`),u},"")}var $=function(n,u){var o={};for(var t in n)Object.prototype.hasOwnProperty.call(n,t)&&u.indexOf(t)<0&&(o[t]=n[t]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,t=Object.getOwnPropertySymbols(n);r<t.length;r++)u.indexOf(t[r])<0&&Object.prototype.propertyIsEnumerable.call(n,t[r])&&(o[t[r]]=n[t[r]]);return o};const A=w({compatConfig:{MODE:3},inheritAttrs:!1,props:{disabled:s.looseBool,type:s.string,value:s.any,lazy:s.bool.def(!0),tag:{type:String,default:"input"},size:s.string,style:s.oneOfType([String,Object]),class:s.string},emits:["change","input","blur","keydown","focus","compositionstart","compositionend","keyup","paste","mousedown"],setup(n,u){let{emit:o,attrs:t,expose:r}=u;const a=h(null),y=S(),i=S(!1);k([()=>n.value,i],()=>{i.value||(y.value=n.value)},{immediate:!0});const l=e=>{o("change",e)},c=e=>{i.value=!0,e.target.composing=!0,o("compositionstart",e)},d=e=>{i.value=!1,e.target.composing=!1,o("compositionend",e);const p=document.createEvent("HTMLEvents");p.initEvent("input",!0,!0),e.target.dispatchEvent(p),l(e)},v=e=>{if(i.value&&n.lazy){y.value=e.target.value;return}o("input",e)},_=e=>{o("blur",e)},C=e=>{o("focus",e)},E=()=>{a.value&&a.value.focus()},P=()=>{a.value&&a.value.blur()},j=e=>{o("keydown",e)},F=e=>{o("keyup",e)},T=(e,p,g)=>{var m;(m=a.value)===null||m===void 0||m.setSelectionRange(e,p,g)},B=()=>{var e;(e=a.value)===null||e===void 0||e.select()};r({focus:E,blur:P,input:b(()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.input}),setSelectionRange:T,select:B,getSelectionStart:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionStart()},getSelectionEnd:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getSelectionEnd()},getScrollTop:()=>{var e;return(e=a.value)===null||e===void 0?void 0:e.getScrollTop()}});const R=e=>{o("mousedown",e)},x=e=>{o("paste",e)},I=b(()=>n.style&&typeof n.style!="string"?M(n.style):n.style);return()=>{const{style:e,lazy:p}=n,g=$(n,["style","lazy"]);return O(K,f(f(f({},g),t),{},{style:I.value,onInput:v,onChange:l,onBlur:_,onFocus:C,ref:a,value:y.value,onCompositionstart:c,onCompositionend:d,onKeyup:F,onKeydown:j,onPaste:x,onMousedown:R}),null)}}});export{A as B,D as g,N as s};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{P as c,J as m,U as u,S as M,R as h,V as _,_ as
|
|
1
|
+
import{P as c,J as m,U as u,S as M,R as h,V as _,_ as H,b as y,$ as te,F as D,Z as Q,L as le,w as V,n as L,o as X,x as re,r as A,I as R,c as v,K as I,Q as E,a1 as Te,a2 as Ae,M as ce,N as de,a as ue}from"./vendor-BvqAck49.js";import{_ as K,b as he}from"./index-CzeRvhia.js";import{u as fe,M as Pe}from"./chat-CDJZtBM7.js";import{ag as Re,L as ve,ah as Fe,a0 as Le,a as je,b as De,ai as Ne,aj as qe,o as Ve,c as We,f as Be,a4 as Qe,ak as Ue,a6 as He,a7 as Ke,al as $e,af as Ge,ab as Je}from"./icons-DP3uiYxy.js";import{r as me}from"./markdown-Yo_c6Krv.js";import"./markdown-CsiA8-E5.js";const Xe={__name:"ToolInvocationCard",props:{item:{type:Object,required:!0},expandable:{type:Boolean,default:!1},expanded:{type:Boolean,default:!1}},emits:["toggle"],setup(a,{expose:d,emit:t}){d();const e=a,n=t;function i(){e.expandable&&n("toggle")}const s={props:e,emit:n,onToggle:i,get CheckCircleFilled(){return je},get ClockCircleOutlined(){return Le},get DownOutlined(){return Fe},get LoadingOutlined(){return ve},get RightOutlined(){return Re}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Ye=["data-testid"],Ze={class:"cb-action__icon"},et={class:"cb-action__label"},tt={key:0,class:"cb-action__detail"},nt={key:1,class:"cb-action__caret"};function st(a,d,t,e,n,i){return c(),m("div",{class:H(["cb-action",[`cb-action--${t.item.status}`,{"cb-action--expandable":t.expandable,"cb-action--open":t.expanded}]]),"data-testid":`tool-card-${t.item.id}`,onClick:e.onToggle},[u("span",Ze,[t.item.status==="done"?(c(),M(e.CheckCircleFilled,{key:0})):t.item.status==="running"?(c(),M(e.LoadingOutlined,{key:1})):(c(),M(e.ClockCircleOutlined,{key:2}))]),u("span",et,h(t.item.label),1),t.item.detail?(c(),m("span",tt,h(t.item.detail),1)):_("v-if",!0),t.expandable?(c(),m("span",nt,[t.expanded?(c(),M(e.DownOutlined,{key:0})):(c(),M(e.RightOutlined,{key:1}))])):_("v-if",!0)],10,Ye)}const it=K(Xe,[["render",st],["__scopeId","data-v-318f1edb"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/components/ToolInvocationCard.vue"]]),ot={__name:"MarkdownRenderer",props:{content:{type:String,default:""}},setup(a,{expose:d}){d();const t=a,e=y(()=>me(t.content||"")),n={props:t,rendered:e,computed:y,get renderMarkdown(){return me}};return Object.defineProperty(n,"__isScriptSetup",{enumerable:!1,value:!0}),n}},at=["innerHTML"];function lt(a,d,t,e,n,i){return c(),m("div",{class:"markdown-content",innerHTML:e.rendered},null,8,at)}const rt=K(ot,[["render",lt],["__scopeId","data-v-0b0b9f63"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/components/MarkdownRenderer.vue"]]);function B(a,d,t){let e=t.initialDeps??[],n,i=!0;function s(){var o,p,f;let S;t.key&&((o=t.debug)!=null&&o.call(t))&&(S=Date.now());const x=a();if(!(x.length!==e.length||x.some((b,l)=>e[l]!==b)))return n;e=x;let g;if(t.key&&((p=t.debug)!=null&&p.call(t))&&(g=Date.now()),n=d(...x),t.key&&((f=t.debug)!=null&&f.call(t))){const b=Math.round((Date.now()-S)*100)/100,l=Math.round((Date.now()-g)*100)/100,C=l/16,k=(z,P)=>{for(z=String(z);z.length<P;)z=" "+z;return z};console.info(`%c⏱ ${k(l,5)} /${k(b,5)} ms`,`
|
|
2
2
|
font-size: .6rem;
|
|
3
3
|
font-weight: bold;
|
|
4
|
-
color: hsl(${Math.max(0,Math.min(120-120*C,120))}deg 100% 31%);`,t?.key)}return t?.onChange&&!(i&&t.skipInitialOnChange)&&t.onChange(n),i=!1,n}return s.updateDeps=o=>{e=o},s}function ge(a,d){if(a===void 0)throw new Error("Unexpected undefined");return a}const ct=(a,d)=>Math.abs(a-d)<1.01,dt=a=>a,ut=a=>{const d=Math.max(a.startIndex-a.overscan,0),t=Math.min(a.endIndex+a.overscan,a.count-1),e=[];for(let n=d;n<=t;n++)e.push(n);return e},ht=(a,d,t)=>{if(d?.borderBoxSize){const e=d.borderBoxSize[0];if(e)return Math.round(e[t.options.horizontal?"inlineSize":"blockSize"])}return a[t.options.horizontal?"offsetWidth":"offsetHeight"]};class pe{constructor(d){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var t,e,n;return((n=(e=(t=this.targetWindow)==null?void 0:t.performance)==null?void 0:e.now)==null?void 0:n.call(e))??Date.now()},this.observer=(()=>{let t=null;const e=()=>t||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:t=new this.targetWindow.ResizeObserver(n=>{n.forEach(i=>{const s=()=>{const o=i.target,p=this.indexFromElement(o);if(!o.isConnected){this.observer.unobserve(o);return}this.shouldMeasureDuringScroll(p)&&this.resizeItem(p,this.options.measureElement(o,i,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(s):s()})}));return{disconnect:()=>{var n;(n=e())==null||n.disconnect(),t=null},observe:n=>{var i;return(i=e())==null?void 0:i.observe(n,{box:"border-box"})},unobserve:n=>{var i;return(i=e())==null?void 0:i.unobserve(n)}}})(),this.range=null,this.setOptions=t=>{Object.entries(t).forEach(([e,n])=>{typeof n>"u"&&delete t[e]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:dt,rangeExtractor:ut,onChange:()=>{},measureElement:ht,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",...t}},this.notify=t=>{var e,n;(n=(e=this.options).onChange)==null||n.call(e,this,t)},this.maybeNotify=B(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),t=>{this.notify(t)},{key:"maybeNotify",debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(t=>t()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var t;const e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}this.scrollElement=e,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((t=this.scrollElement)==null?void 0:t.window)??null,this.elementsCache.forEach(n=>{this.observer.observe(n)}),this.unsubs.push(this.options.observeElementRect(this,n=>{this.scrollRect=n,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(n,i)=>{this.scrollAdjustments=0,this.scrollDirection=i?this.getScrollOffset()<n?"forward":"backward":null,this.scrollOffset=n,this.isScrolling=i,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(t,e)=>{const n=new Map,i=new Map;for(let s=e-1;s>=0;s--){const o=t[s];if(n.has(o.lane))continue;const p=i.get(o.lane);if(p==null||o.end>p.end?i.set(o.lane,o):o.end<p.end&&n.set(o.lane,!0),n.size===this.options.lanes)break}return i.size===this.options.lanes?Array.from(i.values()).sort((s,o)=>s.end===o.end?s.index-o.index:s.end-o.end)[0]:void 0},this.getMeasurementOptions=B(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(t,e,n,i,s,o,p)=>(this.prevLanes!==void 0&&this.prevLanes!==o&&(this.lanesChangedFlag=!0),this.prevLanes=o,this.pendingMeasuredCacheIndexes=[],{count:t,paddingStart:e,scrollMargin:n,getItemKey:i,enabled:s,lanes:o,laneAssignmentMode:p}),{key:!1}),this.getMeasurements=B(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:t,paddingStart:e,scrollMargin:n,getItemKey:i,enabled:s,lanes:o,laneAssignmentMode:p},f)=>{if(!s)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>t)for(const g of this.laneAssignments.keys())g>=t&&this.laneAssignments.delete(g);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(g=>{this.itemSizeCache.set(g.key,g.size)}));const S=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===t&&(this.lanesSettling=!1);const x=this.measurementsCache.slice(0,S),O=new Array(o).fill(void 0);for(let g=0;g<S;g++){const b=x[g];b&&(O[b.lane]=g)}for(let g=S;g<t;g++){const b=i(g),l=this.laneAssignments.get(g);let C,k;const E=p==="estimate"||f.has(b);if(l!==void 0&&this.options.lanes>1){C=l;const T=O[C],q=T!==void 0?x[T]:void 0;k=q?q.end+this.options.gap:e+n}else{const T=this.options.lanes===1?x[g-1]:this.getFurthestMeasurement(x,g);k=T?T.end+this.options.gap:e+n,C=T?T.lane:g%this.options.lanes,this.options.lanes>1&&E&&this.laneAssignments.set(g,C)}const P=f.get(b),W=typeof P=="number"?P:this.options.estimateSize(g),Q=k+W;x[g]={index:g,start:k,size:W,end:Q,key:b,lane:C},O[C]=g}return this.measurementsCache=x,x},{key:"getMeasurements",debug:()=>this.options.debug}),this.calculateRange=B(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(t,e,n,i)=>this.range=t.length>0&&e>0?ft({measurements:t,outerSize:e,scrollOffset:n,lanes:i}):null,{key:"calculateRange",debug:()=>this.options.debug}),this.getVirtualIndexes=B(()=>{let t=null,e=null;const n=this.calculateRange();return n&&(t=n.startIndex,e=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,t,e]),[this.options.rangeExtractor,this.options.overscan,this.options.count,t,e]},(t,e,n,i,s)=>i===null||s===null?[]:t({startIndex:i,endIndex:s,overscan:e,count:n}),{key:"getVirtualIndexes",debug:()=>this.options.debug}),this.indexFromElement=t=>{const e=this.options.indexAttribute,n=t.getAttribute(e);return n?parseInt(n,10):(console.warn(`Missing attribute name '${e}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=t=>{var e;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const n=this.scrollState.index??((e=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:e.index);if(n!==void 0&&this.range){const i=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),s=Math.max(0,n-i),o=Math.min(this.options.count-1,n+i);return t>=s&&t<=o}return!0},this.measureElement=t=>{if(!t){this.elementsCache.forEach((s,o)=>{s.isConnected||(this.observer.unobserve(s),this.elementsCache.delete(o))});return}const e=this.indexFromElement(t),n=this.options.getItemKey(e),i=this.elementsCache.get(n);i!==t&&(i&&this.observer.unobserve(i),this.observer.observe(t),this.elementsCache.set(n,t)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(e)&&this.resizeItem(e,this.options.measureElement(t,void 0,this))},this.resizeItem=(t,e)=>{var n;const i=this.measurementsCache[t];if(!i)return;const s=this.itemSizeCache.get(i.key)??i.size,o=e-s;o!==0&&(((n=this.scrollState)==null?void 0:n.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,o,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&(this.options.debug&&console.info("correction",o),this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,e)),this.notify(!1))},this.getVirtualItems=B(()=>[this.getVirtualIndexes(),this.getMeasurements()],(t,e)=>{const n=[];for(let i=0,s=t.length;i<s;i++){const o=t[i],p=e[o];n.push(p)}return n},{key:"getVirtualItems",debug:()=>this.options.debug}),this.getVirtualItemForOffset=t=>{const e=this.getMeasurements();if(e.length!==0)return ge(e[_e(0,e.length-1,n=>ge(e[n]).start,t)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const t=this.scrollElement.document.documentElement;return this.options.horizontal?t.scrollWidth-this.scrollElement.innerWidth:t.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(t,e,n=0)=>{if(!this.scrollElement)return 0;const i=this.getSize(),s=this.getScrollOffset();e==="auto"&&(e=t>=s+i?"end":"start"),e==="center"?t+=(n-i)/2:e==="end"&&(t-=i);const o=this.getMaxScrollOffset();return Math.max(Math.min(o,t),0)},this.getOffsetForIndex=(t,e="auto")=>{t=Math.max(0,Math.min(t,this.options.count-1));const n=this.getSize(),i=this.getScrollOffset(),s=this.measurementsCache[t];if(!s)return;if(e==="auto")if(s.end>=i+n-this.options.scrollPaddingEnd)e="end";else if(s.start<=i+this.options.scrollPaddingStart)e="start";else return[i,e];if(e==="end"&&t===this.options.count-1)return[this.getMaxScrollOffset(),e];const o=e==="end"?s.end+this.options.scrollPaddingEnd:s.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(o,e,s.size),e]},this.scrollToOffset=(t,{align:e="start",behavior:n="auto"}={})=>{const i=this.getOffsetForAlignment(t,e),s=this.now();this.scrollState={index:null,align:e,behavior:n,startedAt:s,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(t,{align:e="auto",behavior:n="auto"}={})=>{t=Math.max(0,Math.min(t,this.options.count-1));const i=this.getOffsetForIndex(t,e);if(!i)return;const[s,o]=i,p=this.now();this.scrollState={index:t,align:o,behavior:n,startedAt:p,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(t,{behavior:e="auto"}={})=>{const n=this.getScrollOffset()+t,i=this.now();this.scrollState={index:null,align:"start",behavior:e,startedAt:i,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:e}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var t;const e=this.getMeasurements();let n;if(e.length===0)n=this.options.paddingStart;else if(this.options.lanes===1)n=((t=e[e.length-1])==null?void 0:t.end)??0;else{const i=Array(this.options.lanes).fill(null);let s=e.length-1;for(;s>=0&&i.some(o=>o===null);){const o=e[s];i[o.lane]===null&&(i[o.lane]=o.end),s--}n=Math.max(...i.filter(o=>o!==null))}return Math.max(n-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(t,{adjustments:e,behavior:n})=>{this.options.scrollToFn(t,{behavior:n,adjustments:e},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(d)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const e=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,n=e?e[0]:this.scrollState.lastTargetOffset,i=1,s=n!==this.scrollState.lastTargetOffset;if(!s&&ct(n,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=i){this.scrollState=null;return}}else this.scrollState.stableFrames=0,s&&(this.scrollState.lastTargetOffset=n,this.scrollState.behavior="auto",this._scrollToOffset(n,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}const _e=(a,d,t,e)=>{for(;a<=d;){const n=(a+d)/2|0,i=t(n);if(i<e)a=n+1;else if(i>e)d=n-1;else return n}return a>0?a-1:0};function ft({measurements:a,outerSize:d,scrollOffset:t,lanes:e}){const n=a.length-1,i=p=>a[p].start;if(a.length<=e)return{startIndex:0,endIndex:n};let s=_e(0,n,i,t),o=s;if(e===1)for(;o<n&&a[o].end<t+d;)o++;else if(e>1){const p=Array(e).fill(0);for(;o<n&&p.some(S=>S<t+d);){const S=a[o];p[S.lane]=S.end,o++}const f=Array(e).fill(t+d);for(;s>=0&&f.some(S=>S>=t);){const S=a[s];f[S.lane]=S.start,s--}s=Math.max(0,s-s%e),o=Math.min(n,o+(e-1-o%e))}return{startIndex:s,endIndex:o}}const mt={__name:"VirtualMessageList",props:{messages:{type:Array,required:!0,default:()=>[]},estimateSize:{type:Number,default:120}},emits:["scroll-to-bottom","load-more"],setup(a,{expose:d,emit:t}){const e=a,n=t,i=A(null),s=A(null),o=A(0),p=y(()=>s.value?(o.value,s.value.getVirtualItems()):[]),f=()=>{if(i.value)try{s.value=new pe({count:e.messages.length,getScrollElement:()=>i.value,estimateSize:()=>e.estimateSize,overscan:5,scrollMargin:0,onChange:()=>{o.value++}}),L(()=>{s.value&&i.value&&(s.value.measure(),o.value++,i.value.scrollTop=1,setTimeout(()=>{i.value&&(i.value.scrollTop=0)},50))})}catch(b){console.error("[VirtualMessageList] init failed:",b)}},S=()=>{if(!i.value)return;s.value&&s.value.measure();const{scrollTop:b,scrollHeight:l,clientHeight:C}=i.value;b<100&&n("load-more"),b+C>=l-50&&n("scroll-to-bottom")},x=()=>{i.value&&requestAnimationFrame(()=>{i.value&&(i.value.scrollTop=i.value.scrollHeight)})},O=b=>{const l=e.messages.findIndex(C=>C.id===b);l!==-1&&s.value&&s.value.scrollToIndex(l,{align:"center"})};V(()=>e.messages.length,(b,l)=>{s.value?(s.value.setOptions({count:b,estimateSize:()=>e.estimateSize}),o.value++,b>l&&L(()=>x())):L(()=>{f(),s.value&&o.value++})}),V(()=>e.messages,b=>{!s.value&&b.length>0?L(()=>f()):s.value&&(s.value.setOptions({count:b.length,estimateSize:()=>e.estimateSize,getScrollElement:()=>i.value,overscan:5,scrollMargin:0,onChange:()=>{o.value++}}),o.value++,L(()=>{s.value&&s.value.measure()}))},{deep:!0}),d({scrollToBottom:x,scrollToMessage:O}),J(()=>{L(()=>{f(),e.messages.length>0&&x()})}),re(()=>{s.value&&(s.value=null)});const g={props:e,emit:n,scrollContainer:i,virtualizer:s,updateKey:o,virtualItems:p,initVirtualizer:f,handleScroll:S,scrollToBottom:x,scrollToMessage:O,ref:A,computed:y,watch:V,onMounted:J,onUnmounted:re,nextTick:L,get Virtualizer(){return pe}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},gt={key:1,class:"fallback-list"};function pt(a,d,t,e,n,i){return c(),m("div",{ref:"scrollContainer",class:"virtual-message-list",onScroll:e.handleScroll},[e.virtualizer&&e.virtualItems.length>0?(c(),m("div",{key:0,style:te({height:`${e.virtualizer.getTotalSize()}px`,width:"100%",position:"relative"})},[(c(!0),m(D,null,H(e.virtualItems,s=>(c(),m("div",{key:s.key,style:te({position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${s.start}px)`})},[le(a.$slots,"default",{message:t.messages[s.index],index:s.index},void 0)],4))),128))],4)):(c(),m("div",gt,[(c(!0),m(D,null,H(t.messages,(s,o)=>(c(),m("div",{key:s.id||o},[le(a.$slots,"default",{message:s,index:o},void 0)]))),128))]))],544)}const vt=G(mt,[["render",pt],["__scopeId","data-v-ff0bed80"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/components/VirtualMessageList.vue"]]),_t={__name:"IntentConfirmationMessage",props:{message:{type:Object,required:!0}},emits:["confirm","correct"],setup(a,{expose:d,emit:t}){d();const e=a,n=t,i=A(!1),s=A(""),o=y(()=>e.message.metadata?.originalInput||""),p=y(()=>e.message.metadata?.understanding||{}),f=y(()=>p.value.correctedInput||o.value),S=y(()=>p.value.intent||"未识别"),x=y(()=>p.value.keyPoints||[]),O=y(()=>f.value!==o.value&&o.value.trim()!==""),g=y(()=>e.message.metadata?.status||"pending"),b=y(()=>g.value==="confirmed"),l=y(()=>g.value==="corrected"),C=y(()=>!!e.message.metadata?.streaming),k=y(()=>e.message.metadata?.streamingTokens||0),E=y(()=>e.message.metadata?.correction||null);function P(){n("confirm",{messageId:e.message.id,originalInput:o.value,understanding:p.value})}function W(){i.value=!0,s.value=f.value}function Q(){s.value.trim()&&(n("correct",{messageId:e.message.id,originalInput:o.value,correction:s.value}),i.value=!1)}function T(){i.value=!1,s.value=""}const q={props:e,emit:n,showCorrectionInput:i,correctionInput:s,originalInput:o,understanding:p,correctedInput:f,intent:S,keyPoints:x,hasCorrectedInput:O,status:g,isConfirmed:b,isCorrected:l,isStreaming:C,streamingTokens:k,correction:E,handleConfirm:P,handleCorrect:W,handleSubmitCorrection:Q,handleCancelCorrection:T,ref:A,computed:y,get CheckCircleOutlined(){return Be},get ExclamationCircleOutlined(){return We},get BulbOutlined(){return Ve},get CheckOutlined(){return Ne},get EditOutlined(){return qe},get CloseOutlined(){return De},get LoadingOutlined(){return ve}};return Object.defineProperty(q,"__isScriptSetup",{enumerable:!1,value:!0}),q}},bt={class:"intent-confirmation-message"},yt={class:"confirmation-header"},St={class:"header-icon"},kt={class:"header-text"},xt={key:0},Ct={key:1},wt={key:2},It={class:"understanding-content"},Ot={key:0,class:"original-input"},Mt={class:"label"},zt={class:"value original-text"},Et={key:1,class:"corrected-input"},Tt={class:"label"},At={class:"value corrected-text"},Pt={class:"intent-section"},Rt={class:"label"},Ft={class:"value"},Lt={key:2,class:"key-points-section"},jt={class:"label"},Dt={class:"key-points-list"},qt={key:3,class:"correction-section"},Nt={class:"label"},Vt={class:"value correction-text"},Wt={key:0,class:"streaming-indicator"},Bt={key:0,class:"streaming-tokens"},Ht={key:1,class:"action-buttons"},Qt={key:2,class:"correction-input-section"},Ut={class:"correction-actions"};function Gt(a,d,t,e,n,i){const s=R("a-button"),o=R("a-textarea");return c(),m("div",bt,[u("div",yt,[u("div",St,[e.isConfirmed?(c(),M(e.CheckCircleOutlined,{key:0,style:{color:"#52c41a"}})):e.isCorrected?(c(),M(e.ExclamationCircleOutlined,{key:1,style:{color:"#faad14"}})):(c(),M(e.BulbOutlined,{key:2,style:{color:"#1890ff"}}))]),u("div",kt,[e.isConfirmed?(c(),m("span",xt,h(a.$t("chat.intent.confirmed")),1)):e.isCorrected?(c(),m("span",Ct,h(a.$t("chat.intent.corrected")),1)):(c(),m("span",wt,h(t.message.content),1))])]),u("div",It,[e.hasCorrectedInput?(c(),m("div",Ot,[u("div",Mt,h(a.$t("chat.intent.label.original")),1),u("div",zt,h(e.originalInput),1)])):_("v-if",!0),e.hasCorrectedInput?(c(),m("div",Et,[u("div",Tt,h(a.$t("chat.intent.label.understood")),1),u("div",At,h(e.correctedInput),1)])):_("v-if",!0),u("div",Pt,[u("div",Rt,"🎯 "+h(a.$t("chat.intent.label.intent")),1),u("div",Ft,h(e.intent),1)]),e.keyPoints&&e.keyPoints.length>0?(c(),m("div",Lt,[u("div",jt,"📝 "+h(a.$t("chat.intent.label.keyPoints")),1),u("ul",Dt,[(c(!0),m(D,null,H(e.keyPoints,(p,f)=>(c(),m("li",{key:f},h(p),1))),128))])])):_("v-if",!0),e.correction?(c(),m("div",qt,[u("div",Nt,"📝 "+h(a.$t("chat.intent.label.correction")),1),u("div",Vt,h(e.correction),1)])):_("v-if",!0)]),e.isStreaming?(c(),m("div",Wt,[v(e.LoadingOutlined,{spin:""}),u("span",null,h(a.$t("chat.intent.status.understanding")),1),e.streamingTokens>0?(c(),m("span",Bt,"· "+h(e.streamingTokens)+" tokens",1)):_("v-if",!0)])):!e.isConfirmed&&!e.isCorrected?(c(),m("div",Ht,[v(s,{type:"primary",onClick:e.handleConfirm},{default:I(()=>[v(e.CheckOutlined),z(" "+h(a.$t("chat.intent.action.confirm")),1)]),_:1}),v(s,{onClick:e.handleCorrect},{default:I(()=>[v(e.EditOutlined),z(" "+h(a.$t("chat.intent.action.correct")),1)]),_:1})])):_("v-if",!0),e.showCorrectionInput?(c(),m("div",Qt,[v(o,{value:e.correctionInput,"onUpdate:value":d[0]||(d[0]=p=>e.correctionInput=p),placeholder:a.$t("chat.intent.action.correctPlaceholder"),"auto-size":{minRows:2,maxRows:6}},null,8,["value","placeholder"]),u("div",Ut,[v(s,{type:"primary",size:"small",onClick:e.handleSubmitCorrection},{default:I(()=>[v(e.CheckOutlined),z(" "+h(a.$t("chat.intent.action.submitCorrection")),1)]),_:1}),v(s,{size:"small",onClick:e.handleCancelCorrection},{default:I(()=>[v(e.CloseOutlined),z(" "+h(a.$t("chat.intent.action.cancelCorrection")),1)]),_:1})])])):_("v-if",!0)])}const Kt=G(_t,[["render",Gt],["__scopeId","data-v-62ebcfe5"],["__file","/tmp/cc-web-panel-GzZ4oH/repo/packages/web-panel/src/components/IntentConfirmationMessage.vue"]]),$t={__name:"Chat",setup(a,{expose:d}){d();const{t,tm:e,rt:n}=he(),i=ce()||null,s=de()||null,o=window.__CC_CONFIG__||{},p=y(()=>o.mode==="project"),f=fe(),S=new Set,x=A(null),O=A(""),g=y(()=>f.contextMode);function b(r){f.setContextMode(r)}const l=y(()=>f.intentEnabled);function C(r){f.setIntentEnabled(r)}const k=y(()=>f.currentSessionId),E=y(()=>k.value?f.getMessages(k.value):[]),P=y(()=>{const r=f.streaming[k.value];return r?.active?r.content:null}),W=y(()=>{const r=E.value;return P.value?[...r,{role:"assistant",content:P.value,_streaming:!0,timestamp:Date.now()}]:r}),Q=y(()=>f.pendingQuestion[k.value]),T=y(()=>f.getIsLoading(k.value));function q(r){if(!r)return"";const w=new Date(r);return`${String(w.getHours()).padStart(2,"0")}:${String(w.getMinutes()).padStart(2,"0")}`}const K=ue(new Set);function be(r){K.has(r)?K.delete(r):K.add(r)}function ye(r,w){return{id:`tool-${w}`,label:r.tool||t("chat.tool.unknownTool"),detail:ne(r),status:r.status==="done"?"done":"running"}}function ne(r){if(r.status==="running"){const j=r.input&&typeof r.input=="object"?Object.keys(r.input):[];return j.length?t("chat.tool.argsPreview",{n:j.length,key:j[0]}):t("chat.tool.running")}if(r.result==null)return t("chat.tool.done");const F=(typeof r.result=="string"?r.result:JSON.stringify(r.result)).split(`
|
|
5
|
-
`)[0]||"";return F.length>48?`${F.slice(0,48)}…`:F||t("chat.tool.done")}async function Se(r){await f.createSession(r)}async function
|
|
6
|
-
`)
|
|
7
|
-
`).map(w=>w.trim()).filter(w=>w.length>0);f.setCustomQuickPrompts(r.length>0?r:null),$.value=!1}function Ie(){f.setCustomQuickPrompts(null),$.value=!1}const Oe=y(()=>t(`chat.empty.hint.${g.value}`));async function Me(r){k.value||await f.createSession("chat"),O.value=r,await X()}function ze(r){f.answerQuestion(k.value,r)}V([E,P],()=>{L(()=>{x.value?.scrollToBottom()})},{deep:!0});async function ee({prompt:r,autoSend:w,session:F,token:j}){if(!r||S.has(j))return;S.add(j);let N=F||k.value;N?N!==k.value&&await f.switchSession(N):N=await f.createSession("chat"),O.value=r,w!==!1&&(await L(),await X())}function ie(){const r=i?.query||{};if(!r.prompt)return null;const w=Array.isArray(r.prompt)?r.prompt[0]:String(r.prompt);if(!w.trim())return null;const j=(Array.isArray(r.autoSend)?r.autoSend[0]:r.autoSend)!=="false",N=Array.isArray(r.session)?r.session[0]:r.session,ae=N?String(N):null,Ee=`query::${w}::${ae||""}::${j}`;return{prompt:w,autoSend:j,session:ae,token:Ee}}async function Z(){const r=ie();if(r){await ee(r),s&&i&&s.replace({path:i.path,query:{}}).catch(()=>{});return}const w=f.pendingAutoSend;if(w?.prompt){const F=w.token||`staged::${w.prompt}::${Date.now()}`;await ee({...w,token:F}),f.clearAutoSend?.()}}i&&V(()=>[i.query.prompt,i.query.autoSend,i.query.session],()=>{Z()},{immediate:!1}),V(()=>f.pendingAutoSend,()=>{Z()},{deep:!0}),J(async()=>{await f.loadSessions(),await Z()});const oe={t,tm:e,rt:n,route:i,router:s,cfg:o,isProject:p,chatStore:f,consumedAutoSendTokens:S,virtualListRef:x,inputText:O,contextMode:g,setContextMode:b,intentEnabled:l,setIntentEnabled:C,currentSessionId:k,currentMessages:E,streamingContent:P,messagesWithStreaming:W,pendingQuestion:Q,isLoading:T,formatTime:q,expandedTools:K,toggleToolDetail:be,toToolItem:ye,toolDetail:ne,newSession:Se,sendMessage:X,handleIntentConfirm:ke,handleIntentCorrect:xe,QUICK_PROMPTS:se,editingPrompts:$,promptDraft:Y,openPromptEditor:Ce,savePromptEditor:we,resetPromptsToDefault:Ie,emptyHint:Oe,usePrompt:Me,answerQuestion:ze,consumeAutoSend:ee,readAutoSendFromQuery:ie,handleAutoSendIfPending:Z,ref:A,reactive:ue,computed:y,watch:V,nextTick:L,onMounted:J,get useRoute(){return ce},get useRouter(){return de},get MessageOutlined(){return Ze},get RobotOutlined(){return $e},get SendOutlined(){return Ke},get FolderOutlined(){return Ge},get GlobalOutlined(){return Ue},get UserOutlined(){return Qe},get FileTextOutlined(){return He},get useI18n(){return he},get useChatStore(){return fe},ToolInvocationCard:it,MarkdownRenderer:rt,VirtualMessageList:vt,IntentConfirmationMessage:Kt,get MessageType(){return Pe}};return Object.defineProperty(oe,"__isScriptSetup",{enumerable:!1,value:!0}),oe}},Zt={style:{display:"flex",height:"calc(100vh - 56px - 48px)",gap:"16px"}},Jt={style:{width:"240px","flex-shrink":"0",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},Xt={key:0,style:{padding:"6px 12px 4px","font-size":"11px",color:"#1677ff",background:"rgba(22,119,255,.07)","border-bottom":"1px solid rgba(22,119,255,.15)",display:"flex","align-items":"center",gap:"4px"}},Yt=["title"],en={key:1,style:{padding:"6px 12px 4px","font-size":"11px",color:"#722ed1",background:"rgba(114,46,209,.07)","border-bottom":"1px solid rgba(114,46,209,.15)",display:"flex","align-items":"center",gap:"4px"}},tn={style:{padding:"10px 12px","border-bottom":"1px solid var(--border-color)",display:"flex",gap:"8px"}},nn={style:{flex:"1","overflow-y":"auto",padding:"8px"}},sn=["onClick"],on={class:"session-icon"},an={class:"session-info"},ln={class:"session-title"},rn={class:"session-meta"},cn={key:0,style:{"text-align":"center",color:"var(--text-muted)",padding:"24px 0","font-size":"13px"}},dn={style:{flex:"1",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},un={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},hn={style:{"font-size":"16px","margin-bottom":"8px",color:"#777"}},fn={style:{"font-size":"13px",color:"var(--text-muted)"}},mn={style:{"margin-top":"24px",display:"flex",gap:"12px"}},gn={key:1,class:"chat-header"},pn={class:"chat-intent-toggle"},vn={class:"chat-intent-toggle-label"},_n={key:2,class:"chat-area-body"},bn={key:0,class:"chat-empty-prompts"},yn={class:"empty-title"},Sn={class:"empty-hint"},kn={class:"quick-prompts"},xn={class:"system-banner"},Cn={class:"tool-msg"},wn={key:0,class:"tool-detail"},In={class:"tool-detail__pre tool-detail__pre--input"},On={key:0,class:"tool-detail__result"},Mn={class:"tool-detail__pre tool-detail__pre--result"},zn={class:"msg-body"},En={class:"msg-meta-row"},Tn={class:"msg-role"},An={class:"msg-time"},Pn={key:0,class:"msg-tokens"},Rn={key:0,class:"bubble user"},Fn={key:2,class:"question-card"},Ln={class:"question-text"},jn={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Dn={key:3,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},qn={style:{display:"flex",gap:"8px","align-items":"flex-end"}},Nn={style:{"margin-bottom":"8px","font-size":"12px",color:"var(--text-muted)"}},Vn={style:{"margin-top":"8px"}};function Wn(a,d,t,e,n,i){const s=R("a-button"),o=R("a-radio-button"),p=R("a-radio-group"),f=R("a-switch"),S=R("a-tooltip"),x=R("a-avatar"),O=R("a-input-search"),g=R("a-textarea"),b=R("a-modal");return c(),m("div",Zt,[_(" Session Sidebar "),u("div",Jt,[_(" Project/Global Scope Indicator "),e.isProject?(c(),m("div",Xt,[v(e.FolderOutlined),u("span",{style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:e.cfg.projectRoot},h(e.cfg.projectName||a.$t("chat.scope.fallbackProjectName")),9,Yt)])):(c(),m("div",en,[v(e.GlobalOutlined),u("span",null,h(a.$t("chat.scope.globalSessions")),1)])),u("div",tn,[v(s,{type:"primary",size:"small",style:{flex:"1"},onClick:d[0]||(d[0]=l=>e.newSession("chat"))},{icon:I(()=>[v(e.MessageOutlined)]),default:I(()=>[z(" "+h(a.$t("chat.newChat")),1)]),_:1}),v(s,{size:"small",style:{flex:"1"},onClick:d[1]||(d[1]=l=>e.newSession("agent"))},{icon:I(()=>[v(e.RobotOutlined)]),default:I(()=>[z(" "+h(a.$t("chat.newAgent")),1)]),_:1})]),u("div",nn,[(c(!0),m(D,null,H(e.chatStore.sessions,l=>(c(),m("div",{key:l.id,class:U(["session-item",{active:l.id===e.chatStore.currentSessionId}]),onClick:C=>e.chatStore.switchSession(l.id)},[u("span",on,h(l.type==="agent"?"🤖":"💬"),1),u("div",an,[u("div",ln,h(l.title||a.$t("chat.session.untitled")),1),u("div",rn,h(a.$t("chat.session.messageCountSuffix",{n:l.messageCount||0})),1)])],10,sn))),128)),e.chatStore.sessions.length?_("v-if",!0):(c(),m("div",cn,h(a.$t("chat.sidebarEmpty")),1))])]),_(" Chat Area "),u("div",dn,[_(" Empty State "),e.currentSessionId?_("v-if",!0):(c(),m("div",un,[d[7]||(d[7]=u("div",{style:{"font-size":"48px","margin-bottom":"16px"}},"💬",-1)),u("div",hn,h(a.$t("chat.empty.title")),1),u("div",fn,h(a.$t("chat.empty.subtitle")),1),u("div",mn,[v(s,{type:"primary",onClick:d[2]||(d[2]=l=>e.newSession("chat"))},{default:I(()=>[z(h(a.$t("chat.empty.newChat")),1)]),_:1}),v(s,{style:{},onClick:d[3]||(d[3]=l=>e.newSession("agent"))},{default:I(()=>[z(h(a.$t("chat.empty.newAgent")),1)]),_:1})])])),_(" Chat header: context mode + intent toggle "),e.currentSessionId?(c(),m("div",gn,[v(p,{value:e.contextMode,size:"small","button-style":"solid","onUpdate:value":e.setContextMode},{default:I(()=>[v(o,{value:"project",disabled:!e.isProject},{default:I(()=>[v(e.FolderOutlined),z(" "+h(a.$t("chat.contextMode.project")),1)]),_:1},8,["disabled"]),v(o,{value:"file",disabled:""},{default:I(()=>[v(e.FileTextOutlined),z(" "+h(a.$t("chat.contextMode.file")),1)]),_:1}),v(o,{value:"global"},{default:I(()=>[v(e.GlobalOutlined),z(" "+h(a.$t("chat.contextMode.global")),1)]),_:1})]),_:1},8,["value"]),e.contextMode!=="global"?(c(),M(S,{key:0,title:a.$t("chat.intent.toggleHint"),placement:"bottom"},{default:I(()=>[u("label",pn,[v(f,{checked:e.intentEnabled,size:"small","onUpdate:checked":e.setIntentEnabled},null,8,["checked"]),u("span",vn,h(a.$t("chat.intent.toggleLabel")),1)])]),_:1},8,["title"])):_("v-if",!0)])):_("v-if",!0),_(" Messages "),e.currentSessionId?(c(),m("div",_n,[_(" Empty state with quick prompts when session has no messages "),e.messagesWithStreaming.length===0?(c(),m("div",bn,[d[8]||(d[8]=u("div",{class:"empty-icon"},"💬",-1)),u("div",yn,h(a.$t("chat.empty.startTitle")),1),u("div",Sn,h(e.emptyHint),1),u("div",kn,[(c(!0),m(D,null,H(e.QUICK_PROMPTS,l=>(c(),M(s,{key:l,size:"small",class:"quick-prompt-btn",onClick:C=>e.usePrompt(l)},{default:I(()=>[z(h(l),1)]),_:2},1032,["onClick"]))),128)),v(s,{size:"small",type:"dashed",class:"quick-prompt-btn quick-prompt-edit",onClick:e.openPromptEditor},{default:I(()=>[z(h(a.$t("chat.quickPromptsEditor.openButton")),1)]),_:1})])])):(c(),M(e.VirtualMessageList,{key:1,ref:"virtualListRef",messages:e.messagesWithStreaming,"estimate-size":120,class:"chat-virtual-list"},{default:I(({message:l,index:C})=>[u("div",{class:U(["message-row",l.role])},[_(" Intent confirmation card (V5 parity) "),l.type===e.MessageType.INTENT_CONFIRMATION?(c(),M(e.IntentConfirmationMessage,{key:0,message:l,onConfirm:e.handleIntentConfirm,onCorrect:e.handleIntentCorrect},null,8,["message"])):l.role==="system"?(c(),m(D,{key:1},[_(" System banner (follow-up intent feedback etc.) "),u("div",xn,h(l.content),1)],2112)):l.role==="tool"?(c(),m(D,{key:2},[_(" Tool message "),u("div",Cn,[v(e.ToolInvocationCard,{item:e.toToolItem(l,C),expandable:"",expanded:e.expandedTools.has(C),onToggle:k=>e.toggleToolDetail(C)},null,8,["item","expanded","onToggle"]),e.expandedTools.has(C)?(c(),m("div",wn,[u("pre",In,h(JSON.stringify(l.input,null,2)),1),l.result?(c(),m("div",On,[u("pre",Mn,h(typeof l.result=="string"?l.result:JSON.stringify(l.result,null,2)),1)])):_("v-if",!0)])):_("v-if",!0)])],2112)):(c(),m(D,{key:3},[_(" User / Assistant message with avatar + meta row "),u("div",{class:U(["msg-with-avatar",l.role])},[v(x,{size:32,style:te({backgroundColor:l.role==="user"?"#1890ff":"#52c41a",flexShrink:0})},{icon:I(()=>[l.role==="user"?(c(),M(e.UserOutlined,{key:0})):(c(),M(e.RobotOutlined,{key:1}))]),_:2},1032,["style"]),u("div",zn,[u("div",En,[u("span",Tn,h(l.role==="user"?a.$t("chat.role.me"):"AI"),1),u("span",An,h(e.formatTime(l.timestamp)),1),l.tokens?(c(),m("span",Pn,"· "+h(l.tokens)+" tokens",1)):_("v-if",!0)]),l.role==="user"?(c(),m("div",Rn,h(l.content),1)):(c(),M(e.MarkdownRenderer,{key:1,class:U(["bubble assistant",{streaming:l._streaming}]),content:l.content},null,8,["class","content"]))])],2)],2112))],2)]),_:1},8,["messages"])),_(" Interactive Question (sticky below the list) "),e.pendingQuestion?(c(),m("div",Fn,[u("div",Ln,h(e.pendingQuestion.question),1),e.pendingQuestion.choices?.length?(c(),m("div",jn,[(c(!0),m(D,null,H(e.pendingQuestion.choices,l=>(c(),M(s,{key:l,size:"small",onClick:C=>e.answerQuestion(l)},{default:I(()=>[z(h(l),1)]),_:2},1032,["onClick"]))),128))])):(c(),M(O,{key:1,placeholder:a.$t("chat.input.answerPlaceholder"),"enter-button":a.$t("chat.input.send"),style:{"margin-top":"10px"},onSearch:e.answerQuestion},null,8,["placeholder","enter-button"]))])):_("v-if",!0)])):_("v-if",!0),_(" Input Area "),e.currentSessionId?(c(),m("div",Dn,[u("div",qn,[v(g,{value:e.inputText,"onUpdate:value":d[4]||(d[4]=l=>e.inputText=l),placeholder:e.isLoading?a.$t("chat.input.loading"):a.$t("chat.input.placeholder"),"auto-size":{minRows:1,maxRows:6},disabled:e.isLoading,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)",color:"var(--text-primary)",resize:"none",flex:"1"},onKeydown:Te(Ae(e.sendMessage,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),v(s,{type:"primary",loading:e.isLoading,onClick:e.sendMessage,style:{height:"40px"}},{icon:I(()=>[v(e.SendOutlined)]),_:1},8,["loading"])])])):_("v-if",!0)]),_(` Custom quick-prompts editor (Improvement 4) — placed at root so the
|
|
8
|
-
chat-area-body's v-if/v-else pair stays unbroken. `),v(b,{open:e.editingPrompts,"onUpdate:open":d[6]||(d[6]=l=>e.editingPrompts=l),title:a.$t("chat.quickPromptsEditor.title"),"ok-text":a.$t("chat.quickPromptsEditor.save"),"cancel-text":a.$t("chat.quickPromptsEditor.cancel"),onOk:e.savePromptEditor},{default:I(()=>[u("div",
|
|
4
|
+
color: hsl(${Math.max(0,Math.min(120-120*C,120))}deg 100% 31%);`,t?.key)}return t?.onChange&&!(i&&t.skipInitialOnChange)&&t.onChange(n),i=!1,n}return s.updateDeps=o=>{e=o},s}function ge(a,d){if(a===void 0)throw new Error("Unexpected undefined");return a}const ct=(a,d)=>Math.abs(a-d)<1.01,dt=a=>a,ut=a=>{const d=Math.max(a.startIndex-a.overscan,0),t=Math.min(a.endIndex+a.overscan,a.count-1),e=[];for(let n=d;n<=t;n++)e.push(n);return e},ht=(a,d,t)=>{if(d?.borderBoxSize){const e=d.borderBoxSize[0];if(e)return Math.round(e[t.options.horizontal?"inlineSize":"blockSize"])}return a[t.options.horizontal?"offsetWidth":"offsetHeight"]};class pe{constructor(d){this.unsubs=[],this.scrollElement=null,this.targetWindow=null,this.isScrolling=!1,this.scrollState=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.laneAssignments=new Map,this.pendingMeasuredCacheIndexes=[],this.prevLanes=void 0,this.lanesChangedFlag=!1,this.lanesSettling=!1,this.scrollRect=null,this.scrollOffset=null,this.scrollDirection=null,this.scrollAdjustments=0,this.elementsCache=new Map,this.now=()=>{var t,e,n;return((n=(e=(t=this.targetWindow)==null?void 0:t.performance)==null?void 0:e.now)==null?void 0:n.call(e))??Date.now()},this.observer=(()=>{let t=null;const e=()=>t||(!this.targetWindow||!this.targetWindow.ResizeObserver?null:t=new this.targetWindow.ResizeObserver(n=>{n.forEach(i=>{const s=()=>{const o=i.target,p=this.indexFromElement(o);if(!o.isConnected){this.observer.unobserve(o);return}this.shouldMeasureDuringScroll(p)&&this.resizeItem(p,this.options.measureElement(o,i,this))};this.options.useAnimationFrameWithResizeObserver?requestAnimationFrame(s):s()})}));return{disconnect:()=>{var n;(n=e())==null||n.disconnect(),t=null},observe:n=>{var i;return(i=e())==null?void 0:i.observe(n,{box:"border-box"})},unobserve:n=>{var i;return(i=e())==null?void 0:i.unobserve(n)}}})(),this.range=null,this.setOptions=t=>{Object.entries(t).forEach(([e,n])=>{typeof n>"u"&&delete t[e]}),this.options={debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:dt,rangeExtractor:ut,onChange:()=>{},measureElement:ht,initialRect:{width:0,height:0},scrollMargin:0,gap:0,indexAttribute:"data-index",initialMeasurementsCache:[],lanes:1,isScrollingResetDelay:150,enabled:!0,isRtl:!1,useScrollendEvent:!1,useAnimationFrameWithResizeObserver:!1,laneAssignmentMode:"estimate",...t}},this.notify=t=>{var e,n;(n=(e=this.options).onChange)==null||n.call(e,this,t)},this.maybeNotify=B(()=>(this.calculateRange(),[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]),t=>{this.notify(t)},{key:"maybeNotify",debug:()=>this.options.debug,initialDeps:[this.isScrolling,this.range?this.range.startIndex:null,this.range?this.range.endIndex:null]}),this.cleanup=()=>{this.unsubs.filter(Boolean).forEach(t=>t()),this.unsubs=[],this.observer.disconnect(),this.rafId!=null&&this.targetWindow&&(this.targetWindow.cancelAnimationFrame(this.rafId),this.rafId=null),this.scrollState=null,this.scrollElement=null,this.targetWindow=null},this._didMount=()=>()=>{this.cleanup()},this._willUpdate=()=>{var t;const e=this.options.enabled?this.options.getScrollElement():null;if(this.scrollElement!==e){if(this.cleanup(),!e){this.maybeNotify();return}this.scrollElement=e,this.scrollElement&&"ownerDocument"in this.scrollElement?this.targetWindow=this.scrollElement.ownerDocument.defaultView:this.targetWindow=((t=this.scrollElement)==null?void 0:t.window)??null,this.elementsCache.forEach(n=>{this.observer.observe(n)}),this.unsubs.push(this.options.observeElementRect(this,n=>{this.scrollRect=n,this.maybeNotify()})),this.unsubs.push(this.options.observeElementOffset(this,(n,i)=>{this.scrollAdjustments=0,this.scrollDirection=i?this.getScrollOffset()<n?"forward":"backward":null,this.scrollOffset=n,this.isScrolling=i,this.scrollState&&this.scheduleScrollReconcile(),this.maybeNotify()})),this._scrollToOffset(this.getScrollOffset(),{adjustments:void 0,behavior:void 0})}},this.rafId=null,this.getSize=()=>this.options.enabled?(this.scrollRect=this.scrollRect??this.options.initialRect,this.scrollRect[this.options.horizontal?"width":"height"]):(this.scrollRect=null,0),this.getScrollOffset=()=>this.options.enabled?(this.scrollOffset=this.scrollOffset??(typeof this.options.initialOffset=="function"?this.options.initialOffset():this.options.initialOffset),this.scrollOffset):(this.scrollOffset=null,0),this.getFurthestMeasurement=(t,e)=>{const n=new Map,i=new Map;for(let s=e-1;s>=0;s--){const o=t[s];if(n.has(o.lane))continue;const p=i.get(o.lane);if(p==null||o.end>p.end?i.set(o.lane,o):o.end<p.end&&n.set(o.lane,!0),n.size===this.options.lanes)break}return i.size===this.options.lanes?Array.from(i.values()).sort((s,o)=>s.end===o.end?s.index-o.index:s.end-o.end)[0]:void 0},this.getMeasurementOptions=B(()=>[this.options.count,this.options.paddingStart,this.options.scrollMargin,this.options.getItemKey,this.options.enabled,this.options.lanes,this.options.laneAssignmentMode],(t,e,n,i,s,o,p)=>(this.prevLanes!==void 0&&this.prevLanes!==o&&(this.lanesChangedFlag=!0),this.prevLanes=o,this.pendingMeasuredCacheIndexes=[],{count:t,paddingStart:e,scrollMargin:n,getItemKey:i,enabled:s,lanes:o,laneAssignmentMode:p}),{key:!1}),this.getMeasurements=B(()=>[this.getMeasurementOptions(),this.itemSizeCache],({count:t,paddingStart:e,scrollMargin:n,getItemKey:i,enabled:s,lanes:o,laneAssignmentMode:p},f)=>{if(!s)return this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),[];if(this.laneAssignments.size>t)for(const g of this.laneAssignments.keys())g>=t&&this.laneAssignments.delete(g);this.lanesChangedFlag&&(this.lanesChangedFlag=!1,this.lanesSettling=!0,this.measurementsCache=[],this.itemSizeCache.clear(),this.laneAssignments.clear(),this.pendingMeasuredCacheIndexes=[]),this.measurementsCache.length===0&&!this.lanesSettling&&(this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach(g=>{this.itemSizeCache.set(g.key,g.size)}));const S=this.lanesSettling?0:this.pendingMeasuredCacheIndexes.length>0?Math.min(...this.pendingMeasuredCacheIndexes):0;this.pendingMeasuredCacheIndexes=[],this.lanesSettling&&this.measurementsCache.length===t&&(this.lanesSettling=!1);const x=this.measurementsCache.slice(0,S),O=new Array(o).fill(void 0);for(let g=0;g<S;g++){const b=x[g];b&&(O[b.lane]=g)}for(let g=S;g<t;g++){const b=i(g),l=this.laneAssignments.get(g);let C,k;const z=p==="estimate"||f.has(b);if(l!==void 0&&this.options.lanes>1){C=l;const T=O[C],N=T!==void 0?x[T]:void 0;k=N?N.end+this.options.gap:e+n}else{const T=this.options.lanes===1?x[g-1]:this.getFurthestMeasurement(x,g);k=T?T.end+this.options.gap:e+n,C=T?T.lane:g%this.options.lanes,this.options.lanes>1&&z&&this.laneAssignments.set(g,C)}const P=f.get(b),W=typeof P=="number"?P:this.options.estimateSize(g),U=k+W;x[g]={index:g,start:k,size:W,end:U,key:b,lane:C},O[C]=g}return this.measurementsCache=x,x},{key:"getMeasurements",debug:()=>this.options.debug}),this.calculateRange=B(()=>[this.getMeasurements(),this.getSize(),this.getScrollOffset(),this.options.lanes],(t,e,n,i)=>this.range=t.length>0&&e>0?ft({measurements:t,outerSize:e,scrollOffset:n,lanes:i}):null,{key:"calculateRange",debug:()=>this.options.debug}),this.getVirtualIndexes=B(()=>{let t=null,e=null;const n=this.calculateRange();return n&&(t=n.startIndex,e=n.endIndex),this.maybeNotify.updateDeps([this.isScrolling,t,e]),[this.options.rangeExtractor,this.options.overscan,this.options.count,t,e]},(t,e,n,i,s)=>i===null||s===null?[]:t({startIndex:i,endIndex:s,overscan:e,count:n}),{key:"getVirtualIndexes",debug:()=>this.options.debug}),this.indexFromElement=t=>{const e=this.options.indexAttribute,n=t.getAttribute(e);return n?parseInt(n,10):(console.warn(`Missing attribute name '${e}={index}' on measured element.`),-1)},this.shouldMeasureDuringScroll=t=>{var e;if(!this.scrollState||this.scrollState.behavior!=="smooth")return!0;const n=this.scrollState.index??((e=this.getVirtualItemForOffset(this.scrollState.lastTargetOffset))==null?void 0:e.index);if(n!==void 0&&this.range){const i=Math.max(this.options.overscan,Math.ceil((this.range.endIndex-this.range.startIndex)/2)),s=Math.max(0,n-i),o=Math.min(this.options.count-1,n+i);return t>=s&&t<=o}return!0},this.measureElement=t=>{if(!t){this.elementsCache.forEach((s,o)=>{s.isConnected||(this.observer.unobserve(s),this.elementsCache.delete(o))});return}const e=this.indexFromElement(t),n=this.options.getItemKey(e),i=this.elementsCache.get(n);i!==t&&(i&&this.observer.unobserve(i),this.observer.observe(t),this.elementsCache.set(n,t)),(!this.isScrolling||this.scrollState)&&this.shouldMeasureDuringScroll(e)&&this.resizeItem(e,this.options.measureElement(t,void 0,this))},this.resizeItem=(t,e)=>{var n;const i=this.measurementsCache[t];if(!i)return;const s=this.itemSizeCache.get(i.key)??i.size,o=e-s;o!==0&&(((n=this.scrollState)==null?void 0:n.behavior)!=="smooth"&&(this.shouldAdjustScrollPositionOnItemSizeChange!==void 0?this.shouldAdjustScrollPositionOnItemSizeChange(i,o,this):i.start<this.getScrollOffset()+this.scrollAdjustments)&&(this.options.debug&&console.info("correction",o),this._scrollToOffset(this.getScrollOffset(),{adjustments:this.scrollAdjustments+=o,behavior:void 0})),this.pendingMeasuredCacheIndexes.push(i.index),this.itemSizeCache=new Map(this.itemSizeCache.set(i.key,e)),this.notify(!1))},this.getVirtualItems=B(()=>[this.getVirtualIndexes(),this.getMeasurements()],(t,e)=>{const n=[];for(let i=0,s=t.length;i<s;i++){const o=t[i],p=e[o];n.push(p)}return n},{key:"getVirtualItems",debug:()=>this.options.debug}),this.getVirtualItemForOffset=t=>{const e=this.getMeasurements();if(e.length!==0)return ge(e[_e(0,e.length-1,n=>ge(e[n]).start,t)])},this.getMaxScrollOffset=()=>{if(!this.scrollElement)return 0;if("scrollHeight"in this.scrollElement)return this.options.horizontal?this.scrollElement.scrollWidth-this.scrollElement.clientWidth:this.scrollElement.scrollHeight-this.scrollElement.clientHeight;{const t=this.scrollElement.document.documentElement;return this.options.horizontal?t.scrollWidth-this.scrollElement.innerWidth:t.scrollHeight-this.scrollElement.innerHeight}},this.getOffsetForAlignment=(t,e,n=0)=>{if(!this.scrollElement)return 0;const i=this.getSize(),s=this.getScrollOffset();e==="auto"&&(e=t>=s+i?"end":"start"),e==="center"?t+=(n-i)/2:e==="end"&&(t-=i);const o=this.getMaxScrollOffset();return Math.max(Math.min(o,t),0)},this.getOffsetForIndex=(t,e="auto")=>{t=Math.max(0,Math.min(t,this.options.count-1));const n=this.getSize(),i=this.getScrollOffset(),s=this.measurementsCache[t];if(!s)return;if(e==="auto")if(s.end>=i+n-this.options.scrollPaddingEnd)e="end";else if(s.start<=i+this.options.scrollPaddingStart)e="start";else return[i,e];if(e==="end"&&t===this.options.count-1)return[this.getMaxScrollOffset(),e];const o=e==="end"?s.end+this.options.scrollPaddingEnd:s.start-this.options.scrollPaddingStart;return[this.getOffsetForAlignment(o,e,s.size),e]},this.scrollToOffset=(t,{align:e="start",behavior:n="auto"}={})=>{const i=this.getOffsetForAlignment(t,e),s=this.now();this.scrollState={index:null,align:e,behavior:n,startedAt:s,lastTargetOffset:i,stableFrames:0},this._scrollToOffset(i,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollToIndex=(t,{align:e="auto",behavior:n="auto"}={})=>{t=Math.max(0,Math.min(t,this.options.count-1));const i=this.getOffsetForIndex(t,e);if(!i)return;const[s,o]=i,p=this.now();this.scrollState={index:t,align:o,behavior:n,startedAt:p,lastTargetOffset:s,stableFrames:0},this._scrollToOffset(s,{adjustments:void 0,behavior:n}),this.scheduleScrollReconcile()},this.scrollBy=(t,{behavior:e="auto"}={})=>{const n=this.getScrollOffset()+t,i=this.now();this.scrollState={index:null,align:"start",behavior:e,startedAt:i,lastTargetOffset:n,stableFrames:0},this._scrollToOffset(n,{adjustments:void 0,behavior:e}),this.scheduleScrollReconcile()},this.getTotalSize=()=>{var t;const e=this.getMeasurements();let n;if(e.length===0)n=this.options.paddingStart;else if(this.options.lanes===1)n=((t=e[e.length-1])==null?void 0:t.end)??0;else{const i=Array(this.options.lanes).fill(null);let s=e.length-1;for(;s>=0&&i.some(o=>o===null);){const o=e[s];i[o.lane]===null&&(i[o.lane]=o.end),s--}n=Math.max(...i.filter(o=>o!==null))}return Math.max(n-this.options.scrollMargin+this.options.paddingEnd,0)},this._scrollToOffset=(t,{adjustments:e,behavior:n})=>{this.options.scrollToFn(t,{behavior:n,adjustments:e},this)},this.measure=()=>{this.itemSizeCache=new Map,this.laneAssignments=new Map,this.notify(!1)},this.setOptions(d)}scheduleScrollReconcile(){if(!this.targetWindow){this.scrollState=null;return}this.rafId==null&&(this.rafId=this.targetWindow.requestAnimationFrame(()=>{this.rafId=null,this.reconcileScroll()}))}reconcileScroll(){if(!this.scrollState||!this.scrollElement)return;if(this.now()-this.scrollState.startedAt>5e3){this.scrollState=null;return}const e=this.scrollState.index!=null?this.getOffsetForIndex(this.scrollState.index,this.scrollState.align):void 0,n=e?e[0]:this.scrollState.lastTargetOffset,i=1,s=n!==this.scrollState.lastTargetOffset;if(!s&&ct(n,this.getScrollOffset())){if(this.scrollState.stableFrames++,this.scrollState.stableFrames>=i){this.scrollState=null;return}}else this.scrollState.stableFrames=0,s&&(this.scrollState.lastTargetOffset=n,this.scrollState.behavior="auto",this._scrollToOffset(n,{adjustments:void 0,behavior:"auto"}));this.scheduleScrollReconcile()}}const _e=(a,d,t,e)=>{for(;a<=d;){const n=(a+d)/2|0,i=t(n);if(i<e)a=n+1;else if(i>e)d=n-1;else return n}return a>0?a-1:0};function ft({measurements:a,outerSize:d,scrollOffset:t,lanes:e}){const n=a.length-1,i=p=>a[p].start;if(a.length<=e)return{startIndex:0,endIndex:n};let s=_e(0,n,i,t),o=s;if(e===1)for(;o<n&&a[o].end<t+d;)o++;else if(e>1){const p=Array(e).fill(0);for(;o<n&&p.some(S=>S<t+d);){const S=a[o];p[S.lane]=S.end,o++}const f=Array(e).fill(t+d);for(;s>=0&&f.some(S=>S>=t);){const S=a[s];f[S.lane]=S.start,s--}s=Math.max(0,s-s%e),o=Math.min(n,o+(e-1-o%e))}return{startIndex:s,endIndex:o}}const mt={__name:"VirtualMessageList",props:{messages:{type:Array,required:!0,default:()=>[]},estimateSize:{type:Number,default:120}},emits:["scroll-to-bottom","load-more"],setup(a,{expose:d,emit:t}){const e=a,n=t,i=A(null),s=A(null),o=A(0),p=y(()=>s.value?(o.value,s.value.getVirtualItems()):[]),f=()=>{if(i.value)try{s.value=new pe({count:e.messages.length,getScrollElement:()=>i.value,estimateSize:()=>e.estimateSize,overscan:5,scrollMargin:0,onChange:()=>{o.value++}}),L(()=>{s.value&&i.value&&(s.value.measure(),o.value++,i.value.scrollTop=1,setTimeout(()=>{i.value&&(i.value.scrollTop=0)},50))})}catch(b){console.error("[VirtualMessageList] init failed:",b)}},S=()=>{if(!i.value)return;s.value&&s.value.measure();const{scrollTop:b,scrollHeight:l,clientHeight:C}=i.value;b<100&&n("load-more"),b+C>=l-50&&n("scroll-to-bottom")},x=()=>{i.value&&requestAnimationFrame(()=>{i.value&&(i.value.scrollTop=i.value.scrollHeight)})},O=b=>{const l=e.messages.findIndex(C=>C.id===b);l!==-1&&s.value&&s.value.scrollToIndex(l,{align:"center"})};V(()=>e.messages.length,(b,l)=>{s.value?(s.value.setOptions({count:b,estimateSize:()=>e.estimateSize}),o.value++,b>l&&L(()=>x())):L(()=>{f(),s.value&&o.value++})}),V(()=>e.messages,b=>{!s.value&&b.length>0?L(()=>f()):s.value&&(s.value.setOptions({count:b.length,estimateSize:()=>e.estimateSize,getScrollElement:()=>i.value,overscan:5,scrollMargin:0,onChange:()=>{o.value++}}),o.value++,L(()=>{s.value&&s.value.measure()}))},{deep:!0}),d({scrollToBottom:x,scrollToMessage:O}),X(()=>{L(()=>{f(),e.messages.length>0&&x()})}),re(()=>{s.value&&(s.value=null)});const g={props:e,emit:n,scrollContainer:i,virtualizer:s,updateKey:o,virtualItems:p,initVirtualizer:f,handleScroll:S,scrollToBottom:x,scrollToMessage:O,ref:A,computed:y,watch:V,onMounted:X,onUnmounted:re,nextTick:L,get Virtualizer(){return pe}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},gt={key:1,class:"fallback-list"};function pt(a,d,t,e,n,i){return c(),m("div",{ref:"scrollContainer",class:"virtual-message-list",onScroll:e.handleScroll},[e.virtualizer&&e.virtualItems.length>0?(c(),m("div",{key:0,style:te({height:`${e.virtualizer.getTotalSize()}px`,width:"100%",position:"relative"})},[(c(!0),m(D,null,Q(e.virtualItems,s=>(c(),m("div",{key:s.key,style:te({position:"absolute",top:0,left:0,width:"100%",transform:`translateY(${s.start}px)`})},[le(a.$slots,"default",{message:t.messages[s.index],index:s.index},void 0)],4))),128))],4)):(c(),m("div",gt,[(c(!0),m(D,null,Q(t.messages,(s,o)=>(c(),m("div",{key:s.id||o},[le(a.$slots,"default",{message:s,index:o},void 0)]))),128))]))],544)}const vt=K(mt,[["render",pt],["__scopeId","data-v-ff0bed80"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/components/VirtualMessageList.vue"]]),_t={__name:"IntentConfirmationMessage",props:{message:{type:Object,required:!0}},emits:["confirm","correct"],setup(a,{expose:d,emit:t}){d();const e=a,n=t,i=A(!1),s=A(""),o=y(()=>e.message.metadata?.originalInput||""),p=y(()=>e.message.metadata?.understanding||{}),f=y(()=>p.value.correctedInput||o.value),S=y(()=>p.value.intent||"未识别"),x=y(()=>p.value.keyPoints||[]),O=y(()=>f.value!==o.value&&o.value.trim()!==""),g=y(()=>e.message.metadata?.status||"pending"),b=y(()=>g.value==="confirmed"),l=y(()=>g.value==="corrected"),C=y(()=>!!e.message.metadata?.streaming),k=y(()=>e.message.metadata?.streamingTokens||0),z=y(()=>e.message.metadata?.correction||null);function P(){n("confirm",{messageId:e.message.id,originalInput:o.value,understanding:p.value})}function W(){i.value=!0,s.value=f.value}function U(){s.value.trim()&&(n("correct",{messageId:e.message.id,originalInput:o.value,correction:s.value}),i.value=!1)}function T(){i.value=!1,s.value=""}const N={props:e,emit:n,showCorrectionInput:i,correctionInput:s,originalInput:o,understanding:p,correctedInput:f,intent:S,keyPoints:x,hasCorrectedInput:O,status:g,isConfirmed:b,isCorrected:l,isStreaming:C,streamingTokens:k,correction:z,handleConfirm:P,handleCorrect:W,handleSubmitCorrection:U,handleCancelCorrection:T,ref:A,computed:y,get CheckCircleOutlined(){return Be},get ExclamationCircleOutlined(){return We},get BulbOutlined(){return Ve},get CheckOutlined(){return qe},get EditOutlined(){return Ne},get CloseOutlined(){return De},get LoadingOutlined(){return ve}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},bt={class:"intent-confirmation-message"},yt={class:"confirmation-header"},St={class:"header-icon"},kt={class:"header-text"},xt={key:0},Ct={key:1},wt={key:2},It={class:"understanding-content"},Ot={key:0,class:"original-input"},Mt={class:"label"},Et={class:"value original-text"},zt={key:1,class:"corrected-input"},Tt={class:"label"},At={class:"value corrected-text"},Pt={class:"intent-section"},Rt={class:"label"},Ft={class:"value"},Lt={key:2,class:"key-points-section"},jt={class:"label"},Dt={class:"key-points-list"},Nt={key:3,class:"correction-section"},qt={class:"label"},Vt={class:"value correction-text"},Wt={key:0,class:"streaming-indicator"},Bt={key:0,class:"streaming-tokens"},Qt={key:1,class:"action-buttons"},Ut={key:2,class:"correction-input-section"},Ht={class:"correction-actions"};function Kt(a,d,t,e,n,i){const s=R("a-button"),o=R("a-textarea");return c(),m("div",bt,[u("div",yt,[u("div",St,[e.isConfirmed?(c(),M(e.CheckCircleOutlined,{key:0,style:{color:"#52c41a"}})):e.isCorrected?(c(),M(e.ExclamationCircleOutlined,{key:1,style:{color:"#faad14"}})):(c(),M(e.BulbOutlined,{key:2,style:{color:"#1890ff"}}))]),u("div",kt,[e.isConfirmed?(c(),m("span",xt,h(a.$t("chat.intent.confirmed")),1)):e.isCorrected?(c(),m("span",Ct,h(a.$t("chat.intent.corrected")),1)):(c(),m("span",wt,h(t.message.content),1))])]),u("div",It,[e.hasCorrectedInput?(c(),m("div",Ot,[u("div",Mt,h(a.$t("chat.intent.label.original")),1),u("div",Et,h(e.originalInput),1)])):_("v-if",!0),e.hasCorrectedInput?(c(),m("div",zt,[u("div",Tt,h(a.$t("chat.intent.label.understood")),1),u("div",At,h(e.correctedInput),1)])):_("v-if",!0),u("div",Pt,[u("div",Rt,"🎯 "+h(a.$t("chat.intent.label.intent")),1),u("div",Ft,h(e.intent),1)]),e.keyPoints&&e.keyPoints.length>0?(c(),m("div",Lt,[u("div",jt,"📝 "+h(a.$t("chat.intent.label.keyPoints")),1),u("ul",Dt,[(c(!0),m(D,null,Q(e.keyPoints,(p,f)=>(c(),m("li",{key:f},h(p),1))),128))])])):_("v-if",!0),e.correction?(c(),m("div",Nt,[u("div",qt,"📝 "+h(a.$t("chat.intent.label.correction")),1),u("div",Vt,h(e.correction),1)])):_("v-if",!0)]),e.isStreaming?(c(),m("div",Wt,[v(e.LoadingOutlined,{spin:""}),u("span",null,h(a.$t("chat.intent.status.understanding")),1),e.streamingTokens>0?(c(),m("span",Bt,"· "+h(e.streamingTokens)+" tokens",1)):_("v-if",!0)])):!e.isConfirmed&&!e.isCorrected?(c(),m("div",Qt,[v(s,{type:"primary",onClick:e.handleConfirm},{default:I(()=>[v(e.CheckOutlined),E(" "+h(a.$t("chat.intent.action.confirm")),1)]),_:1}),v(s,{onClick:e.handleCorrect},{default:I(()=>[v(e.EditOutlined),E(" "+h(a.$t("chat.intent.action.correct")),1)]),_:1})])):_("v-if",!0),e.showCorrectionInput?(c(),m("div",Ut,[v(o,{value:e.correctionInput,"onUpdate:value":d[0]||(d[0]=p=>e.correctionInput=p),placeholder:a.$t("chat.intent.action.correctPlaceholder"),"auto-size":{minRows:2,maxRows:6}},null,8,["value","placeholder"]),u("div",Ht,[v(s,{type:"primary",size:"small",onClick:e.handleSubmitCorrection},{default:I(()=>[v(e.CheckOutlined),E(" "+h(a.$t("chat.intent.action.submitCorrection")),1)]),_:1}),v(s,{size:"small",onClick:e.handleCancelCorrection},{default:I(()=>[v(e.CloseOutlined),E(" "+h(a.$t("chat.intent.action.cancelCorrection")),1)]),_:1})])])):_("v-if",!0)])}const $t=K(_t,[["render",Kt],["__scopeId","data-v-62ebcfe5"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/components/IntentConfirmationMessage.vue"]]),Gt={__name:"Chat",setup(a,{expose:d}){d();const{t,tm:e,rt:n}=he(),i=ce()||null,s=de()||null,o=window.__CC_CONFIG__||{},p=y(()=>o.mode==="project"),f=fe(),S=new Set,x=A(null),O=A(""),g=y(()=>f.contextMode);function b(r){f.setContextMode(r)}const l=y(()=>f.intentEnabled);function C(r){f.setIntentEnabled(r)}const k=y(()=>f.currentSessionId),z=y(()=>k.value?f.getMessages(k.value):[]),P=y(()=>{const r=f.streaming[k.value];return r?.active?r.content:null}),W=y(()=>{const r=z.value;return P.value?[...r,{role:"assistant",content:P.value,_streaming:!0,timestamp:Date.now()}]:r}),U=y(()=>f.pendingQuestion[k.value]),T=y(()=>f.getIsLoading(k.value));function N(r){if(!r)return"";const w=new Date(r);return`${String(w.getHours()).padStart(2,"0")}:${String(w.getMinutes()).padStart(2,"0")}`}const $=ue(new Set);function be(r){$.has(r)?$.delete(r):$.add(r)}function ye(r,w){return{id:`tool-${w}`,label:r.tool||t("chat.tool.unknownTool"),detail:ne(r),status:r.status==="done"?"done":"running"}}function ne(r){if(r.status==="running"){const j=r.input&&typeof r.input=="object"?Object.keys(r.input):[];return j.length?t("chat.tool.argsPreview",{n:j.length,key:j[0]}):t("chat.tool.running")}if(r.result==null)return t("chat.tool.done");const F=(typeof r.result=="string"?r.result:JSON.stringify(r.result)).split(`
|
|
5
|
+
`)[0]||"";return F.length>48?`${F.slice(0,48)}…`:F||t("chat.tool.done")}async function Se(r){await f.createSession(r)}async function Y(){if(!O.value.trim()||T.value||!k.value)return;const r=O.value;O.value="",await f.submitUserInput(k.value,r)}function ke(r){f.confirmIntent(k.value,r.messageId)}function xe(r){f.correctIntent(k.value,r.messageId,r.correction)}const se=y(()=>{const r=f.customQuickPrompts;if(Array.isArray(r)&&r.length>0)return r;const w=e("chat.quickPrompts");return w?Object.values(w).map(F=>n(F)):[]}),G=A(!1),Z=A("");function Ce(){Z.value=se.value.join(`
|
|
6
|
+
`),G.value=!0}function we(){const r=Z.value.split(`
|
|
7
|
+
`).map(w=>w.trim()).filter(w=>w.length>0);f.setCustomQuickPrompts(r.length>0?r:null),G.value=!1}function Ie(){f.setCustomQuickPrompts(null),G.value=!1}const Oe=y(()=>t(`chat.empty.hint.${g.value}`));async function Me(r){k.value||await f.createSession("chat"),O.value=r,await Y()}function Ee(r){f.answerQuestion(k.value,r)}V([z,P],()=>{L(()=>{x.value?.scrollToBottom()})},{deep:!0});async function ee({prompt:r,autoSend:w,session:F,token:j}){if(!r||S.has(j))return;S.add(j);let q=F||k.value;q?q!==k.value&&await f.switchSession(q):q=await f.createSession("chat"),O.value=r,w!==!1&&(await L(),await Y())}function ie(){const r=i?.query||{};if(!r.prompt)return null;const w=Array.isArray(r.prompt)?r.prompt[0]:String(r.prompt);if(!w.trim())return null;const j=(Array.isArray(r.autoSend)?r.autoSend[0]:r.autoSend)!=="false",q=Array.isArray(r.session)?r.session[0]:r.session,ae=q?String(q):null,ze=`query::${w}::${ae||""}::${j}`;return{prompt:w,autoSend:j,session:ae,token:ze}}async function J(){const r=ie();if(r){await ee(r),s&&i&&s.replace({path:i.path,query:{}}).catch(()=>{});return}const w=f.pendingAutoSend;if(w?.prompt){const F=w.token||`staged::${w.prompt}::${Date.now()}`;await ee({...w,token:F}),f.clearAutoSend?.()}}i&&V(()=>[i.query.prompt,i.query.autoSend,i.query.session],()=>{J()},{immediate:!1}),V(()=>f.pendingAutoSend,()=>{J()},{deep:!0}),X(async()=>{await f.loadSessions(),await J()});const oe={t,tm:e,rt:n,route:i,router:s,cfg:o,isProject:p,chatStore:f,consumedAutoSendTokens:S,virtualListRef:x,inputText:O,contextMode:g,setContextMode:b,intentEnabled:l,setIntentEnabled:C,currentSessionId:k,currentMessages:z,streamingContent:P,messagesWithStreaming:W,pendingQuestion:U,isLoading:T,formatTime:N,expandedTools:$,toggleToolDetail:be,toToolItem:ye,toolDetail:ne,newSession:Se,sendMessage:Y,handleIntentConfirm:ke,handleIntentCorrect:xe,QUICK_PROMPTS:se,editingPrompts:G,promptDraft:Z,openPromptEditor:Ce,savePromptEditor:we,resetPromptsToDefault:Ie,emptyHint:Oe,usePrompt:Me,answerQuestion:Ee,consumeAutoSend:ee,readAutoSendFromQuery:ie,handleAutoSendIfPending:J,ref:A,reactive:ue,computed:y,watch:V,nextTick:L,onMounted:X,get useRoute(){return ce},get useRouter(){return de},get MessageOutlined(){return Je},get RobotOutlined(){return Ge},get SendOutlined(){return $e},get FolderOutlined(){return Ke},get GlobalOutlined(){return He},get UserOutlined(){return Ue},get FileTextOutlined(){return Qe},get useI18n(){return he},get useChatStore(){return fe},ToolInvocationCard:it,MarkdownRenderer:rt,VirtualMessageList:vt,IntentConfirmationMessage:$t,get MessageType(){return Pe}};return Object.defineProperty(oe,"__isScriptSetup",{enumerable:!1,value:!0}),oe}},Jt={style:{display:"flex",height:"calc(100vh - 56px - 48px)",gap:"16px"}},Xt={style:{width:"240px","flex-shrink":"0",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},Yt={key:0,style:{padding:"6px 12px 4px","font-size":"11px",color:"#1677ff",background:"rgba(22,119,255,.07)","border-bottom":"1px solid rgba(22,119,255,.15)",display:"flex","align-items":"center",gap:"4px"}},Zt=["title"],en={key:1,style:{padding:"6px 12px 4px","font-size":"11px",color:"#722ed1",background:"rgba(114,46,209,.07)","border-bottom":"1px solid rgba(114,46,209,.15)",display:"flex","align-items":"center",gap:"4px"}},tn={style:{padding:"10px 12px","border-bottom":"1px solid var(--border-color)",display:"flex",gap:"8px"}},nn={style:{flex:"1","overflow-y":"auto",padding:"8px"}},sn=["onClick"],on={class:"session-icon"},an={class:"session-info"},ln={class:"session-title"},rn={class:"session-meta"},cn={key:0,style:{"text-align":"center",color:"var(--text-muted)",padding:"24px 0","font-size":"13px"}},dn={style:{flex:"1",background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)",display:"flex","flex-direction":"column",overflow:"hidden"}},un={key:0,style:{flex:"1",display:"flex","flex-direction":"column","align-items":"center","justify-content":"center",color:"var(--text-muted)"}},hn={style:{"font-size":"16px","margin-bottom":"8px",color:"#777"}},fn={style:{"font-size":"13px",color:"var(--text-muted)"}},mn={style:{"margin-top":"24px",display:"flex",gap:"12px"}},gn={key:1,class:"chat-header"},pn={class:"chat-intent-toggle"},vn={class:"chat-intent-toggle-label"},_n={key:2,class:"chat-area-body"},bn={key:0,class:"chat-empty-prompts"},yn={class:"empty-title"},Sn={class:"empty-hint"},kn={class:"quick-prompts"},xn={class:"system-banner"},Cn={class:"tool-msg"},wn={key:0,class:"tool-detail"},In={class:"tool-detail__pre tool-detail__pre--input"},On={key:0,class:"tool-detail__result"},Mn={class:"tool-detail__pre tool-detail__pre--result"},En={class:"msg-body"},zn={class:"msg-meta-row"},Tn={class:"msg-role"},An={class:"msg-time"},Pn={key:0,class:"msg-tokens"},Rn={key:0,class:"bubble user"},Fn={key:2,class:"question-card"},Ln={class:"question-text"},jn={key:0,style:{display:"flex","flex-wrap":"wrap",gap:"8px","margin-top":"10px"}},Dn={key:3,style:{padding:"16px","border-top":"1px solid var(--border-color)"}},Nn={style:{display:"flex",gap:"8px","align-items":"flex-end"}},qn={style:{"margin-bottom":"8px","font-size":"12px",color:"var(--text-muted)"}},Vn={style:{"margin-top":"8px"}};function Wn(a,d,t,e,n,i){const s=R("a-button"),o=R("a-radio-button"),p=R("a-radio-group"),f=R("a-switch"),S=R("a-tooltip"),x=R("a-avatar"),O=R("a-input-search"),g=R("a-textarea"),b=R("a-modal");return c(),m("div",Jt,[_(" Session Sidebar "),u("div",Xt,[_(" Project/Global Scope Indicator "),e.isProject?(c(),m("div",Yt,[v(e.FolderOutlined),u("span",{style:{overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap"},title:e.cfg.projectRoot},h(e.cfg.projectName||a.$t("chat.scope.fallbackProjectName")),9,Zt)])):(c(),m("div",en,[v(e.GlobalOutlined),u("span",null,h(a.$t("chat.scope.globalSessions")),1)])),u("div",tn,[v(s,{type:"primary",size:"small",style:{flex:"1"},onClick:d[0]||(d[0]=l=>e.newSession("chat"))},{icon:I(()=>[v(e.MessageOutlined)]),default:I(()=>[E(" "+h(a.$t("chat.newChat")),1)]),_:1}),v(s,{size:"small",style:{flex:"1"},onClick:d[1]||(d[1]=l=>e.newSession("agent"))},{icon:I(()=>[v(e.RobotOutlined)]),default:I(()=>[E(" "+h(a.$t("chat.newAgent")),1)]),_:1})]),u("div",nn,[(c(!0),m(D,null,Q(e.chatStore.sessions,l=>(c(),m("div",{key:l.id,class:H(["session-item",{active:l.id===e.chatStore.currentSessionId}]),onClick:C=>e.chatStore.switchSession(l.id)},[u("span",on,h(l.type==="agent"?"🤖":"💬"),1),u("div",an,[u("div",ln,h(l.title||a.$t("chat.session.untitled")),1),u("div",rn,h(a.$t("chat.session.messageCountSuffix",{n:l.messageCount||0})),1)])],10,sn))),128)),e.chatStore.sessions.length?_("v-if",!0):(c(),m("div",cn,h(a.$t("chat.sidebarEmpty")),1))])]),_(" Chat Area "),u("div",dn,[_(" Empty State "),e.currentSessionId?_("v-if",!0):(c(),m("div",un,[d[7]||(d[7]=u("div",{style:{"font-size":"48px","margin-bottom":"16px"}},"💬",-1)),u("div",hn,h(a.$t("chat.empty.title")),1),u("div",fn,h(a.$t("chat.empty.subtitle")),1),u("div",mn,[v(s,{type:"primary",onClick:d[2]||(d[2]=l=>e.newSession("chat"))},{default:I(()=>[E(h(a.$t("chat.empty.newChat")),1)]),_:1}),v(s,{style:{},onClick:d[3]||(d[3]=l=>e.newSession("agent"))},{default:I(()=>[E(h(a.$t("chat.empty.newAgent")),1)]),_:1})])])),_(" Chat header: context mode + intent toggle "),e.currentSessionId?(c(),m("div",gn,[v(p,{value:e.contextMode,size:"small","button-style":"solid","onUpdate:value":e.setContextMode},{default:I(()=>[v(o,{value:"project",disabled:!e.isProject},{default:I(()=>[v(e.FolderOutlined),E(" "+h(a.$t("chat.contextMode.project")),1)]),_:1},8,["disabled"]),v(o,{value:"file",disabled:""},{default:I(()=>[v(e.FileTextOutlined),E(" "+h(a.$t("chat.contextMode.file")),1)]),_:1}),v(o,{value:"global"},{default:I(()=>[v(e.GlobalOutlined),E(" "+h(a.$t("chat.contextMode.global")),1)]),_:1})]),_:1},8,["value"]),e.contextMode!=="global"?(c(),M(S,{key:0,title:a.$t("chat.intent.toggleHint"),placement:"bottom"},{default:I(()=>[u("label",pn,[v(f,{checked:e.intentEnabled,size:"small","onUpdate:checked":e.setIntentEnabled},null,8,["checked"]),u("span",vn,h(a.$t("chat.intent.toggleLabel")),1)])]),_:1},8,["title"])):_("v-if",!0)])):_("v-if",!0),_(" Messages "),e.currentSessionId?(c(),m("div",_n,[_(" Empty state with quick prompts when session has no messages "),e.messagesWithStreaming.length===0?(c(),m("div",bn,[d[8]||(d[8]=u("div",{class:"empty-icon"},"💬",-1)),u("div",yn,h(a.$t("chat.empty.startTitle")),1),u("div",Sn,h(e.emptyHint),1),u("div",kn,[(c(!0),m(D,null,Q(e.QUICK_PROMPTS,l=>(c(),M(s,{key:l,size:"small",class:"quick-prompt-btn",onClick:C=>e.usePrompt(l)},{default:I(()=>[E(h(l),1)]),_:2},1032,["onClick"]))),128)),v(s,{size:"small",type:"dashed",class:"quick-prompt-btn quick-prompt-edit",onClick:e.openPromptEditor},{default:I(()=>[E(h(a.$t("chat.quickPromptsEditor.openButton")),1)]),_:1})])])):(c(),M(e.VirtualMessageList,{key:1,ref:"virtualListRef",messages:e.messagesWithStreaming,"estimate-size":120,class:"chat-virtual-list"},{default:I(({message:l,index:C})=>[u("div",{class:H(["message-row",l.role])},[_(" Intent confirmation card (V5 parity) "),l.type===e.MessageType.INTENT_CONFIRMATION?(c(),M(e.IntentConfirmationMessage,{key:0,message:l,onConfirm:e.handleIntentConfirm,onCorrect:e.handleIntentCorrect},null,8,["message"])):l.role==="system"?(c(),m(D,{key:1},[_(" System banner (follow-up intent feedback etc.) "),u("div",xn,h(l.content),1)],2112)):l.role==="tool"?(c(),m(D,{key:2},[_(" Tool message "),u("div",Cn,[v(e.ToolInvocationCard,{item:e.toToolItem(l,C),expandable:"",expanded:e.expandedTools.has(C),onToggle:k=>e.toggleToolDetail(C)},null,8,["item","expanded","onToggle"]),e.expandedTools.has(C)?(c(),m("div",wn,[u("pre",In,h(JSON.stringify(l.input,null,2)),1),l.result?(c(),m("div",On,[u("pre",Mn,h(typeof l.result=="string"?l.result:JSON.stringify(l.result,null,2)),1)])):_("v-if",!0)])):_("v-if",!0)])],2112)):(c(),m(D,{key:3},[_(" User / Assistant message with avatar + meta row "),u("div",{class:H(["msg-with-avatar",l.role])},[v(x,{size:32,style:te({backgroundColor:l.role==="user"?"#1890ff":"#52c41a",flexShrink:0})},{icon:I(()=>[l.role==="user"?(c(),M(e.UserOutlined,{key:0})):(c(),M(e.RobotOutlined,{key:1}))]),_:2},1032,["style"]),u("div",En,[u("div",zn,[u("span",Tn,h(l.role==="user"?a.$t("chat.role.me"):"AI"),1),u("span",An,h(e.formatTime(l.timestamp)),1),l.tokens?(c(),m("span",Pn,"· "+h(l.tokens)+" tokens",1)):_("v-if",!0)]),l.role==="user"?(c(),m("div",Rn,h(l.content),1)):(c(),M(e.MarkdownRenderer,{key:1,class:H(["bubble assistant",{streaming:l._streaming}]),content:l.content},null,8,["class","content"]))])],2)],2112))],2)]),_:1},8,["messages"])),_(" Interactive Question (sticky below the list) "),e.pendingQuestion?(c(),m("div",Fn,[u("div",Ln,h(e.pendingQuestion.question),1),e.pendingQuestion.choices?.length?(c(),m("div",jn,[(c(!0),m(D,null,Q(e.pendingQuestion.choices,l=>(c(),M(s,{key:l,size:"small",onClick:C=>e.answerQuestion(l)},{default:I(()=>[E(h(l),1)]),_:2},1032,["onClick"]))),128))])):(c(),M(O,{key:1,placeholder:a.$t("chat.input.answerPlaceholder"),"enter-button":a.$t("chat.input.send"),style:{"margin-top":"10px"},onSearch:e.answerQuestion},null,8,["placeholder","enter-button"]))])):_("v-if",!0)])):_("v-if",!0),_(" Input Area "),e.currentSessionId?(c(),m("div",Dn,[u("div",Nn,[v(g,{value:e.inputText,"onUpdate:value":d[4]||(d[4]=l=>e.inputText=l),placeholder:e.isLoading?a.$t("chat.input.loading"):a.$t("chat.input.placeholder"),"auto-size":{minRows:1,maxRows:6},disabled:e.isLoading,style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)",color:"var(--text-primary)",resize:"none",flex:"1"},onKeydown:Te(Ae(e.sendMessage,["exact","prevent"]),["enter"])},null,8,["value","placeholder","disabled","onKeydown"]),v(s,{type:"primary",loading:e.isLoading,onClick:e.sendMessage,style:{height:"40px"}},{icon:I(()=>[v(e.SendOutlined)]),_:1},8,["loading"])])])):_("v-if",!0)]),_(` Custom quick-prompts editor (Improvement 4) — placed at root so the
|
|
8
|
+
chat-area-body's v-if/v-else pair stays unbroken. `),v(b,{open:e.editingPrompts,"onUpdate:open":d[6]||(d[6]=l=>e.editingPrompts=l),title:a.$t("chat.quickPromptsEditor.title"),"ok-text":a.$t("chat.quickPromptsEditor.save"),"cancel-text":a.$t("chat.quickPromptsEditor.cancel"),onOk:e.savePromptEditor},{default:I(()=>[u("div",qn,h(a.$t("chat.quickPromptsEditor.hint")),1),v(g,{value:e.promptDraft,"onUpdate:value":d[5]||(d[5]=l=>e.promptDraft=l),rows:8,placeholder:a.$t("chat.quickPromptsEditor.placeholder")},null,8,["value","placeholder"]),u("div",Vn,[v(s,{size:"small",onClick:e.resetPromptsToDefault},{default:I(()=>[E(h(a.$t("chat.quickPromptsEditor.reset")),1)]),_:1})])]),_:1},8,["open","title","ok-text","cancel-text"])])}const Gn=K(Gt,[["render",Wn],["__scopeId","data-v-ef077a5e"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/views/Chat.vue"]]);export{Gn as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-BvqAck49.js";import{_ as k}from"./index-
|
|
1
|
+
import{I as v,P as u,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-BvqAck49.js";import{_ as k}from"./index-CzeRvhia.js";import"./icons-DP3uiYxy.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),m=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),f=String(e.getMonth()+1).padStart(2,"0"),g=String(e.getDate()).padStart(2,"0"),b=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${f}-${g} ${b}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:m,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},T={class:"bubble"},M={class:"meta"},R={class:"actor"},V={class:"time"},q={class:"body"};function D(c,d,t,r,i,l){const o=v("a-tag");return u(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",T,[n("div",M,[n("span",R,a(r.actorLabel),1),n("span",V,a(r.formattedTime),1)]),n("div",q,a(r.messageText),1),t.event.source.adapter?(u(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const A=k(N,[["render",D],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-sT7rhN/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as o,i as E,f as V,P as W}from"./index-
|
|
1
|
+
import{h as o,i as E,f as V,P as W}from"./index-CzeRvhia.js";import{d as F,r as f,w as I,c as h}from"./vendor-BvqAck49.js";import{i as M}from"./initDefaultProps-DHRWNV-y.js";var R=function(t,l){var c={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&l.indexOf(n)<0&&(c[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,n=Object.getOwnPropertySymbols(t);a<n.length;a++)l.indexOf(n[a])<0&&Object.prototype.propertyIsEnumerable.call(t,n[a])&&(c[n[a]]=t[n[a]]);return c};const T={prefixCls:String,name:String,id:String,type:String,defaultChecked:{type:[Boolean,Number],default:void 0},checked:{type:[Boolean,Number],default:void 0},disabled:Boolean,tabindex:{type:[Number,String]},readonly:Boolean,autofocus:Boolean,value:W.any,required:Boolean},J=F({compatConfig:{MODE:3},name:"Checkbox",inheritAttrs:!1,props:M(T,{prefixCls:"rc-checkbox",type:"checkbox",defaultChecked:!1}),emits:["click","change"],setup(t,l){let{attrs:c,emit:n,expose:a}=l;const d=f(t.checked===void 0?t.defaultChecked:t.checked),s=f();I(()=>t.checked,()=>{d.value=t.checked}),a({focus(){var e;(e=s.value)===null||e===void 0||e.focus()},blur(){var e;(e=s.value)===null||e===void 0||e.blur()}});const i=f(),y=e=>{if(t.disabled)return;t.checked===void 0&&(d.value=e.target.checked),e.shiftKey=i.value;const u={target:o(o({},t),{checked:e.target.checked}),stopPropagation(){e.stopPropagation()},preventDefault(){e.preventDefault()},nativeEvent:e};t.checked!==void 0&&(s.value.checked=!!t.checked),n("change",u),i.value=!1},k=e=>{n("click",e),i.value=e.shiftKey};return()=>{const{prefixCls:e,name:u,id:m,type:g,disabled:b,readonly:x,tabindex:C,autofocus:O,value:P,required:S}=t,_=R(t,["prefixCls","name","id","type","disabled","readonly","tabindex","autofocus","value","required"]),{class:j,onFocus:B,onBlur:w,onKeydown:K,onKeypress:N,onKeyup:D}=c,v=o(o({},_),c),$=Object.keys(v).reduce((p,r)=>((r.startsWith("data-")||r.startsWith("aria-")||r==="role")&&(p[r]=v[r]),p),{}),q=E(e,j,{[`${e}-checked`]:d.value,[`${e}-disabled`]:b}),A=o(o({name:u,id:m,type:g,readonly:x,disabled:b,tabindex:C,class:`${e}-input`,checked:!!d.value,autofocus:O,value:P},$),{onChange:y,onClick:k,onFocus:B,onBlur:w,onKeydown:K,onKeypress:N,onKeyup:D,required:S});return h("span",{class:q},[h("input",V({ref:s},A),null),h("span",{class:`${e}-inner`},null)])}}});export{J as V};
|