chainlesschain 0.162.181 → 0.162.182

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/package.json +2 -1
  2. package/scripts/build-windows-sandbox-helper.ps1 +163 -0
  3. package/src/assets/web-panel/assets/{AIOps-cq0dwbnf.js → AIOps-DzZ5_xoj.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CvcgGl3w.js → ActionButton-DeLXddIg.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-hM2-jFqg.js → Analytics-rvDCmet1.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-B9_Gsd_g.js → AppLayout-Yt6QVDnp.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-B7bu52Og.js → Artifacts-BS112K5L.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DThfDgqB.js → Audit-0wJuQrNu.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-DjlFiD4v.js → BackgroundAgents-B90PMgbn.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-CK9xJKnG.js → Backup-TkgMglQQ.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-DEiSU8K8.js → BaseInput-CQVS9p1l.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-CpT96czj.js → Chat-YTjQHoC7.js} +5 -5
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BKPPNmZI.js → ChatBubbleRenderer-PR074hUN.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-C1GfDnO0.js → Checkbox-5bwaOabq.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-3DAKgiLx.js → Codegen-BFmNQ_Xe.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-74cOwZU1.js → Col-BT_u4Dzp.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-tn9Kkz9j.js → Community-CJP52u5b.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-BcoXH7m4.js → Compact-BpzhJE9i.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-DIPGUBgi.js → Compliance-Cg7rfslp.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-doD5_91c.js → Cowork-JisxL6Yy.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-C-IDvubz.js → Cron-Bu7Ug_MC.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-CdcCoBdj.js → Crosschain-CvuqoLdj.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-DdH5aMMA.js → DID-C2u9G8Pu.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-DHLA4mm0.js → Dashboard-BFt5Yv3d.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-dEeCt7Md.js → Dropdown-DIaT9Wxq.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-BMaecFv9.js → EmailListRenderer-D_A601Y4.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DUaUukTN.js → FamilyGuardDashboard--IyQ8I8w.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-CMBE0_rp.js → Federation-BihWHxuY.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-PG-JDbXq.js → FormItemContext-BB8dOXc_.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-Bcb0p88m.js → GenericCardRenderer-DQYhj1HH.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-Bgv15myB.js → Git-B-2QZxGf.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-DB8YTArI.js → Governance-CusSb-nG.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-BQMwCWaS.js → Inference-BAjmvPPL.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-B1_ZziiB.js → KnowledgeGraph-DoNYWKYq.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-DovEEnt_.js → Logs-B8fKWD-n.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-D201OL4T.js → MarkdownRenderer-BlJm1J7E.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-BlCXSpyB.js → Marketplace-CyOscbSL.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-CsCR09Wj.js → McpTools-Ex6Om5da.js} +5 -5
  39. package/src/assets/web-panel/assets/{Memory-CBVRLKno.js → Memory-CDcD8l8r.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-C9OIafgA.js → MobileBridge-xfBqoFDg.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-D_zoJ8Xs.js → MobileProjects-BwObMMA2.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-vE-HdvLj.js → Mtc-CIWd36OV.js} +5 -5
  43. package/src/assets/web-panel/assets/{MtcAudit-CPLaekCd.js → MtcAudit-CPX0ouuA.js} +4 -4
  44. package/src/assets/web-panel/assets/{Multisig-C_UP9C2o.js → Multisig-BDJsIUuW.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-2nODJcU1.js → NLProgramming-DEkbuD3N.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-BhE-SJGu.js → Notes-DJpHRhH1.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-D21q7BNU.js → NotificationSettings-C1UZ-Qd5.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-0b62GYOD.js → OrderTableRenderer-GlJtqLjT.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-CEqmw_sb.js → Organization-Bbhj0fac.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-MW-gMDO_.js → Overflow-1H04x3kx.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-CY0hjI_G.js → P2P-CDpPe3et.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-BbWh7Man.js → PdhVaultBrowser-MUX0Bpvw.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-ChqEA_4Q.js → Permissions-A07-0Ci1.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-B3YrbYfD.js → PersonalDataHub-DhhDWxAZ.js} +5 -5
  55. package/src/assets/web-panel/assets/{Pipeline-B8WBhhlW.js → Pipeline-CyfbJfe-.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-Cmb0PXNx.js → Privacy-CNFps3ED.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-hF6zW3Nz.js → ProjectInit--T-u3Dr5.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-BFSVfpW0.js → ProjectSettings-DJmrK2fC.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-DAWkVFkc.js → Projects-Qx_MdX9k.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-B8yux8Dx.js → Providers-DLzzbOZd.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-N76cQluO.js → QrScannerModal-CexOomKS.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-ClvZ0KYR.js → QuickAsk-QklGi19_.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-B-GfgBpT.js → Recommend-Bb9kwSw8.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-mlglCdQi.js → RemoteSession-DZuVNNN5.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-DJIZzQeG.js → Reputation-Dr5cLP0N.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-COzxu_bb.js → Row-oCQHYv5t.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CoYsJQuE.js → RssFeed-IFDEykIR.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-DC77Mq9S.js → Search-CspVIxDc.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-Loy2EdMO.js → Security-Bm66o_DH.js} +3 -3
  70. package/src/assets/web-panel/assets/{Services-GUD07Eu0.js → Services-DvanNqXl.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-DWzkptYU.js → Skeleton-CHjEe9_O.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-CEDn1r-Z.js → Skills-Cb8jWjMX.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-ub_k4pXh.js → Sla-DxZm1491.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-D7HLX9CA.js → SpeechSettings-DWxEEclC.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-DbwOvl6m.js → SyncSettings-FIvOFw5p.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-CBQzoAu5.js → Tasks-CyuLnDFR.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-BNVeIhud.js → Templates-CaNjzV_t.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-PS9AzhXU.js → Tenant-DjlP6TmH.js} +1 -1
  79. package/src/assets/web-panel/assets/Terminal-DwzGMniO.js +3 -0
  80. package/src/assets/web-panel/assets/{TimelineRenderer-CrmXMOkg.js → TimelineRenderer-DoZ8y7y8.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-DD-VDHw1.js → Tokens-390cg2TC.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-BsoN_n-n.js → Trigger-CLrtCj5_.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-n8LmN4ZV.js → Trust-DpESfSPn.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-C9_7MImA.js → UkeySign-CN6279O0.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-DyBteNgn.js → VideoEditing-DPtAUlSe.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-BS5ixeXI.js → Wallet-nKOMV_1n.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-spc4UImU.js → WebAuthn-HuXlSOc4.js} +5 -5
  88. package/src/assets/web-panel/assets/{WorkflowEditor-D7iVvaBO.js → WorkflowEditor-CUfFjARi.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-6CmBkHrL.js → chat-6Eq0PcZJ.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-BGoCLkxI.js → colors-BP_Sf6Iy.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-fYZBetMO.js → compact-item-BufMKIh5.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-BeM-1UVj.js → createContext-BBMXxWSW.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DgVKduH2.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-CE7ZuEnV.js → hasIn-fUK_tRO2.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-QIpnpZgz.js → index-2A5ph8b2.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BU_2qiDk.js → index-3FuwBewR.js} +1 -1
  97. package/src/assets/web-panel/assets/{index--lap6cf7.js → index-6GmBa4Kg.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-De0quFDw.js → index-B2vS66eI.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-D1r9tT3J.js → index-B7Etk0Te.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-YjcumOZ4.js → index-B9WYSn4m.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-MtOuq2i6.js → index-BHy6yNiF.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-RMZ8a7Yt.js → index-BMLHv389.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-C0v6YKKO.js → index-BWKoBU8R.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CRnUE8Cb.js → index-Bkg4ZePE.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BsMfoaeo.js → index-C44atv4k.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DoXk5KJ8.js → index-CE2DdTP2.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-B4wiTEOM.js → index-CGjmILDm.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-zb7rVOhV.js → index-CW_G-MXw.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-ATcSr_2O.js → index-CZ6Yt17L.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C9Y3k0HI.js → index-CeASi4fr.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-B2U-ObMq.js → index-CgiECHu2.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Puq6Luf1.js → index-Cp8vhyZy.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BV551878.js → index-CwSf5pnf.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BowH1eLQ.js → index-D4_MuGkd.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-B3CDgvNW.js → index-D9vU25ij.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-WUrJ6S1j.js → index-DASluSqY.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CRLjEP1H.js → index-DLpIs_P_.js} +1 -1
  118. package/src/assets/web-panel/assets/index-DOZTSoS7.js +1 -0
  119. package/src/assets/web-panel/assets/{index-DT3zPSVX.js → index-DPdUNk1i.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BunaQCa0.js → index-DVsqvI4M.js} +1 -1
  121. package/src/assets/web-panel/assets/index-DhpvjpqI.js +1 -0
  122. package/src/assets/web-panel/assets/{index-CIpVrf5P.js → index-DmkMXwnR.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-lJBjB1QX.js → index-DocdRcbd.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-BEVm0lCS.js → index-Dyngbd29.js} +19 -19
  125. package/src/assets/web-panel/assets/{index-C4SJVjs4.js → index-GwdRUZ-x.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-ukg99D1V.js → index-LvCBfTLo.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BfPL-m46.js → index-cpEli44X.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-CpIGIB85.js → index-fzaMtSJ8.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-BNZDILcO.js → index-pum7HYBA.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-Dw1PyYPm.js → index-t8N1tSeX.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Cip8emOQ.js → index-uCbEN7cY.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-DsvfrESp.js → index-wKTLbKyc.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-B8BsdNV_.js → index-wV6iGdpY.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-CYHMs1ag.js → initDefaultProps-V5Fo95FM.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-DDB2Ffk5.js → motion-BYWU0hUT.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-Bg3cD-dX.js → move-Cr1M-J2h.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-B5nedjTS.js → mtc-parser-BysQKi2N.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-BHyuUILu.js → omit-D1zHU8GC.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-C9YQnEN9.js → pickAttrs-CUArxtfi.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-DBUFYUe7.js → placementArrow-ChoYEys0.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-nBs2Obnk.js → responsiveObserve-BQRs3Mo7.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-DkCEaXNU.js → slide-B8zbsCkg.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-aqE1Wi6U.js → statusUtils-C2U8Gs6h.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-CN5bhfHB.js → styleChecker-Dd8MgL_V.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-B_oX_kvJ.js → useFlexGapSupport-hknqY5NH.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-rCuXHeme.js → useFs-CLTAmcfw.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-DZR9Abyd.js → usePersonalDataHub-ByegHbiB.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-ConCYQlX.js → vnode-DqlAy5DP.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-CUdDxG5M.js → zoom-DiXiztQn.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/commands/agenda.js +115 -3
  152. package/src/commands/agent.js +6 -0
  153. package/src/data/changelog.json +13 -0
  154. package/src/gateways/terminal/PtyManager.js +45 -4
  155. package/src/gateways/ws/ws-server.js +10 -1
  156. package/src/harness/background-task-manager.js +70 -2
  157. package/src/harness/worktree-isolator.js +14 -3
  158. package/src/lib/agent-core.js +1 -0
  159. package/src/lib/agent-schedule-store.js +45 -22
  160. package/src/lib/hook-runner.js +6 -2
  161. package/src/lib/packer/pkg-config-generator.js +3 -1
  162. package/src/lib/plugin-runtime/bin.js +1148 -70
  163. package/src/lib/plugin-runtime/manifest.js +68 -12
  164. package/src/lib/plugin-runtime/scopes.js +20 -10
  165. package/src/lib/process-execution-broker/index.js +375 -48
  166. package/src/lib/process-execution-broker/platform-sandbox.js +3831 -276
  167. package/src/lib/process-execution-broker/windows-sandbox-helper.dll +0 -0
  168. package/src/lib/process-execution-broker/windows-sandbox-helper.exe +0 -0
  169. package/src/lib/process-execution-broker/windows-sandbox.cs +3856 -0
  170. package/src/lib/repl-bang-memorize.js +67 -10
  171. package/src/lib/slash-commands.js +27 -4
  172. package/src/repl/agent-repl.js +4 -3
  173. package/src/runtime/agent-core.js +376 -52
  174. package/src/runtime/agent-runtime.js +13 -1
  175. package/src/runtime/headless-runner.js +4 -3
  176. package/src/assets/web-panel/assets/Terminal-Cgb4eLB_.js +0 -3
  177. package/src/assets/web-panel/assets/devWarning-BzPwHnw8.js +0 -1
  178. package/src/assets/web-panel/assets/index-DacrAdc-.js +0 -1
  179. package/src/assets/web-panel/assets/index-EHzNJozo.js +0 -1
  180. package/src/lib/process-execution-broker/windows-sandbox.ps1 +0 -999
@@ -1,9 +1,9 @@
1
- import{b as v,r as D,I as k,P as p,J as L,c as e,K as t,U as d,Q as l,R as a,S as B,F,Z as se,_ as W,V as m,o as z,x as $,$ as fe,N as J,f as ee,M as te,w as ne,a0 as me}from"./vendor-Bn1JzzAn.js";import{u as H,_ as Z,E as ke,a as oe,b as ie,c as ae,T as ge,d as V}from"./index-BEVm0lCS.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{R as _e,B as de,M as ue,F as Oe,U as he,D as be,S as we,h as ve,i as Le,j as Se,N as Ce,k as Ee,l as Te,m as Ae,n as Be,A as Me,P as Re,o as De,p as Pe,q as Ue,r as je,s as Ne,t as Fe,u as Ie,v as Ke,w as Ve,x as We,y as ze,V as Ge,K as He,z as qe,G as Je,H as Ye,J as Ze,O as Qe,W as Xe,Q as xe,X as $e,Y as et,Z as tt,_ as nt,$ as ot,a0 as it,a1 as at,a2 as lt,a3 as rt,a4 as st,a5 as dt,a6 as ut,e as ct,a7 as yt,a8 as pt,a9 as ft,aa as mt,ab as kt,ac as gt,ad as _t}from"./icons-DG5UD-6K.js";import le from"./index-ATcSr_2O.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BHyuUILu.js";import"./pickAttrs-C9YQnEN9.js";import"./initDefaultProps-CYHMs1ag.js";import"./motion-DDB2Ffk5.js";import"./raf-Deuc0E8-.js";import"./index-YjcumOZ4.js";import"./index-Dw1PyYPm.js";import"./isVisible-C7tPsqfj.js";import"./useState-CnxtbLoC.js";import"./devWarning-BzPwHnw8.js";import"./compact-item-fYZBetMO.js";import"./createContext-BeM-1UVj.js";import"./Compact-BcoXH7m4.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-CN5bhfHB.js";import"./zoom-CUdDxG5M.js";import"./ActionButton-CvcgGl3w.js";import"./vnode-ConCYQlX.js";const Ot=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,T={notifications:D([]),unreadCount:D(0)};function G(i){if(i&&i.ok===!1)throw new Error(i.error||"notification handler failed");return i?.result??i}function re(){const i=H();async function u({limit:o=50,offset:s=0,isRead:f}={}){if(!N().isEmbedded)return T.notifications.value=[],T.unreadCount.value=0,T.notifications.value;const _=await i.sendRaw({type:"notification.list",limit:o,offset:s,isRead:f},15e3),O=G(_);if(O?.success===!1)throw new Error(O.error||"notification.list failed");return T.notifications.value=Array.isArray(O?.notifications)?O.notifications:[],await S(),T.notifications.value}async function S(){if(!N().isEmbedded)return T.unreadCount.value=0,0;const o=await i.sendRaw({type:"notification.unread-count"},1e4),s=G(o);return T.unreadCount.value=Number(s?.count)||0,T.unreadCount.value}async function n(o){if(o==null||o==="")throw new Error("id is required");if(!N().isEmbedded)return;const s=await i.sendRaw({type:"notification.mark-read",id:o},1e4),f=G(s);if(f?.success===!1)throw new Error(f.error||"notification.mark-read failed");const _=T.notifications.value.find(O=>O.id===o);_&&(_.is_read=1),await S()}async function g(){if(!N().isEmbedded)return;const o=await i.sendRaw({type:"notification.mark-all-read"},1e4),s=G(o);if(s?.success===!1)throw new Error(s.error||"notification.mark-all-read failed");for(const f of T.notifications.value)f.is_read=1;T.unreadCount.value=0}async function h(o,s=""){if(!N().isEmbedded)throw new Error("桌面通知仅在嵌入式 web-shell 中可用");const f=await i.sendRaw({type:"notification.send-desktop",title:o,body:s},1e4),_=G(f);if(_?.success===!1)throw new Error(_.error||"notification.send-desktop failed")}return{notifications:v(()=>T.notifications.value),unreadCount:v(()=>T.unreadCount.value),refresh:u,refreshUnreadCount:S,markRead:n,markAllRead:g,sendDesktop:h}}const ht={__name:"NotificationBell",setup(i,{expose:u}){u();const S=D(!1),n=D("all"),g=D(!1),{notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:_}=re();function O(){P()}z(()=>{window.addEventListener("cc:open-notification-drawer",O)}),$(()=>{window.removeEventListener("cc:open-notification-drawer",O)});const M=v(()=>n.value==="unread"?h.value.filter(c=>!c.is_read):h.value);async function C(){if(N().isEmbedded){g.value=!0;try{await s({limit:100})}catch{}finally{g.value=!1}}}async function P(){S.value=!0,await C()}async function U(c){if(!c.is_read)try{await f(c.id)}catch{}}async function r(){try{await _()}catch(c){console.warn("[NotificationBell] markAllRead failed:",c?.message||c)}}function w(c){if(!c)return"";const b=typeof c=="string"?Date.parse(c):Number(c);if(!Number.isFinite(b))return String(c);const R=Date.now()-b,j=6e4,I=60*j,K=24*I;return R<j?"刚刚":R<I?`${Math.floor(R/j)} 分钟前`:R<K?`${Math.floor(R/I)} 小时前`:new Date(b).toLocaleDateString()}const A={visible:S,filter:n,loading:g,notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:_,_onOpenEvent:O,filtered:M,refreshList:C,onOpen:P,onItemClick:U,onMarkAllRead:r,formatTime:w,ref:D,computed:v,onMounted:z,onUnmounted:$,get Empty(){return ke},get BellOutlined(){return de},get ReloadOutlined(){return _e},get useNotifications(){return re},get useShellMode(){return N}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},bt={class:"notif-toolbar"},wt={class:"notif-body"},vt={key:2,class:"notif-list"},Lt=["onClick"],St={class:"notif-row"},Ct={class:"notif-title"},Et={class:"notif-time"},Tt={key:0,class:"notif-message"};function At(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip"),f=k("a-radio-button"),_=k("a-radio-group"),O=k("a-space"),M=k("a-button"),C=k("a-empty"),P=k("a-spin"),U=k("a-drawer");return p(),L(F,null,[e(s,{title:"通知"},{default:t(()=>[e(o,{count:n.unreadCount,"overflow-count":99,offset:[-4,4]},{default:t(()=>[d("button",{type:"button",class:"notif-bell-btn","aria-label":"通知",onClick:n.onOpen},[e(n.BellOutlined)])]),_:1},8,["count"])]),_:1}),e(U,{open:n.visible,"onUpdate:open":u[1]||(u[1]=r=>n.visible=r),title:"通知中心",placement:"right",width:400,"body-style":{padding:0}},{default:t(()=>[d("div",bt,[e(O,null,{default:t(()=>[e(_,{value:n.filter,"onUpdate:value":u[0]||(u[0]=r=>n.filter=r),size:"small","button-style":"solid"},{default:t(()=>[e(f,{value:"all"},{default:t(()=>[l("全部 ("+a(n.notifications.length)+")",1)]),_:1}),e(f,{value:"unread"},{default:t(()=>[l("未读 ("+a(n.unreadCount)+")",1)]),_:1})]),_:1},8,["value"])]),_:1}),e(O,null,{default:t(()=>[e(M,{size:"small",loading:n.loading,onClick:n.refreshList},{icon:t(()=>[e(n.ReloadOutlined)]),_:1},8,["loading"]),e(M,{size:"small",disabled:n.unreadCount===0,onClick:n.onMarkAllRead},{default:t(()=>[...u[2]||(u[2]=[l(" 全部已读 ",-1)])]),_:1},8,["disabled"])]),_:1})]),d("div",wt,[!n.loading&&n.filtered.length===0?(p(),B(C,{key:0,description:"暂无通知",image:n.Empty.PRESENTED_IMAGE_SIMPLE,style:{padding:"60px 0"}},null,8,["image"])):n.loading?(p(),B(P,{key:1,style:{display:"block",padding:"60px"}})):(p(),L("ul",vt,[(p(!0),L(F,null,se(n.filtered,r=>(p(),L("li",{key:r.id,class:W(["notif-item",{unread:!r.is_read}]),onClick:w=>n.onItemClick(r)},[d("div",St,[d("div",Ct,a(r.title||r.message||"(无标题)"),1),d("span",Et,a(n.formatTime(r.created_at)),1)]),r.message&&r.title?(p(),L("div",Tt,a(r.message),1)):m("v-if",!0)],10,Lt))),128))]))])]),_:1},8,["open"])],64)}const Bt=Z(ht,[["render",At],["__scopeId","data-v-8c1554dd"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/components/NotificationBell.vue"]]),Mt={__name:"MobileBridgeHeaderStatus",setup(i,{expose:u}){u();function S(r){if(!r)return[];try{return JSON.parse(r)}catch{}const w=String(r).split(`
2
- `),A=w.findIndex(c=>{const b=c.trim();if(!b)return!1;const R=b[0];if(R!=="["&&R!=="{")return!1;if(b.length===1)return!0;const j=b[1];return!(j>="A"&&j<="Z"||j>="a"&&j<="z")});if(A<0)return[];for(let c=w.length-1;c>=A;c--){const b=w[c].trim();if(/^[\]\}]/.test(b)&&!/^[\]\}][A-Za-z]/.test(b))try{return JSON.parse(w.slice(A,c+1).join(`
3
- `))}catch{return[]}}return[]}const n=J(),g=H(),h=D([]);let o=null;const s=v(()=>h.value.length),f=v(()=>h.value.filter(r=>M(r)).length),_=v(()=>s.value===0?"var(--text-muted, #999)":"#52c41a"),O=v(()=>s.value===0?"尚未配对任何手机 — 点击进入配对":`已配对 ${s.value} 台手机 — 点击进入管理`);function M(r){if(!r)return!1;if(typeof r.online=="boolean")return r.online;const w=(r.status||"").toLowerCase();return w==="online"||w==="connected"||w==="active"||w==="paired"}async function C(){if(g.status==="connected")try{const{output:r}=await g.execute("p2p devices --type mobile --json",1e4);h.value=S(r)||[]}catch{}}function P(){n.push("/mobile-bridge")}z(()=>{C(),o=setInterval(C,5e3)}),ee(()=>{o&&(clearInterval(o),o=null)});const U={parseJsonOutput:S,router:n,ws:g,devices:h,get pollTimer(){return o},set pollTimer(r){o=r},totalCount:s,onlineCount:f,iconColor:_,tooltip:O,isOnline:M,refresh:C,onClick:P,ref:D,computed:v,onMounted:z,onBeforeUnmount:ee,get useRouter(){return J},get MobileOutlined(){return ue},get useWsStore(){return H}};return Object.defineProperty(U,"__isScriptSetup",{enumerable:!1,value:!0}),U}},Rt={key:0,class:"mbh-count"};function Dt(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip");return p(),B(s,{title:n.tooltip},{default:t(()=>[e(o,{count:n.totalCount,"show-zero":!1,"overflow-count":9,offset:[-2,4]},{default:t(()=>[d("button",{type:"button",class:W(["mbh-btn",{"mbh-btn--active":n.totalCount>0}]),onClick:n.onClick},[e(n.MobileOutlined,{style:fe({color:n.iconColor,fontSize:"14px"})},null,8,["style"]),n.totalCount>0?(p(),L("span",Rt,a(n.totalCount),1)):m("v-if",!0)],2)]),_:1},8,["count"])]),_:1},8,["title"])}const Pt=Z(Mt,[["render",Dt],["__scopeId","data-v-e8ef01d6"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/components/MobileBridgeHeaderStatus.vue"]]),Y="cc.web-panel.sidebar.openKeys",Ut={__name:"AppLayout",setup(i,{expose:u}){u();const S=J(),n=te(),g=H(),h=oe(),{t:o}=ie(),s=N(),f=D(!1),_=window.__CC_CONFIG__||{},O=v(()=>_.mode==="project"),M="v5.0.3.135",C=v(()=>h.current),P=v(()=>h.config.vars["--menu-mode"]),U=v(()=>{const y=n.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[y]||y]}),r=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function w(){try{const y=localStorage.getItem(Y);if(y){const E=JSON.parse(y);if(Array.isArray(E))return E.filter(q=>r.includes(q))}}catch{}return[...r]}const A=D(w());ne(A,y=>{try{localStorage.setItem(Y,JSON.stringify(y))}catch{}},{deep:!0});const c=v(()=>g.status),b=v(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[g.status]||"default"),R=v(()=>{const y=`appLayout.footerStatus.${g.status}`,E=o(y);return E===y?o("appLayout.footerStatus.unknown"):E});function j(y){h.setTheme(y)}const{current:I,supported:K,setLocale:Q}=ae();function ce(){const y=K[(K.indexOf(I.value)+1)%K.length];Q(y)}async function X(y){try{const E=await g.sendRaw({type:"window.open",role:y},1e4);if(E?.ok===!1){V.error(`打开失败:${E.error||"未知"}`);return}const q=E?.result??E;q?.reason==="role_reserved"?V.warning("该窗口角色被保留"):q?.reason}catch(E){V.error(`打开桌面窗口失败:${E.message||E}`)}}async function ye(){le.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const y=await g.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(y?.ok===!1)throw new Error(y.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(y){const E=y instanceof Error?y.message:String(y);V.error("切换失败:"+E)}}})}function pe({key:y}){if(typeof y=="string"&&y.startsWith("desktop:")){X(y);return}S.push({mcp:"/mcp"}[y]||`/${y}`)}z(()=>g.connect());const x={router:S,route:n,ws:g,themeStore:h,t:o,shellMode:s,collapsed:f,cfg:_,isProject:O,PRODUCT_VERSION:M,currentTheme:C,menuTheme:P,selectedKeys:U,ALL_GROUP_KEYS:r,OPEN_KEYS_LS:Y,loadOpenKeys:w,openKeys:A,wsStatus:c,statusBadge:b,statusText:R,setTheme:j,locale:I,SUPPORTED_LOCALES:K,setLocale:Q,toggleLocale:ce,openDesktopWindow:X,switchToDesktopShell:ye,onMenuClick:pe,ref:D,computed:v,onMounted:z,watch:ne,get useRouter(){return J},get useRoute(){return te},get DashboardOutlined(){return _t},get MessageOutlined(){return gt},get RocketOutlined(){return kt},get AppstoreOutlined(){return mt},get ApiOutlined(){return ft},get FolderOutlined(){return pt},get GlobalOutlined(){return yt},get InfoCircleOutlined(){return ct},get ControlOutlined(){return ut},get FileTextOutlined(){return dt},get CloudServerOutlined(){return st},get BookOutlined(){return rt},get BranchesOutlined(){return lt},get ClockCircleOutlined(){return at},get ThunderboltOutlined(){return it},get ApartmentOutlined(){return ot},get SafetyCertificateOutlined(){return nt},get LockOutlined(){return tt},get WifiOutlined(){return et},get CodeOutlined(){return $e},get ProjectOutlined(){return xe},get WalletOutlined(){return Xe},get TeamOutlined(){return Qe},get BarChartOutlined(){return Ze},get BlockOutlined(){return Ye},get CloudUploadOutlined(){return Je},get ReadOutlined(){return qe},get KeyOutlined(){return He},get VideoCameraOutlined(){return Ge},get ShareAltOutlined(){return ze},get IdcardOutlined(){return We},get UsergroupAddOutlined(){return Ve},get ShoppingOutlined(){return Ke},get SwapOutlined(){return Ie},get AlertOutlined(){return Fe},get SafetyOutlined(){return Ne},get ExperimentOutlined(){return je},get DeploymentUnitOutlined(){return Ue},get BulbOutlined(){return Pe},get BankOutlined(){return De},get PartitionOutlined(){return Re},get AuditOutlined(){return Me},get FileSearchOutlined(){return Be},get TrophyOutlined(){return Ae},get FireOutlined(){return Te},get SearchOutlined(){return Ee},get NumberOutlined(){return Ce},get ClusterOutlined(){return Se},get SoundOutlined(){return Le},get DesktopOutlined(){return ve},get BellOutlined(){return de},get SyncOutlined(){return we},get MobileOutlined(){return ue},get DatabaseOutlined(){return be},get UnorderedListOutlined(){return he},get FileDoneOutlined(){return Oe},get message(){return V},get Modal(){return le},get useWsStore(){return H},get useThemeStore(){return oe},get THEMES(){return ge},get logoSrc(){return Ot},get useShellMode(){return N},get useI18n(){return ie},get useLocale(){return ae},NotificationBell:Bt,MobileBridgeHeaderStatus:Pt};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},jt=["src"],Nt={key:0,class:"logo-text"},Ft={key:0,class:"mode-banner project"},It={class:"banner-info"},Kt={class:"banner-name"},Vt={class:"banner-sub"},Wt={key:1,class:"mode-banner global"},zt={class:"banner-name"},Gt=["title"],Ht={class:"group-label"},qt={class:"group-label"},Jt={class:"group-label"},Yt={class:"group-label"},Zt={class:"group-label"},Qt={class:"group-label"},Xt={class:"group-label"},xt={class:"group-label"},$t={class:"group-label"},en={key:0,class:"footer-text"},tn={class:"header-left"},nn={class:"header-right"},on={class:"theme-switcher"},an=["data-theme-key","onClick"],ln=["data-locale"],rn={class:"lang-switch-label"},sn={class:"version-tag"};function dn(i,u,S,n,g,h){const o=k("a-menu-item"),s=k("a-sub-menu"),f=k("a-menu-divider"),_=k("a-menu"),O=k("a-badge"),M=k("a-layout-sider"),C=k("a-tooltip"),P=k("a-tag"),U=k("a-layout-header"),r=k("router-view"),w=k("a-layout-content"),A=k("a-layout");return p(),B(A,{class:"app-root"},{default:t(()=>[m(" ── Sidebar ─────────────────────────────────────────────────── "),e(M,{collapsed:n.collapsed,"onUpdate:collapsed":u[2]||(u[2]=c=>n.collapsed=c),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[m(" Logo "),d("div",{class:W(["logo",{collapsed:n.collapsed}])},[d("img",{src:n.logoSrc,alt:"ChainlessChain",class:"logo-icon"},null,8,jt),n.collapsed?m("v-if",!0):(p(),L("span",Nt,"ChainlessChain"))],2),m(" Mode banner "),n.collapsed?(p(),L("div",{key:1,class:"mode-icon-sm",title:n.isProject?n.cfg.projectName:i.$t("appLayout.scope.global")},[n.isProject?(p(),B(n.FolderOutlined,{key:0,style:{color:"#1677ff"}})):(p(),B(n.GlobalOutlined,{key:1,style:{color:"#722ed1"}}))],8,Gt)):(p(),L(F,{key:0},[n.isProject?(p(),L("div",Ft,[e(n.FolderOutlined,{class:"banner-icon"}),d("div",It,[d("div",Kt,a(n.cfg.projectName||i.$t("appLayout.scope.fallbackProject")),1),d("div",Vt,a(i.$t("appLayout.scope.projectPanel")),1)])])):(p(),L("div",Wt,[e(n.GlobalOutlined,{class:"banner-icon"}),d("span",zt,a(i.$t("appLayout.scope.global")),1)]))],64)),m(" Navigation "),e(_,{selectedKeys:n.selectedKeys,"onUpdate:selectedKeys":u[0]||(u[0]=c=>n.selectedKeys=c),openKeys:n.openKeys,"onUpdate:openKeys":u[1]||(u[1]=c=>n.openKeys=c),theme:n.menuTheme,mode:"inline","inline-collapsed":n.collapsed,class:"side-menu",onClick:n.onMenuClick},{default:t(()=>[n.collapsed?(p(),L(F,{key:1},[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),n.shellMode.isEmbedded?(p(),L(F,{key:0},[e(f,{class:"divider-sm"}),e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),_:1})],64)):m("v-if",!0)],64)):(p(),L(F,{key:0},[e(s,{key:"g-overview"},{title:t(()=>[d("span",Ht,a(i.$t("appLayout.groups.overview")),1)]),default:t(()=>[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.dashboard")),1)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.chat")),1)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.quickAsk")),1)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cowork")),1)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.services")),1)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.aiops")),1)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tokens")),1)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.logs")),1)]),_:1})]),_:1}),e(s,{key:"g-config"},{title:t(()=>[d("span",qt,a(i.$t("appLayout.groups.config")),1)]),default:t(()=>[e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.skills")),1)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.providers")),1)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mcp")),1)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projectSettings")),1)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.speechSettings")),1)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notificationSettings")),1)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.syncSettings")),1)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.nlprog")),1)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.codegen")),1)]),_:1})]),_:1}),e(s,{key:"g-data"},{title:t(()=>[d("span",Jt,a(i.$t("appLayout.groups.data")),1)]),default:t(()=>[e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notes")),1)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.search")),1)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.memory")),1)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.knowledge")),1)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),default:t(()=>[u[3]||(u[3]=l("个人数据中台",-1))]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),default:t(()=>[u[4]||(u[4]=l("数据浏览器",-1))]),_:1}),e(o,{key:"family-guard"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[u[5]||(u[5]=l("家庭守护",-1))]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.marketplace")),1)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cron")),1)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.workflow")),1)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.pipeline")),1)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tasks")),1)]),_:1}),e(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[u[6]||(u[6]=l("后台 Agent",-1))]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),default:t(()=>[u[7]||(u[7]=l("交付物",-1))]),_:1})]),_:1}),e(s,{key:"g-advanced"},{title:t(()=>[d("span",Yt,a(i.$t("appLayout.groups.advanced")),1)]),default:t(()=>[e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.security")),1)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.ukeySign")),1)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.trust")),1)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.audit")),1)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtc")),1)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtcAudit","MTC 审计")),1)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.multisig","M-of-N 多签")),1)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.did")),1)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.permissions")),1)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.p2p")),1)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileBridge","移动桥")),1)]),_:1}),e(o,{key:"remote-session"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.remoteSession","远程会话")),1)]),_:1}),e(o,{key:"mobile-projects"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileProjects","手机项目 (v0.2)")),1)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.terminal","远程终端")),1)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.backup")),1)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.git")),1)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projects")),1)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.crosschain")),1)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.compliance")),1)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.privacy")),1)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.inference")),1)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.federation")),1)]),_:1})]),_:1}),e(s,{key:"g-enterprise"},{title:t(()=>[d("span",Zt,a(i.$t("appLayout.groups.enterprise")),1)]),default:t(()=>[e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.wallet")),1)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.organization")),1)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tenant")),1)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.sla")),1)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.analytics")),1)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.templates")),1)]),_:1})]),_:1}),e(s,{key:"g-social"},{title:t(()=>[d("span",Qt,a(i.$t("appLayout.groups.social")),1)]),default:t(()=>[e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.community")),1)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.governance")),1)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.reputation")),1)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.recommend")),1)]),_:1})]),_:1}),e(s,{key:"g-media"},{title:t(()=>[d("span",Xt,a(i.$t("appLayout.groups.media")),1)]),default:t(()=>[e(o,{key:"video"},{icon:t(()=>[e(n.VideoCameraOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.video")),1)]),_:1})]),_:1}),e(s,{key:"g-extension"},{title:t(()=>[d("span",xt,a(i.$t("appLayout.groups.extension")),1)]),default:t(()=>[e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.rssfeed")),1)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.webauthn")),1)]),_:1})]),_:1}),m(` Desktop-only group — only shown in the embedded web-shell. Each
1
+ import{b as v,r as D,I as k,P as p,J as L,c as e,K as t,U as d,Q as l,R as a,S as B,F,Z as se,_ as W,V as m,o as z,x as $,$ as fe,N as J,f as ee,M as te,w as ne,a0 as me}from"./vendor-Bn1JzzAn.js";import{u as G,_ as Y,E as ke,a as oe,b as ie,c as ae,T as ge,d as V}from"./index-Dyngbd29.js";import{u as N}from"./useShellMode-CgR0wCYM.js";import{R as _e,B as de,M as ue,F as Oe,U as he,D as be,S as we,h as ve,i as Le,j as Se,N as Ce,k as Ae,l as Ee,m as Te,n as Be,A as Me,P as Re,o as De,p as Pe,q as Ue,r as je,s as Ne,t as Fe,u as Ie,v as Ke,w as Ve,x as We,y as ze,V as He,K as Ge,z as qe,G as Je,H as Xe,J as Ye,O as Ze,W as Qe,Q as xe,X as $e,Y as et,Z as tt,_ as nt,$ as ot,a0 as it,a1 as at,a2 as lt,a3 as rt,a4 as st,a5 as dt,a6 as ut,e as ct,a7 as yt,a8 as pt,a9 as ft,aa as mt,ab as kt,ac as gt,ad as _t}from"./icons-DG5UD-6K.js";import le from"./index-CZ6Yt17L.js";import"./KeyCode-D63Tfrq7.js";import"./omit-D1zHU8GC.js";import"./pickAttrs-CUArxtfi.js";import"./initDefaultProps-V5Fo95FM.js";import"./motion-BYWU0hUT.js";import"./raf-Deuc0E8-.js";import"./index-B9WYSn4m.js";import"./index-t8N1tSeX.js";import"./isVisible-C7tPsqfj.js";import"./useState-CnxtbLoC.js";import"./devWarning-DgVKduH2.js";import"./compact-item-BufMKIh5.js";import"./createContext-BBMXxWSW.js";import"./Compact-BpzhJE9i.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-Dd8MgL_V.js";import"./zoom-DiXiztQn.js";import"./ActionButton-DeLXddIg.js";import"./vnode-DqlAy5DP.js";const Ot=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,E={notifications:D([]),unreadCount:D(0)};function H(i){if(i&&i.ok===!1)throw new Error(i.error||"notification handler failed");return i?.result??i}function re(){const i=G();async function u({limit:o=50,offset:s=0,isRead:f}={}){if(!N().isEmbedded)return E.notifications.value=[],E.unreadCount.value=0,E.notifications.value;const _=await i.sendRaw({type:"notification.list",limit:o,offset:s,isRead:f},15e3),O=H(_);if(O?.success===!1)throw new Error(O.error||"notification.list failed");return E.notifications.value=Array.isArray(O?.notifications)?O.notifications:[],await S(),E.notifications.value}async function S(){if(!N().isEmbedded)return E.unreadCount.value=0,0;const o=await i.sendRaw({type:"notification.unread-count"},1e4),s=H(o);return E.unreadCount.value=Number(s?.count)||0,E.unreadCount.value}async function n(o){if(o==null||o==="")throw new Error("id is required");if(!N().isEmbedded)return;const s=await i.sendRaw({type:"notification.mark-read",id:o},1e4),f=H(s);if(f?.success===!1)throw new Error(f.error||"notification.mark-read failed");const _=E.notifications.value.find(O=>O.id===o);_&&(_.is_read=1),await S()}async function g(){if(!N().isEmbedded)return;const o=await i.sendRaw({type:"notification.mark-all-read"},1e4),s=H(o);if(s?.success===!1)throw new Error(s.error||"notification.mark-all-read failed");for(const f of E.notifications.value)f.is_read=1;E.unreadCount.value=0}async function h(o,s=""){if(!N().isEmbedded)throw new Error("桌面通知仅在嵌入式 web-shell 中可用");const f=await i.sendRaw({type:"notification.send-desktop",title:o,body:s},1e4),_=H(f);if(_?.success===!1)throw new Error(_.error||"notification.send-desktop failed")}return{notifications:v(()=>E.notifications.value),unreadCount:v(()=>E.unreadCount.value),refresh:u,refreshUnreadCount:S,markRead:n,markAllRead:g,sendDesktop:h}}const ht={__name:"NotificationBell",setup(i,{expose:u}){u();const S=D(!1),n=D("all"),g=D(!1),{notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:_}=re();function O(){P()}z(()=>{window.addEventListener("cc:open-notification-drawer",O)}),$(()=>{window.removeEventListener("cc:open-notification-drawer",O)});const M=v(()=>n.value==="unread"?h.value.filter(c=>!c.is_read):h.value);async function C(){if(N().isEmbedded){g.value=!0;try{await s({limit:100})}catch{}finally{g.value=!1}}}async function P(){S.value=!0,await C()}async function U(c){if(!c.is_read)try{await f(c.id)}catch{}}async function r(){try{await _()}catch(c){console.warn("[NotificationBell] markAllRead failed:",c?.message||c)}}function w(c){if(!c)return"";const b=typeof c=="string"?Date.parse(c):Number(c);if(!Number.isFinite(b))return String(c);const R=Date.now()-b,j=6e4,I=60*j,K=24*I;return R<j?"刚刚":R<I?`${Math.floor(R/j)} 分钟前`:R<K?`${Math.floor(R/I)} 小时前`:new Date(b).toLocaleDateString()}const T={visible:S,filter:n,loading:g,notifications:h,unreadCount:o,refresh:s,markRead:f,markAllRead:_,_onOpenEvent:O,filtered:M,refreshList:C,onOpen:P,onItemClick:U,onMarkAllRead:r,formatTime:w,ref:D,computed:v,onMounted:z,onUnmounted:$,get Empty(){return ke},get BellOutlined(){return de},get ReloadOutlined(){return _e},get useNotifications(){return re},get useShellMode(){return N}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}},bt={class:"notif-toolbar"},wt={class:"notif-body"},vt={key:2,class:"notif-list"},Lt=["onClick"],St={class:"notif-row"},Ct={class:"notif-title"},At={class:"notif-time"},Et={key:0,class:"notif-message"};function Tt(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip"),f=k("a-radio-button"),_=k("a-radio-group"),O=k("a-space"),M=k("a-button"),C=k("a-empty"),P=k("a-spin"),U=k("a-drawer");return p(),L(F,null,[e(s,{title:"通知"},{default:t(()=>[e(o,{count:n.unreadCount,"overflow-count":99,offset:[-4,4]},{default:t(()=>[d("button",{type:"button",class:"notif-bell-btn","aria-label":"通知",onClick:n.onOpen},[e(n.BellOutlined)])]),_:1},8,["count"])]),_:1}),e(U,{open:n.visible,"onUpdate:open":u[1]||(u[1]=r=>n.visible=r),title:"通知中心",placement:"right",width:400,"body-style":{padding:0}},{default:t(()=>[d("div",bt,[e(O,null,{default:t(()=>[e(_,{value:n.filter,"onUpdate:value":u[0]||(u[0]=r=>n.filter=r),size:"small","button-style":"solid"},{default:t(()=>[e(f,{value:"all"},{default:t(()=>[l("全部 ("+a(n.notifications.length)+")",1)]),_:1}),e(f,{value:"unread"},{default:t(()=>[l("未读 ("+a(n.unreadCount)+")",1)]),_:1})]),_:1},8,["value"])]),_:1}),e(O,null,{default:t(()=>[e(M,{size:"small",loading:n.loading,onClick:n.refreshList},{icon:t(()=>[e(n.ReloadOutlined)]),_:1},8,["loading"]),e(M,{size:"small",disabled:n.unreadCount===0,onClick:n.onMarkAllRead},{default:t(()=>[...u[2]||(u[2]=[l(" 全部已读 ",-1)])]),_:1},8,["disabled"])]),_:1})]),d("div",wt,[!n.loading&&n.filtered.length===0?(p(),B(C,{key:0,description:"暂无通知",image:n.Empty.PRESENTED_IMAGE_SIMPLE,style:{padding:"60px 0"}},null,8,["image"])):n.loading?(p(),B(P,{key:1,style:{display:"block",padding:"60px"}})):(p(),L("ul",vt,[(p(!0),L(F,null,se(n.filtered,r=>(p(),L("li",{key:r.id,class:W(["notif-item",{unread:!r.is_read}]),onClick:w=>n.onItemClick(r)},[d("div",St,[d("div",Ct,a(r.title||r.message||"(无标题)"),1),d("span",At,a(n.formatTime(r.created_at)),1)]),r.message&&r.title?(p(),L("div",Et,a(r.message),1)):m("v-if",!0)],10,Lt))),128))]))])]),_:1},8,["open"])],64)}const Bt=Y(ht,[["render",Tt],["__scopeId","data-v-8c1554dd"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/components/NotificationBell.vue"]]),Mt={__name:"MobileBridgeHeaderStatus",setup(i,{expose:u}){u();function S(r){if(!r)return[];try{return JSON.parse(r)}catch{}const w=String(r).split(`
2
+ `),T=w.findIndex(c=>{const b=c.trim();if(!b)return!1;const R=b[0];if(R!=="["&&R!=="{")return!1;if(b.length===1)return!0;const j=b[1];return!(j>="A"&&j<="Z"||j>="a"&&j<="z")});if(T<0)return[];for(let c=w.length-1;c>=T;c--){const b=w[c].trim();if(/^[\]\}]/.test(b)&&!/^[\]\}][A-Za-z]/.test(b))try{return JSON.parse(w.slice(T,c+1).join(`
3
+ `))}catch{return[]}}return[]}const n=J(),g=G(),h=D([]);let o=null;const s=v(()=>h.value.length),f=v(()=>h.value.filter(r=>M(r)).length),_=v(()=>s.value===0?"var(--text-muted, #999)":"#52c41a"),O=v(()=>s.value===0?"尚未配对任何手机 — 点击进入配对":`已配对 ${s.value} 台手机 — 点击进入管理`);function M(r){if(!r)return!1;if(typeof r.online=="boolean")return r.online;const w=(r.status||"").toLowerCase();return w==="online"||w==="connected"||w==="active"||w==="paired"}async function C(){if(g.status==="connected")try{const{output:r}=await g.execute("p2p devices --type mobile --json",1e4);h.value=S(r)||[]}catch{}}function P(){n.push("/mobile-bridge")}z(()=>{C(),o=setInterval(C,5e3)}),ee(()=>{o&&(clearInterval(o),o=null)});const U={parseJsonOutput:S,router:n,ws:g,devices:h,get pollTimer(){return o},set pollTimer(r){o=r},totalCount:s,onlineCount:f,iconColor:_,tooltip:O,isOnline:M,refresh:C,onClick:P,ref:D,computed:v,onMounted:z,onBeforeUnmount:ee,get useRouter(){return J},get MobileOutlined(){return ue},get useWsStore(){return G}};return Object.defineProperty(U,"__isScriptSetup",{enumerable:!1,value:!0}),U}},Rt={key:0,class:"mbh-count"};function Dt(i,u,S,n,g,h){const o=k("a-badge"),s=k("a-tooltip");return p(),B(s,{title:n.tooltip},{default:t(()=>[e(o,{count:n.totalCount,"show-zero":!1,"overflow-count":9,offset:[-2,4]},{default:t(()=>[d("button",{type:"button",class:W(["mbh-btn",{"mbh-btn--active":n.totalCount>0}]),onClick:n.onClick},[e(n.MobileOutlined,{style:fe({color:n.iconColor,fontSize:"14px"})},null,8,["style"]),n.totalCount>0?(p(),L("span",Rt,a(n.totalCount),1)):m("v-if",!0)],2)]),_:1},8,["count"])]),_:1},8,["title"])}const Pt=Y(Mt,[["render",Dt],["__scopeId","data-v-e8ef01d6"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/components/MobileBridgeHeaderStatus.vue"]]),X="cc.web-panel.sidebar.openKeys",Ut={__name:"AppLayout",setup(i,{expose:u}){u();const S=J(),n=te(),g=G(),h=oe(),{t:o}=ie(),s=N(),f=D(!1),_=window.__CC_CONFIG__||{},O=v(()=>_.mode==="project"),M="v5.0.3.135",C=v(()=>h.current),P=v(()=>h.config.vars["--menu-mode"]),U=v(()=>{const y=n.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[y]||y]}),r=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function w(){try{const y=localStorage.getItem(X);if(y){const A=JSON.parse(y);if(Array.isArray(A))return A.filter(q=>r.includes(q))}}catch{}return[...r]}const T=D(w());ne(T,y=>{try{localStorage.setItem(X,JSON.stringify(y))}catch{}},{deep:!0});const c=v(()=>g.status),b=v(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[g.status]||"default"),R=v(()=>{const y=`appLayout.footerStatus.${g.status}`,A=o(y);return A===y?o("appLayout.footerStatus.unknown"):A});function j(y){h.setTheme(y)}const{current:I,supported:K,setLocale:Z}=ae();function ce(){const y=K[(K.indexOf(I.value)+1)%K.length];Z(y)}async function Q(y){try{const A=await g.sendRaw({type:"window.open",role:y},1e4);if(A?.ok===!1){V.error(`打开失败:${A.error||"未知"}`);return}const q=A?.result??A;q?.reason==="role_reserved"?V.warning("该窗口角色被保留"):q?.reason}catch(A){V.error(`打开桌面窗口失败:${A.message||A}`)}}async function ye(){le.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const y=await g.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(y?.ok===!1)throw new Error(y.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(y){const A=y instanceof Error?y.message:String(y);V.error("切换失败:"+A)}}})}function pe({key:y}){if(typeof y=="string"&&y.startsWith("desktop:")){Q(y);return}S.push({mcp:"/mcp"}[y]||`/${y}`)}z(()=>g.connect());const x={router:S,route:n,ws:g,themeStore:h,t:o,shellMode:s,collapsed:f,cfg:_,isProject:O,PRODUCT_VERSION:M,currentTheme:C,menuTheme:P,selectedKeys:U,ALL_GROUP_KEYS:r,OPEN_KEYS_LS:X,loadOpenKeys:w,openKeys:T,wsStatus:c,statusBadge:b,statusText:R,setTheme:j,locale:I,SUPPORTED_LOCALES:K,setLocale:Z,toggleLocale:ce,openDesktopWindow:Q,switchToDesktopShell:ye,onMenuClick:pe,ref:D,computed:v,onMounted:z,watch:ne,get useRouter(){return J},get useRoute(){return te},get DashboardOutlined(){return _t},get MessageOutlined(){return gt},get RocketOutlined(){return kt},get AppstoreOutlined(){return mt},get ApiOutlined(){return ft},get FolderOutlined(){return pt},get GlobalOutlined(){return yt},get InfoCircleOutlined(){return ct},get ControlOutlined(){return ut},get FileTextOutlined(){return dt},get CloudServerOutlined(){return st},get BookOutlined(){return rt},get BranchesOutlined(){return lt},get ClockCircleOutlined(){return at},get ThunderboltOutlined(){return it},get ApartmentOutlined(){return ot},get SafetyCertificateOutlined(){return nt},get LockOutlined(){return tt},get WifiOutlined(){return et},get CodeOutlined(){return $e},get ProjectOutlined(){return xe},get WalletOutlined(){return Qe},get TeamOutlined(){return Ze},get BarChartOutlined(){return Ye},get BlockOutlined(){return Xe},get CloudUploadOutlined(){return Je},get ReadOutlined(){return qe},get KeyOutlined(){return Ge},get VideoCameraOutlined(){return He},get ShareAltOutlined(){return ze},get IdcardOutlined(){return We},get UsergroupAddOutlined(){return Ve},get ShoppingOutlined(){return Ke},get SwapOutlined(){return Ie},get AlertOutlined(){return Fe},get SafetyOutlined(){return Ne},get ExperimentOutlined(){return je},get DeploymentUnitOutlined(){return Ue},get BulbOutlined(){return Pe},get BankOutlined(){return De},get PartitionOutlined(){return Re},get AuditOutlined(){return Me},get FileSearchOutlined(){return Be},get TrophyOutlined(){return Te},get FireOutlined(){return Ee},get SearchOutlined(){return Ae},get NumberOutlined(){return Ce},get ClusterOutlined(){return Se},get SoundOutlined(){return Le},get DesktopOutlined(){return ve},get BellOutlined(){return de},get SyncOutlined(){return we},get MobileOutlined(){return ue},get DatabaseOutlined(){return be},get UnorderedListOutlined(){return he},get FileDoneOutlined(){return Oe},get message(){return V},get Modal(){return le},get useWsStore(){return G},get useThemeStore(){return oe},get THEMES(){return ge},get logoSrc(){return Ot},get useShellMode(){return N},get useI18n(){return ie},get useLocale(){return ae},NotificationBell:Bt,MobileBridgeHeaderStatus:Pt};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},jt=["src"],Nt={key:0,class:"logo-text"},Ft={key:0,class:"mode-banner project"},It={class:"banner-info"},Kt={class:"banner-name"},Vt={class:"banner-sub"},Wt={key:1,class:"mode-banner global"},zt={class:"banner-name"},Ht=["title"],Gt={class:"group-label"},qt={class:"group-label"},Jt={class:"group-label"},Xt={class:"group-label"},Yt={class:"group-label"},Zt={class:"group-label"},Qt={class:"group-label"},xt={class:"group-label"},$t={class:"group-label"},en={key:0,class:"footer-text"},tn={class:"header-left"},nn={class:"header-right"},on={class:"theme-switcher"},an=["data-theme-key","onClick"],ln=["data-locale"],rn={class:"lang-switch-label"},sn={class:"version-tag"};function dn(i,u,S,n,g,h){const o=k("a-menu-item"),s=k("a-sub-menu"),f=k("a-menu-divider"),_=k("a-menu"),O=k("a-badge"),M=k("a-layout-sider"),C=k("a-tooltip"),P=k("a-tag"),U=k("a-layout-header"),r=k("router-view"),w=k("a-layout-content"),T=k("a-layout");return p(),B(T,{class:"app-root"},{default:t(()=>[m(" ── Sidebar ─────────────────────────────────────────────────── "),e(M,{collapsed:n.collapsed,"onUpdate:collapsed":u[2]||(u[2]=c=>n.collapsed=c),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[m(" Logo "),d("div",{class:W(["logo",{collapsed:n.collapsed}])},[d("img",{src:n.logoSrc,alt:"ChainlessChain",class:"logo-icon"},null,8,jt),n.collapsed?m("v-if",!0):(p(),L("span",Nt,"ChainlessChain"))],2),m(" Mode banner "),n.collapsed?(p(),L("div",{key:1,class:"mode-icon-sm",title:n.isProject?n.cfg.projectName:i.$t("appLayout.scope.global")},[n.isProject?(p(),B(n.FolderOutlined,{key:0,style:{color:"#1677ff"}})):(p(),B(n.GlobalOutlined,{key:1,style:{color:"#722ed1"}}))],8,Ht)):(p(),L(F,{key:0},[n.isProject?(p(),L("div",Ft,[e(n.FolderOutlined,{class:"banner-icon"}),d("div",It,[d("div",Kt,a(n.cfg.projectName||i.$t("appLayout.scope.fallbackProject")),1),d("div",Vt,a(i.$t("appLayout.scope.projectPanel")),1)])])):(p(),L("div",Wt,[e(n.GlobalOutlined,{class:"banner-icon"}),d("span",zt,a(i.$t("appLayout.scope.global")),1)]))],64)),m(" Navigation "),e(_,{selectedKeys:n.selectedKeys,"onUpdate:selectedKeys":u[0]||(u[0]=c=>n.selectedKeys=c),openKeys:n.openKeys,"onUpdate:openKeys":u[1]||(u[1]=c=>n.openKeys=c),theme:n.menuTheme,mode:"inline","inline-collapsed":n.collapsed,class:"side-menu",onClick:n.onMenuClick},{default:t(()=>[n.collapsed?(p(),L(F,{key:1},[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),_:1}),e(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),_:1}),e(f,{class:"divider-sm"}),e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),_:1}),n.shellMode.isEmbedded?(p(),L(F,{key:0},[e(f,{class:"divider-sm"}),e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),_:1})],64)):m("v-if",!0)],64)):(p(),L(F,{key:0},[e(s,{key:"g-overview"},{title:t(()=>[d("span",Gt,a(i.$t("appLayout.groups.overview")),1)]),default:t(()=>[e(o,{key:"dashboard"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.dashboard")),1)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(n.MessageOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.chat")),1)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.quickAsk")),1)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cowork")),1)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.services")),1)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(n.AlertOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.aiops")),1)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(n.NumberOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tokens")),1)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(n.FileTextOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.logs")),1)]),_:1})]),_:1}),e(s,{key:"g-config"},{title:t(()=>[d("span",qt,a(i.$t("appLayout.groups.config")),1)]),default:t(()=>[e(o,{key:"skills"},{icon:t(()=>[e(n.AppstoreOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.skills")),1)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(n.ApiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.providers")),1)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(n.CloudServerOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mcp")),1)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(n.FolderOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projectSettings")),1)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(n.SoundOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.speechSettings")),1)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(n.BellOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notificationSettings")),1)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(n.SyncOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.syncSettings")),1)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(n.BulbOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.nlprog")),1)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.codegen")),1)]),_:1})]),_:1}),e(s,{key:"g-data"},{title:t(()=>[d("span",Jt,a(i.$t("appLayout.groups.data")),1)]),default:t(()=>[e(o,{key:"notes"},{icon:t(()=>[e(n.BookOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.notes")),1)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(n.SearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.search")),1)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(n.BranchesOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.memory")),1)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(n.ShareAltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.knowledge")),1)]),_:1}),e(o,{key:"personal-data-hub"},{icon:t(()=>[e(n.DatabaseOutlined)]),default:t(()=>[u[3]||(u[3]=l("个人数据中台",-1))]),_:1}),e(o,{key:"personal-data-hub/browser"},{icon:t(()=>[e(n.UnorderedListOutlined)]),default:t(()=>[u[4]||(u[4]=l("数据浏览器",-1))]),_:1}),e(o,{key:"family-guard"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[u[5]||(u[5]=l("家庭守护",-1))]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(n.ShoppingOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.marketplace")),1)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(n.ClockCircleOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.cron")),1)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(n.ApartmentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.workflow")),1)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(n.PartitionOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.pipeline")),1)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(n.ThunderboltOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tasks")),1)]),_:1}),e(o,{key:"background-agents"},{icon:t(()=>[e(n.RocketOutlined)]),default:t(()=>[u[6]||(u[6]=l("后台 Agent",-1))]),_:1}),e(o,{key:"artifacts"},{icon:t(()=>[e(n.FileDoneOutlined)]),default:t(()=>[u[7]||(u[7]=l("交付物",-1))]),_:1})]),_:1}),e(s,{key:"g-advanced"},{title:t(()=>[d("span",Xt,a(i.$t("appLayout.groups.advanced")),1)]),default:t(()=>[e(o,{key:"security"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.security")),1)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.ukeySign")),1)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.trust")),1)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(n.FileSearchOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.audit")),1)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtc")),1)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mtcAudit","MTC 审计")),1)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.multisig","M-of-N 多签")),1)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(n.IdcardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.did")),1)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(n.LockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.permissions")),1)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(n.WifiOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.p2p")),1)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileBridge","移动桥")),1)]),_:1}),e(o,{key:"remote-session"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.remoteSession","远程会话")),1)]),_:1}),e(o,{key:"mobile-projects"},{icon:t(()=>[e(n.MobileOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.mobileProjects","手机项目 (v0.2)")),1)]),_:1}),e(o,{key:"terminal"},{icon:t(()=>[e(n.DesktopOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.terminal","远程终端")),1)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.backup")),1)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(n.CodeOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.git")),1)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(n.ProjectOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.projects")),1)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(n.SwapOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.crosschain")),1)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(n.SafetyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.compliance")),1)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.privacy")),1)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(n.DeploymentUnitOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.inference")),1)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(n.ClusterOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.federation")),1)]),_:1})]),_:1}),e(s,{key:"g-enterprise"},{title:t(()=>[d("span",Yt,a(i.$t("appLayout.groups.enterprise")),1)]),default:t(()=>[e(o,{key:"wallet"},{icon:t(()=>[e(n.WalletOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.wallet")),1)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(n.TeamOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.organization")),1)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(n.BankOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.tenant")),1)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(n.DashboardOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.sla")),1)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(n.BarChartOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.analytics")),1)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(n.BlockOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.templates")),1)]),_:1})]),_:1}),e(s,{key:"g-social"},{title:t(()=>[d("span",Zt,a(i.$t("appLayout.groups.social")),1)]),default:t(()=>[e(o,{key:"community"},{icon:t(()=>[e(n.UsergroupAddOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.community")),1)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(n.AuditOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.governance")),1)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(n.TrophyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.reputation")),1)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(n.FireOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.recommend")),1)]),_:1})]),_:1}),e(s,{key:"g-media"},{title:t(()=>[d("span",Qt,a(i.$t("appLayout.groups.media")),1)]),default:t(()=>[e(o,{key:"video"},{icon:t(()=>[e(n.VideoCameraOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.video")),1)]),_:1})]),_:1}),e(s,{key:"g-extension"},{title:t(()=>[d("span",xt,a(i.$t("appLayout.groups.extension")),1)]),default:t(()=>[e(o,{key:"rssfeed"},{icon:t(()=>[e(n.ReadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.rssfeed")),1)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(n.KeyOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.webauthn")),1)]),_:1})]),_:1}),m(` Desktop-only group — only shown in the embedded web-shell. Each
4
4
  click opens a new BrowserWindow loading the V5/V6 desktop
5
- renderer (full electronAPI / UKey / FS / settings live there). `),n.shellMode.isEmbedded?(p(),B(s,{key:"g-desktop"},{title:t(()=>[d("span",$t,a(i.$t("appLayout.groups.desktop")),1)]),default:t(()=>[e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopHardware")),1)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopBackup")),1)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopLlmTest")),1)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopSettings")),1)]),_:1})]),_:1})):m("v-if",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),m(" Connection status "),d("div",{class:W(["sidebar-footer",{collapsed:n.collapsed}])},[e(O,{status:n.statusBadge},null,8,["status"]),n.collapsed?m("v-if",!0):(p(),L("span",en,a(n.statusText),1))],2)]),_:1},8,["collapsed"]),m(" ── Main area ───────────────────────────────────────────────── "),e(A,{class:"main-area"},{default:t(()=>[m(" Header "),e(U,{class:"app-header"},{default:t(()=>[d("div",tn,[d("div",{class:W(["scope-tag",n.isProject?"project":"global"])},[(p(),B(me(n.isProject?n.FolderOutlined:n.GlobalOutlined))),d("span",null,a(n.isProject?n.cfg.projectName||i.$t("appLayout.scope.fallbackProject"):i.$t("appLayout.scope.global")),1),n.isProject&&n.cfg.projectRoot?(p(),B(C,{key:0,title:n.cfg.projectRoot},{default:t(()=>[e(n.InfoCircleOutlined,{class:"info-icon"})]),_:1},8,["title"])):m("v-if",!0)],2)]),d("div",nn,[m(" Theme switcher "),d("div",on,[(p(!0),L(F,null,se(n.THEMES,(c,b)=>(p(),B(C,{key:b,title:c.label},{default:t(()=>[d("button",{class:W(["theme-btn",{active:n.currentTheme===b}]),"data-theme-key":b,onClick:R=>n.setTheme(b)},a(c.icon),11,an)]),_:2},1032,["title"]))),128))]),m(` Language switcher (incremental i18n; only owns its own
5
+ renderer (full electronAPI / UKey / FS / settings live there). `),n.shellMode.isEmbedded?(p(),B(s,{key:"g-desktop"},{title:t(()=>[d("span",$t,a(i.$t("appLayout.groups.desktop")),1)]),default:t(()=>[e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(n.SafetyCertificateOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopHardware")),1)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(n.CloudUploadOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopBackup")),1)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(n.ExperimentOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopLlmTest")),1)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(n.ControlOutlined)]),default:t(()=>[l(a(i.$t("appLayout.items.desktopSettings")),1)]),_:1})]),_:1})):m("v-if",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),m(" Connection status "),d("div",{class:W(["sidebar-footer",{collapsed:n.collapsed}])},[e(O,{status:n.statusBadge},null,8,["status"]),n.collapsed?m("v-if",!0):(p(),L("span",en,a(n.statusText),1))],2)]),_:1},8,["collapsed"]),m(" ── Main area ───────────────────────────────────────────────── "),e(T,{class:"main-area"},{default:t(()=>[m(" Header "),e(U,{class:"app-header"},{default:t(()=>[d("div",tn,[d("div",{class:W(["scope-tag",n.isProject?"project":"global"])},[(p(),B(me(n.isProject?n.FolderOutlined:n.GlobalOutlined))),d("span",null,a(n.isProject?n.cfg.projectName||i.$t("appLayout.scope.fallbackProject"):i.$t("appLayout.scope.global")),1),n.isProject&&n.cfg.projectRoot?(p(),B(C,{key:0,title:n.cfg.projectRoot},{default:t(()=>[e(n.InfoCircleOutlined,{class:"info-icon"})]),_:1},8,["title"])):m("v-if",!0)],2)]),d("div",nn,[m(" Theme switcher "),d("div",on,[(p(!0),L(F,null,se(n.THEMES,(c,b)=>(p(),B(C,{key:b,title:c.label},{default:t(()=>[d("button",{class:W(["theme-btn",{active:n.currentTheme===b}]),"data-theme-key":b,onClick:R=>n.setTheme(b)},a(c.icon),11,an)]),_:2},1032,["title"]))),128))]),m(` Language switcher (incremental i18n; only owns its own
6
6
  labels + ErrorBoundary + common.* today). `),e(C,{title:i.$t("language.label")},{default:t(()=>[d("button",{class:"lang-switch-btn","data-locale":n.locale,onClick:n.toggleLocale},[e(n.GlobalOutlined,{class:"lang-switch-icon"}),d("span",rn,a(i.$t("language.switch")),1)],8,ln)]),_:1},8,["title"]),m(" Mobile bridge status — pill showing online/total paired phones.\n Click to /mobile-bridge. Polls every 5s via `p2p devices` CLI. "),e(n.MobileBridgeHeaderStatus),m(` Notification bell — only meaningful in the embedded web-shell
7
7
  where notification.* WS topics are registered. In pure-browser
8
8
  mode the composable returns empty / no-op shapes, so the badge
9
- just shows 0 and the drawer is empty. `),n.shellMode.isEmbedded?(p(),B(n.NotificationBell,{key:0})):m("v-if",!0),d("span",sn,a(n.PRODUCT_VERSION),1),m(" Phase 1.6 symmetric switch: only inside the embedded\n desktop shell does this make sense (no-op in `cc serve`\n browser mode where there's no V5/V6 to fall back to). "),n.shellMode.isEmbedded?(p(),B(C,{key:1,title:i.$t("appLayout.shellSwitch")},{default:t(()=>[d("button",{type:"button",class:"shell-switch-btn",onClick:n.switchToDesktopShell},[e(n.DesktopOutlined)])]),_:1},8,["title"])):m("v-if",!0),e(P,{color:n.wsStatus==="connected"?"green":n.wsStatus==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(a(n.wsStatus==="connected"?i.$t("appLayout.wsStatus.connected"):n.wsStatus==="connecting"?i.$t("appLayout.wsStatus.connecting"):i.$t("appLayout.wsStatus.disconnected")),1)]),_:1},8,["color"])])]),_:1}),m(" Content "),e(w,{class:"page-content"},{default:t(()=>[e(r)]),_:1})]),_:1})]),_:1})}const Pn=Z(Ut,[["render",dn],["__scopeId","data-v-6f6437fc"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/components/AppLayout.vue"]]);export{Pn as default};
9
+ just shows 0 and the drawer is empty. `),n.shellMode.isEmbedded?(p(),B(n.NotificationBell,{key:0})):m("v-if",!0),d("span",sn,a(n.PRODUCT_VERSION),1),m(" Phase 1.6 symmetric switch: only inside the embedded\n desktop shell does this make sense (no-op in `cc serve`\n browser mode where there's no V5/V6 to fall back to). "),n.shellMode.isEmbedded?(p(),B(C,{key:1,title:i.$t("appLayout.shellSwitch")},{default:t(()=>[d("button",{type:"button",class:"shell-switch-btn",onClick:n.switchToDesktopShell},[e(n.DesktopOutlined)])]),_:1},8,["title"])):m("v-if",!0),e(P,{color:n.wsStatus==="connected"?"green":n.wsStatus==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[l(a(n.wsStatus==="connected"?i.$t("appLayout.wsStatus.connected"):n.wsStatus==="connecting"?i.$t("appLayout.wsStatus.connecting"):i.$t("appLayout.wsStatus.disconnected")),1)]),_:1},8,["color"])])]),_:1}),m(" Content "),e(w,{class:"page-content"},{default:t(()=>[e(r)]),_:1})]),_:1})]),_:1})}const Pn=Y(Ut,[["render",dn],["__scopeId","data-v-6f6437fc"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/components/AppLayout.vue"]]);export{Pn as default};
@@ -1 +1 @@
1
- import{E as J,b as z,r as C,I as k,J as y,U as _,c as r,K as o,S as R,V as F,o as V,f as D,P as d,Q as f,R as p,F as j}from"./vendor-Bn1JzzAn.js";import{M as Q}from"./MarkdownRenderer-D201OL4T.js";import{u as B,_ as W,d as S}from"./index-BEVm0lCS.js";import{R as Y}from"./icons-DG5UD-6K.js";import"./markdown-Yo_c6Krv.js";import"./markdown-CsiA8-E5.js";const K=J("artifacts",()=>{const h=C([]),t=C(!1),u=C(""),e=C(""),v=C(null),b=C(!1),A=z(()=>[...new Set(h.value.map(a=>a.kind).filter(Boolean))].sort());async function l(){const n=B();t.value=!0;try{const a={type:"artifact-list"};u.value&&(a.kind=u.value),e.value&&(a.session=e.value);const s=await n.sendRaw(a);s&&Array.isArray(s.artifacts)&&(h.value=[...s.artifacts].reverse())}catch{}finally{t.value=!1}}async function g(n){const a=B();b.value=!0,v.value={entry:n,previewable:!1};try{const s=await a.sendRaw({type:"artifact-content",artifactId:n.id});v.value={entry:n,previewable:s?.previewable===!0,encoding:s?.encoding||null,content:s?.content||"",truncated:s?.truncated===!0,reason:s?.reason||null}}catch(s){v.value={entry:n,previewable:!1,reason:s?.message||"preview failed"}}finally{b.value=!1}}function i(){v.value=null}const m=z(()=>{const n=v.value;return!n?.previewable||n.encoding!=="base64"?null:`data:${n.entry?.mime||"image/png"};base64,${n.content}`}),O=z(()=>{const n=v.value;return n?.previewable===!0&&n.encoding==="utf8"&&String(n.entry?.mime||"").toLowerCase()==="text/markdown"});async function M(n,a={}){if(!n?.id)return!1;const s=a.fetch||globalThis.fetch,T=a.document||globalThis.document,U=a.URL||globalThis.URL,L=(a.config||globalThis.window?.__CC_CONFIG__)??{};try{const N=await s(`/api/artifacts/${n.id}/download`,{headers:L.wsToken?{Authorization:`Bearer ${L.wsToken}`}:{}});if(!N.ok)return!1;const G=await N.blob(),E=U.createObjectURL(G),I=T.createElement("a");return I.href=E,I.download=n.title||n.id,T.body.appendChild(I),I.click(),I.remove(),U.revokeObjectURL(E),!0}catch{return!1}}async function P(n){const a=B();if(!n)return!1;try{const s=await a.sendRaw({type:"artifact-remove",artifactId:n});return v.value?.entry?.id===n&&(v.value=null),await l(),s?.found===!0}catch{return!1}}async function c(){const n=B();try{const a=await n.sendRaw({type:"artifact-clean"});return await l(),Number(a?.removed)||0}catch{return 0}}function w(n){const a=Number(n)||0;return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function x(n){switch(n){case"report":return"blue";case"patch":return"purple";case"screenshot":return"cyan";case"log":return"default";case"data":return"green";default:return"default"}}return{artifacts:h,loading:t,kindFilter:u,sessionFilter:e,kinds:A,preview:v,previewLoading:b,previewImageSrc:m,previewIsMarkdown:O,fetchArtifacts:l,openPreview:g,closePreview:i,removeArtifact:P,cleanExpired:c,downloadArtifact:M,formatSize:w,kindColor:x}}),q={__name:"Artifacts",setup(h,{expose:t}){t();const u=K(),e=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"类型",key:"kind",dataIndex:"kind",width:110},{title:"MIME",dataIndex:"mime",width:160,ellipsis:!0},{title:"大小",key:"size",dataIndex:"size",width:90},{title:"发布时间",key:"createdAt",dataIndex:"createdAt",width:170},{title:"会话",dataIndex:"sessionId",width:160,ellipsis:!0},{title:"操作",key:"actions",width:150}],v=z(()=>u.kinds.map(i=>({label:i,value:i})));async function b(i){await u.removeArtifact(i)?S.success("已删除"):S.error("删除失败")}async function A(){const i=await u.cleanExpired();S.info(i>0?`清理了 ${i} 个过期交付物`:"没有过期交付物")}async function l(i){await u.downloadArtifact(i)||S.error("下载失败")}V(()=>{u.fetchArtifacts()}),D(()=>{u.closePreview()});const g={store:u,columns:e,kindOptions:v,onRemove:b,onClean:A,onDownload:l,computed:z,onBeforeUnmount:D,onMounted:V,get ReloadOutlined(){return Y},get message(){return S},MarkdownRenderer:Q,get useArtifactsStore(){return K}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},H={class:"page-header"},X=["onClick"],Z=["src"],$={key:1,class:"preview-markdown"},ee={key:2,class:"preview-text"},te={class:"preview-meta"},ne={key:0};function ae(h,t,u,e,v,b){const A=k("a-select"),l=k("a-button"),g=k("a-popconfirm"),i=k("a-space"),m=k("a-tag"),O=k("a-table"),M=k("a-empty"),P=k("a-card");return d(),y("div",null,[_("div",H,[t[7]||(t[7]=_("div",null,[_("h2",{class:"page-title"},"交付物"),_("p",{class:"page-sub"}," agent 用 publish_artifact 发布的交付物(报告 / patch / 截图 / 日志),在这里预览与管理(cc artifacts 同源)。 ")],-1)),r(i,null,{default:o(()=>[r(A,{value:e.store.kindFilter,"onUpdate:value":t[0]||(t[0]=c=>e.store.kindFilter=c),style:{"min-width":"120px"},placeholder:"全部类型","allow-clear":"",options:e.kindOptions,onChange:t[1]||(t[1]=c=>e.store.fetchArtifacts())},null,8,["value","options"]),r(g,{title:"删除所有过期交付物?",onConfirm:e.onClean},{default:o(()=>[r(l,null,{default:o(()=>[...t[5]||(t[5]=[f("清理过期",-1)])]),_:1})]),_:1}),r(l,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=c=>e.store.fetchArtifacts())},{icon:o(()=>[r(e.ReloadOutlined)]),default:o(()=>[t[6]||(t[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),r(O,{"data-source":e.store.artifacts,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:10,hideOnSinglePage:!0}},{bodyCell:o(({column:c,record:w})=>[c.key==="title"?(d(),y("a",{key:0,onClick:x=>e.store.openPreview(w)},p(w.title),9,X)):c.key==="kind"?(d(),R(m,{key:1,color:e.store.kindColor(w.kind)},{default:o(()=>[f(p(w.kind),1)]),_:2},1032,["color"])):c.key==="size"?(d(),y(j,{key:2},[f(p(e.store.formatSize(w.size)),1)],64)):c.key==="createdAt"?(d(),y(j,{key:3},[f(p((w.createdAt||"").replace("T"," ").slice(0,19)),1)],64)):c.key==="actions"?(d(),R(i,{key:4},{default:o(()=>[r(l,{size:"small",onClick:x=>e.store.openPreview(w)},{default:o(()=>[...t[8]||(t[8]=[f("预览",-1)])]),_:1},8,["onClick"]),r(l,{size:"small",onClick:x=>e.onDownload(w)},{default:o(()=>[...t[9]||(t[9]=[f("下载",-1)])]),_:1},8,["onClick"]),r(g,{title:"删除该交付物?",onConfirm:x=>e.onRemove(w.id)},{default:o(()=>[r(l,{size:"small",danger:""},{default:o(()=>[...t[10]||(t[10]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):F("v-if",!0)]),_:1},8,["data-source"]),e.store.preview?(d(),R(P,{key:0,size:"small",class:"preview-card",loading:e.store.previewLoading},{title:o(()=>[r(i,null,{default:o(()=>[_("span",null,p(e.store.preview.entry?.title),1),r(m,{color:e.store.kindColor(e.store.preview.entry?.kind)},{default:o(()=>[f(p(e.store.preview.entry?.kind),1)]),_:1},8,["color"]),r(m,{color:"default"},{default:o(()=>[f(p(e.store.preview.entry?.mime),1)]),_:1}),e.store.preview.truncated?(d(),R(m,{key:0,color:"warning"},{default:o(()=>[...t[11]||(t[11]=[f("已截断预览",-1)])]),_:1})):F("v-if",!0)]),_:1})]),extra:o(()=>[r(i,null,{default:o(()=>[r(l,{size:"small",onClick:t[3]||(t[3]=c=>e.onDownload(e.store.preview.entry))},{default:o(()=>[...t[12]||(t[12]=[f("下载",-1)])]),_:1}),r(l,{size:"small",onClick:t[4]||(t[4]=c=>e.store.closePreview())},{default:o(()=>[...t[13]||(t[13]=[f("关闭",-1)])]),_:1})]),_:1})]),default:o(()=>[e.store.previewImageSrc?(d(),y("img",{key:0,src:e.store.previewImageSrc,class:"preview-image",alt:"artifact preview"},null,8,Z)):e.store.previewIsMarkdown?(d(),y("div",$,[r(e.MarkdownRenderer,{content:e.store.preview.content||""},null,8,["content"])])):e.store.preview.previewable?(d(),y("pre",ee,p(e.store.preview.content||"(空文件)"),1)):(d(),R(M,{key:3,description:e.store.preview.reason||"该类型不支持在线预览,可在本机用 cc artifacts open <id> 打开"},null,8,["description"])),_("div",te,[_("span",null,p(e.store.preview.entry?.id),1),e.store.preview.entry?.sessionId?(d(),y("span",ne," · session "+p(e.store.preview.entry.sessionId),1)):F("v-if",!0),_("span",null," · sha256 "+p((e.store.preview.entry?.sha256||"").slice(0,12))+"…",1)])]),_:1},8,["loading"])):F("v-if",!0)])}const de=W(q,[["render",ae],["__scopeId","data-v-c8b48f8c"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/views/Artifacts.vue"]]);export{de as default};
1
+ import{E as H,b as z,r as C,I as k,J as y,U as _,c as r,K as o,S as R,V as B,o as V,f as D,P as d,Q as f,R as p,F as j}from"./vendor-Bn1JzzAn.js";import{M as J}from"./MarkdownRenderer-BlJm1J7E.js";import{u as F,_ as Q,d as S}from"./index-Dyngbd29.js";import{R as W}from"./icons-DG5UD-6K.js";import"./markdown-Yo_c6Krv.js";import"./markdown-CsiA8-E5.js";const K=H("artifacts",()=>{const h=C([]),t=C(!1),u=C(""),e=C(""),v=C(null),b=C(!1),A=z(()=>[...new Set(h.value.map(a=>a.kind).filter(Boolean))].sort());async function l(){const n=F();t.value=!0;try{const a={type:"artifact-list"};u.value&&(a.kind=u.value),e.value&&(a.session=e.value);const s=await n.sendRaw(a);s&&Array.isArray(s.artifacts)&&(h.value=[...s.artifacts].reverse())}catch{}finally{t.value=!1}}async function g(n){const a=F();b.value=!0,v.value={entry:n,previewable:!1};try{const s=await a.sendRaw({type:"artifact-content",artifactId:n.id});v.value={entry:n,previewable:s?.previewable===!0,encoding:s?.encoding||null,content:s?.content||"",truncated:s?.truncated===!0,reason:s?.reason||null}}catch(s){v.value={entry:n,previewable:!1,reason:s?.message||"preview failed"}}finally{b.value=!1}}function i(){v.value=null}const m=z(()=>{const n=v.value;return!n?.previewable||n.encoding!=="base64"?null:`data:${n.entry?.mime||"image/png"};base64,${n.content}`}),O=z(()=>{const n=v.value;return n?.previewable===!0&&n.encoding==="utf8"&&String(n.entry?.mime||"").toLowerCase()==="text/markdown"});async function M(n,a={}){if(!n?.id)return!1;const s=a.fetch||globalThis.fetch,T=a.document||globalThis.document,U=a.URL||globalThis.URL,L=(a.config||globalThis.window?.__CC_CONFIG__)??{};try{const N=await s(`/api/artifacts/${n.id}/download`,{headers:L.wsToken?{Authorization:`Bearer ${L.wsToken}`}:{}});if(!N.ok)return!1;const G=await N.blob(),E=U.createObjectURL(G),I=T.createElement("a");return I.href=E,I.download=n.title||n.id,T.body.appendChild(I),I.click(),I.remove(),U.revokeObjectURL(E),!0}catch{return!1}}async function P(n){const a=F();if(!n)return!1;try{const s=await a.sendRaw({type:"artifact-remove",artifactId:n});return v.value?.entry?.id===n&&(v.value=null),await l(),s?.found===!0}catch{return!1}}async function c(){const n=F();try{const a=await n.sendRaw({type:"artifact-clean"});return await l(),Number(a?.removed)||0}catch{return 0}}function w(n){const a=Number(n)||0;return a<1024?`${a} B`:a<1024*1024?`${(a/1024).toFixed(1)} KB`:`${(a/(1024*1024)).toFixed(1)} MB`}function x(n){switch(n){case"report":return"blue";case"patch":return"purple";case"screenshot":return"cyan";case"log":return"default";case"data":return"green";default:return"default"}}return{artifacts:h,loading:t,kindFilter:u,sessionFilter:e,kinds:A,preview:v,previewLoading:b,previewImageSrc:m,previewIsMarkdown:O,fetchArtifacts:l,openPreview:g,closePreview:i,removeArtifact:P,cleanExpired:c,downloadArtifact:M,formatSize:w,kindColor:x}}),X={__name:"Artifacts",setup(h,{expose:t}){t();const u=K(),e=[{title:"标题",key:"title",dataIndex:"title",ellipsis:!0},{title:"类型",key:"kind",dataIndex:"kind",width:110},{title:"MIME",dataIndex:"mime",width:160,ellipsis:!0},{title:"大小",key:"size",dataIndex:"size",width:90},{title:"发布时间",key:"createdAt",dataIndex:"createdAt",width:170},{title:"会话",dataIndex:"sessionId",width:160,ellipsis:!0},{title:"操作",key:"actions",width:150}],v=z(()=>u.kinds.map(i=>({label:i,value:i})));async function b(i){await u.removeArtifact(i)?S.success("已删除"):S.error("删除失败")}async function A(){const i=await u.cleanExpired();S.info(i>0?`清理了 ${i} 个过期交付物`:"没有过期交付物")}async function l(i){await u.downloadArtifact(i)||S.error("下载失败")}V(()=>{u.fetchArtifacts()}),D(()=>{u.closePreview()});const g={store:u,columns:e,kindOptions:v,onRemove:b,onClean:A,onDownload:l,computed:z,onBeforeUnmount:D,onMounted:V,get ReloadOutlined(){return W},get message(){return S},MarkdownRenderer:J,get useArtifactsStore(){return K}};return Object.defineProperty(g,"__isScriptSetup",{enumerable:!1,value:!0}),g}},q={class:"page-header"},Y=["onClick"],Z=["src"],$={key:1,class:"preview-markdown"},ee={key:2,class:"preview-text"},te={class:"preview-meta"},ne={key:0};function ae(h,t,u,e,v,b){const A=k("a-select"),l=k("a-button"),g=k("a-popconfirm"),i=k("a-space"),m=k("a-tag"),O=k("a-table"),M=k("a-empty"),P=k("a-card");return d(),y("div",null,[_("div",q,[t[7]||(t[7]=_("div",null,[_("h2",{class:"page-title"},"交付物"),_("p",{class:"page-sub"}," agent 用 publish_artifact 发布的交付物(报告 / patch / 截图 / 日志),在这里预览与管理(cc artifacts 同源)。 ")],-1)),r(i,null,{default:o(()=>[r(A,{value:e.store.kindFilter,"onUpdate:value":t[0]||(t[0]=c=>e.store.kindFilter=c),style:{"min-width":"120px"},placeholder:"全部类型","allow-clear":"",options:e.kindOptions,onChange:t[1]||(t[1]=c=>e.store.fetchArtifacts())},null,8,["value","options"]),r(g,{title:"删除所有过期交付物?",onConfirm:e.onClean},{default:o(()=>[r(l,null,{default:o(()=>[...t[5]||(t[5]=[f("清理过期",-1)])]),_:1})]),_:1}),r(l,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=c=>e.store.fetchArtifacts())},{icon:o(()=>[r(e.ReloadOutlined)]),default:o(()=>[t[6]||(t[6]=f(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),r(O,{"data-source":e.store.artifacts,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:10,hideOnSinglePage:!0}},{bodyCell:o(({column:c,record:w})=>[c.key==="title"?(d(),y("a",{key:0,onClick:x=>e.store.openPreview(w)},p(w.title),9,Y)):c.key==="kind"?(d(),R(m,{key:1,color:e.store.kindColor(w.kind)},{default:o(()=>[f(p(w.kind),1)]),_:2},1032,["color"])):c.key==="size"?(d(),y(j,{key:2},[f(p(e.store.formatSize(w.size)),1)],64)):c.key==="createdAt"?(d(),y(j,{key:3},[f(p((w.createdAt||"").replace("T"," ").slice(0,19)),1)],64)):c.key==="actions"?(d(),R(i,{key:4},{default:o(()=>[r(l,{size:"small",onClick:x=>e.store.openPreview(w)},{default:o(()=>[...t[8]||(t[8]=[f("预览",-1)])]),_:1},8,["onClick"]),r(l,{size:"small",onClick:x=>e.onDownload(w)},{default:o(()=>[...t[9]||(t[9]=[f("下载",-1)])]),_:1},8,["onClick"]),r(g,{title:"删除该交付物?",onConfirm:x=>e.onRemove(w.id)},{default:o(()=>[r(l,{size:"small",danger:""},{default:o(()=>[...t[10]||(t[10]=[f("删除",-1)])]),_:1})]),_:1},8,["onConfirm"])]),_:2},1024)):B("v-if",!0)]),_:1},8,["data-source"]),e.store.preview?(d(),R(P,{key:0,size:"small",class:"preview-card",loading:e.store.previewLoading},{title:o(()=>[r(i,null,{default:o(()=>[_("span",null,p(e.store.preview.entry?.title),1),r(m,{color:e.store.kindColor(e.store.preview.entry?.kind)},{default:o(()=>[f(p(e.store.preview.entry?.kind),1)]),_:1},8,["color"]),r(m,{color:"default"},{default:o(()=>[f(p(e.store.preview.entry?.mime),1)]),_:1}),e.store.preview.truncated?(d(),R(m,{key:0,color:"warning"},{default:o(()=>[...t[11]||(t[11]=[f("已截断预览",-1)])]),_:1})):B("v-if",!0)]),_:1})]),extra:o(()=>[r(i,null,{default:o(()=>[r(l,{size:"small",onClick:t[3]||(t[3]=c=>e.onDownload(e.store.preview.entry))},{default:o(()=>[...t[12]||(t[12]=[f("下载",-1)])]),_:1}),r(l,{size:"small",onClick:t[4]||(t[4]=c=>e.store.closePreview())},{default:o(()=>[...t[13]||(t[13]=[f("关闭",-1)])]),_:1})]),_:1})]),default:o(()=>[e.store.previewImageSrc?(d(),y("img",{key:0,src:e.store.previewImageSrc,class:"preview-image",alt:"artifact preview"},null,8,Z)):e.store.previewIsMarkdown?(d(),y("div",$,[r(e.MarkdownRenderer,{content:e.store.preview.content||""},null,8,["content"])])):e.store.preview.previewable?(d(),y("pre",ee,p(e.store.preview.content||"(空文件)"),1)):(d(),R(M,{key:3,description:e.store.preview.reason||"该类型不支持在线预览,可在本机用 cc artifacts open <id> 打开"},null,8,["description"])),_("div",te,[_("span",null,p(e.store.preview.entry?.id),1),e.store.preview.entry?.sessionId?(d(),y("span",ne," · session "+p(e.store.preview.entry.sessionId),1)):B("v-if",!0),_("span",null," · sha256 "+p((e.store.preview.entry?.sha256||"").slice(0,12))+"…",1)])]),_:1},8,["loading"])):B("v-if",!0)])}const de=Q(X,[["render",ae],["__scopeId","data-v-c8b48f8c"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/views/Artifacts.vue"]]);export{de as default};
@@ -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 V,r as x,P as d,Q as _,F as T,Z as B,$ as kt}from"./vendor-Bn1JzzAn.js";import{Y as ht,t as U,_ as xt,b as et,u as at,d as A}from"./index-BEVm0lCS.js";import{u as ot}from"./useFs-rCuXHeme.js";import{t as Lt,an as St,f as Ct,d as Tt,n as Et,aA as Ot,R as At}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const nt=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),it=Object.freeze(["low","medium","high","critical"]);function Q(n,s=0){return typeof n=="number"&&Number.isFinite(n)?n:s}function G(n){if(!n)return{noDb:!1,error:""};const s=ht(n),l=/Database not available/i.test(s);return{noDb:l,error:l?"Database not available":""}}function wt(n,s=0){if(!n||typeof n!="object")return null;const l=n.id||"";if(!l)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:l,id:l,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:s}}function rt(n){const s=U(n);return Array.isArray(s)?s.map(wt).filter(Boolean):[]}const Rt={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function lt(n){const s=JSON.parse(JSON.stringify(Rt));for(const t of nt)s.byEventType[t]=0;for(const t of it)s.byRiskLevel[t]=0;const l=U(n);if(!l||typeof l!="object"||Array.isArray(l))return s;if(s.total=Q(l.total,0),s.failures=Q(l.failures,0),s.highRisk=Q(l.highRisk,0),l.byEventType&&typeof l.byEventType=="object")for(const[t,L]of Object.entries(l.byEventType))typeof L=="number"&&Number.isFinite(L)&&(s.byEventType[t]=L);if(l.byRiskLevel&&typeof l.byRiskLevel=="object")for(const[t,L]of Object.entries(l.byRiskLevel))typeof L=="number"&&Number.isFinite(L)&&(s.byRiskLevel[t]=L);return s}function zt(n){return!n||!n.auditMtcEventId?"none":"tracked"}function It(n){if(n==null||n==="")return"—";const s=String(n),l=s.includes(" ")&&!s.includes("T")?s.replace(" ","T")+"Z":s,t=new Date(l);return isNaN(t.getTime())?s:t.toLocaleString("zh-CN",{hour12:!1})}const Mt={__name:"Audit",setup(n,{expose:s}){s();const{t:l}=et(),t=at(),L=ot(),M=x(!1),w=x([]),E=x({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),F=x({noDb:!1,error:""}),R=x("events"),S=x(""),p=x(""),O=x(""),v=x(""),N=x(!1),z=x(!1),j=x(null),Y=V(()=>[{title:l("audit.logColumns.createdAt"),key:"createdAt",width:"160px"},{title:l("audit.logColumns.eventType"),key:"eventType",width:"110px"},{title:l("audit.logColumns.operation"),key:"operation"},{title:l("audit.logColumns.actor"),key:"actor",width:"140px"},{title:l("audit.logColumns.target"),key:"target",width:"180px"},{title:l("audit.logColumns.riskLevel"),key:"riskLevel",width:"90px"},{title:l("audit.logColumns.success"),key:"success",width:"80px"},{title:l("audit.logColumns.mtc"),key:"mtc",width:"110px"},{title:l("audit.logColumns.action"),key:"action",width:"80px"}]),I=x({});function D(a){return a.auditMtcEventId&&I.value[a.id]||null}function J(a){const i=D(a);return i?i.state==="staging"?l("audit.mtc.stagingLabel"):i.state==="batched"?l("audit.mtc.batchedLabel",{batchId:i.batchId||"?"}):l("audit.mtc.unknownLabel"):l("audit.mtc.signedNotChecked")}function P(a){const i=D(a);return i?i.state==="staging"?"orange":i.state==="batched"?"green":"default":"blue"}function W(a){if(!a.auditMtcEventId)return"";const i=D(a),u=l("audit.mtc.tooltipBase",{id:a.auditMtcEventId});return i?i.state==="staging"?l("audit.mtc.tooltipStaging",{base:u}):i.state==="batched"?l("audit.mtc.tooltipBatched",{base:u,batchId:i.batchId,treeHead:i.treeHeadId||""}):u:l("audit.mtc.tooltipNotChecked",{base:u})}async function k(a){if(!a.auditMtcEventId)return;const i=a.auditMtcEventId.replace(/"/g,'\\"');try{const u=await t.execute(`audit mtc reconcile-check "${i}" --json`,8e3),C=U(u.output);if(!C){A.warning(l("audit.mtc.noJson"));return}const pt=C.found?{state:"batched",batchId:C.batchId,treeHeadId:C.treeHeadId}:C.staging?{state:"staging"}:{state:"unknown"};I.value={...I.value,[a.id]:pt}}catch(u){A.error(l("audit.mtc.checkFailed",{err:u?.message||u}))}}const H=V(()=>E.value.total?(E.value.total-E.value.failures)/E.value.total*100:100),Z=V(()=>!!(p.value||O.value||v.value||N.value)),r=V(()=>{let a=w.value;if(O.value&&(a=a.filter(i=>i.eventType===O.value)),v.value&&(a=a.filter(i=>i.riskLevel===v.value)),N.value&&(a=a.filter(i=>!i.success)),p.value){const i=p.value.toLowerCase();a=a.filter(u=>(u.operation||"").toLowerCase().includes(i)||(u.actor||"").toLowerCase().includes(i)||(u.target||"").toLowerCase().includes(i))}return a});function g(a){const i=`audit.type.${a}`,u=l(i);return u===i?a:u}function q(a){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[a]||"default"}function st(a){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[a]||"#888"}function ct(a){const i=`audit.risk.${a}`,u=l(i);return u===i?a:u}function dt(a){return{low:"default",medium:"gold",high:"orange",critical:"red"}[a]||"default"}function ut(a){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[a]||"#888"}function ft(a,i){return i?Math.round(a/i*100):0}function yt(a,i){return a?a.length<=i?a:a.slice(0,i)+"…":""}function gt(a){if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}let K=null;function _t(){clearTimeout(K),K=setTimeout(()=>{p.value=S.value.trim()},300)}function mt(){p.value=S.value.trim()}async function X(){M.value=!0,F.value={noDb:!1,error:""};try{const[a,i]=await Promise.all([t.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),t.execute("audit stats --json",8e3).catch(()=>({output:""}))]),u=[a,i].map(C=>G(C.output)).find(C=>C.noDb);u&&(F.value=u),w.value=rt(a.output),E.value=lt(i.output)}catch(a){A.error(l("audit.messages.loadFailed",{err:a?.message||a}))}finally{M.value=!1}}function bt(a){j.value=a,z.value=!0}async function vt(){try{const{output:a}=await t.execute("audit export -f json -n 10000",2e4);if(G(a).noDb){A.error(l("audit.messages.needInit"));return}if(!a.trim().startsWith("[")){A.error(l("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?l("audit.messages.exportOk",{path:u.path}):l("audit.messages.exportOkDefault"))}catch(a){A.error(l("audit.messages.exportFailed",{err:a?.message||a}))}}tt(X);const $={t:l,ws:t,fs:L,loading:M,logs:w,stats:E,errorState:F,activeTab:R,searchInput:S,searchTerm:p,typeFilter:O,riskFilter:v,failuresOnly:N,showDetailsModal:z,currentLog:j,logColumns:Y,mtcStatusCache:I,getMtcStatusEntry:D,getMtcLabel:J,getMtcColor:P,getMtcTooltip:W,checkMtcStatus:k,successRate:H,hasFilters:Z,filteredLogs:r,typeLabel:g,typeColor:q,typeBarColor:st,riskLabel:ct,riskColor:dt,riskBarColor:ut,pctOfTotal:ft,truncate:yt,formatDetails:gt,get searchDebounce(){return K},set searchDebounce(a){K=a},onSearchInput:_t,runSearch:mt,loadAll:X,viewLogDetails:bt,exportJson:vt,ref:x,computed:V,onMounted:tt,get useI18n(){return et},get tryParseJson(){return U},get ReloadOutlined(){return At},get DownloadOutlined(){return Ot},get FileSearchOutlined(){return Et},get CloseCircleOutlined(){return Tt},get CheckCircleOutlined(){return Ct},get WarningOutlined(){return St},get AlertOutlined(){return Lt},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 It},get classifyMtcStatus(){return zt},get EVENT_TYPES(){return nt},get RISK_LEVELS(){return it}};return Object.defineProperty($,"__isScriptSetup",{enumerable:!1,value:!0}),$}},Dt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},Nt={class:"page-sub"},jt={class:"type-name"},Vt={class:"type-count"},Bt={class:"filter-bar"},Jt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Pt={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},Kt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},Ut={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Yt={key:1,style:{color:"var(--text-muted)"}},Wt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ht={key:1,style:{color:"var(--text-muted)"}},Zt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={key:0,style:{"padding-top":"8px"}},Qt={style:{"font-family":"monospace","font-size":"12px"}},Gt={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},Xt={style:{"font-family":"monospace"}},$t={key:0,style:{"font-family":"monospace","font-size":"12px"}},te={key:1,style:{color:"var(--text-muted)"}},ee={key:0,style:{"font-family":"monospace","font-size":"12px"}},ae={key:1,style:{color:"var(--text-muted)"}},oe={style:{"font-family":"monospace","font-size":"12px"}},re={style:{"font-family":"monospace","font-size":"11px"}},le={style:{color:"#ff4d4f"}},ne={class:"details-pre"};function ie(n,s,l,t,L,M){const w=m("a-button"),E=m("a-space"),F=m("a-alert"),R=m("a-statistic"),S=m("a-card"),p=m("a-col"),O=m("a-row"),v=m("a-tag"),N=m("a-input-search"),z=m("a-radio-button"),j=m("a-radio-group"),Y=m("a-checkbox"),I=m("a-tooltip"),D=m("a-table"),J=m("a-tab-pane"),P=m("a-progress"),W=m("a-tabs"),k=m("a-descriptions-item"),H=m("a-descriptions"),Z=m("a-modal");return d(),f("div",null,[b("div",Dt,[b("div",null,[b("h2",Ft,c(t.t("audit.title")),1),b("p",Nt,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(F,{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(T,null,B(t.EVENT_TYPES,r=>(d(),h(p,{key:r,xs:12,sm:8,lg:3},{default:e(()=>[b("div",{class:"type-pill",style:kt({borderLeftColor:t.typeBarColor(r)})},[o(v,{color:t.typeColor(r),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[_(c(r),1)]),_:2},1032,["color"]),b("div",jt,c(t.typeLabel(r)),1),b("div",Vt,c(t.stats.byEventType[r]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),y(" Tabs "),o(W,{activeKey:t.activeTab,"onUpdate:activeKey":s[4]||(s[4]=r=>t.activeTab=r),class:"audit-tabs"},{default:e(()=>[y(" ── Events tab ──────────────────────────────────────────── "),o(J,{key:"events",tab:t.t("audit.tabs.events")},{default:e(()=>[b("div",Bt,[o(N,{value:t.searchInput,"onUpdate:value":s[0]||(s[0]=r=>t.searchInput=r),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":s[1]||(s[1]=r=>t.typeFilter=r),size:"small","button-style":"solid"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allTypes")),1)]),_:1}),(d(!0),f(T,null,B(t.EVENT_TYPES,r=>(d(),h(z,{key:r,value:r},{default:e(()=>[_(c(t.typeLabel(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(j,{value:t.riskFilter,"onUpdate:value":s[2]||(s[2]=r=>t.riskFilter=r),size:"small"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allRisks")),1)]),_:1}),(d(!0),f(T,null,B(t.RISK_LEVELS,r=>(d(),h(z,{key:r,value:r},{default:e(()=>[_(c(t.riskLabel(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(Y,{checked:t.failuresOnly,"onUpdate:checked":s[3]||(s[3]=r=>t.failuresOnly=r)},{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:r=>t.t("audit.totals.rows",{count:r})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:r,record:g})=>[r.key==="createdAt"?(d(),f("span",Jt,c(t.formatAuditTime(g.createdAt)),1)):y("v-if",!0),r.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),r.key==="operation"?(d(),f(T,{key:2},[b("span",Pt,c(g.operation),1),g.errorMessage?(d(),f("div",Kt,c(g.errorMessage),1)):y("v-if",!0)],64)):y("v-if",!0),r.key==="actor"?(d(),f(T,{key:3},[g.actor?(d(),f("span",Ut,c(g.actor),1)):(d(),f("span",Yt,"—"))],64)):y("v-if",!0),r.key==="target"?(d(),f(T,{key:4},[g.target?(d(),f("span",Wt,c(t.truncate(g.target,32)),1)):(d(),f("span",Ht,"—"))],64)):y("v-if",!0),r.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),r.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),r.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(()=>[...s[6]||(s[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:q=>t.checkMtcStatus(g)},{default:e(()=>[_(c(t.getMtcLabel(g)),1)]),_:2},1032,["color","onClick"])]),_:2},1032,["title"]))],64)):y("v-if",!0),r.key==="action"?(d(),h(w,{key:8,size:"small",type:"link",onClick:q=>t.viewLogDetails(g)},{default:e(()=>[_(c(t.t("audit.rowAction.details")),1)]),_:1},8,["onClick"])):y("v-if",!0)]),emptyText:e(()=>[b("div",Zt,[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(J,{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,B(t.EVENT_TYPES,r=>(d(),f("div",{key:r,class:"bd-row"},[o(v,{color:t.typeColor(r),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[_(c(r),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byEventType[r]||0,t.stats.total),"stroke-color":t.typeBarColor(r),format:()=>`${t.stats.byEventType[r]||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,B(t.RISK_LEVELS,r=>(d(),f("div",{key:r,class:"bd-row"},[o(v,{color:t.riskColor(r),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[_(c(t.riskLabel(r)),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byRiskLevel[r]||0,t.stats.total),"stroke-color":t.riskBarColor(r),format:()=>`${t.stats.byRiskLevel[r]||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(Z,{open:t.showDetailsModal,"onUpdate:open":s[5]||(s[5]=r=>t.showDetailsModal=r),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(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",Gt,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",Xt,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",$t,c(t.currentLog.actor),1)):(d(),f("span",te,"—"))]),_:1},8,["label"]),o(k,{label:t.t("audit.details.target")},{default:e(()=>[t.currentLog.target?(d(),f("span",ee,c(t.currentLog.target),1)):(d(),f("span",ae,"—"))]),_:1},8,["label"]),t.currentLog.ipAddress?(d(),h(k,{key:0,label:t.t("audit.details.ip")},{default:e(()=>[b("span",oe,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",re,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",le,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",ne,c(t.formatDetails(t.currentLog.details)),1)]),_:1},8,["label"])):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"])])}const ye=xt(Mt,[["render",ie],["__scopeId","data-v-be9f4fc3"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/views/Audit.vue"]]);export{ye 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 V,r as x,P as d,Q as _,F as T,Z as B,$ as kt}from"./vendor-Bn1JzzAn.js";import{Y as ht,t as U,_ as xt,b as et,u as at,d as A}from"./index-Dyngbd29.js";import{u as ot}from"./useFs-CLTAmcfw.js";import{t as Lt,an as St,f as Ct,d as Tt,n as Et,aA as Ot,R as At}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const nt=Object.freeze(["auth","permission","data","system","file","did","crypto","api"]),it=Object.freeze(["low","medium","high","critical"]);function Q(n,s=0){return typeof n=="number"&&Number.isFinite(n)?n:s}function X(n){if(!n)return{noDb:!1,error:""};const s=ht(n),l=/Database not available/i.test(s);return{noDb:l,error:l?"Database not available":""}}function wt(n,s=0){if(!n||typeof n!="object")return null;const l=n.id||"";if(!l)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:l,id:l,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:s}}function rt(n){const s=U(n);return Array.isArray(s)?s.map(wt).filter(Boolean):[]}const Rt={total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}};function lt(n){const s=JSON.parse(JSON.stringify(Rt));for(const t of nt)s.byEventType[t]=0;for(const t of it)s.byRiskLevel[t]=0;const l=U(n);if(!l||typeof l!="object"||Array.isArray(l))return s;if(s.total=Q(l.total,0),s.failures=Q(l.failures,0),s.highRisk=Q(l.highRisk,0),l.byEventType&&typeof l.byEventType=="object")for(const[t,L]of Object.entries(l.byEventType))typeof L=="number"&&Number.isFinite(L)&&(s.byEventType[t]=L);if(l.byRiskLevel&&typeof l.byRiskLevel=="object")for(const[t,L]of Object.entries(l.byRiskLevel))typeof L=="number"&&Number.isFinite(L)&&(s.byRiskLevel[t]=L);return s}function zt(n){return!n||!n.auditMtcEventId?"none":"tracked"}function It(n){if(n==null||n==="")return"—";const s=String(n),l=s.includes(" ")&&!s.includes("T")?s.replace(" ","T")+"Z":s,t=new Date(l);return isNaN(t.getTime())?s:t.toLocaleString("zh-CN",{hour12:!1})}const Mt={__name:"Audit",setup(n,{expose:s}){s();const{t:l}=et(),t=at(),L=ot(),M=x(!1),w=x([]),E=x({total:0,failures:0,highRisk:0,byEventType:{},byRiskLevel:{}}),F=x({noDb:!1,error:""}),R=x("events"),S=x(""),p=x(""),O=x(""),v=x(""),N=x(!1),z=x(!1),j=x(null),W=V(()=>[{title:l("audit.logColumns.createdAt"),key:"createdAt",width:"160px"},{title:l("audit.logColumns.eventType"),key:"eventType",width:"110px"},{title:l("audit.logColumns.operation"),key:"operation"},{title:l("audit.logColumns.actor"),key:"actor",width:"140px"},{title:l("audit.logColumns.target"),key:"target",width:"180px"},{title:l("audit.logColumns.riskLevel"),key:"riskLevel",width:"90px"},{title:l("audit.logColumns.success"),key:"success",width:"80px"},{title:l("audit.logColumns.mtc"),key:"mtc",width:"110px"},{title:l("audit.logColumns.action"),key:"action",width:"80px"}]),I=x({});function D(a){return a.auditMtcEventId&&I.value[a.id]||null}function J(a){const i=D(a);return i?i.state==="staging"?l("audit.mtc.stagingLabel"):i.state==="batched"?l("audit.mtc.batchedLabel",{batchId:i.batchId||"?"}):l("audit.mtc.unknownLabel"):l("audit.mtc.signedNotChecked")}function P(a){const i=D(a);return i?i.state==="staging"?"orange":i.state==="batched"?"green":"default":"blue"}function Y(a){if(!a.auditMtcEventId)return"";const i=D(a),u=l("audit.mtc.tooltipBase",{id:a.auditMtcEventId});return i?i.state==="staging"?l("audit.mtc.tooltipStaging",{base:u}):i.state==="batched"?l("audit.mtc.tooltipBatched",{base:u,batchId:i.batchId,treeHead:i.treeHeadId||""}):u:l("audit.mtc.tooltipNotChecked",{base:u})}async function k(a){if(!a.auditMtcEventId)return;const i=a.auditMtcEventId.replace(/"/g,'\\"');try{const u=await t.execute(`audit mtc reconcile-check "${i}" --json`,8e3),C=U(u.output);if(!C){A.warning(l("audit.mtc.noJson"));return}const pt=C.found?{state:"batched",batchId:C.batchId,treeHeadId:C.treeHeadId}:C.staging?{state:"staging"}:{state:"unknown"};I.value={...I.value,[a.id]:pt}}catch(u){A.error(l("audit.mtc.checkFailed",{err:u?.message||u}))}}const H=V(()=>E.value.total?(E.value.total-E.value.failures)/E.value.total*100:100),Z=V(()=>!!(p.value||O.value||v.value||N.value)),r=V(()=>{let a=w.value;if(O.value&&(a=a.filter(i=>i.eventType===O.value)),v.value&&(a=a.filter(i=>i.riskLevel===v.value)),N.value&&(a=a.filter(i=>!i.success)),p.value){const i=p.value.toLowerCase();a=a.filter(u=>(u.operation||"").toLowerCase().includes(i)||(u.actor||"").toLowerCase().includes(i)||(u.target||"").toLowerCase().includes(i))}return a});function g(a){const i=`audit.type.${a}`,u=l(i);return u===i?a:u}function q(a){return{auth:"blue",permission:"purple",data:"cyan",system:"default",file:"green",did:"gold",crypto:"magenta",api:"volcano"}[a]||"default"}function st(a){return{auth:"#1677ff",permission:"#722ed1",data:"#13c2c2",system:"#888",file:"#52c41a",did:"#faad14",crypto:"#eb2f96",api:"#fa541c"}[a]||"#888"}function ct(a){const i=`audit.risk.${a}`,u=l(i);return u===i?a:u}function dt(a){return{low:"default",medium:"gold",high:"orange",critical:"red"}[a]||"default"}function ut(a){return{low:"#888",medium:"#faad14",high:"#fa8c16",critical:"#ff4d4f"}[a]||"#888"}function ft(a,i){return i?Math.round(a/i*100):0}function yt(a,i){return a?a.length<=i?a:a.slice(0,i)+"…":""}function gt(a){if(typeof a=="string")return a;try{return JSON.stringify(a,null,2)}catch{return String(a)}}let K=null;function _t(){clearTimeout(K),K=setTimeout(()=>{p.value=S.value.trim()},300)}function mt(){p.value=S.value.trim()}async function G(){M.value=!0,F.value={noDb:!1,error:""};try{const[a,i]=await Promise.all([t.execute("audit log --json -n 200",12e3).catch(()=>({output:""})),t.execute("audit stats --json",8e3).catch(()=>({output:""}))]),u=[a,i].map(C=>X(C.output)).find(C=>C.noDb);u&&(F.value=u),w.value=rt(a.output),E.value=lt(i.output)}catch(a){A.error(l("audit.messages.loadFailed",{err:a?.message||a}))}finally{M.value=!1}}function bt(a){j.value=a,z.value=!0}async function vt(){try{const{output:a}=await t.execute("audit export -f json -n 10000",2e4);if(X(a).noDb){A.error(l("audit.messages.needInit"));return}if(!a.trim().startsWith("[")){A.error(l("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?l("audit.messages.exportOk",{path:u.path}):l("audit.messages.exportOkDefault"))}catch(a){A.error(l("audit.messages.exportFailed",{err:a?.message||a}))}}tt(G);const $={t:l,ws:t,fs:L,loading:M,logs:w,stats:E,errorState:F,activeTab:R,searchInput:S,searchTerm:p,typeFilter:O,riskFilter:v,failuresOnly:N,showDetailsModal:z,currentLog:j,logColumns:W,mtcStatusCache:I,getMtcStatusEntry:D,getMtcLabel:J,getMtcColor:P,getMtcTooltip:Y,checkMtcStatus:k,successRate:H,hasFilters:Z,filteredLogs:r,typeLabel:g,typeColor:q,typeBarColor:st,riskLabel:ct,riskColor:dt,riskBarColor:ut,pctOfTotal:ft,truncate:yt,formatDetails:gt,get searchDebounce(){return K},set searchDebounce(a){K=a},onSearchInput:_t,runSearch:mt,loadAll:G,viewLogDetails:bt,exportJson:vt,ref:x,computed:V,onMounted:tt,get useI18n(){return et},get tryParseJson(){return U},get ReloadOutlined(){return At},get DownloadOutlined(){return Ot},get FileSearchOutlined(){return Et},get CloseCircleOutlined(){return Tt},get CheckCircleOutlined(){return Ct},get WarningOutlined(){return St},get AlertOutlined(){return Lt},get message(){return A},get useWsStore(){return at},get useFs(){return ot},get parseLogs(){return rt},get parseStats(){return lt},get detectAuditError(){return X},get formatAuditTime(){return It},get classifyMtcStatus(){return zt},get EVENT_TYPES(){return nt},get RISK_LEVELS(){return it}};return Object.defineProperty($,"__isScriptSetup",{enumerable:!1,value:!0}),$}},Dt={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ft={class:"page-title"},Nt={class:"page-sub"},jt={class:"type-name"},Vt={class:"type-count"},Bt={class:"filter-bar"},Jt={key:0,style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},Pt={style:{color:"var(--text-primary)","font-weight":"500","font-family":"monospace","font-size":"12px"}},Kt={key:0,style:{color:"#ff4d4f","font-size":"11px","margin-top":"2px"}},Ut={key:0,style:{color:"var(--text-secondary)","font-size":"12px"}},Wt={key:1,style:{color:"var(--text-muted)"}},Yt={key:0,style:{color:"var(--text-secondary)","font-size":"12px","font-family":"monospace"}},Ht={key:1,style:{color:"var(--text-muted)"}},Zt={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},qt={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"}},Gt={style:{"font-family":"monospace"}},$t={key:0,style:{"font-family":"monospace","font-size":"12px"}},te={key:1,style:{color:"var(--text-muted)"}},ee={key:0,style:{"font-family":"monospace","font-size":"12px"}},ae={key:1,style:{color:"var(--text-muted)"}},oe={style:{"font-family":"monospace","font-size":"12px"}},re={style:{"font-family":"monospace","font-size":"11px"}},le={style:{color:"#ff4d4f"}},ne={class:"details-pre"};function ie(n,s,l,t,L,M){const w=m("a-button"),E=m("a-space"),F=m("a-alert"),R=m("a-statistic"),S=m("a-card"),p=m("a-col"),O=m("a-row"),v=m("a-tag"),N=m("a-input-search"),z=m("a-radio-button"),j=m("a-radio-group"),W=m("a-checkbox"),I=m("a-tooltip"),D=m("a-table"),J=m("a-tab-pane"),P=m("a-progress"),Y=m("a-tabs"),k=m("a-descriptions-item"),H=m("a-descriptions"),Z=m("a-modal");return d(),f("div",null,[b("div",Dt,[b("div",null,[b("h2",Ft,c(t.t("audit.title")),1),b("p",Nt,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(F,{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(T,null,B(t.EVENT_TYPES,r=>(d(),h(p,{key:r,xs:12,sm:8,lg:3},{default:e(()=>[b("div",{class:"type-pill",style:kt({borderLeftColor:t.typeBarColor(r)})},[o(v,{color:t.typeColor(r),style:{"font-family":"monospace","font-size":"11px"}},{default:e(()=>[_(c(r),1)]),_:2},1032,["color"]),b("div",jt,c(t.typeLabel(r)),1),b("div",Vt,c(t.stats.byEventType[r]||0),1)],4)]),_:2},1024))),128))]),_:1})]),_:1},8,["title"]),y(" Tabs "),o(Y,{activeKey:t.activeTab,"onUpdate:activeKey":s[4]||(s[4]=r=>t.activeTab=r),class:"audit-tabs"},{default:e(()=>[y(" ── Events tab ──────────────────────────────────────────── "),o(J,{key:"events",tab:t.t("audit.tabs.events")},{default:e(()=>[b("div",Bt,[o(N,{value:t.searchInput,"onUpdate:value":s[0]||(s[0]=r=>t.searchInput=r),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":s[1]||(s[1]=r=>t.typeFilter=r),size:"small","button-style":"solid"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allTypes")),1)]),_:1}),(d(!0),f(T,null,B(t.EVENT_TYPES,r=>(d(),h(z,{key:r,value:r},{default:e(()=>[_(c(t.typeLabel(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(j,{value:t.riskFilter,"onUpdate:value":s[2]||(s[2]=r=>t.riskFilter=r),size:"small"},{default:e(()=>[o(z,{value:""},{default:e(()=>[_(c(t.t("audit.filter.allRisks")),1)]),_:1}),(d(!0),f(T,null,B(t.RISK_LEVELS,r=>(d(),h(z,{key:r,value:r},{default:e(()=>[_(c(t.riskLabel(r)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),o(W,{checked:t.failuresOnly,"onUpdate:checked":s[3]||(s[3]=r=>t.failuresOnly=r)},{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:r=>t.t("audit.totals.rows",{count:r})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:e(({column:r,record:g})=>[r.key==="createdAt"?(d(),f("span",Jt,c(t.formatAuditTime(g.createdAt)),1)):y("v-if",!0),r.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),r.key==="operation"?(d(),f(T,{key:2},[b("span",Pt,c(g.operation),1),g.errorMessage?(d(),f("div",Kt,c(g.errorMessage),1)):y("v-if",!0)],64)):y("v-if",!0),r.key==="actor"?(d(),f(T,{key:3},[g.actor?(d(),f("span",Ut,c(g.actor),1)):(d(),f("span",Wt,"—"))],64)):y("v-if",!0),r.key==="target"?(d(),f(T,{key:4},[g.target?(d(),f("span",Yt,c(t.truncate(g.target,32)),1)):(d(),f("span",Ht,"—"))],64)):y("v-if",!0),r.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),r.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),r.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(()=>[...s[6]||(s[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:q=>t.checkMtcStatus(g)},{default:e(()=>[_(c(t.getMtcLabel(g)),1)]),_:2},1032,["color","onClick"])]),_:2},1032,["title"]))],64)):y("v-if",!0),r.key==="action"?(d(),h(w,{key:8,size:"small",type:"link",onClick:q=>t.viewLogDetails(g)},{default:e(()=>[_(c(t.t("audit.rowAction.details")),1)]),_:1},8,["onClick"])):y("v-if",!0)]),emptyText:e(()=>[b("div",Zt,[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(J,{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,B(t.EVENT_TYPES,r=>(d(),f("div",{key:r,class:"bd-row"},[o(v,{color:t.typeColor(r),style:{"min-width":"80px","text-align":"center","font-family":"monospace"}},{default:e(()=>[_(c(r),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byEventType[r]||0,t.stats.total),"stroke-color":t.typeBarColor(r),format:()=>`${t.stats.byEventType[r]||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,B(t.RISK_LEVELS,r=>(d(),f("div",{key:r,class:"bd-row"},[o(v,{color:t.riskColor(r),style:{"min-width":"80px","text-align":"center"}},{default:e(()=>[_(c(t.riskLabel(r)),1)]),_:2},1032,["color"]),o(P,{percent:t.pctOfTotal(t.stats.byRiskLevel[r]||0,t.stats.total),"stroke-color":t.riskBarColor(r),format:()=>`${t.stats.byRiskLevel[r]||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(Z,{open:t.showDetailsModal,"onUpdate:open":s[5]||(s[5]=r=>t.showDetailsModal=r),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(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",Gt,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",$t,c(t.currentLog.actor),1)):(d(),f("span",te,"—"))]),_:1},8,["label"]),o(k,{label:t.t("audit.details.target")},{default:e(()=>[t.currentLog.target?(d(),f("span",ee,c(t.currentLog.target),1)):(d(),f("span",ae,"—"))]),_:1},8,["label"]),t.currentLog.ipAddress?(d(),h(k,{key:0,label:t.t("audit.details.ip")},{default:e(()=>[b("span",oe,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",re,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",le,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",ne,c(t.formatDetails(t.currentLog.details)),1)]),_:1},8,["label"])):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"])])}const ye=xt(Mt,[["render",ie],["__scopeId","data-v-be9f4fc3"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/views/Audit.vue"]]);export{ye as default};
@@ -1 +1 @@
1
- import{E as te,b as q,r as c,I as S,J as F,U as I,c as u,K as o,S as M,V as A,w as L,n as X,o as G,f as J,P as k,Q as g,F as K,R as C}from"./vendor-Bn1JzzAn.js";import{u as T,_ as ne,d as H}from"./index-BEVm0lCS.js";import{R as ae}from"./icons-DG5UD-6K.js";function P(y,t={}){return{type:y,...t}}function se(y){if(typeof y!="object"||y===null)return!1;const t=y;return(t.type==="bg-event"||t.type==="bg-log")&&typeof t.bgId=="string"}const Q=200,W=4e5,Y=te("backgroundAgents",()=>{const y=c([]),t=c(!1),f=c(!0),e=c(null),_=c(null),B=c(!1),b=c(""),d=c([]);let w=null,v=null;const E=q(()=>y.value.filter(a=>a.status==="running"));async function m(){const a=T();t.value=!0;try{const s=await a.sendRaw(P("bg-list",{all:f.value}));s&&Array.isArray(s.sessions)&&(y.value=s.sessions)}catch{}finally{t.value=!1}}function h(a){d.value.push(a),d.value.length>Q&&d.value.splice(0,d.value.length-Q)}function R(a){b.value+=a,b.value.length>W&&(b.value=b.value.slice(-W))}function z(){if(v)return;v=T().onMessage(s=>{!se(s)||s.bgId!==e.value||(s.type==="bg-log"&&typeof s.chunk=="string"?R(s.chunk):s.type==="bg-event"&&s.event&&(h(s.event),s.event.type==="transport-closed"?(B.value=!0,m()):(s.event.type==="turn-started"||s.event.type==="turn-ended"||s.event.type==="idle")&&m()))})}async function l(a){const s=T();e.value&&e.value!==a&&await O();const i=await s.sendRaw(P("bg-attach",{bgId:a,lines:200}));return e.value=a,_.value=i?.hello||null,B.value=!1,i?.reattached||(b.value=typeof i?.log=="string"?i.log:"",d.value=[]),z(),i}async function r(a){const s=T(),i=String(a||"").trim();return!e.value||!i?!1:(await s.sendRaw(P("bg-prompt",{bgId:e.value,text:i})),!0)}async function x(){const a=T();e.value&&await a.sendRaw(P("bg-stop-turn",{bgId:e.value}))}async function O(){const a=T(),s=e.value;if(e.value=null,_.value=null,B.value=!1,s)try{await a.sendRaw(P("bg-detach",{bgId:s}))}catch{}}async function U(a,s){const i=T(),p=String(s||"").trim();return!a||!p?!1:(await i.sendRaw(P("bg-rename",{bgId:a,title:p})),await m(),!0)}async function D(a,s){const i=T(),p=String(s||"").trim();if(!a||!p)return null;const ee=await i.sendRaw(P("bg-resume",{bgId:a,text:p}));return await m(),ee?.session||null}async function j(a){const s=T(),i=a||e.value;if(i)try{await s.sendRaw(P("bg-stop",{bgId:i}))}finally{e.value===i&&(e.value=null,_.value=null),await m()}}function N(a=5e3){n(),m(),w=setInterval(m,a)}function n(){w&&(clearInterval(w),w=null)}async function V(){n(),v&&(v(),v=null),await O()}function Z(a){switch(a){case"running":return"processing";case"completed":return"success";case"failed":return"error";case"stopped":return"warning";case"lost":return"error";default:return"default"}}function $(a,s=Date.now()){const i=a?.endedAt||s,p=Math.max(0,i-(a?.startedAt||i));return p<6e4?`${Math.round(p/1e3)}s`:p<36e5?`${Math.floor(p/6e4)}m ${Math.round(p%6e4/1e3)}s`:`${Math.floor(p/36e5)}h ${Math.floor(p%36e5/6e4)}m`}return{sessions:y,loading:t,showAll:f,running:E,attachedId:e,attachedHello:_,transportClosed:B,logText:b,events:d,fetchSessions:m,attach:l,sendPrompt:r,stopTurn:x,detach:O,renameSession:U,resumeSession:D,stopSession:j,startPolling:N,stopPolling:n,teardown:V,getStatusColor:Z,formatElapsed:$}}),oe={__name:"BackgroundAgents",setup(y,{expose:t}){t();const f=Y(),e=c(""),_=c(null),B=[{title:"ID",dataIndex:"id",key:"id",ellipsis:!0},{title:"状态",key:"status",width:160},{title:"标题",dataIndex:"title",key:"title",ellipsis:!0},{title:"轮次",dataIndex:"turnCount",key:"turnCount",width:70},{title:"耗时",key:"elapsed",width:100},{title:"操作",key:"actions",width:170}],b=q(()=>f.events.length?f.events[f.events.length-1]:null);function d(n){switch(n.type){case"turn-started":return`第 ${n.turn} 轮开始${n.prompt?`:${n.prompt}`:""}`;case"turn-ended":return`第 ${n.turn} 轮结束(exit ${n.exitCode})`;case"idle":return"会话空闲,等待 follow-up prompt";case"accepted":return`prompt 已排队(#${n.queued})`;case"stopping":return"正在停止当前轮";case"transport-closed":return"会话已收尾,连接关闭";case"error":return`错误:${n.message}`;default:return n.type}}async function w(n){try{await f.attach(n)}catch(V){H.error(`接管失败:${V.message}`)}}async function v(){const n=e.value;if(n.trim())try{await f.sendPrompt(n),e.value=""}catch(V){H.error(`发送失败:${V.message}`)}}const E=c(!1),m=c(!1),h=c("");let R=null;function z(n){R=n.id,h.value=n.title||"",E.value=!0}async function l(){if(h.value.trim()){m.value=!0;try{await f.renameSession(R,h.value),E.value=!1}catch(n){H.error(`重命名失败:${n.message}`)}finally{m.value=!1}}}const r=c(!1),x=c(!1),O=c("");let U=null;function D(n){U=n.id,O.value="",r.value=!0}async function j(){if(O.value.trim()){x.value=!0;try{const n=await f.resumeSession(U,O.value);r.value=!1,n&&H.success(`已续跑为 ${n.id}`)}catch(n){H.error(`续跑失败:${n.message}`)}finally{x.value=!1}}}L(()=>f.logText,async()=>{await X(),_.value&&(_.value.scrollTop=_.value.scrollHeight)}),G(()=>f.startPolling(5e3)),J(()=>f.teardown());const N={store:f,promptText:e,logPane:_,columns:B,lastEvent:b,describeEvent:d,onAttach:w,onSendPrompt:v,renameOpen:E,renameBusy:m,renameText:h,get renameTarget(){return R},set renameTarget(n){R=n},openRename:z,onRenameOk:l,resumeOpen:r,resumeBusy:x,resumeText:O,get resumeTarget(){return U},set resumeTarget(n){U=n},openResume:D,onResumeOk:j,computed:q,nextTick:X,onBeforeUnmount:J,onMounted:G,ref:c,watch:L,get ReloadOutlined(){return ae},get message(){return H},get useBackgroundAgentsStore(){return Y}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},le={class:"page-header"},re={key:0,class:"event-line"},ie={class:"prompt-row"};function ue(y,t,f,e,_,B){const b=S("a-switch"),d=S("a-button"),w=S("a-space"),v=S("a-tag"),E=S("a-popconfirm"),m=S("a-table"),h=S("a-input"),R=S("a-card"),z=S("a-modal");return k(),F("div",null,[I("div",le,[t[11]||(t[11]=I("div",null,[I("h2",{class:"page-title"},"后台 Agent"),I("p",{class:"page-sub"}," 查看 cc agent --bg 后台会话,实时跟随日志并交互接管(follow-up prompt / 停止本轮)。 ")],-1)),u(w,null,{default:o(()=>[u(b,{checked:e.store.showAll,"onUpdate:checked":t[0]||(t[0]=l=>e.store.showAll=l),"checked-children":"全部","un-checked-children":"运行中",onChange:t[1]||(t[1]=l=>e.store.fetchSessions())},null,8,["checked"]),u(d,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=l=>e.store.fetchSessions())},{icon:o(()=>[u(e.ReloadOutlined)]),default:o(()=>[t[10]||(t[10]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),u(m,{"data-source":e.store.sessions,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:8,hideOnSinglePage:!0},class:"bg-table"},{bodyCell:o(({column:l,record:r})=>[l.key==="status"?(k(),F(K,{key:0},[u(v,{color:e.store.getStatusColor(r.status)},{default:o(()=>[g(C(r.status),1)]),_:2},1032,["color"]),r.phase?(k(),M(v,{key:0,color:"default"},{default:o(()=>[g(C(r.phase),1)]),_:2},1024)):A("v-if",!0)],64)):l.key==="elapsed"?(k(),F(K,{key:1},[g(C(e.store.formatElapsed(r)),1)],64)):l.key==="actions"?(k(),M(w,{key:2},{default:o(()=>[u(d,{size:"small",type:"primary",disabled:r.status!=="running"||!r.interactive,onClick:x=>e.onAttach(r.id)},{default:o(()=>[g(C(e.store.attachedId===r.id?"已连接":"接管"),1)]),_:2},1032,["disabled","onClick"]),u(d,{size:"small",onClick:x=>e.openRename(r)},{default:o(()=>[...t[12]||(t[12]=[g("重命名",-1)])]),_:1},8,["onClick"]),r.status!=="running"&&r.sessionId?(k(),M(d,{key:0,size:"small",onClick:x=>e.openResume(r)},{default:o(()=>[...t[13]||(t[13]=[g(" 续跑 ",-1)])]),_:1},8,["onClick"])):A("v-if",!0),r.status==="running"?(k(),M(E,{key:1,title:"终止整个后台会话?",onConfirm:x=>e.store.stopSession(r.id)},{default:o(()=>[u(d,{size:"small",danger:""},{default:o(()=>[...t[14]||(t[14]=[g("终止",-1)])]),_:1})]),_:1},8,["onConfirm"])):A("v-if",!0)]),_:2},1024)):A("v-if",!0)]),_:1},8,["data-source"]),e.store.attachedId?(k(),M(R,{key:0,size:"small",class:"attach-card"},{title:o(()=>[u(w,null,{default:o(()=>[I("span",null,C(e.store.attachedId),1),e.store.attachedHello?(k(),M(v,{key:0,color:"processing"},{default:o(()=>[g(" turn "+C(e.store.attachedHello.turn)+" · "+C(e.store.attachedHello.phase),1)]),_:1})):A("v-if",!0),e.store.transportClosed?(k(),M(v,{key:1,color:"warning"},{default:o(()=>[...t[15]||(t[15]=[g("会话已结束",-1)])]),_:1})):A("v-if",!0)]),_:1})]),extra:o(()=>[u(w,null,{default:o(()=>[u(d,{size:"small",disabled:e.store.transportClosed,onClick:t[3]||(t[3]=l=>e.store.stopTurn())},{default:o(()=>[...t[16]||(t[16]=[g("停止本轮",-1)])]),_:1},8,["disabled"]),u(d,{size:"small",onClick:t[4]||(t[4]=l=>e.store.detach())},{default:o(()=>[...t[17]||(t[17]=[g("断开",-1)])]),_:1})]),_:1})]),default:o(()=>[I("pre",{ref:"logPane",class:"log-pane"},C(e.store.logText||"(暂无输出)"),513),e.lastEvent?(k(),F("div",re," — "+C(e.describeEvent(e.lastEvent)),1)):A("v-if",!0),I("div",ie,[u(h,{value:e.promptText,"onUpdate:value":t[5]||(t[5]=l=>e.promptText=l),placeholder:"输入 follow-up prompt,回车发送到该后台会话",disabled:e.store.transportClosed,onPressEnter:e.onSendPrompt},null,8,["value","disabled"]),u(d,{type:"primary",disabled:e.store.transportClosed||!e.promptText.trim(),onClick:e.onSendPrompt},{default:o(()=>[...t[18]||(t[18]=[g(" 发送 ",-1)])]),_:1},8,["disabled"])])]),_:1})):A("v-if",!0),u(z,{open:e.renameOpen,"onUpdate:open":t[7]||(t[7]=l=>e.renameOpen=l),title:"重命名后台会话","confirm-loading":e.renameBusy,onOk:e.onRenameOk},{default:o(()=>[u(h,{value:e.renameText,"onUpdate:value":t[6]||(t[6]=l=>e.renameText=l),placeholder:"新标题",onPressEnter:e.onRenameOk},null,8,["value"])]),_:1},8,["open","confirm-loading"]),u(z,{open:e.resumeOpen,"onUpdate:open":t[9]||(t[9]=l=>e.resumeOpen=l),title:"续跑该会话(新的后台运行,续接同一对话)","confirm-loading":e.resumeBusy,onOk:e.onResumeOk},{default:o(()=>[u(h,{value:e.resumeText,"onUpdate:value":t[8]||(t[8]=l=>e.resumeText=l),placeholder:"输入要继续执行的 prompt",onPressEnter:e.onResumeOk},null,8,["value"])]),_:1},8,["open","confirm-loading"])])}const me=ne(oe,[["render",ue],["__scopeId","data-v-431ac2c4"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/views/BackgroundAgents.vue"]]);export{me as default};
1
+ import{E as te,b as j,r as c,I as S,J as D,U as I,c as u,K as o,S as M,V as O,w as q,n as L,o as G,f as J,P as k,Q as g,F as K,R as C}from"./vendor-Bn1JzzAn.js";import{u as T,_ as ne,d as H}from"./index-Dyngbd29.js";import{R as ae}from"./icons-DG5UD-6K.js";function P(y,t={}){return{type:y,...t}}function se(y){if(typeof y!="object"||y===null)return!1;const t=y;return(t.type==="bg-event"||t.type==="bg-log")&&typeof t.bgId=="string"}const Q=200,W=4e5,Y=te("backgroundAgents",()=>{const y=c([]),t=c(!1),f=c(!0),e=c(null),_=c(null),B=c(!1),b=c(""),d=c([]);let w=null,v=null;const E=j(()=>y.value.filter(a=>a.status==="running"));async function m(){const a=T();t.value=!0;try{const s=await a.sendRaw(P("bg-list",{all:f.value}));s&&Array.isArray(s.sessions)&&(y.value=s.sessions)}catch{}finally{t.value=!1}}function h(a){d.value.push(a),d.value.length>Q&&d.value.splice(0,d.value.length-Q)}function R(a){b.value+=a,b.value.length>W&&(b.value=b.value.slice(-W))}function z(){if(v)return;v=T().onMessage(s=>{!se(s)||s.bgId!==e.value||(s.type==="bg-log"&&typeof s.chunk=="string"?R(s.chunk):s.type==="bg-event"&&s.event&&(h(s.event),s.event.type==="transport-closed"?(B.value=!0,m()):(s.event.type==="turn-started"||s.event.type==="turn-ended"||s.event.type==="idle")&&m()))})}async function l(a){const s=T();e.value&&e.value!==a&&await A();const i=await s.sendRaw(P("bg-attach",{bgId:a,lines:200}));return e.value=a,_.value=i?.hello||null,B.value=!1,i?.reattached||(b.value=typeof i?.log=="string"?i.log:"",d.value=[]),z(),i}async function r(a){const s=T(),i=String(a||"").trim();return!e.value||!i?!1:(await s.sendRaw(P("bg-prompt",{bgId:e.value,text:i})),!0)}async function x(){const a=T();e.value&&await a.sendRaw(P("bg-stop-turn",{bgId:e.value}))}async function A(){const a=T(),s=e.value;if(e.value=null,_.value=null,B.value=!1,s)try{await a.sendRaw(P("bg-detach",{bgId:s}))}catch{}}async function U(a,s){const i=T(),p=String(s||"").trim();return!a||!p?!1:(await i.sendRaw(P("bg-rename",{bgId:a,title:p})),await m(),!0)}async function F(a,s){const i=T(),p=String(s||"").trim();if(!a||!p)return null;const ee=await i.sendRaw(P("bg-resume",{bgId:a,text:p}));return await m(),ee?.session||null}async function X(a){const s=T(),i=a||e.value;if(i)try{await s.sendRaw(P("bg-stop",{bgId:i}))}finally{e.value===i&&(e.value=null,_.value=null),await m()}}function N(a=5e3){n(),m(),w=setInterval(m,a)}function n(){w&&(clearInterval(w),w=null)}async function V(){n(),v&&(v(),v=null),await A()}function Z(a){switch(a){case"running":return"processing";case"completed":return"success";case"failed":return"error";case"stopped":return"warning";case"lost":return"error";default:return"default"}}function $(a,s=Date.now()){const i=a?.endedAt||s,p=Math.max(0,i-(a?.startedAt||i));return p<6e4?`${Math.round(p/1e3)}s`:p<36e5?`${Math.floor(p/6e4)}m ${Math.round(p%6e4/1e3)}s`:`${Math.floor(p/36e5)}h ${Math.floor(p%36e5/6e4)}m`}return{sessions:y,loading:t,showAll:f,running:E,attachedId:e,attachedHello:_,transportClosed:B,logText:b,events:d,fetchSessions:m,attach:l,sendPrompt:r,stopTurn:x,detach:A,renameSession:U,resumeSession:F,stopSession:X,startPolling:N,stopPolling:n,teardown:V,getStatusColor:Z,formatElapsed:$}}),oe={__name:"BackgroundAgents",setup(y,{expose:t}){t();const f=Y(),e=c(""),_=c(null),B=[{title:"ID",dataIndex:"id",key:"id",ellipsis:!0},{title:"状态",key:"status",width:160},{title:"标题",dataIndex:"title",key:"title",ellipsis:!0},{title:"轮次",dataIndex:"turnCount",key:"turnCount",width:70},{title:"耗时",key:"elapsed",width:100},{title:"操作",key:"actions",width:170}],b=j(()=>f.events.length?f.events[f.events.length-1]:null);function d(n){switch(n.type){case"turn-started":return`第 ${n.turn} 轮开始${n.prompt?`:${n.prompt}`:""}`;case"turn-ended":return`第 ${n.turn} 轮结束(exit ${n.exitCode})`;case"idle":return"会话空闲,等待 follow-up prompt";case"accepted":return`prompt 已排队(#${n.queued})`;case"stopping":return"正在停止当前轮";case"transport-closed":return"会话已收尾,连接关闭";case"error":return`错误:${n.message}`;default:return n.type}}async function w(n){try{await f.attach(n)}catch(V){H.error(`接管失败:${V.message}`)}}async function v(){const n=e.value;if(n.trim())try{await f.sendPrompt(n),e.value=""}catch(V){H.error(`发送失败:${V.message}`)}}const E=c(!1),m=c(!1),h=c("");let R=null;function z(n){R=n.id,h.value=n.title||"",E.value=!0}async function l(){if(h.value.trim()){m.value=!0;try{await f.renameSession(R,h.value),E.value=!1}catch(n){H.error(`重命名失败:${n.message}`)}finally{m.value=!1}}}const r=c(!1),x=c(!1),A=c("");let U=null;function F(n){U=n.id,A.value="",r.value=!0}async function X(){if(A.value.trim()){x.value=!0;try{const n=await f.resumeSession(U,A.value);r.value=!1,n&&H.success(`已续跑为 ${n.id}`)}catch(n){H.error(`续跑失败:${n.message}`)}finally{x.value=!1}}}q(()=>f.logText,async()=>{await L(),_.value&&(_.value.scrollTop=_.value.scrollHeight)}),G(()=>f.startPolling(5e3)),J(()=>f.teardown());const N={store:f,promptText:e,logPane:_,columns:B,lastEvent:b,describeEvent:d,onAttach:w,onSendPrompt:v,renameOpen:E,renameBusy:m,renameText:h,get renameTarget(){return R},set renameTarget(n){R=n},openRename:z,onRenameOk:l,resumeOpen:r,resumeBusy:x,resumeText:A,get resumeTarget(){return U},set resumeTarget(n){U=n},openResume:F,onResumeOk:X,computed:j,nextTick:L,onBeforeUnmount:J,onMounted:G,ref:c,watch:q,get ReloadOutlined(){return ae},get message(){return H},get useBackgroundAgentsStore(){return Y}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},le={class:"page-header"},re={key:0,class:"event-line"},ie={class:"prompt-row"};function ue(y,t,f,e,_,B){const b=S("a-switch"),d=S("a-button"),w=S("a-space"),v=S("a-tag"),E=S("a-popconfirm"),m=S("a-table"),h=S("a-input"),R=S("a-card"),z=S("a-modal");return k(),D("div",null,[I("div",le,[t[11]||(t[11]=I("div",null,[I("h2",{class:"page-title"},"后台 Agent"),I("p",{class:"page-sub"}," 查看 cc agent --bg 后台会话,实时跟随日志并交互接管(follow-up prompt / 停止本轮)。 ")],-1)),u(w,null,{default:o(()=>[u(b,{checked:e.store.showAll,"onUpdate:checked":t[0]||(t[0]=l=>e.store.showAll=l),"checked-children":"全部","un-checked-children":"运行中",onChange:t[1]||(t[1]=l=>e.store.fetchSessions())},null,8,["checked"]),u(d,{ghost:"",loading:e.store.loading,onClick:t[2]||(t[2]=l=>e.store.fetchSessions())},{icon:o(()=>[u(e.ReloadOutlined)]),default:o(()=>[t[10]||(t[10]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),u(m,{"data-source":e.store.sessions,columns:e.columns,"row-key":"id",size:"small",pagination:{pageSize:8,hideOnSinglePage:!0},class:"bg-table"},{bodyCell:o(({column:l,record:r})=>[l.key==="status"?(k(),D(K,{key:0},[u(v,{color:e.store.getStatusColor(r.status)},{default:o(()=>[g(C(r.status),1)]),_:2},1032,["color"]),r.phase?(k(),M(v,{key:0,color:"default"},{default:o(()=>[g(C(r.phase),1)]),_:2},1024)):O("v-if",!0)],64)):l.key==="elapsed"?(k(),D(K,{key:1},[g(C(e.store.formatElapsed(r)),1)],64)):l.key==="actions"?(k(),M(w,{key:2},{default:o(()=>[u(d,{size:"small",type:"primary",disabled:r.status!=="running"||!r.interactive,onClick:x=>e.onAttach(r.id)},{default:o(()=>[g(C(e.store.attachedId===r.id?"已连接":"接管"),1)]),_:2},1032,["disabled","onClick"]),u(d,{size:"small",onClick:x=>e.openRename(r)},{default:o(()=>[...t[12]||(t[12]=[g("重命名",-1)])]),_:1},8,["onClick"]),r.status!=="running"&&r.sessionId?(k(),M(d,{key:0,size:"small",onClick:x=>e.openResume(r)},{default:o(()=>[...t[13]||(t[13]=[g(" 续跑 ",-1)])]),_:1},8,["onClick"])):O("v-if",!0),r.status==="running"?(k(),M(E,{key:1,title:"终止整个后台会话?",onConfirm:x=>e.store.stopSession(r.id)},{default:o(()=>[u(d,{size:"small",danger:""},{default:o(()=>[...t[14]||(t[14]=[g("终止",-1)])]),_:1})]),_:1},8,["onConfirm"])):O("v-if",!0)]),_:2},1024)):O("v-if",!0)]),_:1},8,["data-source"]),e.store.attachedId?(k(),M(R,{key:0,size:"small",class:"attach-card"},{title:o(()=>[u(w,null,{default:o(()=>[I("span",null,C(e.store.attachedId),1),e.store.attachedHello?(k(),M(v,{key:0,color:"processing"},{default:o(()=>[g(" turn "+C(e.store.attachedHello.turn)+" · "+C(e.store.attachedHello.phase),1)]),_:1})):O("v-if",!0),e.store.transportClosed?(k(),M(v,{key:1,color:"warning"},{default:o(()=>[...t[15]||(t[15]=[g("会话已结束",-1)])]),_:1})):O("v-if",!0)]),_:1})]),extra:o(()=>[u(w,null,{default:o(()=>[u(d,{size:"small",disabled:e.store.transportClosed,onClick:t[3]||(t[3]=l=>e.store.stopTurn())},{default:o(()=>[...t[16]||(t[16]=[g("停止本轮",-1)])]),_:1},8,["disabled"]),u(d,{size:"small",onClick:t[4]||(t[4]=l=>e.store.detach())},{default:o(()=>[...t[17]||(t[17]=[g("断开",-1)])]),_:1})]),_:1})]),default:o(()=>[I("pre",{ref:"logPane",class:"log-pane"},C(e.store.logText||"(暂无输出)"),513),e.lastEvent?(k(),D("div",re," — "+C(e.describeEvent(e.lastEvent)),1)):O("v-if",!0),I("div",ie,[u(h,{value:e.promptText,"onUpdate:value":t[5]||(t[5]=l=>e.promptText=l),placeholder:"输入 follow-up prompt,回车发送到该后台会话",disabled:e.store.transportClosed,onPressEnter:e.onSendPrompt},null,8,["value","disabled"]),u(d,{type:"primary",disabled:e.store.transportClosed||!e.promptText.trim(),onClick:e.onSendPrompt},{default:o(()=>[...t[18]||(t[18]=[g(" 发送 ",-1)])]),_:1},8,["disabled"])])]),_:1})):O("v-if",!0),u(z,{open:e.renameOpen,"onUpdate:open":t[7]||(t[7]=l=>e.renameOpen=l),title:"重命名后台会话","confirm-loading":e.renameBusy,onOk:e.onRenameOk},{default:o(()=>[u(h,{value:e.renameText,"onUpdate:value":t[6]||(t[6]=l=>e.renameText=l),placeholder:"新标题",onPressEnter:e.onRenameOk},null,8,["value"])]),_:1},8,["open","confirm-loading"]),u(z,{open:e.resumeOpen,"onUpdate:open":t[9]||(t[9]=l=>e.resumeOpen=l),title:"续跑该会话(新的后台运行,续接同一对话)","confirm-loading":e.resumeBusy,onOk:e.onResumeOk},{default:o(()=>[u(h,{value:e.resumeText,"onUpdate:value":t[8]||(t[8]=l=>e.resumeText=l),placeholder:"输入要继续执行的 prompt",onPressEnter:e.onResumeOk},null,8,["value"])]),_:1},8,["open","confirm-loading"])])}const me=ne(oe,[["render",ue],["__scopeId","data-v-431ac2c4"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/views/BackgroundAgents.vue"]]);export{me as default};
@@ -1 +1 @@
1
- import{I as k,J as d,U as b,R as l,c as t,K as n,o as fe,b as G,r as s,P as c,Q as v,V as r,S as _,F as Ce}from"./vendor-Bn1JzzAn.js";import{_ as ze,b as ye,u as be,d as ie,t as ke}from"./index-BEVm0lCS.js";import{u as ve}from"./useFs-rCuXHeme.js";import{aA as Pe,R as Be,aR as Le,at as Te,aT as Ae,S as Fe,G as Me}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const se=["B","KB","MB","GB","TB","PB","EB"];function Re(A){if(A==null||isNaN(A))return"-";const f=Number(A);if(f<0)return"-";if(f===0)return"0 B";let o=Math.floor(Math.log(f)/Math.log(1024));return o<0&&(o=0),o>=se.length&&(o=se.length-1),(f/Math.pow(1024,o)).toFixed(o>0?1:0)+" "+se[o]}const Ie={__name:"Backup",setup(A,{expose:f}){f();const{t:o}=ye(),e=be(),W=ve(),U=s(!1),g=s("backup"),S=s(!1),x=s(!1),P=s(!1),h=s(""),y=s([]),w=s(""),F=G(()=>[{title:o("backup.backupColumns.id"),key:"id"},{title:o("backup.backupColumns.size"),key:"size",width:120},{title:o("backup.backupColumns.createdAt"),key:"createdAt"},{title:o("backup.backupColumns.action"),key:"action",width:100}]);async function m(){x.value=!0,h.value="";try{const{output:a}=await e.execute("backup list --json",15e3),i=T(a);Array.isArray(i)?y.value=i:i&&Array.isArray(i.backups)?y.value=i.backups:(y.value=[],a&&a.trim()&&(w.value=a))}catch(a){h.value=o("backup.messages.loadBackupsFailed",{err:a.message})}finally{x.value=!1}}async function O(){P.value=!0,w.value="",h.value="";try{const{output:a}=await e.execute("backup create --json",3e4);w.value=a||o("backup.backup.createDefaultMessage"),await m()}catch(a){w.value=o("backup.messages.createBackupFailed",{err:a.message})}finally{P.value=!1}}const M=s(!1),B=s(!1),L=s(null),C=s("");function Q(a){L.value=a,C.value="",M.value=!0}async function u(){if(L.value){B.value=!0,C.value="";try{const{output:a}=await e.execute(`backup restore ${L.value.id}`,6e4);C.value=a||o("backup.backup.restoreDefaultMessage")}catch(a){C.value=o("backup.messages.restoreFailed",{err:a.message})}finally{B.value=!1}}}const p=s(!1),R=s(""),I=s(!1),j=s(""),Y=s(0),q=s(""),z=s(""),X=s(!1),Z=s(!1),D=s([]),ge=G(()=>[{title:o("backup.conflictColumns.path"),key:"path"},{title:o("backup.conflictColumns.type"),key:"type",width:120}]);async function N(){p.value=!0,R.value="";try{const{output:a}=await e.execute("sync status --json",15e3),i=T(a);i?(I.value=i.online||i.synced||i.status==="online"||!1,j.value=I.value?o("backup.sync.synced"):o("backup.sync.notSynced"),Y.value=i.pending??i.pendingChanges??0,q.value=i.lastSync||i.lastSyncTime||""):ce(a)}catch(a){R.value=o("backup.messages.loadSyncFailed",{err:a.message})}finally{p.value=!1}}function ce(a){if(!a){j.value=o("backup.sync.unknown");return}I.value=/synced|online|up.to.date/i.test(a),j.value=I.value?o("backup.sync.synced"):o("backup.sync.notSynced");const i=a.match(/pending[:\s]+(\d+)/i);Y.value=i?parseInt(i[1]):0;const E=a.match(/last[:\s]+(.+)/i);E&&(q.value=E[1].trim())}async function me(){X.value=!0,z.value="";try{const{output:a}=await e.execute("sync push",3e4);z.value=a||o("backup.sync.pushDefaultMessage"),await N()}catch(a){z.value=o("backup.messages.pushFailed",{err:a.message})}finally{X.value=!1}}async function _e(){Z.value=!0,z.value="";try{const{output:a}=await e.execute("sync pull",3e4);z.value=a||o("backup.sync.pullDefaultMessage"),await N()}catch(a){z.value=o("backup.messages.pullFailed",{err:a.message})}finally{Z.value=!1}}async function re(){try{const{output:a}=await e.execute("sync conflicts --json",15e3),i=T(a);Array.isArray(i)?D.value=i:i&&Array.isArray(i.conflicts)?D.value=i.conflicts:D.value=[]}catch{D.value=[]}}const $=s(!1),ee=s(""),ae=s(!1),te=s(""),ne=s(!1),H=s(""),J=s([]),xe=G(()=>[{title:o("backup.pinColumns.cid"),key:"cid"},{title:o("backup.pinColumns.name"),key:"name"},{title:o("backup.pinColumns.size"),key:"size",width:120},{title:o("backup.pinColumns.pinnedAt"),key:"pinnedAt"},{title:o("backup.pinColumns.action"),key:"action",width:120}]);async function ue(){$.value=!0,ee.value="";try{const{output:a}=await e.execute("ipfs status --json",15e3),i=T(a);if(i)ae.value=i.online||i.status==="online"||i.connected||!1,te.value=i.peerId||i.id||"";else{ae.value=a?/online|connected|running/i.test(a):!1;const E=a?a.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=E?E[1]:""}}catch(a){ee.value=o("backup.messages.loadIpfsFailed",{err:a.message})}finally{$.value=!1}}async function K(){ne.value=!0,H.value="";try{const{output:a}=await e.execute("ipfs pins --json",15e3),i=T(a);Array.isArray(i)?J.value=i:i&&Array.isArray(i.pins)?J.value=i.pins:J.value=[]}catch(a){H.value=o("backup.messages.loadPinsFailed",{err:a.message})}finally{ne.value=!1}}const he=s(!1),oe=s(!1),le=s(""),V=s("");async function we(){if(le.value.trim()){oe.value=!0,V.value="";try{const{output:a}=await e.execute(`ipfs pin "${le.value.trim()}"`,3e4);V.value=a||o("backup.ipfs.pinDefaultSuccess"),await K()}catch(a){V.value=o("backup.messages.pinFailed",{err:a.message})}finally{oe.value=!1}}}async function Oe(a){try{await e.execute(`ipfs unpin ${a.cid}`,15e3),await K()}catch(i){H.value=o("backup.messages.unpinFailed",{err:i.message})}}function T(a){return ke(a)}async function Se(){if(y.value.length){U.value=!0;try{const a=await W.saveJson({schema:1,exportedAt:new Date().toISOString(),count:y.value.length,backups:y.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;ie.success(a.path?o("backup.messages.exportOk",{count:y.value.length,path:a.path}):o("backup.messages.exportOkDefault"))}catch(a){ie.error(o("backup.messages.exportFailed",{err:a.message||a}))}finally{U.value=!1}}}async function de(){S.value=!0;try{await Promise.all([m(),N(),re(),ue(),K()])}finally{S.value=!1}}fe(de);const pe={t:o,ws:e,fs:W,exportingList:U,activeTab:g,refreshing:S,backupLoading:x,backupCreating:P,backupError:h,backups:y,lastBackupResult:w,backupColumns:F,loadBackups:m,createBackup:O,showRestoreModal:M,restoreLoading:B,restoreTarget:L,restoreResult:C,confirmRestore:Q,doRestore:u,syncLoading:p,syncError:R,syncOnline:I,syncStatusText:j,syncPending:Y,lastSyncTime:q,syncOutput:z,pushLoading:X,pullLoading:Z,conflicts:D,conflictColumns:ge,loadSync:N,parseSyncStatusText:ce,syncPush:me,syncPull:_e,loadConflicts:re,ipfsLoading:$,ipfsError:ee,ipfsOnline:ae,ipfsPeerId:te,pinsLoading:ne,pinsError:H,pins:J,pinColumns:xe,loadIpfsStatus:ue,loadPins:K,showPinModal:he,pinLoading:oe,pinFilePath:le,pinResult:V,doPin:we,unpinFile:Oe,safeParseJson:T,exportBackupList:Se,refreshAll:de,ref:s,computed:G,onMounted:fe,get useI18n(){return ye},get tryParseJson(){return ke},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 be},get useFs(){return ve},get formatSize(){return Re}};return Object.defineProperty(pe,"__isScriptSetup",{enumerable:!1,value:!0}),pe}},De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ee={class:"page-title"},Ue={class:"page-sub"},je={key:0,style:{"text-align":"center",padding:"30px"}},Ne={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},He={key:1},Je={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ke={key:3,style:{"margin-top":"16px"}},Ve={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Ge={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},We={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Qe={style:{color:"var(--text-secondary)"}},Ye={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},Ze={key:1,style:{"margin-top":"12px"}},$e={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"}},ea={key:0,style:{"text-align":"center",padding:"30px"}},aa={key:0,style:{"margin-bottom":"16px"}},ta={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},na={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"}},oa={key:0,style:{"font-family":"monospace","font-size":"12px"}},la={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ia={key:0,style:{"text-align":"center",padding:"30px"}},sa={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ca={key:0,style:{"text-align":"center",padding:"30px"}},ra={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ua={key:1},da={key:2},pa={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},fa={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ya={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},ba={key:0,style:{"margin-top":"12px"}},ka={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 va(A,f,o,e,W,U){const g=k("a-button"),S=k("a-space"),x=k("a-spin"),P=k("a-empty"),h=k("a-table"),y=k("a-card"),w=k("a-modal"),F=k("a-tab-pane"),m=k("a-statistic"),O=k("a-col"),M=k("a-row"),B=k("a-tag"),L=k("a-popconfirm"),C=k("a-input"),Q=k("a-tabs");return c(),d("div",null,[b("div",De,[b("div",null,[b("h2",Ee,l(e.t("backup.title")),1),b("p",Ue,l(e.t("backup.subtitle")),1)]),t(g,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshAll},{icon:n(()=>[t(e.ReloadOutlined)]),default:n(()=>[v(" "+l(e.t("backup.refresh")),1)]),_:1},8,["loading"])]),t(Q,{activeKey:e.activeTab,"onUpdate:activeKey":f[4]||(f[4]=u=>e.activeTab=u),type:"card"},{default:n(()=>[r(" Tab 1: Backup management "),t(F,{key:"backup"},{tab:n(()=>[t(e.CloudUploadOutlined),v(" "+l(e.t("backup.tabs.backup")),1)]),default:n(()=>[t(y,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:n(()=>[t(S,null,{default:n(()=>[t(e.CloudUploadOutlined),b("span",null,l(e.t("backup.backup.cardTitle")),1)]),_:1})]),extra:n(()=>[t(S,null,{default:n(()=>[t(g,{disabled:!e.backups.length,loading:e.exportingList,onClick:e.exportBackupList},{icon:n(()=>[t(e.DownloadOutlined)]),default:n(()=>[v(" "+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(()=>[v(" "+l(e.t("backup.backup.createButton")),1)]),_:1},8,["loading"])]),_:1})]),default:n(()=>[e.backupLoading?(c(),d("div",je,[t(x)])):e.backups.length===0&&!e.lastBackupResult?(c(),_(P,{key:1,description:e.t("backup.backup.emptyText")},null,8,["description"])):r("v-if",!0),e.backups.length>0?(c(),_(h,{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",Ne,l(p.id.length>20?p.id.slice(0,20)+"...":p.id),1)):r("v-if",!0),u.key==="size"?(c(),d("span",He,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="createdAt"?(c(),d("span",Je,l(p.createdAt||"-"),1)):r("v-if",!0),u.key==="action"?(c(),_(g,{key:3,size:"small",type:"link",onClick:R=>e.confirmRestore(p)},{default:n(()=>[v(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",Ke,[b("div",Ve,l(e.t("backup.backup.lastResultLabel")),1),b("pre",Ge,l(e.lastBackupResult),1)])):r("v-if",!0),e.backupError?(c(),d("div",We,l(e.backupError),1)):r("v-if",!0)]),_:1}),t(w,{open:e.showRestoreModal,"onUpdate:open":f[0]||(f[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(()=>[b("p",Qe,l(e.t("backup.backup.restoreIntro")),1),e.restoreTarget?(c(),d("div",Ye,[b("div",null,[b("strong",null,l(e.t("backup.backup.backupIdPrefix")),1),f[5]||(f[5]=v()),b("span",qe,l(e.restoreTarget.id),1)]),e.restoreTarget.createdAt?(c(),d("div",Xe,[b("strong",null,l(e.t("backup.backup.createdAtPrefix")),1),v(" "+l(e.restoreTarget.createdAt),1)])):r("v-if",!0)])):r("v-if",!0),e.restoreResult?(c(),d("div",Ze,[b("pre",$e,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),v(" "+l(e.t("backup.tabs.sync")),1)]),default:n(()=>[e.syncLoading?(c(),d("div",ea,[t(x)])):(c(),d(Ce,{key:1},[t(M,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[t(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(S,{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(()=>[v(" "+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(()=>[v(" "+l(e.t("backup.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),e.syncOutput?(c(),d("div",aa,[b("div",ta,l(e.t("backup.sync.outputLabel")),1),b("pre",na,l(e.syncOutput),1)])):r("v-if",!0),r(" Conflicts "),e.conflicts.length>0?(c(),_(y,{key:1,title:e.t("backup.sync.conflictsTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(h,{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",oa,l(p.path),1)):r("v-if",!0),u.key==="type"?(c(),_(B,{key:1,color:"red"},{default:n(()=>[v(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",la,l(e.syncError),1)):r("v-if",!0)]),_:1}),r(" Tab 3: IPFS storage "),t(F,{key:"ipfs"},{tab:n(()=>[t(e.HddOutlined),v(" "+l(e.t("backup.tabs.ipfs")),1)]),default:n(()=>[t(y,{title:e.t("backup.ipfs.statusCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:n(()=>[t(B,{color:e.ipfsOnline?"green":"default"},{default:n(()=>[v(l(e.ipfsOnline?e.t("backup.ipfs.online"):e.t("backup.ipfs.offline")),1)]),_:1},8,["color"])]),default:n(()=>[e.ipfsLoading?(c(),d("div",ia,[t(x)])):(c(),_(M,{key:1,gutter:[16,16]},{default:n(()=>[t(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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",sa,l(e.ipfsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(y,{title:e.t("backup.ipfs.pinListTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[t(g,{size:"small",onClick:f[1]||(f[1]=u=>e.showPinModal=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[v(" "+l(e.t("backup.ipfs.pinFileButton")),1)]),_:1})]),default:n(()=>[e.pinsLoading?(c(),d("div",ca,[t(x)])):e.pins.length===0?(c(),_(P,{key:1,description:e.t("backup.ipfs.pinEmptyText")},null,8,["description"])):(c(),_(h,{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",ra,l(p.cid.length>24?p.cid.slice(0,24)+"...":p.cid),1)):r("v-if",!0),u.key==="name"?(c(),d("span",ua,l(p.name||"-"),1)):r("v-if",!0),u.key==="size"?(c(),d("span",da,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="pinnedAt"?(c(),d("span",pa,l(p.pinnedAt||"-"),1)):r("v-if",!0),u.key==="action"?(c(),_(L,{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),v(" "+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",fa,l(e.pinsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(w,{open:e.showPinModal,"onUpdate:open":f[3]||(f[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(()=>[b("div",ya,l(e.t("backup.ipfs.pinModalIntro")),1),t(C,{value:e.pinFilePath,"onUpdate:value":f[2]||(f[2]=u=>e.pinFilePath=u),placeholder:e.t("backup.ipfs.pinModalPlaceholder"),onPressEnter:e.doPin},null,8,["value","placeholder"]),e.pinResult?(c(),d("div",ba,[b("pre",ka,l(e.pinResult),1)])):r("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}const wa=ze(Ie,[["render",va],["__scopeId","data-v-077902a5"],["__file","/tmp/cc-web-panel-8U3FtY/repo/packages/web-panel/src/views/Backup.vue"]]);export{wa as default};
1
+ import{I as k,J as d,U as b,R as l,c as t,K as n,o as fe,b as G,r as s,P as c,Q as v,V as r,S as _,F as Ce}from"./vendor-Bn1JzzAn.js";import{_ as ze,b as ye,u as be,d as ie,t as ke}from"./index-Dyngbd29.js";import{u as ve}from"./useFs-CLTAmcfw.js";import{aA as Pe,R as Be,aR as Le,at as Ae,aT as Te,S as Fe,G as Me}from"./icons-DG5UD-6K.js";import"./useShellMode-CgR0wCYM.js";const se=["B","KB","MB","GB","TB","PB","EB"];function Re(T){if(T==null||isNaN(T))return"-";const f=Number(T);if(f<0)return"-";if(f===0)return"0 B";let o=Math.floor(Math.log(f)/Math.log(1024));return o<0&&(o=0),o>=se.length&&(o=se.length-1),(f/Math.pow(1024,o)).toFixed(o>0?1:0)+" "+se[o]}const Ie={__name:"Backup",setup(T,{expose:f}){f();const{t:o}=ye(),e=be(),W=ve(),U=s(!1),g=s("backup"),S=s(!1),x=s(!1),P=s(!1),h=s(""),y=s([]),w=s(""),F=G(()=>[{title:o("backup.backupColumns.id"),key:"id"},{title:o("backup.backupColumns.size"),key:"size",width:120},{title:o("backup.backupColumns.createdAt"),key:"createdAt"},{title:o("backup.backupColumns.action"),key:"action",width:100}]);async function m(){x.value=!0,h.value="";try{const{output:a}=await e.execute("backup list --json",15e3),i=A(a);Array.isArray(i)?y.value=i:i&&Array.isArray(i.backups)?y.value=i.backups:(y.value=[],a&&a.trim()&&(w.value=a))}catch(a){h.value=o("backup.messages.loadBackupsFailed",{err:a.message})}finally{x.value=!1}}async function O(){P.value=!0,w.value="",h.value="";try{const{output:a}=await e.execute("backup create --json",3e4);w.value=a||o("backup.backup.createDefaultMessage"),await m()}catch(a){w.value=o("backup.messages.createBackupFailed",{err:a.message})}finally{P.value=!1}}const M=s(!1),B=s(!1),L=s(null),C=s("");function Q(a){L.value=a,C.value="",M.value=!0}async function u(){if(L.value){B.value=!0,C.value="";try{const{output:a}=await e.execute(`backup restore ${L.value.id}`,6e4);C.value=a||o("backup.backup.restoreDefaultMessage")}catch(a){C.value=o("backup.messages.restoreFailed",{err:a.message})}finally{B.value=!1}}}const p=s(!1),R=s(""),I=s(!1),j=s(""),X=s(0),q=s(""),z=s(""),Y=s(!1),Z=s(!1),D=s([]),ge=G(()=>[{title:o("backup.conflictColumns.path"),key:"path"},{title:o("backup.conflictColumns.type"),key:"type",width:120}]);async function N(){p.value=!0,R.value="";try{const{output:a}=await e.execute("sync status --json",15e3),i=A(a);i?(I.value=i.online||i.synced||i.status==="online"||!1,j.value=I.value?o("backup.sync.synced"):o("backup.sync.notSynced"),X.value=i.pending??i.pendingChanges??0,q.value=i.lastSync||i.lastSyncTime||""):ce(a)}catch(a){R.value=o("backup.messages.loadSyncFailed",{err:a.message})}finally{p.value=!1}}function ce(a){if(!a){j.value=o("backup.sync.unknown");return}I.value=/synced|online|up.to.date/i.test(a),j.value=I.value?o("backup.sync.synced"):o("backup.sync.notSynced");const i=a.match(/pending[:\s]+(\d+)/i);X.value=i?parseInt(i[1]):0;const E=a.match(/last[:\s]+(.+)/i);E&&(q.value=E[1].trim())}async function me(){Y.value=!0,z.value="";try{const{output:a}=await e.execute("sync push",3e4);z.value=a||o("backup.sync.pushDefaultMessage"),await N()}catch(a){z.value=o("backup.messages.pushFailed",{err:a.message})}finally{Y.value=!1}}async function _e(){Z.value=!0,z.value="";try{const{output:a}=await e.execute("sync pull",3e4);z.value=a||o("backup.sync.pullDefaultMessage"),await N()}catch(a){z.value=o("backup.messages.pullFailed",{err:a.message})}finally{Z.value=!1}}async function re(){try{const{output:a}=await e.execute("sync conflicts --json",15e3),i=A(a);Array.isArray(i)?D.value=i:i&&Array.isArray(i.conflicts)?D.value=i.conflicts:D.value=[]}catch{D.value=[]}}const $=s(!1),ee=s(""),ae=s(!1),te=s(""),ne=s(!1),H=s(""),J=s([]),xe=G(()=>[{title:o("backup.pinColumns.cid"),key:"cid"},{title:o("backup.pinColumns.name"),key:"name"},{title:o("backup.pinColumns.size"),key:"size",width:120},{title:o("backup.pinColumns.pinnedAt"),key:"pinnedAt"},{title:o("backup.pinColumns.action"),key:"action",width:120}]);async function ue(){$.value=!0,ee.value="";try{const{output:a}=await e.execute("ipfs status --json",15e3),i=A(a);if(i)ae.value=i.online||i.status==="online"||i.connected||!1,te.value=i.peerId||i.id||"";else{ae.value=a?/online|connected|running/i.test(a):!1;const E=a?a.match(/(?:peer\s*id|id)[:\s]+(\S+)/i):null;te.value=E?E[1]:""}}catch(a){ee.value=o("backup.messages.loadIpfsFailed",{err:a.message})}finally{$.value=!1}}async function K(){ne.value=!0,H.value="";try{const{output:a}=await e.execute("ipfs pins --json",15e3),i=A(a);Array.isArray(i)?J.value=i:i&&Array.isArray(i.pins)?J.value=i.pins:J.value=[]}catch(a){H.value=o("backup.messages.loadPinsFailed",{err:a.message})}finally{ne.value=!1}}const he=s(!1),oe=s(!1),le=s(""),V=s("");async function we(){if(le.value.trim()){oe.value=!0,V.value="";try{const{output:a}=await e.execute(`ipfs pin "${le.value.trim()}"`,3e4);V.value=a||o("backup.ipfs.pinDefaultSuccess"),await K()}catch(a){V.value=o("backup.messages.pinFailed",{err:a.message})}finally{oe.value=!1}}}async function Oe(a){try{await e.execute(`ipfs unpin ${a.cid}`,15e3),await K()}catch(i){H.value=o("backup.messages.unpinFailed",{err:i.message})}}function A(a){return ke(a)}async function Se(){if(y.value.length){U.value=!0;try{const a=await W.saveJson({schema:1,exportedAt:new Date().toISOString(),count:y.value.length,backups:y.value},{defaultPath:`backup-list-${new Date().toISOString().slice(0,10)}.json`});if(a.canceled)return;ie.success(a.path?o("backup.messages.exportOk",{count:y.value.length,path:a.path}):o("backup.messages.exportOkDefault"))}catch(a){ie.error(o("backup.messages.exportFailed",{err:a.message||a}))}finally{U.value=!1}}}async function de(){S.value=!0;try{await Promise.all([m(),N(),re(),ue(),K()])}finally{S.value=!1}}fe(de);const pe={t:o,ws:e,fs:W,exportingList:U,activeTab:g,refreshing:S,backupLoading:x,backupCreating:P,backupError:h,backups:y,lastBackupResult:w,backupColumns:F,loadBackups:m,createBackup:O,showRestoreModal:M,restoreLoading:B,restoreTarget:L,restoreResult:C,confirmRestore:Q,doRestore:u,syncLoading:p,syncError:R,syncOnline:I,syncStatusText:j,syncPending:X,lastSyncTime:q,syncOutput:z,pushLoading:Y,pullLoading:Z,conflicts:D,conflictColumns:ge,loadSync:N,parseSyncStatusText:ce,syncPush:me,syncPull:_e,loadConflicts:re,ipfsLoading:$,ipfsError:ee,ipfsOnline:ae,ipfsPeerId:te,pinsLoading:ne,pinsError:H,pins:J,pinColumns:xe,loadIpfsStatus:ue,loadPins:K,showPinModal:he,pinLoading:oe,pinFilePath:le,pinResult:V,doPin:we,unpinFile:Oe,safeParseJson:A,exportBackupList:Se,refreshAll:de,ref:s,computed:G,onMounted:fe,get useI18n(){return ye},get tryParseJson(){return ke},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 be},get useFs(){return ve},get formatSize(){return Re}};return Object.defineProperty(pe,"__isScriptSetup",{enumerable:!1,value:!0}),pe}},De={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Ee={class:"page-title"},Ue={class:"page-sub"},je={key:0,style:{"text-align":"center",padding:"30px"}},Ne={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},He={key:1},Je={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Ke={key:3,style:{"margin-top":"16px"}},Ve={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},Ge={style:{background:"var(--bg-base)",border:"1px solid var(--border-color)","border-radius":"6px",padding:"12px",color:"#aaa","font-size":"12px","max-height":"200px","overflow-y":"auto","white-space":"pre-wrap"}},We={key:4,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},Qe={style:{color:"var(--text-secondary)"}},Xe={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"}},Ye={key:0},Ze={key:1,style:{"margin-top":"12px"}},$e={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"}},ea={key:0,style:{"text-align":"center",padding:"30px"}},aa={key:0,style:{"margin-bottom":"16px"}},ta={style:{color:"var(--text-secondary)","font-size":"11px","margin-bottom":"6px"}},na={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"}},oa={key:0,style:{"font-family":"monospace","font-size":"12px"}},la={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ia={key:0,style:{"text-align":"center",padding:"30px"}},sa={key:2,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ca={key:0,style:{"text-align":"center",padding:"30px"}},ra={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},ua={key:1},da={key:2},pa={key:3,style:{color:"var(--text-secondary)","font-size":"12px"}},fa={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}},ya={style:{"margin-bottom":"12px",color:"var(--text-secondary)"}},ba={key:0,style:{"margin-top":"12px"}},ka={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 va(T,f,o,e,W,U){const g=k("a-button"),S=k("a-space"),x=k("a-spin"),P=k("a-empty"),h=k("a-table"),y=k("a-card"),w=k("a-modal"),F=k("a-tab-pane"),m=k("a-statistic"),O=k("a-col"),M=k("a-row"),B=k("a-tag"),L=k("a-popconfirm"),C=k("a-input"),Q=k("a-tabs");return c(),d("div",null,[b("div",De,[b("div",null,[b("h2",Ee,l(e.t("backup.title")),1),b("p",Ue,l(e.t("backup.subtitle")),1)]),t(g,{type:"primary",ghost:"",loading:e.refreshing,onClick:e.refreshAll},{icon:n(()=>[t(e.ReloadOutlined)]),default:n(()=>[v(" "+l(e.t("backup.refresh")),1)]),_:1},8,["loading"])]),t(Q,{activeKey:e.activeTab,"onUpdate:activeKey":f[4]||(f[4]=u=>e.activeTab=u),type:"card"},{default:n(()=>[r(" Tab 1: Backup management "),t(F,{key:"backup"},{tab:n(()=>[t(e.CloudUploadOutlined),v(" "+l(e.t("backup.tabs.backup")),1)]),default:n(()=>[t(y,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{title:n(()=>[t(S,null,{default:n(()=>[t(e.CloudUploadOutlined),b("span",null,l(e.t("backup.backup.cardTitle")),1)]),_:1})]),extra:n(()=>[t(S,null,{default:n(()=>[t(g,{disabled:!e.backups.length,loading:e.exportingList,onClick:e.exportBackupList},{icon:n(()=>[t(e.DownloadOutlined)]),default:n(()=>[v(" "+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(()=>[v(" "+l(e.t("backup.backup.createButton")),1)]),_:1},8,["loading"])]),_:1})]),default:n(()=>[e.backupLoading?(c(),d("div",je,[t(x)])):e.backups.length===0&&!e.lastBackupResult?(c(),_(P,{key:1,description:e.t("backup.backup.emptyText")},null,8,["description"])):r("v-if",!0),e.backups.length>0?(c(),_(h,{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",Ne,l(p.id.length>20?p.id.slice(0,20)+"...":p.id),1)):r("v-if",!0),u.key==="size"?(c(),d("span",He,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="createdAt"?(c(),d("span",Je,l(p.createdAt||"-"),1)):r("v-if",!0),u.key==="action"?(c(),_(g,{key:3,size:"small",type:"link",onClick:R=>e.confirmRestore(p)},{default:n(()=>[v(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",Ke,[b("div",Ve,l(e.t("backup.backup.lastResultLabel")),1),b("pre",Ge,l(e.lastBackupResult),1)])):r("v-if",!0),e.backupError?(c(),d("div",We,l(e.backupError),1)):r("v-if",!0)]),_:1}),t(w,{open:e.showRestoreModal,"onUpdate:open":f[0]||(f[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(()=>[b("p",Qe,l(e.t("backup.backup.restoreIntro")),1),e.restoreTarget?(c(),d("div",Xe,[b("div",null,[b("strong",null,l(e.t("backup.backup.backupIdPrefix")),1),f[5]||(f[5]=v()),b("span",qe,l(e.restoreTarget.id),1)]),e.restoreTarget.createdAt?(c(),d("div",Ye,[b("strong",null,l(e.t("backup.backup.createdAtPrefix")),1),v(" "+l(e.restoreTarget.createdAt),1)])):r("v-if",!0)])):r("v-if",!0),e.restoreResult?(c(),d("div",Ze,[b("pre",$e,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),v(" "+l(e.t("backup.tabs.sync")),1)]),default:n(()=>[e.syncLoading?(c(),d("div",ea,[t(x)])):(c(),d(Ce,{key:1},[t(M,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:n(()=>[t(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(S,{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(()=>[v(" "+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(()=>[v(" "+l(e.t("backup.sync.pullButton")),1)]),_:1},8,["loading"])]),_:1}),e.syncOutput?(c(),d("div",aa,[b("div",ta,l(e.t("backup.sync.outputLabel")),1),b("pre",na,l(e.syncOutput),1)])):r("v-if",!0),r(" Conflicts "),e.conflicts.length>0?(c(),_(y,{key:1,title:e.t("backup.sync.conflictsTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:n(()=>[t(h,{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",oa,l(p.path),1)):r("v-if",!0),u.key==="type"?(c(),_(B,{key:1,color:"red"},{default:n(()=>[v(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",la,l(e.syncError),1)):r("v-if",!0)]),_:1}),r(" Tab 3: IPFS storage "),t(F,{key:"ipfs"},{tab:n(()=>[t(e.HddOutlined),v(" "+l(e.t("backup.tabs.ipfs")),1)]),default:n(()=>[t(y,{title:e.t("backup.ipfs.statusCardTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"}},{extra:n(()=>[t(B,{color:e.ipfsOnline?"green":"default"},{default:n(()=>[v(l(e.ipfsOnline?e.t("backup.ipfs.online"):e.t("backup.ipfs.offline")),1)]),_:1},8,["color"])]),default:n(()=>[e.ipfsLoading?(c(),d("div",ia,[t(x)])):(c(),_(M,{key:1,gutter:[16,16]},{default:n(()=>[t(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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(O,{xs:24,sm:8},{default:n(()=>[t(y,{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",sa,l(e.ipfsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(y,{title:e.t("backup.ipfs.pinListTitle"),style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[t(g,{size:"small",onClick:f[1]||(f[1]=u=>e.showPinModal=!0),style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"}},{icon:n(()=>[t(e.PlusOutlined)]),default:n(()=>[v(" "+l(e.t("backup.ipfs.pinFileButton")),1)]),_:1})]),default:n(()=>[e.pinsLoading?(c(),d("div",ca,[t(x)])):e.pins.length===0?(c(),_(P,{key:1,description:e.t("backup.ipfs.pinEmptyText")},null,8,["description"])):(c(),_(h,{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",ra,l(p.cid.length>24?p.cid.slice(0,24)+"...":p.cid),1)):r("v-if",!0),u.key==="name"?(c(),d("span",ua,l(p.name||"-"),1)):r("v-if",!0),u.key==="size"?(c(),d("span",da,l(e.formatSize(p.size)),1)):r("v-if",!0),u.key==="pinnedAt"?(c(),d("span",pa,l(p.pinnedAt||"-"),1)):r("v-if",!0),u.key==="action"?(c(),_(L,{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),v(" "+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",fa,l(e.pinsError),1)):r("v-if",!0)]),_:1},8,["title"]),t(w,{open:e.showPinModal,"onUpdate:open":f[3]||(f[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(()=>[b("div",ya,l(e.t("backup.ipfs.pinModalIntro")),1),t(C,{value:e.pinFilePath,"onUpdate:value":f[2]||(f[2]=u=>e.pinFilePath=u),placeholder:e.t("backup.ipfs.pinModalPlaceholder"),onPressEnter:e.doPin},null,8,["value","placeholder"]),e.pinResult?(c(),d("div",ba,[b("pre",ka,l(e.pinResult),1)])):r("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"])]),_:1})]),_:1},8,["activeKey"])])}const wa=ze(Ie,[["render",va],["__scopeId","data-v-077902a5"],["__file","/tmp/cc-web-panel-UAH1Xi/repo/packages/web-panel/src/views/Backup.vue"]]);export{wa as default};