chainlesschain 0.165.8 → 0.165.10

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 (172) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-B3gWmXjo.js → AIOps-DoxapYEM.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-G9pdT-0e.js → ActionButton-DyiHvT2O.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-Ca30J7m2.js → Analytics-CAX06POB.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-BtVTm8PU.js → AppLayout-JXxcyn0R.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-BhViNa6u.js → Artifacts-40nZDb9N.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-DhKq-FnY.js → Audit-B_wc8Kcq.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-BL0SVbnE.js → BackgroundAgents-CReWOiQY.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-BWkblnFi.js → Backup-sXrv9fE6.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-ClaRNrF8.js → BaseInput-CHWmIERI.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-sZE2Z77o.js → Chat-DgQrMZCb.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BAfKOnRe.js → ChatBubbleRenderer-Clpgj0fi.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-Cvhay5WM.js → Checkbox-DmRwzt3e.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-BpejL-4N.js → Codegen-tllAfrrc.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-g2Ki6g_1.js → Col-CA_wqwEp.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-D2xKbNo9.js → Community-DQ_szKAv.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-DbL1Pds3.js → Compact-CjkqX60k.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-DGtZCV4c.js → Compliance-CfDNkDex.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-4kQpoNsI.js → Cowork-PINc6CPv.js} +2 -2
  21. package/src/assets/web-panel/assets/{Cron-BxTYXXAN.js → Cron-snYq4WCj.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-k0J0LT2N.js → Crosschain-CKR7he4B.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-BaqhoPgN.js → DID-Bp5xJSbE.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-T4RVPIM1.js → Dashboard-Dn-y6txl.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DszOToWq.js → Dropdown-D0uEeunr.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-C9KJU7HF.js → EmailListRenderer-DIhjyeNw.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-Cmr0JnsA.js → FamilyGuardDashboard-D2Pv1Hnb.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-BI-_2xZX.js → Federation-D6oSp4P4.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-DsnDEPsl.js → FormItemContext-s6bzlfQs.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-BLncAKKK.js → GenericCardRenderer-B_NTgGP9.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BPQhGXDn.js → Git-Dk1lCoBr.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-CyElbUQW.js → Governance-xOnLBQzd.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-CcSntBQD.js → Inference-BFVHy-0I.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-p6e7HZ2r.js → KnowledgeGraph-BXzITB9_.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-CNEtr-wz.js → Logs-BD2M4NPu.js} +2 -2
  36. package/src/assets/web-panel/assets/MarkdownRenderer-CDSwkj7Y.js +1 -0
  37. package/src/assets/web-panel/assets/{Marketplace-Dd2notAJ.js → Marketplace-awpllI_9.js} +1 -1
  38. package/src/assets/web-panel/assets/McpTools-tL0IgbIX.js +4 -0
  39. package/src/assets/web-panel/assets/{Memory-Dg2uTvwx.js → Memory-CrptLGSN.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-r1YMRiJV.js → MobileBridge-DZX-l_BS.js} +1 -1
  41. package/src/assets/web-panel/assets/MobileProjects-krNyADYi.js +1 -0
  42. package/src/assets/web-panel/assets/{Mtc-CrPZcVgf.js → Mtc-dQ5-FjpQ.js} +6 -6
  43. package/src/assets/web-panel/assets/{MtcAudit-sxi7hqJb.js → MtcAudit-U0nDxDlG.js} +4 -4
  44. package/src/assets/web-panel/assets/{Multisig-CAgOMfF1.js → Multisig-D1PpAtiq.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-DafaPts3.js → NLProgramming-phZr6nyZ.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-CJM-xUW_.js → Notes-BPzSSUrX.js} +3 -3
  47. package/src/assets/web-panel/assets/{NotificationSettings-L0ZjfAh_.js → NotificationSettings-AypFEc7p.js} +1 -1
  48. package/src/assets/web-panel/assets/{OrderTableRenderer-BB1CvCK0.js → OrderTableRenderer-S3k1qjT-.js} +1 -1
  49. package/src/assets/web-panel/assets/{Organization-DeLtgAD8.js → Organization-BvdQXFPR.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-CKC2b10z.js → Overflow-CUz_jbQC.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-eyf2rzY1.js → P2P-C0xQ7H_2.js} +2 -2
  52. package/src/assets/web-panel/assets/{PdhVaultBrowser-5upNIOW8.js → PdhVaultBrowser-DJKMjfB8.js} +3 -3
  53. package/src/assets/web-panel/assets/{Permissions-B8p3W6JK.js → Permissions-dkMtmDwK.js} +4 -4
  54. package/src/assets/web-panel/assets/{PersonalDataHub-BnRMxTq3.js → PersonalDataHub-CyHE7fnn.js} +5 -5
  55. package/src/assets/web-panel/assets/{Pipeline-DjCNI1li.js → Pipeline-_dU0Nwy3.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-u6gXLbWT.js → Privacy-fqLyg57f.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-BZAw4tkM.js → ProjectInit-COybCr5d.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-B1Tr72q7.js → ProjectSettings-B4DngMZW.js} +2 -2
  59. package/src/assets/web-panel/assets/{Projects-DO7HFuBQ.js → Projects-D0bMwUBm.js} +1 -1
  60. package/src/assets/web-panel/assets/{Providers-BjCztyhj.js → Providers-Ba-7WNA8.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-ZWyCUbR1.js → QrScannerModal-X-I8dDMT.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-DhDjeW4G.js → QuickAsk-BCUP0a90.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-R_CN2MuU.js → Recommend-DtFNmiQZ.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-uxFcujeu.js → RemoteSession-INR5CIAI.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-DX8D7rks.js → Reputation-B6NfaCc6.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-BYahQILD.js → Row-Dmz76txh.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-CUSQ2tm-.js → RssFeed-B7qyFCea.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-CnN_S8Cs.js → Search-Bi6eS0oY.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-DcZlh-O4.js → Security-D9_xim1L.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-ZhBOjzIX.js → Services-PI1O-uYU.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-D5Qnq_lI.js → Skeleton-B8BrJnk8.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-BC9cZ3Be.js → Skills-DvSm92dJ.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-DauJ3E8_.js → Sla-BWyhCoRo.js} +1 -1
  74. package/src/assets/web-panel/assets/SpeechSettings-BL9H27jl.js +1 -0
  75. package/src/assets/web-panel/assets/{SyncSettings-DUvJbSct.js → SyncSettings-B7r--6yN.js} +2 -2
  76. package/src/assets/web-panel/assets/{Tasks-BXa-5noQ.js → Tasks-sc64p2Jt.js} +1 -1
  77. package/src/assets/web-panel/assets/{Templates-JxaiUt_3.js → Templates-DEK55RVb.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-BW4ERQN8.js → Tenant-DElr8R1l.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-DltUbdtv.js → Terminal-BywaLBgz.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-CMoZz0Tc.js → TimelineRenderer-B5NcgLyS.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-D_VEV60K.js → Tokens-COFYqr6A.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-CCXTCs0R.js → Trigger-CfnVS3ij.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-lkGRIPcG.js → Trust-Bz94Gu5k.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-BfGeQ9HX.js → UkeySign-Be10drSk.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-BEC7pYvc.js → VideoEditing-CUB_cMem.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-BZdG24o0.js → Wallet-DxBJJuvG.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-yoEddedp.js → WebAuthn-BZx5lwT8.js} +4 -4
  88. package/src/assets/web-panel/assets/{WorkflowEditor-BXZEprOW.js → WorkflowEditor-B4sJikPT.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-gg0bzZal.js → chat-Wl-95AgM.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-DjRVRuin.js → colors-DUSwYVCg.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-su-dieAc.js → compact-item-DkKRDHcU.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-Ci3S8oKF.js → createContext-B5nAVC_Y.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-DFO12EfA.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-D8F10heH.js → hasIn-rtotsRlA.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-CPIYSp4H.js → index-03w73yRM.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-W7XUgdVL.js → index-1J_Q-Ovw.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BGzixOGZ.js → index-BMHNKa11.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BCI5v0yB.js → index-B_KDhTdt.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CC3ZDjzY.js → index-Ba8raWtd.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-1IgxgALJ.js → index-Bj6mJ7tw.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BTFpdBtt.js → index-BxAMRZR0.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DyLUarhZ.js → index-C3lcOYkZ.js} +3 -3
  103. package/src/assets/web-panel/assets/{index-11wtYQiF.js → index-C7kGJlSA.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DkfQR3hM.js → index-CAdTY3kv.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Ba_HyPnE.js → index-CAtnIdx_.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-1agckWSq.js → index-CDWNrtvg.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BbF1IHof.js → index-CJWpTdCW.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-dHZinfko.js → index-CN2LNCWW.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-jyNgp5FI.js → index-CUDraKtq.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BzPB6kGZ.js → index-CUqLWyY0.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-BgT9su_e.js → index-CbqotoPt.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CEmXRhAE.js → index-Ch5SqZaK.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DnLucOn9.js → index-CskW4gDB.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-BDJntYmJ.js → index-Cv38Cwx0.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CUmDhC4j.js → index-D7Nx-jzS.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C6ygzplr.js → index-D7zQADRc.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Dbq4NMET.js → index-DCCTgytM.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CR0h6seT.js → index-DQhlLyT6.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CusgZPtc.js → index-DUS7KK-i.js} +1 -1
  120. package/src/assets/web-panel/assets/index-DaDlUWea.js +1 -0
  121. package/src/assets/web-panel/assets/{index-BMMOVoLD.js → index-DfNeBiyO.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DIJ2qFOC.js → index-Dnbdqjxz.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-T6_6ygJZ.js → index-DoBh4Ezg.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-COWd8uGx.js → index-DupOVIEb.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Tu8eWqh-.js → index-INU8TpRu.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-5JqhujnR.js → index-JWQxvZ4x.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CMPqd5Cv.js → index-X36Wyd1S.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-8Z-8BIlN.js → index-YANfaEyE.js} +1 -1
  129. package/src/assets/web-panel/assets/{index-DugB_aKa.js → index-btxpIsXs.js} +1 -1
  130. package/src/assets/web-panel/assets/{index-DBAETXft.js → index-cKc70R9h.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-DkMEF5VT.js → index-mwPG3TJQ.js} +1 -1
  132. package/src/assets/web-panel/assets/index-xn89TjWJ.js +1 -0
  133. package/src/assets/web-panel/assets/{index-6Tniqk1s.js → index-yt994jkW.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-Cv4p8e4w.js → initDefaultProps-Ck8wTHsR.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-B8EwmMOw.js → motion-teBWI8ni.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-B8R9F8TK.js → move-BdxzRStQ.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-DoFYz5Bp.js → mtc-parser-DMpcDDsk.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-CHWYLBjI.js → omit-BwkyHyWr.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-CXuPDO77.js → pickAttrs-SlaxZUQd.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-BaAtUUon.js → placementArrow-BlEZZ3cs.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-DCc4zcDD.js → responsiveObserve-Cl5uK6S5.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-B_lx89oZ.js → slide-LlOJWbeE.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-DE8DPmR0.js → statusUtils-DxbwIpQR.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-1ktXOsL_.js → styleChecker-G_P9gils.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-xH89-wjh.js → useFlexGapSupport-BDS7KDuK.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-DscvfW5p.js → useFs-Xx3R_4Qk.js} +1 -1
  147. package/src/assets/web-panel/assets/{usePersonalDataHub-RdMKQta7.js → usePersonalDataHub-ChOtRWax.js} +1 -1
  148. package/src/assets/web-panel/assets/{vnode-Z3wTni2T.js → vnode-CAUrMwRC.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-B0iChCsm.js → zoom-Choqv7b5.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/command-help-index.json +1 -1
  152. package/src/commands/mcp.js +49 -21
  153. package/src/data/changelog.json +26 -0
  154. package/src/gateways/ws/mcp-topic-handlers.js +167 -0
  155. package/src/lib/agent-network.js +166 -29
  156. package/src/lib/agent-router.js +62 -6
  157. package/src/lib/agent-sandbox.js +3 -0
  158. package/src/lib/claude-code-bridge.js +159 -54
  159. package/src/lib/cowork-workflow.js +69 -6
  160. package/src/lib/external-agent-adapters.js +269 -0
  161. package/src/lib/ipfs-storage.js +127 -25
  162. package/src/lib/orchestrator.js +47 -0
  163. package/src/lib/shell-approval.js +7 -5
  164. package/src/lib/workflow-engine.js +42 -11
  165. package/src/runtime/agent-runtime.js +12 -1
  166. package/src/assets/web-panel/assets/MarkdownRenderer-Bj9xI0YH.js +0 -1
  167. package/src/assets/web-panel/assets/McpTools-BBsN2CSW.js +0 -7
  168. package/src/assets/web-panel/assets/MobileProjects-C-89kSm4.js +0 -1
  169. package/src/assets/web-panel/assets/SpeechSettings-DbNeZ_fh.js +0 -1
  170. package/src/assets/web-panel/assets/devWarning-CxbFX9uH.js +0 -1
  171. package/src/assets/web-panel/assets/index-CJGOlduY.js +0 -1
  172. package/src/assets/web-panel/assets/index-CkBCN5yH.js +0 -1
@@ -1,2 +1,2 @@
1
- import{I as i,J as x,U as c,R as s,c as t,K as o,V as R,o as W,b as q,r as d,P as w,Q as k,F as J,Z as Y}from"./vendor-Bn1JzzAn.js";import{_ as Z,b as D,u as H,d as O}from"./index-DyLUarhZ.js";import{S as A,aB as G,a1 as X,a0 as $,R as ee,at as te}from"./icons-DG5UD-6K.js";const oe={__name:"Memory",setup(K,{expose:n}){n();const{t:m}=D(),e=H(),B=d(!1),S=d(!1),_=d(!1),L=d(!1),f=d(!1),u=d({shortTerm:0,longTerm:0,core:0}),y=d([]),g=d("short-term"),v=d(""),p=d({content:"",importance:.5}),P=q(()=>({0:m("memory.modal.marks.low"),.5:m("memory.modal.marks.mid"),1:m("memory.modal.marks.high")}));function U(a){return{"short-term":"purple","long-term":"blue",core:"green"}[a]||"default"}function V(a){const l=`memory.layer.${a}`,h=m(l);return h===l?a:h}async function C(){B.value=!0;try{const{output:a}=await e.execute("hmemory stats",15e3);M(a)}catch(a){console.error("hmemory stats failed:",a)}finally{B.value=!1,await T()}}function M(a){const l=a.match(/short.?term[^\d]*(\d+)/i),h=a.match(/long.?term[^\d]*(\d+)/i),I=a.match(/core[^\d]*(\d+)/i);l&&(u.value.shortTerm=parseInt(l[1])),h&&(u.value.longTerm=parseInt(h[1])),I&&(u.value.core=parseInt(I[1]))}async function T(){S.value=!0;try{const a=g.value==="short-term"?"recent":g.value==="long-term"?"important":"core",{output:l}=await e.execute(`hmemory recall "${a}" --limit 20`,15e3);y.value=z(l)}catch{y.value=[]}finally{S.value=!1}}async function j(){if(!v.value.trim()){await T();return}S.value=!0;try{const{output:a}=await e.execute(`hmemory recall "${v.value}"`,15e3);y.value=z(a)}catch{y.value=[]}finally{S.value=!1}}function z(a){const l=[],h=a.split(`
2
- `);for(const I of h){const b=I.trim();if(!b||b.startsWith("─")||b.startsWith("Recall"))continue;const N=b.match(/^[-●•\d.]+\s+(.+)/);if(N){const Q=N[1].trim();Q.length>5&&l.push({id:l.length,content:Q,layer:g.value,importance:"",time:""})}else b.length>10&&!b.includes(":")&&l.length<30&&l.push({id:l.length,content:b,layer:g.value,importance:"",time:""})}return l.slice(0,20)}async function r(){if(!p.value.content.trim()){O.warning(m("memory.messages.contentRequired"));return}L.value=!0;try{const a=`hmemory store "${p.value.content.replace(/"/g,'\\"')}" --importance ${p.value.importance}`,{output:l}=await e.execute(a,15e3);l.toLowerCase().includes("stored")||l.includes("✔")?(O.success(m("memory.messages.storeOk")),f.value=!1,p.value={content:"",importance:.5},await C()):(O.warning(l.slice(0,100)||m("memory.messages.storeDefault")),f.value=!1)}catch(a){O.error(m("memory.messages.storeFailed",{err:a.message}))}finally{L.value=!1}}async function E(){_.value=!0;try{await e.execute("hmemory consolidate",2e4),O.success(m("memory.messages.consolidateOk")),await C()}catch(a){O.error(m("memory.messages.consolidateFailed",{err:a.message}))}finally{_.value=!1}}W(C);const F={t:m,ws:e,loading:B,recalling:S,consolidating:_,storing:L,showStore:f,stats:u,memories:y,activeLayer:g,recallQuery:v,newMemory:p,importanceMarks:P,layerColor:U,layerLabel:V,loadStats:C,parseStats:M,recallByLayer:T,doRecall:j,parseMemories:z,storeMemory:r,consolidate:E,ref:d,computed:q,onMounted:W,get useI18n(){return D},get PlusOutlined(){return te},get ReloadOutlined(){return ee},get ThunderboltOutlined(){return $},get ClockCircleOutlined(){return X},get StarOutlined(){return G},get SyncOutlined(){return A},get message(){return O},get useWsStore(){return H}};return Object.defineProperty(F,"__isScriptSetup",{enumerable:!1,value:!0}),F}},ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={class:"page-title"},ne={class:"page-sub"},le={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},se={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ie={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ce={style:{display:"flex","align-items":"center",gap:"12px"}},me={key:0,style:{"text-align":"center",padding:"30px"}},de={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},ue={key:2,class:"memory-list"},ye={style:{display:"flex","justify-content":"space-between","align-items":"flex-start","margin-bottom":"4px"}},_e={style:{display:"flex",gap:"8px","align-items":"center"}},fe={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={style:{color:"var(--text-muted)","font-size":"11px"}},ve={style:{color:"#ccc","font-size":"13px","line-height":"1.6"}};function pe(K,n,m,e,B,S){const _=i("a-button"),L=i("a-space"),f=i("a-statistic"),u=i("a-card"),y=i("a-col"),g=i("a-row"),v=i("a-radio-button"),p=i("a-radio-group"),P=i("a-input-search"),U=i("a-spin"),V=i("a-tag"),C=i("a-textarea"),M=i("a-form-item"),T=i("a-slider"),j=i("a-form"),z=i("a-modal");return w(),x("div",null,[c("div",ae,[c("div",null,[c("h2",re,s(e.t("memory.title")),1),c("p",ne,s(e.t("memory.subtitle")),1)]),t(L,null,{default:o(()=>[t(_,{onClick:n[0]||(n[0]=r=>e.showStore=!0),type:"primary"},{icon:o(()=>[t(e.PlusOutlined)]),default:o(()=>[k(" "+s(e.t("memory.storeButton")),1)]),_:1}),t(_,{ghost:"",loading:e.loading,onClick:e.loadStats},{icon:o(()=>[t(e.ReloadOutlined)]),default:o(()=>[k(" "+s(e.t("memory.refresh")),1)]),_:1},8,["loading"])]),_:1})]),R(" Stats Row "),t(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(114,46,209,.1)","border-color":"rgba(114,46,209,.35)",cursor:"pointer"},hoverable:"",onClick:n[1]||(n[1]=r=>e.activeLayer="short-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.shortTerm"),value:e.stats.shortTerm||0,"value-style":"color: #c084fc; font-size: 20px;"},{prefix:o(()=>[t(e.ThunderboltOutlined)]),_:1},8,["title","value"]),c("div",le,s(e.t("memory.stats.shortTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.3)",cursor:"pointer"},hoverable:"",onClick:n[2]||(n[2]=r=>e.activeLayer="long-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.longTerm"),value:e.stats.longTerm||0,"value-style":"color: #91caff; font-size: 20px;"},{prefix:o(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"]),c("div",se,s(e.t("memory.stats.longTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)",cursor:"pointer"},hoverable:"",onClick:n[3]||(n[3]=r=>e.activeLayer="core")},{default:o(()=>[t(f,{title:e.t("memory.stats.core"),value:e.stats.core||0,"value-style":"color: #69db7c; font-size: 20px;"},{prefix:o(()=>[t(e.StarOutlined)]),_:1},8,["title","value"]),c("div",ie,s(e.t("memory.stats.coreHint")),1)]),_:1})]),_:1})]),_:1}),R(" Layer Tabs + Recall "),t(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[c("div",ce,[c("span",null,s(e.t("memory.card.title")),1),t(p,{value:e.activeLayer,"onUpdate:value":n[4]||(n[4]=r=>e.activeLayer=r),"button-style":"solid",size:"small",onChange:e.recallByLayer},{default:o(()=>[t(v,{value:"short-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.short")),1)]),_:1}),t(v,{value:"long-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.long")),1)]),_:1}),t(v,{value:"core"},{default:o(()=>[k(s(e.t("memory.card.tabs.core")),1)]),_:1})]),_:1},8,["value"])])]),extra:o(()=>[t(P,{value:e.recallQuery,"onUpdate:value":n[5]||(n[5]=r=>e.recallQuery=r),placeholder:e.t("memory.card.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"220px"},loading:e.recalling,onSearch:e.doRecall},null,8,["value","placeholder","loading"])]),default:o(()=>[e.recalling?(w(),x("div",me,[t(U)])):e.memories.length?(w(),x("div",ue,[(w(!0),x(J,null,Y(e.memories,r=>(w(),x("div",{key:r.id,class:"memory-item"},[c("div",ye,[c("div",_e,[t(V,{color:e.layerColor(r.layer||e.activeLayer),style:{"font-size":"10px"}},{default:o(()=>[k(s(e.layerLabel(r.layer||e.activeLayer)),1)]),_:2},1032,["color"]),r.importance?(w(),x("span",fe,s(e.t("memory.card.importanceLabel",{value:r.importance})),1)):R("v-if",!0)]),c("span",ge,s(r.time),1)]),c("div",ve,s(r.content),1)]))),128))])):(w(),x("div",de,s(e.t("memory.card.emptyText")),1))]),_:1}),R(" Consolidate Button "),t(_,{loading:e.consolidating,onClick:e.consolidate,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(e.SyncOutlined)]),default:o(()=>[k(" "+s(e.t("memory.consolidateButton")),1)]),_:1},8,["loading"]),R(" Store Memory Modal "),t(z,{open:e.showStore,"onUpdate:open":n[8]||(n[8]=r=>e.showStore=r),title:e.t("memory.modal.title"),"confirm-loading":e.storing,onOk:e.storeMemory},{default:o(()=>[t(j,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[t(M,{label:e.t("memory.modal.contentLabel"),required:""},{default:o(()=>[t(C,{value:e.newMemory.content,"onUpdate:value":n[6]||(n[6]=r=>e.newMemory.content=r),rows:4,placeholder:e.t("memory.modal.contentPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(M,{label:e.t("memory.modal.importanceLabel")},{default:o(()=>[t(T,{value:e.newMemory.importance,"onUpdate:value":n[7]||(n[7]=r=>e.newMemory.importance=r),min:0,max:1,step:.1,marks:e.importanceMarks},null,8,["value","marks"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading"])])}const we=Z(oe,[["render",pe],["__scopeId","data-v-5658552f"],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/views/Memory.vue"]]);export{we as default};
1
+ import{I as i,J as x,U as c,R as s,c as t,K as o,V as R,o as j,b as q,r as d,P as w,Q as k,F as J,Z as K}from"./vendor-Bn1JzzAn.js";import{_ as Z,b as H,u as D,d as O}from"./index-C3lcOYkZ.js";import{S as A,aB as X,a1 as Y,a0 as $,R as ee,at as te}from"./icons-DG5UD-6K.js";const oe={__name:"Memory",setup(G,{expose:n}){n();const{t:m}=H(),e=D(),B=d(!1),S=d(!1),_=d(!1),L=d(!1),f=d(!1),u=d({shortTerm:0,longTerm:0,core:0}),y=d([]),g=d("short-term"),v=d(""),p=d({content:"",importance:.5}),P=q(()=>({0:m("memory.modal.marks.low"),.5:m("memory.modal.marks.mid"),1:m("memory.modal.marks.high")}));function U(a){return{"short-term":"purple","long-term":"blue",core:"green"}[a]||"default"}function V(a){const l=`memory.layer.${a}`,h=m(l);return h===l?a:h}async function C(){B.value=!0;try{const{output:a}=await e.execute("hmemory stats",15e3);T(a)}catch(a){console.error("hmemory stats failed:",a)}finally{B.value=!1,await M()}}function T(a){const l=a.match(/short.?term[^\d]*(\d+)/i),h=a.match(/long.?term[^\d]*(\d+)/i),I=a.match(/core[^\d]*(\d+)/i);l&&(u.value.shortTerm=parseInt(l[1])),h&&(u.value.longTerm=parseInt(h[1])),I&&(u.value.core=parseInt(I[1]))}async function M(){S.value=!0;try{const a=g.value==="short-term"?"recent":g.value==="long-term"?"important":"core",{output:l}=await e.execute(`hmemory recall "${a}" --limit 20`,15e3);y.value=z(l)}catch{y.value=[]}finally{S.value=!1}}async function F(){if(!v.value.trim()){await M();return}S.value=!0;try{const{output:a}=await e.execute(`hmemory recall "${v.value}"`,15e3);y.value=z(a)}catch{y.value=[]}finally{S.value=!1}}function z(a){const l=[],h=a.split(`
2
+ `);for(const I of h){const b=I.trim();if(!b||b.startsWith("─")||b.startsWith("Recall"))continue;const Q=b.match(/^[-●•\d.]+\s+(.+)/);if(Q){const W=Q[1].trim();W.length>5&&l.push({id:l.length,content:W,layer:g.value,importance:"",time:""})}else b.length>10&&!b.includes(":")&&l.length<30&&l.push({id:l.length,content:b,layer:g.value,importance:"",time:""})}return l.slice(0,20)}async function r(){if(!p.value.content.trim()){O.warning(m("memory.messages.contentRequired"));return}L.value=!0;try{const a=`hmemory store "${p.value.content.replace(/"/g,'\\"')}" --importance ${p.value.importance}`,{output:l}=await e.execute(a,15e3);l.toLowerCase().includes("stored")||l.includes("✔")?(O.success(m("memory.messages.storeOk")),f.value=!1,p.value={content:"",importance:.5},await C()):(O.warning(l.slice(0,100)||m("memory.messages.storeDefault")),f.value=!1)}catch(a){O.error(m("memory.messages.storeFailed",{err:a.message}))}finally{L.value=!1}}async function E(){_.value=!0;try{await e.execute("hmemory consolidate",2e4),O.success(m("memory.messages.consolidateOk")),await C()}catch(a){O.error(m("memory.messages.consolidateFailed",{err:a.message}))}finally{_.value=!1}}j(C);const N={t:m,ws:e,loading:B,recalling:S,consolidating:_,storing:L,showStore:f,stats:u,memories:y,activeLayer:g,recallQuery:v,newMemory:p,importanceMarks:P,layerColor:U,layerLabel:V,loadStats:C,parseStats:T,recallByLayer:M,doRecall:F,parseMemories:z,storeMemory:r,consolidate:E,ref:d,computed:q,onMounted:j,get useI18n(){return H},get PlusOutlined(){return te},get ReloadOutlined(){return ee},get ThunderboltOutlined(){return $},get ClockCircleOutlined(){return Y},get StarOutlined(){return X},get SyncOutlined(){return A},get message(){return O},get useWsStore(){return D}};return Object.defineProperty(N,"__isScriptSetup",{enumerable:!1,value:!0}),N}},ae={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},re={class:"page-title"},ne={class:"page-sub"},le={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},se={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ie={style:{"margin-top":"4px",color:"var(--text-secondary)","font-size":"11px"}},ce={style:{display:"flex","align-items":"center",gap:"12px"}},me={key:0,style:{"text-align":"center",padding:"30px"}},de={key:1,style:{"text-align":"center",padding:"30px",color:"var(--text-muted)"}},ue={key:2,class:"memory-list"},ye={style:{display:"flex","justify-content":"space-between","align-items":"flex-start","margin-bottom":"4px"}},_e={style:{display:"flex",gap:"8px","align-items":"center"}},fe={key:0,style:{color:"var(--text-secondary)","font-size":"11px"}},ge={style:{color:"var(--text-muted)","font-size":"11px"}},ve={style:{color:"#ccc","font-size":"13px","line-height":"1.6"}};function pe(G,n,m,e,B,S){const _=i("a-button"),L=i("a-space"),f=i("a-statistic"),u=i("a-card"),y=i("a-col"),g=i("a-row"),v=i("a-radio-button"),p=i("a-radio-group"),P=i("a-input-search"),U=i("a-spin"),V=i("a-tag"),C=i("a-textarea"),T=i("a-form-item"),M=i("a-slider"),F=i("a-form"),z=i("a-modal");return w(),x("div",null,[c("div",ae,[c("div",null,[c("h2",re,s(e.t("memory.title")),1),c("p",ne,s(e.t("memory.subtitle")),1)]),t(L,null,{default:o(()=>[t(_,{onClick:n[0]||(n[0]=r=>e.showStore=!0),type:"primary"},{icon:o(()=>[t(e.PlusOutlined)]),default:o(()=>[k(" "+s(e.t("memory.storeButton")),1)]),_:1}),t(_,{ghost:"",loading:e.loading,onClick:e.loadStats},{icon:o(()=>[t(e.ReloadOutlined)]),default:o(()=>[k(" "+s(e.t("memory.refresh")),1)]),_:1},8,["loading"])]),_:1})]),R(" Stats Row "),t(g,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(114,46,209,.1)","border-color":"rgba(114,46,209,.35)",cursor:"pointer"},hoverable:"",onClick:n[1]||(n[1]=r=>e.activeLayer="short-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.shortTerm"),value:e.stats.shortTerm||0,"value-style":"color: #c084fc; font-size: 20px;"},{prefix:o(()=>[t(e.ThunderboltOutlined)]),_:1},8,["title","value"]),c("div",le,s(e.t("memory.stats.shortTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(22,119,255,.08)","border-color":"rgba(22,119,255,.3)",cursor:"pointer"},hoverable:"",onClick:n[2]||(n[2]=r=>e.activeLayer="long-term")},{default:o(()=>[t(f,{title:e.t("memory.stats.longTerm"),value:e.stats.longTerm||0,"value-style":"color: #91caff; font-size: 20px;"},{prefix:o(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"]),c("div",se,s(e.t("memory.stats.longTermHint")),1)]),_:1})]),_:1}),t(y,{xs:24,sm:8},{default:o(()=>[t(u,{style:{background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)",cursor:"pointer"},hoverable:"",onClick:n[3]||(n[3]=r=>e.activeLayer="core")},{default:o(()=>[t(f,{title:e.t("memory.stats.core"),value:e.stats.core||0,"value-style":"color: #69db7c; font-size: 20px;"},{prefix:o(()=>[t(e.StarOutlined)]),_:1},8,["title","value"]),c("div",ie,s(e.t("memory.stats.coreHint")),1)]),_:1})]),_:1})]),_:1}),R(" Layer Tabs + Recall "),t(u,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{title:o(()=>[c("div",ce,[c("span",null,s(e.t("memory.card.title")),1),t(p,{value:e.activeLayer,"onUpdate:value":n[4]||(n[4]=r=>e.activeLayer=r),"button-style":"solid",size:"small",onChange:e.recallByLayer},{default:o(()=>[t(v,{value:"short-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.short")),1)]),_:1}),t(v,{value:"long-term"},{default:o(()=>[k(s(e.t("memory.card.tabs.long")),1)]),_:1}),t(v,{value:"core"},{default:o(()=>[k(s(e.t("memory.card.tabs.core")),1)]),_:1})]),_:1},8,["value"])])]),extra:o(()=>[t(P,{value:e.recallQuery,"onUpdate:value":n[5]||(n[5]=r=>e.recallQuery=r),placeholder:e.t("memory.card.searchPlaceholder"),"allow-clear":"",size:"small",style:{width:"220px"},loading:e.recalling,onSearch:e.doRecall},null,8,["value","placeholder","loading"])]),default:o(()=>[e.recalling?(w(),x("div",me,[t(U)])):e.memories.length?(w(),x("div",ue,[(w(!0),x(J,null,K(e.memories,r=>(w(),x("div",{key:r.id,class:"memory-item"},[c("div",ye,[c("div",_e,[t(V,{color:e.layerColor(r.layer||e.activeLayer),style:{"font-size":"10px"}},{default:o(()=>[k(s(e.layerLabel(r.layer||e.activeLayer)),1)]),_:2},1032,["color"]),r.importance?(w(),x("span",fe,s(e.t("memory.card.importanceLabel",{value:r.importance})),1)):R("v-if",!0)]),c("span",ge,s(r.time),1)]),c("div",ve,s(r.content),1)]))),128))])):(w(),x("div",de,s(e.t("memory.card.emptyText")),1))]),_:1}),R(" Consolidate Button "),t(_,{loading:e.consolidating,onClick:e.consolidate,style:{background:"var(--bg-card-hover)","border-color":"var(--text-muted)",width:"100%"}},{icon:o(()=>[t(e.SyncOutlined)]),default:o(()=>[k(" "+s(e.t("memory.consolidateButton")),1)]),_:1},8,["loading"]),R(" Store Memory Modal "),t(z,{open:e.showStore,"onUpdate:open":n[8]||(n[8]=r=>e.showStore=r),title:e.t("memory.modal.title"),"confirm-loading":e.storing,onOk:e.storeMemory},{default:o(()=>[t(F,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:o(()=>[t(T,{label:e.t("memory.modal.contentLabel"),required:""},{default:o(()=>[t(C,{value:e.newMemory.content,"onUpdate:value":n[6]||(n[6]=r=>e.newMemory.content=r),rows:4,placeholder:e.t("memory.modal.contentPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),t(T,{label:e.t("memory.modal.importanceLabel")},{default:o(()=>[t(M,{value:e.newMemory.importance,"onUpdate:value":n[7]||(n[7]=r=>e.newMemory.importance=r),min:0,max:1,step:.1,marks:e.importanceMarks},null,8,["value","marks"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading"])])}const we=Z(oe,[["render",pe],["__scopeId","data-v-5658552f"],["__file","/tmp/cc-web-panel-0BTG9G/repo/packages/web-panel/src/views/Memory.vue"]]);export{we as default};
@@ -1 +1 @@
1
- import{I as d,J as Q,U as v,c as a,K as n,V as S,o as V,x as L,r as c,P as u,Q as m,R as b,S as A}from"./vendor-Bn1JzzAn.js";import{_ as te,u as W,t as H,d as l}from"./index-DyLUarhZ.js";import{u as Y}from"./useShellMode-CgR0wCYM.js";import{Q as ae}from"./QrScannerModal-ZWyCUbR1.js";import{ak as oe,aJ as ne,aK as ie,M as re,R as le}from"./icons-DG5UD-6K.js";import"./markdown-CsiA8-E5.js";const de={__name:"MobileBridge",setup(G,{expose:o}){o();const y=W(),e=c([]),q=c(!1),z=c(""),p=c(""),O=c(!1),D=c("desktop-qr"),P=c(!1),x=c(""),w=c(null),h=c(""),g=c({label:"等待手机扫描…",color:"blue"});let k=null;const M=c(!1),_=c({did:"",code:"",deviceId:"",deviceName:""});async function R(){P.value=!0,x.value="",w.value=null,g.value={label:"等待手机扫描…",color:"blue"};try{const t=await y.sendRaw({type:"desktop.pair.generate-qr"},1e4),r=t?.result??t;r?.payload&&r?.payloadJson?(w.value=r.payload,h.value=r.payloadJson,N()):x.value=t?.error||"生成失败:mobileBridge 未就绪?"}catch(t){x.value=`生成失败: ${t.message}`}finally{P.value=!1}}async function T(){i();try{await y.sendRaw({type:"desktop.pair.reset"},3e3)}catch{}await R()}function N(){i(),k=setInterval(async()=>{try{const t=await y.sendRaw({type:"desktop.pair.poll-ack"},3e3),r=t?.result??t;r?.status==="acked"?(g.value={label:`手机已扫描确认 (${r.ack?.deviceInfo?.name||r.ack?.mobileDid?.slice(0,12)||""})`,color:"green"},i(),await U(r.ack),await F()):r?.status==="expired"&&(g.value={label:"QR 已过期(5min),点重新生成",color:"orange"},i())}catch{}},2500)}async function U(t){if(!t||!t.pairingCode||!t.mobileDid||!t.deviceInfo?.deviceId){l.warning("配对成功但 ack 字段不全,无法写入设备表");return}const r={type:"device-pairing",code:t.pairingCode,did:t.mobileDid,deviceInfo:{deviceId:t.deviceInfo.deviceId,name:t.deviceInfo.name||"(unnamed)",platform:t.deviceInfo.platform||"android"},timestamp:Date.now()};try{const I=JSON.stringify(JSON.stringify(r)),{output:f}=await y.execute(`p2p pair-from-qr ${I} --json`,15e3),C=J(f);C?.success?l.success(`配对成功: ${C.deviceName||C.deviceId.slice(0,8)}`):C?.error?.includes?.("QR 已过期")?l.info("配对已确认,设备已写入数据库"):l.warning(`配对状态待确认: ${C?.error||"unknown"} — 列表刷新后即可见`)}catch(I){l.warning(`配对状态待确认: ${I.message} — 列表刷新后即可见`)}}function i(){k&&(clearInterval(k),k=null)}function s(t){t==="desktop-qr"?w.value?k||N():R():i()}function j(){_.value={did:"",code:"",deviceId:"",deviceName:""}}async function X(){if(M.value)return;if(!/^\d{6}$/.test(_.value.code.trim())){l.error("配对码必须是 6 位数字");return}M.value=!0;const t={type:"device-pairing",code:_.value.code.trim(),did:_.value.did.trim(),deviceInfo:{deviceId:_.value.deviceId.trim(),name:_.value.deviceName.trim()||"(unnamed)",platform:"android"},timestamp:Date.now()};try{await K(JSON.stringify(t)),j()}finally{M.value=!1}}const Z=[{title:"设备 ID",key:"device_id",dataIndex:"device_id",width:280},{title:"设备名称",key:"device_name",dataIndex:"device_name"},{title:"状态",key:"status",dataIndex:"status",width:90},{title:"配对时间",key:"paired_at",dataIndex:"paired_at",width:180},{title:"操作",key:"action",width:130}];async function F(){q.value=!0,z.value="";try{const{output:t}=await y.execute("p2p devices --type mobile --json",15e3);e.value=J(t)||[]}catch(t){z.value=`加载失败: ${t.message}`,e.value=[]}finally{q.value=!1}}async function K(t){O.value=!1;let r=null;try{const f=JSON.stringify(t),{output:C}=await y.execute(`p2p pair-from-qr ${f} --json`,15e3),B=J(C);if(!B?.success){l.error(`配对失败: ${B?.error||"未知错误"}`);return}try{r=JSON.parse(t)}catch{}l.success(`已写入配对: ${B.deviceName||B.deviceId.slice(0,8)}`),await F()}catch(f){l.error(`配对失败: ${f.message}`);return}if(!r)return;const{isEmbedded:I}=Y();if(!I){l.info("CLI 模式下已写本地 paired_devices;手机端确认状态留 cc desktop");return}try{const f=await y.sendRaw({type:"mobile.pair.send-confirmation",qrPayload:r},1e4);f&&f.ok!==!1?l.success("已通知手机端完成握手"):l.warning(`desktop 已写库,但通知手机端失败: ${f?.error||"unknown"}`)}catch(f){l.warning(`通知手机端失败: ${f.message}(desktop 已写库)`)}}async function $(t){p.value=t.device_id;try{const{output:r}=await y.execute(`p2p unpair ${t.device_id} --json`,15e3),I=J(r);I?.ok?(l.success("已解除配对"),await F()):l.error(`解除失败: ${I?.error||"未知错误"}`)}catch(r){l.error(`解除失败: ${r.message}`)}finally{p.value=""}}function J(t){return H(t)}function ee(t){if(!t)return"—";try{return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}V(async()=>{await F(),D.value==="desktop-qr"&&R()}),L(()=>{i()});const E={ws:y,devices:e,loading:q,error:z,unpairingId:p,showScanner:O,addMode:D,desktopQrLoading:P,desktopQrError:x,desktopQrPayload:w,desktopQrPayloadJson:h,desktopAckStatus:g,get desktopAckPollTimer(){return k},set desktopAckPollTimer(t){k=t},manualSubmitting:M,manualForm:_,generateDesktopQr:R,regenerateDesktopQr:T,startAckPolling:N,registerPairedFromAck:U,stopAckPolling:i,onTabChange:s,resetManualForm:j,onManualSubmit:X,columns:Z,refresh:F,onQrScanned:K,doUnpair:$,parseJsonOutput:J,formatTime:ee,ref:c,onMounted:V,onUnmounted:L,get message(){return l},get ReloadOutlined(){return le},get MobileOutlined(){return re},get DisconnectOutlined(){return ie},get QrcodeOutlined(){return ne},get CheckOutlined(){return oe},get useWsStore(){return W},get useShellMode(){return Y},get tryParseJson(){return H},QrScannerModal:ae};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}},se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ce={style:{"text-align":"center"}},ue={key:0},me={key:1,style:{color:"#ff4d4f"}},pe={style:{"margin-top":"12px"}},fe={key:2},ve={style:{display:"inline-block",background:"#fff",padding:"16px","border-radius":"8px",border:"2px solid var(--border-color)"}},ye={style:{"font-family":"monospace","font-size":"32px","font-weight":"bold","letter-spacing":"8px","margin-top":"4px"}},ge={style:{"margin-top":"16px"}},_e={key:0,style:{"text-align":"center",padding:"30px"}},ke={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},be={key:3,style:{color:"var(--text-muted)","font-size":"12px"}},xe={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}};function we(G,o,y,e,q,z){const p=d("a-button"),O=d("a-alert"),D=d("a-spin"),P=d("a-qrcode"),x=d("a-tag"),w=d("a-tab-pane"),h=d("a-input"),g=d("a-form-item"),k=d("a-form"),M=d("a-tabs"),_=d("a-card"),R=d("a-empty"),T=d("a-space"),N=d("a-popconfirm"),U=d("a-table");return u(),Q("div",null,[v("div",se,[o[8]||(o[8]=v("div",null,[v("h2",{class:"page-title"},"移动桥"),v("p",{class:"page-sub"},"已配对的 Android 设备 · QR pairing 完成后会出现在此")],-1)),a(p,{type:"primary",ghost:"",loading:e.loading,onClick:e.refresh},{icon:n(()=>[a(e.ReloadOutlined)]),default:n(()=>[o[7]||(o[7]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),S(" v1.1 W3.6 manual entry: 添加配对面板支持两种方式 "),a(_,{title:"新增配对",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:n(()=>[a(M,{activeKey:e.addMode,"onUpdate:activeKey":o[5]||(o[5]=i=>e.addMode=i),onChange:e.onTabChange},{default:n(()=>[a(w,{key:"desktop-qr",tab:"桌面 QR(推荐)"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 扫描桌面 QR,对准下方二维码即可"}),v("div",ce,[e.desktopQrLoading?(u(),Q("div",ue,[a(D),o[9]||(o[9]=m(" 生成 QR 中… ",-1))])):e.desktopQrError?(u(),Q("div",me,[m(b(e.desktopQrError)+" ",1),v("div",pe,[a(p,{onClick:e.regenerateDesktopQr},{default:n(()=>[...o[10]||(o[10]=[m("重试",-1)])]),_:1})])])):e.desktopQrPayload?(u(),Q("div",fe,[v("div",ve,[a(P,{value:e.desktopQrPayloadJson,size:280,"error-level":"H"},null,8,["value"])]),o[12]||(o[12]=v("div",{style:{"margin-top":"16px",color:"var(--text-muted)","font-size":"12px"}}," 配对码(手机也可手输): ",-1)),v("div",ye,b(e.desktopQrPayload.code),1),v("div",ge,[a(x,{color:e.desktopAckStatus.color},{default:n(()=>[m(b(e.desktopAckStatus.label),1)]),_:1},8,["color"]),a(p,{size:"small",type:"link",style:{"margin-left":"8px"},onClick:e.regenerateDesktopQr},{default:n(()=>[...o[11]||(o[11]=[m(" 重新生成 ",-1)])]),_:1})])])):S("v-if",!0)])]),_:1}),a(w,{key:"manual",tab:"手动输入"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 配对桌面 显示 QR 后,照着屏幕填写下方三个字段"}),a(k,{layout:"vertical",model:e.manualForm},{default:n(()=>[a(g,{label:"DID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.did,"onUpdate:value":o[0]||(o[0]=i=>e.manualForm.did=i),placeholder:"did:cc:...",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"配对码 (6 位数字)",required:!0},{default:n(()=>[a(h,{value:e.manualForm.code,"onUpdate:value":o[1]||(o[1]=i=>e.manualForm.code=i),placeholder:"123456",maxlength:"6",style:{"font-family":"monospace","font-size":"20px","letter-spacing":"4px","text-align":"center"}},null,8,["value"])]),_:1}),a(g,{label:"设备 ID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.deviceId,"onUpdate:value":o[2]||(o[2]=i=>e.manualForm.deviceId=i),placeholder:"android-xxx-xxx",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"设备名(可选)"},{default:n(()=>[a(h,{value:e.manualForm.deviceName,"onUpdate:value":o[3]||(o[3]=i=>e.manualForm.deviceName=i),placeholder:"My Pixel 8"},null,8,["value"])]),_:1}),a(g,null,{default:n(()=>[a(p,{type:"primary",loading:e.manualSubmitting,disabled:!e.manualForm.did||!e.manualForm.code||!e.manualForm.deviceId,onClick:e.onManualSubmit},{icon:n(()=>[a(e.CheckOutlined)]),default:n(()=>[o[13]||(o[13]=m(" 提交配对 ",-1))]),_:1},8,["loading","disabled"]),a(p,{style:{"margin-left":"8px"},disabled:e.manualSubmitting,onClick:e.resetManualForm},{default:n(()=>[...o[14]||(o[14]=[m(" 清空 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["model"])]),_:1}),a(w,{key:"scan",tab:"扫描手机 QR(高级)"},{default:n(()=>[a(O,{type:"warning","show-icon":"",style:{"margin-bottom":"16px"},message:"需要桌面摄像头,对小屏 QR 识别率不稳定",description:"无摄像头或扫描失败请用 “手动输入” 标签页"}),a(p,{type:"primary",onClick:o[4]||(o[4]=i=>e.showScanner=!0)},{icon:n(()=>[a(e.QrcodeOutlined)]),default:n(()=>[o[15]||(o[15]=m(" 打开摄像头扫描 ",-1))]),_:1})]),_:1})]),_:1},8,["activeKey"])]),_:1}),a(_,{title:"已配对设备",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[a(x,{color:"blue"},{default:n(()=>[m(b(e.devices.length)+" 台",1)]),_:1})]),default:n(()=>[e.loading?(u(),Q("div",_e,[a(D)])):e.devices.length===0?(u(),A(R,{key:1,description:"还未配对任何移动设备。在 Android 上:设置 → 配对桌面,生成 QR 后桌面端扫描。"})):(u(),A(U,{key:2,columns:e.columns,"data-source":e.devices,pagination:!1,size:"small","row-key":"device_id"},{bodyCell:n(({column:i,record:s})=>[i.key==="device_id"?(u(),Q("span",ke,b(s.device_id.length>24?s.device_id.slice(0,24)+"…":s.device_id),1)):S("v-if",!0),i.key==="device_name"?(u(),A(T,{key:1},{default:n(()=>[a(e.MobileOutlined,{style:{color:"var(--text-muted)"}}),v("span",null,b(s.device_name||"(unnamed)"),1)]),_:2},1024)):S("v-if",!0),i.key==="status"?(u(),A(x,{key:2,color:s.status==="active"?"green":"default"},{default:n(()=>[m(b(s.status==="active"?"已激活":s.status),1)]),_:2},1032,["color"])):S("v-if",!0),i.key==="paired_at"?(u(),Q("span",be,b(e.formatTime(s.paired_at)),1)):S("v-if",!0),i.key==="action"?(u(),A(N,{key:4,title:`确定解除 ${s.device_name||s.device_id.slice(0,12)} 的配对?`,"ok-text":"解除","cancel-text":"取消","ok-type":"danger",onConfirm:j=>e.doUnpair(s)},{default:n(()=>[a(p,{size:"small",type:"link",danger:"",loading:e.unpairingId===s.device_id},{default:n(()=>[a(e.DisconnectOutlined),o[16]||(o[16]=m(" 解除配对 ",-1))]),_:1},8,["loading"])]),_:2},1032,["title","onConfirm"])):S("v-if",!0)]),_:1},8,["data-source"])),e.error?(u(),Q("div",xe,b(e.error),1)):S("v-if",!0)]),_:1}),a(e.QrScannerModal,{open:e.showScanner,onScanned:e.onQrScanned,onCancel:o[6]||(o[6]=i=>e.showScanner=!1)},null,8,["open"])])}const Me=te(de,[["render",we],["__scopeId","data-v-e76deacb"],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/views/MobileBridge.vue"]]);export{Me as default};
1
+ import{I as d,J as Q,U as v,c as a,K as n,V as S,o as V,x as L,r as c,P as u,Q as m,R as b,S as A}from"./vendor-Bn1JzzAn.js";import{_ as te,u as W,t as G,d as l}from"./index-C3lcOYkZ.js";import{u as H}from"./useShellMode-CgR0wCYM.js";import{Q as ae}from"./QrScannerModal-X-I8dDMT.js";import{ak as oe,aJ as ne,aK as ie,M as re,R as le}from"./icons-DG5UD-6K.js";import"./markdown-CsiA8-E5.js";const de={__name:"MobileBridge",setup(X,{expose:o}){o();const y=W(),e=c([]),q=c(!1),z=c(""),p=c(""),O=c(!1),P=c("desktop-qr"),D=c(!1),x=c(""),w=c(null),h=c(""),g=c({label:"等待手机扫描…",color:"blue"});let k=null;const M=c(!1),_=c({did:"",code:"",deviceId:"",deviceName:""});async function R(){D.value=!0,x.value="",w.value=null,g.value={label:"等待手机扫描…",color:"blue"};try{const t=await y.sendRaw({type:"desktop.pair.generate-qr"},1e4),r=t?.result??t;r?.payload&&r?.payloadJson?(w.value=r.payload,h.value=r.payloadJson,N()):x.value=t?.error||"生成失败:mobileBridge 未就绪?"}catch(t){x.value=`生成失败: ${t.message}`}finally{D.value=!1}}async function U(){i();try{await y.sendRaw({type:"desktop.pair.reset"},3e3)}catch{}await R()}function N(){i(),k=setInterval(async()=>{try{const t=await y.sendRaw({type:"desktop.pair.poll-ack"},3e3),r=t?.result??t;r?.status==="acked"?(g.value={label:`手机已扫描确认 (${r.ack?.deviceInfo?.name||r.ack?.mobileDid?.slice(0,12)||""})`,color:"green"},i(),await B(r.ack),await F()):r?.status==="expired"&&(g.value={label:"QR 已过期(5min),点重新生成",color:"orange"},i())}catch{}},2500)}async function B(t){if(!t||!t.pairingCode||!t.mobileDid||!t.deviceInfo?.deviceId){l.warning("配对成功但 ack 字段不全,无法写入设备表");return}const r={type:"device-pairing",code:t.pairingCode,did:t.mobileDid,deviceInfo:{deviceId:t.deviceInfo.deviceId,name:t.deviceInfo.name||"(unnamed)",platform:t.deviceInfo.platform||"android"},timestamp:Date.now()};try{const I=JSON.stringify(JSON.stringify(r)),{output:f}=await y.execute(`p2p pair-from-qr ${I} --json`,15e3),C=J(f);C?.success?l.success(`配对成功: ${C.deviceName||C.deviceId.slice(0,8)}`):C?.error?.includes?.("QR 已过期")?l.info("配对已确认,设备已写入数据库"):l.warning(`配对状态待确认: ${C?.error||"unknown"} — 列表刷新后即可见`)}catch(I){l.warning(`配对状态待确认: ${I.message} — 列表刷新后即可见`)}}function i(){k&&(clearInterval(k),k=null)}function s(t){t==="desktop-qr"?w.value?k||N():R():i()}function j(){_.value={did:"",code:"",deviceId:"",deviceName:""}}async function Y(){if(M.value)return;if(!/^\d{6}$/.test(_.value.code.trim())){l.error("配对码必须是 6 位数字");return}M.value=!0;const t={type:"device-pairing",code:_.value.code.trim(),did:_.value.did.trim(),deviceInfo:{deviceId:_.value.deviceId.trim(),name:_.value.deviceName.trim()||"(unnamed)",platform:"android"},timestamp:Date.now()};try{await E(JSON.stringify(t)),j()}finally{M.value=!1}}const Z=[{title:"设备 ID",key:"device_id",dataIndex:"device_id",width:280},{title:"设备名称",key:"device_name",dataIndex:"device_name"},{title:"状态",key:"status",dataIndex:"status",width:90},{title:"配对时间",key:"paired_at",dataIndex:"paired_at",width:180},{title:"操作",key:"action",width:130}];async function F(){q.value=!0,z.value="";try{const{output:t}=await y.execute("p2p devices --type mobile --json",15e3);e.value=J(t)||[]}catch(t){z.value=`加载失败: ${t.message}`,e.value=[]}finally{q.value=!1}}async function E(t){O.value=!1;let r=null;try{const f=JSON.stringify(t),{output:C}=await y.execute(`p2p pair-from-qr ${f} --json`,15e3),T=J(C);if(!T?.success){l.error(`配对失败: ${T?.error||"未知错误"}`);return}try{r=JSON.parse(t)}catch{}l.success(`已写入配对: ${T.deviceName||T.deviceId.slice(0,8)}`),await F()}catch(f){l.error(`配对失败: ${f.message}`);return}if(!r)return;const{isEmbedded:I}=H();if(!I){l.info("CLI 模式下已写本地 paired_devices;手机端确认状态留 cc desktop");return}try{const f=await y.sendRaw({type:"mobile.pair.send-confirmation",qrPayload:r},1e4);f&&f.ok!==!1?l.success("已通知手机端完成握手"):l.warning(`desktop 已写库,但通知手机端失败: ${f?.error||"unknown"}`)}catch(f){l.warning(`通知手机端失败: ${f.message}(desktop 已写库)`)}}async function $(t){p.value=t.device_id;try{const{output:r}=await y.execute(`p2p unpair ${t.device_id} --json`,15e3),I=J(r);I?.ok?(l.success("已解除配对"),await F()):l.error(`解除失败: ${I?.error||"未知错误"}`)}catch(r){l.error(`解除失败: ${r.message}`)}finally{p.value=""}}function J(t){return G(t)}function ee(t){if(!t)return"—";try{return new Date(t).toLocaleString("zh-CN",{year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"})}catch{return t}}V(async()=>{await F(),P.value==="desktop-qr"&&R()}),L(()=>{i()});const K={ws:y,devices:e,loading:q,error:z,unpairingId:p,showScanner:O,addMode:P,desktopQrLoading:D,desktopQrError:x,desktopQrPayload:w,desktopQrPayloadJson:h,desktopAckStatus:g,get desktopAckPollTimer(){return k},set desktopAckPollTimer(t){k=t},manualSubmitting:M,manualForm:_,generateDesktopQr:R,regenerateDesktopQr:U,startAckPolling:N,registerPairedFromAck:B,stopAckPolling:i,onTabChange:s,resetManualForm:j,onManualSubmit:Y,columns:Z,refresh:F,onQrScanned:E,doUnpair:$,parseJsonOutput:J,formatTime:ee,ref:c,onMounted:V,onUnmounted:L,get message(){return l},get ReloadOutlined(){return le},get MobileOutlined(){return re},get DisconnectOutlined(){return ie},get QrcodeOutlined(){return ne},get CheckOutlined(){return oe},get useWsStore(){return W},get useShellMode(){return H},get tryParseJson(){return G},QrScannerModal:ae};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ce={style:{"text-align":"center"}},ue={key:0},me={key:1,style:{color:"#ff4d4f"}},pe={style:{"margin-top":"12px"}},fe={key:2},ve={style:{display:"inline-block",background:"#fff",padding:"16px","border-radius":"8px",border:"2px solid var(--border-color)"}},ye={style:{"font-family":"monospace","font-size":"32px","font-weight":"bold","letter-spacing":"8px","margin-top":"4px"}},ge={style:{"margin-top":"16px"}},_e={key:0,style:{"text-align":"center",padding:"30px"}},ke={key:0,style:{"font-family":"monospace",color:"var(--text-muted)","font-size":"12px"}},be={key:3,style:{color:"var(--text-muted)","font-size":"12px"}},xe={key:3,style:{"margin-top":"12px",color:"#ff4d4f","font-size":"12px"}};function we(X,o,y,e,q,z){const p=d("a-button"),O=d("a-alert"),P=d("a-spin"),D=d("a-qrcode"),x=d("a-tag"),w=d("a-tab-pane"),h=d("a-input"),g=d("a-form-item"),k=d("a-form"),M=d("a-tabs"),_=d("a-card"),R=d("a-empty"),U=d("a-space"),N=d("a-popconfirm"),B=d("a-table");return u(),Q("div",null,[v("div",se,[o[8]||(o[8]=v("div",null,[v("h2",{class:"page-title"},"移动桥"),v("p",{class:"page-sub"},"已配对的 Android 设备 · QR pairing 完成后会出现在此")],-1)),a(p,{type:"primary",ghost:"",loading:e.loading,onClick:e.refresh},{icon:n(()=>[a(e.ReloadOutlined)]),default:n(()=>[o[7]||(o[7]=m(" 刷新 ",-1))]),_:1},8,["loading"])]),S(" v1.1 W3.6 manual entry: 添加配对面板支持两种方式 "),a(_,{title:"新增配对",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:n(()=>[a(M,{activeKey:e.addMode,"onUpdate:activeKey":o[5]||(o[5]=i=>e.addMode=i),onChange:e.onTabChange},{default:n(()=>[a(w,{key:"desktop-qr",tab:"桌面 QR(推荐)"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 扫描桌面 QR,对准下方二维码即可"}),v("div",ce,[e.desktopQrLoading?(u(),Q("div",ue,[a(P),o[9]||(o[9]=m(" 生成 QR 中… ",-1))])):e.desktopQrError?(u(),Q("div",me,[m(b(e.desktopQrError)+" ",1),v("div",pe,[a(p,{onClick:e.regenerateDesktopQr},{default:n(()=>[...o[10]||(o[10]=[m("重试",-1)])]),_:1})])])):e.desktopQrPayload?(u(),Q("div",fe,[v("div",ve,[a(D,{value:e.desktopQrPayloadJson,size:280,"error-level":"H"},null,8,["value"])]),o[12]||(o[12]=v("div",{style:{"margin-top":"16px",color:"var(--text-muted)","font-size":"12px"}}," 配对码(手机也可手输): ",-1)),v("div",ye,b(e.desktopQrPayload.code),1),v("div",ge,[a(x,{color:e.desktopAckStatus.color},{default:n(()=>[m(b(e.desktopAckStatus.label),1)]),_:1},8,["color"]),a(p,{size:"small",type:"link",style:{"margin-left":"8px"},onClick:e.regenerateDesktopQr},{default:n(()=>[...o[11]||(o[11]=[m(" 重新生成 ",-1)])]),_:1})])])):S("v-if",!0)])]),_:1}),a(w,{key:"manual",tab:"手动输入"},{default:n(()=>[a(O,{type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"在手机上 设置 → 配对桌面 显示 QR 后,照着屏幕填写下方三个字段"}),a(k,{layout:"vertical",model:e.manualForm},{default:n(()=>[a(g,{label:"DID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.did,"onUpdate:value":o[0]||(o[0]=i=>e.manualForm.did=i),placeholder:"did:cc:...",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"配对码 (6 位数字)",required:!0},{default:n(()=>[a(h,{value:e.manualForm.code,"onUpdate:value":o[1]||(o[1]=i=>e.manualForm.code=i),placeholder:"123456",maxlength:"6",style:{"font-family":"monospace","font-size":"20px","letter-spacing":"4px","text-align":"center"}},null,8,["value"])]),_:1}),a(g,{label:"设备 ID",required:!0},{default:n(()=>[a(h,{value:e.manualForm.deviceId,"onUpdate:value":o[2]||(o[2]=i=>e.manualForm.deviceId=i),placeholder:"android-xxx-xxx",style:{"font-family":"monospace"}},null,8,["value"])]),_:1}),a(g,{label:"设备名(可选)"},{default:n(()=>[a(h,{value:e.manualForm.deviceName,"onUpdate:value":o[3]||(o[3]=i=>e.manualForm.deviceName=i),placeholder:"My Pixel 8"},null,8,["value"])]),_:1}),a(g,null,{default:n(()=>[a(p,{type:"primary",loading:e.manualSubmitting,disabled:!e.manualForm.did||!e.manualForm.code||!e.manualForm.deviceId,onClick:e.onManualSubmit},{icon:n(()=>[a(e.CheckOutlined)]),default:n(()=>[o[13]||(o[13]=m(" 提交配对 ",-1))]),_:1},8,["loading","disabled"]),a(p,{style:{"margin-left":"8px"},disabled:e.manualSubmitting,onClick:e.resetManualForm},{default:n(()=>[...o[14]||(o[14]=[m(" 清空 ",-1)])]),_:1},8,["disabled"])]),_:1})]),_:1},8,["model"])]),_:1}),a(w,{key:"scan",tab:"扫描手机 QR(高级)"},{default:n(()=>[a(O,{type:"warning","show-icon":"",style:{"margin-bottom":"16px"},message:"需要桌面摄像头,对小屏 QR 识别率不稳定",description:"无摄像头或扫描失败请用 “手动输入” 标签页"}),a(p,{type:"primary",onClick:o[4]||(o[4]=i=>e.showScanner=!0)},{icon:n(()=>[a(e.QrcodeOutlined)]),default:n(()=>[o[15]||(o[15]=m(" 打开摄像头扫描 ",-1))]),_:1})]),_:1})]),_:1},8,["activeKey"])]),_:1}),a(_,{title:"已配对设备",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{extra:n(()=>[a(x,{color:"blue"},{default:n(()=>[m(b(e.devices.length)+" 台",1)]),_:1})]),default:n(()=>[e.loading?(u(),Q("div",_e,[a(P)])):e.devices.length===0?(u(),A(R,{key:1,description:"还未配对任何移动设备。在 Android 上:设置 → 配对桌面,生成 QR 后桌面端扫描。"})):(u(),A(B,{key:2,columns:e.columns,"data-source":e.devices,pagination:!1,size:"small","row-key":"device_id"},{bodyCell:n(({column:i,record:s})=>[i.key==="device_id"?(u(),Q("span",ke,b(s.device_id.length>24?s.device_id.slice(0,24)+"…":s.device_id),1)):S("v-if",!0),i.key==="device_name"?(u(),A(U,{key:1},{default:n(()=>[a(e.MobileOutlined,{style:{color:"var(--text-muted)"}}),v("span",null,b(s.device_name||"(unnamed)"),1)]),_:2},1024)):S("v-if",!0),i.key==="status"?(u(),A(x,{key:2,color:s.status==="active"?"green":"default"},{default:n(()=>[m(b(s.status==="active"?"已激活":s.status),1)]),_:2},1032,["color"])):S("v-if",!0),i.key==="paired_at"?(u(),Q("span",be,b(e.formatTime(s.paired_at)),1)):S("v-if",!0),i.key==="action"?(u(),A(N,{key:4,title:`确定解除 ${s.device_name||s.device_id.slice(0,12)} 的配对?`,"ok-text":"解除","cancel-text":"取消","ok-type":"danger",onConfirm:j=>e.doUnpair(s)},{default:n(()=>[a(p,{size:"small",type:"link",danger:"",loading:e.unpairingId===s.device_id},{default:n(()=>[a(e.DisconnectOutlined),o[16]||(o[16]=m(" 解除配对 ",-1))]),_:1},8,["loading"])]),_:2},1032,["title","onConfirm"])):S("v-if",!0)]),_:1},8,["data-source"])),e.error?(u(),Q("div",xe,b(e.error),1)):S("v-if",!0)]),_:1}),a(e.QrScannerModal,{open:e.showScanner,onScanned:e.onQrScanned,onCancel:o[6]||(o[6]=i=>e.showScanner=!1)},null,8,["open"])])}const Me=te(de,[["render",we],["__scopeId","data-v-e76deacb"],["__file","/tmp/cc-web-panel-0BTG9G/repo/packages/web-panel/src/views/MobileBridge.vue"]]);export{Me as default};
@@ -0,0 +1 @@
1
+ import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-Bn1JzzAn.js";import{_ as v,b as m}from"./index-C3lcOYkZ.js";import{a8 as y,M as B}from"./icons-DG5UD-6K.js";const M={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return B},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},T={class:"subtitle"},k={class:"explainer"};function w(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",T,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",k,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(M,[["render",w],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-0BTG9G/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
@@ -1,6 +1,6 @@
1
- import{I as y,J as T,U as x,R as n,c as t,K as a,r as _,o as _e,x as pe,b as $,P as i,Q as s,V as c,S as g,a0 as Ae,a5 as Ue,F as he,a2 as Z,$ as Be,Z as He}from"./vendor-Bn1JzzAn.js";import{_ as Ne,b as ke,u as xe,d as p}from"./index-DyLUarhZ.js";import{u as le}from"./useShellMode-CgR0wCYM.js";import{a as oe,b as ue,f as Ve,c as qe,d as Ge,p as Se}from"./mtc-parser-DoFYz5Bp.js";import{s as Ze,ar as Je,N as We,D as Ke,b6 as Qe,e as Ye,f as Xe,a1 as $e,R as et}from"./icons-DG5UD-6K.js";const tt={__name:"Mtc",setup(we,{expose:o}){o();const{t:L}=ke(),e=xe(),fe=_("status"),ee=_(!1),C=_(oe("")),V=_(""),h=_(!1),m=_(ue("")),k=_(""),z=_(""),D=_(!1),S=_(null),q=$(()=>[{title:L("mtc.historyColumns.seq"),key:"seq",dataIndex:"seq",width:"90px"},{title:L("mtc.historyColumns.namespace"),key:"namespace",dataIndex:"namespace"},{title:L("mtc.historyColumns.treeSize"),key:"treeSize",dataIndex:"treeSize",width:"100px"},{title:L("mtc.historyColumns.treeHeadId"),key:"treeHeadId",dataIndex:"treeHeadId",width:"180px"},{title:L("mtc.historyColumns.publishedAt"),key:"publishedAt",dataIndex:"publishedAt",width:"140px"}]);function j(l,u){return l?l.length<=u?l:l.slice(0,u)+"…":""}async function O(){ee.value=!0;try{if(le().isEmbedded){const l=await e.sendRaw({type:"mtc.audit-status"},3e4),u=l?.result;if(!l?.ok||!u?.success)throw new Error(u?.error||l?.error||"mtc.audit-status failed");C.value=oe(u.status)}else{const{output:l}=await e.execute("audit mtc status --json",3e4);C.value=oe(l)}}catch(l){p.error(L("mtc.messages.loadStatusFailed",{err:l?.message||l}))}finally{ee.value=!1}}async function F(){if(!V.value.trim()){p.warning(L("mtc.messages.stateFileRequired"));return}h.value=!0;try{const l=V.value.trim().replace(/"/g,'\\"'),{output:u}=await e.execute(`mtc publish-status "${l}" --json`,8e3);m.value=ue(u)}catch(l){p.error(L("mtc.messages.loadPublishFailed",{err:l?.message||l}))}finally{h.value=!1}}async function v(){if(!k.value.trim()||!z.value.trim()){p.warning(L("mtc.messages.verifyPathsRequired"));return}D.value=!0,S.value=null;try{const l=k.value.trim().replace(/"/g,'\\"'),u=z.value.trim().replace(/"/g,'\\"'),{output:d}=await e.execute(`mtc verify "${l}" --landmark "${u}" --json`,12e3);S.value=Se(d),S.value.raw||p.error(L("mtc.messages.verifyNoJson"))}catch(l){p.error(L("mtc.messages.verifyFailed",{err:l?.message||l}))}finally{D.value=!1}}const R=_({config:{enabled:!1,mode:"independent",alg:"ed25519",batch_interval_seconds:60,issuer:""},trust_anchors:{chain_count:0,total:0,by_chain:{}},staging:{pending:0},batches:{total:0,latest:null}}),J=$(()=>{switch(R.value.config.mode){case"federated":return"Federated";case"light-client":return"Light Client";default:return"Independent"}}),re=[{title:"chain",key:"chain",dataIndex:"chain",width:"120px"},{title:"锚数",key:"count",dataIndex:"count",width:"80px"}],ne=$(()=>{const l=R.value.trust_anchors.by_chain||{};return Object.entries(l).map(([u,d])=>({key:u,chain:u,count:d}))});function U(l){return{config:{enabled:!1,mode:"independent",alg:"ed25519",batch_interval_seconds:60,issuer:"",...l?.config||{}},trust_anchors:{chain_count:0,total:0,by_chain:{},...l?.trust_anchors||{}},staging:{pending:0,...l?.staging||{}},batches:{total:0,latest:null,...l?.batches||{}}}}const G=_({});let A=null;function ie(l){return l==="ok"?"#52c41a":l==="degraded"?"#faad14":l==="down"?"#ff4d4f":"#888"}async function W(){try{if(le().isEmbedded){const d=await e.sendRaw({type:"mtc.bridge-sla"},3e4),b=d?.result;d?.ok&&b?.success&&b.metrics&&typeof b.metrics.sla_status=="string"&&(G.value=b.metrics);return}const{output:l}=await e.execute("crosschain mtc-sla --json",3e4),u=l.split(/\r?\n/);for(let d=0;d<u.length;d++)if(u[d].trimStart().startsWith("{"))for(let b=u.length;b>d;b--)try{const f=JSON.parse(u.slice(d,b).join(`
2
- `));if(f&&typeof f.sla_status=="string"){G.value=f;return}}catch{}}catch{}}async function K(){try{if(le().isEmbedded){const d=await e.sendRaw({type:"mtc.bridge-status"},3e4),b=d?.result;if(!d?.ok||!b?.success||!b.status)throw new Error(b?.error||d?.error||"mtc.bridge-status failed");const f=b.status;R.value=U({config:{enabled:f.enabled,mode:f.mode,alg:f.alg,batch_interval_seconds:f.batch_interval_seconds,issuer:f.issuer},trust_anchors:f.trust_anchors,staging:f.staging,batches:f.batches});return}const{output:l}=await e.execute("crosschain mtc-status --json",3e4),u=l.split(/\r?\n/);for(let d=0;d<u.length;d++)if(u[d].trimStart().startsWith("{"))for(let b=u.length;b>d;b--)try{const f=JSON.parse(u.slice(d,b).join(`
3
- `));if(f&&f.config){R.value=U(f);return}}catch{}}catch(l){p.error("加载桥 MTC 状态失败: "+(l?.message||l))}}const B=_(""),Q=_(!1),Y=_(null),H=_(null),r=_("随 governance-log 加载刷新"),N=$(()=>{const l=Y.value?.state;return l?Array.isArray(l.pending_thresholds)&&l.pending_thresholds.length>0?l.pending_thresholds:l.pending_threshold&&Number.isInteger(l.pending_threshold.target)?[l.pending_threshold]:[]:[]}),Ce=[{title:"member_id",key:"member_id",dataIndex:"member_id"},{title:"status",key:"status",dataIndex:"status",width:"110px"},{title:"weight",key:"weight",dataIndex:"weight",width:"80px"},{title:"alg",key:"alg",dataIndex:"alg",width:"120px"}];function ze(l){switch(l){case"create":return"cyan";case"invite":case"vote":return"blue";case"leave":case"rotate-key":return"default";case"propose-revoke":case"propose-threshold":return"orange";case"confirm-revoke":case"confirm-threshold":return"gold";case"fork":case"merge":return"purple";case"dispute":case"wind-down":return"red";default:return"default"}}const se=_(!1),te=_(null),ve=_({actor:"",candidate:"",pubkeyId:""}),me=_({actor:"",candidate:"",decision:"approve"}),ae=_({actor:"",newM:2}),de=_({actor:"",target:"",reason:"inactive"}),E=_({dropZone:"",verify:!1});function w(l){return String(l||"").replace(/"/g,"").replace(/[`$]/g,"")}async function M(l,u=!0){if(!B.value.trim()){p.warning("请先输入联邦 ID");return}se.value=!0,te.value=null;try{const d=w(B.value.trim()),b=`mtc federation ${l.replace("<FED>",`"${d}"`)} --json`,{output:f}=await e.execute(b,12e3),P=f.split(/\r?\n/);let I=null;for(let X=0;X<P.length;X++)if(P[X].trimStart().startsWith("{")){for(let ce=P.length;ce>X;ce--)try{I=JSON.parse(P.slice(X,ce).join(`
4
- `));break}catch{}if(I)break}te.value=I||{raw:f},p.success("命令执行完成"),u&&await ge()}catch(d){p.error("CLI 执行失败: "+(d?.message||d)),te.value={error:d?.message||String(d)}}finally{se.value=!1}}function Fe(){const l=ve.value;if(!l.actor||!l.candidate||!l.pubkeyId){p.warning("actor / candidate / pubkey-id 都必填");return}return M(`invite <FED> "${w(l.candidate)}" --actor "${w(l.actor)}" --candidate-pubkey-id "${w(l.pubkeyId)}"`)}function Ie(){const l=me.value;if(!l.actor||!l.candidate){p.warning("actor / candidate 必填");return}return M(`vote <FED> "${w(l.candidate)}" --actor "${w(l.actor)}" --decision ${l.decision}`)}function Re(){const l=ae.value;if(!l.actor){p.warning("actor 必填");return}return M(`propose-threshold <FED> ${parseInt(l.newM)} --actor "${w(l.actor)}"`)}function Le(){const l=ae.value;if(!l.actor){p.warning("actor 必填");return}return M(`confirm-threshold <FED> --actor "${w(l.actor)}"`)}function Oe(l){const u=(ae.value.actor||"").trim();if(!u){p.warning('请先在"改 threshold"子 tab 填 actor');return}if(!l){p.warning("proposal event_id 缺失");return}return M(`confirm-threshold <FED> --actor "${w(u)}" --proposal-event-id "${w(l)}"`)}function Pe(l){return l?l.length<=16?l:`${l.slice(0,8)}…${l.slice(-4)}`:"—"}function Te(){const l=de.value;if(!l.actor||!l.target){p.warning("actor / target 必填");return}return M(`propose-revoke <FED> "${w(l.target)}" --actor "${w(l.actor)}" --reason "${w(l.reason)}"`)}function Me(){const l=de.value;if(!l.actor||!l.target){p.warning("actor / target 必填");return}return M(`confirm-revoke <FED> "${w(l.target)}" --actor "${w(l.actor)}"`)}function De(){if(!E.value.dropZone){p.warning("drop-zone 必填");return}return M(`governance-publish <FED> --drop-zone "${w(E.value.dropZone)}"`,!1)}function je(){if(!E.value.dropZone){p.warning("drop-zone 必填");return}const l=E.value.verify?" --verify":"";return M(`governance-pull <FED> --drop-zone "${w(E.value.dropZone)}"${l}`)}function Ee(){if(!E.value.dropZone){p.warning("drop-zone 必填");return}const l=E.value.verify?" --verify":"";return M(`governance-sync-serve <FED> --drop-zone "${w(E.value.dropZone)}" --once${l}`)}async function ge(){if(!B.value.trim()){p.warning("请输入联邦 ID");return}Q.value=!0;try{const l=B.value.trim().replace(/"/g,""),{output:u}=await e.execute(`mtc federation governance-log "${l}" --json`,8e3),d=u.split(/\r?\n/);let b=!1;for(let f=0;f<d.length;f++)if(d[f].trimStart().startsWith("{")){for(let P=d.length;P>f;P--)try{const I=JSON.parse(d.slice(f,P).join(`
5
- `));if(I&&I.state){Y.value=I,b=!0;break}}catch{}if(b)break}if(!b){p.error("未能解析 governance-log 输出");return}await be(l)}catch(l){p.error("加载 governance.log 失败: "+(l?.message||l))}finally{Q.value=!1}}async function be(l){if(H.value=null,r.value="随 governance-log 加载刷新",!!l)try{const u=String(l).replace(/"/g,""),{output:d}=await e.execute(`mtc federation governance-sync-stats "${u}" --json`,8e3),b=d.split(/\r?\n/);for(let f=0;f<b.length;f++)if(b[f].trimStart().startsWith("{"))for(let P=b.length;P>f;P--)try{const I=JSON.parse(b.slice(f,P).join(`
6
- `));if(I&&(I.available!==void 0||I.mode!==void 0)){H.value=I.available===!1?null:I;return}}catch{}}catch{H.value=null}}_e(()=>{O(),K(),W(),A=setInterval(W,3e4)}),pe(()=>{A&&clearInterval(A)});const ye={t:L,ws:e,activeTab:fe,loading:ee,status:C,publishStateFile:V,publishLoading:h,publish:m,verifyEnvelopePath:k,verifyLandmarkPath:z,verifyLoading:D,verifyResult:S,historyColumns:q,truncate:j,loadStatus:O,loadPublishState:F,runVerify:v,bridgeStatus:R,bridgeModeLabel:J,bridgeAnchorColumns:re,bridgeAnchorsTable:ne,mergeBridgeStatus:U,bridgeSla:G,get slaPollHandle(){return A},set slaPollHandle(l){A=l},slaStatusColor:ie,loadBridgeSla:W,loadBridgeStatus:K,govFederationId:B,govLoading:Q,govResult:Y,govSyncStats:H,govSyncRefreshHint:r,pendingThresholdsList:N,memberColumns:Ce,eventTypeColor:ze,actionLoading:se,lastActionResult:te,inviteForm:ve,voteForm:me,thresholdForm:ae,revokeForm:de,syncForm:E,shellSafe:w,runGovAction:M,runInvite:Fe,runVote:Ie,runProposeThreshold:Re,runConfirmThreshold:Le,runConfirmThresholdById:Oe,truncateEventId:Pe,runProposeRevoke:Te,runConfirmRevoke:Me,runGovPublish:De,runGovPull:je,runGovSyncOnce:Ee,loadGovernanceLog:ge,loadGovSyncStats:be,ref:_,computed:$,onMounted:_e,get useI18n(){return ke},get ReloadOutlined(){return et},get ClockCircleOutlined(){return $e},get CheckCircleOutlined(){return Xe},get InfoCircleOutlined(){return Ye},get InboxOutlined(){return Qe},get DatabaseOutlined(){return Ke},get NumberOutlined(){return We},get HistoryOutlined(){return Je},get SafetyOutlined(){return Ze},get message(){return p},get useWsStore(){return xe},get useShellMode(){return le},get parseAuditMtcStatus(){return oe},get parsePublishStatus(){return ue},get parseVerifyResult(){return Se},get formatBatchInterval(){return Ge},get formatTimestamp(){return qe},get formatRelative(){return Ve},onUnmounted:pe};return Object.defineProperty(ye,"__isScriptSetup",{enumerable:!1,value:!0}),ye}},at={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},lt={class:"page-title"},ot={class:"page-sub"},rt={style:{"font-family":"monospace"}},nt={style:{"font-family":"monospace"}},it={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},st={key:1,style:{color:"var(--text-muted)"}},dt={key:0,style:{"font-family":"monospace","font-size":"11px","word-break":"break-all"}},ct={key:1,style:{color:"var(--text-muted)"}},ut={key:1,style:{"font-family":"monospace","font-size":"11px"}},ft=["title"],vt={style:{"font-family":"monospace"}},mt={style:{"font-family":"monospace","font-size":"12px"}},gt={style:{"font-family":"monospace","font-size":"12px"}},bt={class:"raw-pre"},yt={style:{"font-family":"monospace"}},_t={key:0,style:{"font-family":"monospace","font-size":"11px",color:"var(--text-tertiary)","margin-left":"8px"}},pt={key:0},ht={style:{"font-family":"monospace"}},kt={style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"11px"}},xt={style:{"font-family":"monospace"}},St={style:{"font-family":"monospace"}},wt={style:{"font-family":"monospace","font-size":"11px"}},Ct={key:0,style:{color:"#cf1322","margin-left":"8px"}},zt={key:0,style:{"font-family":"monospace","font-size":"11px",color:"var(--text-secondary)","margin-left":"8px"}},Ft={class:"raw-pre",style:{margin:"0"}};function It(we,o,L,e,fe,ee){const C=y("a-button"),V=y("a-space"),h=y("a-statistic"),m=y("a-card"),k=y("a-col"),z=y("a-tag"),D=y("a-row"),S=y("a-descriptions-item"),q=y("a-descriptions"),j=y("a-alert"),O=y("a-tab-pane"),F=y("a-input"),v=y("a-form-item"),R=y("a-form"),J=y("a-table"),re=y("a-collapse-panel"),ne=y("a-collapse"),U=y("a-empty"),G=y("a-list-item"),A=y("a-list"),ie=y("a-timeline-item"),W=y("a-timeline"),K=y("a-select-option"),B=y("a-select"),Q=y("a-input-number"),Y=y("a-checkbox"),H=y("a-tabs");return i(),T("div",null,[x("div",at,[x("div",null,[x("h2",lt,n(e.t("mtc.title")),1),x("p",ot,n(e.t("mtc.subtitle")),1)]),t(V,null,{default:a(()=>[t(C,{loading:e.loading,onClick:e.loadStatus},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[s(" "+n(e.t("mtc.refresh")),1)]),_:1},8,["loading"])]),_:1})]),t(H,{activeKey:e.activeTab,"onUpdate:activeKey":o[17]||(o[17]=r=>e.activeTab=r),class:"mtc-tabs"},{default:a(()=>[c(" ── Tab 1: Audit MTC status ────────────────────────────── "),t(O,{key:"status",tab:e.t("mtc.tabs.status")},{default:a(()=>[t(D,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.enabledLabel"),value:e.status.config.enabled?e.t("mtc.status.enabled"):e.t("mtc.status.disabled"),"value-style":{color:e.status.config.enabled?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[(i(),g(Ae(e.status.config.enabled?e.CheckCircleOutlined:e.InfoCircleOutlined)))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.intervalLabel"),value:e.formatBatchInterval(e.status.config.batch_interval_seconds),"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.stagingLabel"),value:e.status.staging.count,"value-style":{color:e.status.staging.count>0?"#faad14":"#888",fontSize:"20px"}},Ue({prefix:a(()=>[t(e.InboxOutlined)]),_:2},[e.status.staging.malformed>0?{name:"suffix",fn:a(()=>[t(z,{color:"red",style:{"margin-left":"8px"}},{default:a(()=>[s(n(e.t("mtc.status.stagingMalformed",{count:e.status.staging.malformed})),1)]),_:1})]),key:"0"}:void 0]),1032,["title","value","value-style"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.totalBatches"),value:e.status.batches.count,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.DatabaseOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(m,{title:e.t("mtc.status.configCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(q,{column:{xs:1,sm:2},size:"small"},{default:a(()=>[t(S,{label:"namespace"},{default:a(()=>[x("span",rt,n(e.status.config.namespace_prefix||"—"),1)]),_:1}),t(S,{label:"issuer"},{default:a(()=>[x("span",nt,n(e.status.config.issuer||"—"),1)]),_:1}),t(S,{label:"oldest queued"},{default:a(()=>[s(n(e.formatTimestamp(e.status.staging.oldest_queued_at)),1)]),_:1}),t(S,{label:"last batch"},{default:a(()=>[e.status.batches.last_batch_id?(i(),T(he,{key:0},[t(z,{color:"cyan",style:{"font-family":"monospace"}},{default:a(()=>[s("#"+n(e.status.batches.last_batch_id),1)]),_:1}),x("span",it,n(e.t("mtc.status.lastBatchSize",{size:e.status.batches.last_tree_size,time:e.formatRelative(e.status.batches.last_closed_at)})),1)],64)):(i(),T("span",st,n(e.t("mtc.status.noBatches")),1))]),_:1}),t(S,{label:"last tree_head_id",span:2},{default:a(()=>[e.status.batches.last_tree_head_id?(i(),T("span",dt,n(e.status.batches.last_tree_head_id),1)):(i(),T("span",ct,"—"))]),_:1})]),_:1})]),_:1},8,["title"]),!e.status.ok&&!e.loading?(i(),g(j,{key:0,type:"info","show-icon":"",message:e.t("mtc.status.loadFailMessage"),description:e.t("mtc.status.loadFailDescription")},null,8,["message","description"])):e.status.config.enabled?c("v-if",!0):(i(),g(j,{key:1,type:"info","show-icon":"",message:e.t("mtc.status.notEnabledMessage"),description:e.t("mtc.status.notEnabledDescription")},null,8,["message","description"]))]),_:1},8,["tab"]),c(" ── Tab 2: Marketplace publisher history ───────────────── "),t(O,{key:"publisher",tab:e.t("mtc.tabs.publisher")},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.loadPublishState,["prevent"])},{default:a(()=>[t(v,{label:e.t("mtc.publisher.stateFileLabel")},{default:a(()=>[t(F,{value:e.publishStateFile,"onUpdate:value":o[0]||(o[0]=r=>e.publishStateFile=r),placeholder:e.t("mtc.publisher.stateFilePlaceholder"),style:{"min-width":"360px"},"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"]),t(v,null,{default:a(()=>[t(C,{loading:e.publishLoading,type:"primary","html-type":"submit"},{default:a(()=>[s(n(e.t("mtc.publisher.queryButton")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),e.publish.ok&&!e.publish.exists?(i(),g(j,{key:0,type:"info","show-icon":"",message:e.t("mtc.publisher.missingMessage"),description:e.t("mtc.publisher.missingDescription",{path:e.publish.stateFile}),style:{"margin-bottom":"16px"}},null,8,["message","description"])):c("v-if",!0),e.publish.exists?(i(),g(D,{key:1,gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:12,lg:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.publisher.lastSeq"),value:e.publish.lastSeq,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.NumberOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.publisher.historyEntries"),value:e.publish.historyCount,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.HistoryOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.publisher.lastPublished"),value:e.formatRelative(e.publish.lastPublishedAt),"value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:a(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1})):c("v-if",!0),e.publish.exists&&e.publish.history.length>0?(i(),g(J,{key:2,"data-source":e.publish.history,columns:e.historyColumns,pagination:{pageSize:10},size:"small","row-key":"key"},{bodyCell:a(({column:r,record:N})=>[r.key==="seq"?(i(),g(z,{key:0,color:"cyan",style:{"font-family":"monospace"}},{default:a(()=>[s("#"+n(N.seq),1)]),_:2},1024)):r.key==="treeHeadId"?(i(),T("span",ut,n(e.truncate(N.treeHeadId,22)),1)):r.key==="publishedAt"?(i(),T("span",{key:2,title:N.publishedAt},n(e.formatRelative(N.publishedAt)),9,ft)):c("v-if",!0)]),_:1},8,["data-source","columns"])):c("v-if",!0)]),_:1},8,["tab"]),c(" ── Tab 3: Verify tool ─────────────────────────────────── "),t(O,{key:"verify",tab:e.t("mtc.tabs.verify")},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(j,{type:"info","show-icon":"",message:e.t("mtc.verify.infoMessage"),description:e.t("mtc.verify.infoDescription"),style:{"margin-bottom":"16px"}},null,8,["message","description"]),t(R,{layout:"vertical",onSubmit:Z(e.runVerify,["prevent"])},{default:a(()=>[t(v,{label:e.t("mtc.verify.envelopeLabel")},{default:a(()=>[t(F,{value:e.verifyEnvelopePath,"onUpdate:value":o[1]||(o[1]=r=>e.verifyEnvelopePath=r),placeholder:e.t("mtc.verify.envelopePlaceholder"),"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"]),t(v,{label:e.t("mtc.verify.landmarkLabel")},{default:a(()=>[t(F,{value:e.verifyLandmarkPath,"onUpdate:value":o[2]||(o[2]=r=>e.verifyLandmarkPath=r),placeholder:e.t("mtc.verify.landmarkPlaceholder"),"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"]),t(v,null,{default:a(()=>[t(C,{loading:e.verifyLoading,type:"primary",disabled:!e.verifyEnvelopePath||!e.verifyLandmarkPath,onClick:e.runVerify},{icon:a(()=>[t(e.SafetyOutlined)]),default:a(()=>[s(" "+n(e.t("mtc.verify.runButton")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1}),e.verifyResult?(i(),g(m,{key:0,title:e.verifyResult.ok?e.t("mtc.verify.passTitle"):e.t("mtc.verify.failTitle"),size:"small",style:Be({background:"var(--bg-card)",borderColor:e.verifyResult.ok?"#52c41a":"#ff4d4f"})},{default:a(()=>[t(q,{column:1,size:"small",bordered:""},{default:a(()=>[t(S,{label:e.t("mtc.verify.resultLabel")},{default:a(()=>[t(z,{color:e.verifyResult.ok?"green":"red"},{default:a(()=>[s(n(e.verifyResult.ok?"PASS":"FAIL"),1)]),_:1},8,["color"])]),_:1},8,["label"]),e.verifyResult.ok?c("v-if",!0):(i(),g(S,{key:0,label:e.t("mtc.verify.errorCodeLabel")},{default:a(()=>[x("span",vt,n(e.verifyResult.code||e.t("mtc.verify.errorCodeNone")),1),e.verifyResult.recoverable?(i(),g(z,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:a(()=>[s(n(e.t("mtc.verify.recoverable")),1)]),_:1})):c("v-if",!0)]),_:1},8,["label"])),e.verifyResult.leaf?(i(),g(S,{key:1,label:e.t("mtc.verify.subjectLabel")},{default:a(()=>[x("span",mt,n(e.verifyResult.leaf.subject||"—"),1)]),_:1},8,["label"])):c("v-if",!0),e.verifyResult.leaf?(i(),g(S,{key:2,label:e.t("mtc.verify.kindLabel")},{default:a(()=>[t(z,null,{default:a(()=>[s(n(e.verifyResult.leaf.kind||"—"),1)]),_:1})]),_:1},8,["label"])):c("v-if",!0),e.verifyResult.treeHead?(i(),g(S,{key:3,label:e.t("mtc.verify.treeSizeLabel")},{default:a(()=>[s(n(e.verifyResult.treeHead.tree_size),1)]),_:1},8,["label"])):c("v-if",!0),e.verifyResult.treeHead?(i(),g(S,{key:4,label:e.t("mtc.verify.issuerLabel")},{default:a(()=>[x("span",gt,n(e.verifyResult.treeHead.issuer||"—"),1)]),_:1},8,["label"])):c("v-if",!0)]),_:1}),e.verifyResult.raw?(i(),g(ne,{key:0,ghost:"",style:{"margin-top":"12px"}},{default:a(()=>[t(re,{key:"raw",header:e.t("mtc.verify.rawHeader")},{default:a(()=>[x("pre",bt,n(JSON.stringify(e.verifyResult.raw,null,2)),1)]),_:1},8,["header"])]),_:1})):c("v-if",!0)]),_:1},8,["title","style"])):c("v-if",!0)]),_:1},8,["tab"]),c(" ── Tab 4: Cross-chain bridge MTC (v0.6) ────────── "),t(O,{key:"bridge",tab:"跨链桥 MTC"},{default:a(()=>[t(D,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"桥 MTC 集成",value:e.bridgeStatus.config.enabled?"已启用":"未启用","value-style":{color:e.bridgeStatus.config.enabled?"#52c41a":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"互信模式",value:e.bridgeModeLabel,"value-style":{color:"#1677ff",fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"待批次关闭",value:e.bridgeStatus.staging.pending,"value-style":{color:e.bridgeStatus.staging.pending>0?"#faad14":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1})]),_:1})]),_:1}),t(m,{title:"配置",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(q,{column:{xs:1,sm:2},size:"small",bordered:""},{default:a(()=>[t(S,{label:"算法"},{default:a(()=>[t(z,{color:e.bridgeStatus.config.alg==="slh-dsa-128f"?"purple":"blue"},{default:a(()=>[s(n(e.bridgeStatus.config.alg||"—"),1)]),_:1},8,["color"])]),_:1}),t(S,{label:"batch interval"},{default:a(()=>[s(n(e.formatBatchInterval(e.bridgeStatus.config.batch_interval_seconds)),1)]),_:1}),t(S,{label:"issuer"},{default:a(()=>[x("span",yt,n(e.bridgeStatus.config.issuer||"—"),1)]),_:1}),t(S,{label:"batches 总数"},{default:a(()=>[s(n(e.bridgeStatus.batches.total)+" ",1),e.bridgeStatus.batches.latest?(i(),T("span",_t," latest: "+n(e.bridgeStatus.batches.latest),1)):c("v-if",!0)]),_:1})]),_:1})]),_:1}),t(m,{title:"信任锚 (Independent 模式)",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[e.bridgeStatus.trust_anchors.total===0?(i(),g(U,{key:0,description:"未配置信任锚"})):(i(),g(J,{key:1,"data-source":e.bridgeAnchorsTable,columns:e.bridgeAnchorColumns,pagination:!1,size:"small","row-key":"key"},null,8,["data-source"])),o[18]||(o[18]=x("p",{style:{"margin-top":"8px","font-size":"12px",color:"var(--text-tertiary)"}},[s(" 添加:"),x("code",null,"cc crosschain mtc-trust-anchor add <chain> <pubkey-id> --alg --issuer")],-1))]),_:1}),c(" v0.2: SLA / monitoring metrics from cc crosschain mtc-sla "),t(m,{title:"SLA / Monitoring (v0.2)",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(D,{gutter:[12,12]},{default:a(()=>[t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"SLA Status",value:e.bridgeSla.sla_status||"—","value-style":{color:e.slaStatusColor(e.bridgeSla.sla_status),fontSize:"18px"}},null,8,["value","value-style"])]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"Staged pending",value:e.bridgeSla.staged_pending_count??0,"value-style":{fontSize:"18px"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"Batches / hour",value:e.bridgeSla.batches_last_hour??0,"value-style":{fontSize:"18px"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"Last batch",value:e.bridgeSla.seconds_since_last_batch!==null&&e.bridgeSla.seconds_since_last_batch!==void 0?`${e.bridgeSla.seconds_since_last_batch}s ago`:"—","value-style":{fontSize:"14px"}},null,8,["value"])]),_:1})]),_:1}),o[19]||(o[19]=x("p",{style:{"margin-top":"8px","font-size":"12px",color:"var(--text-tertiary)"}},[s(" 通过 "),x("code",null,"cc crosschain mtc-sla --json"),s(" 实时刷新(30s 自动 poll)。可纳入外部 Prometheus / Grafana。 ")],-1))]),_:1}),t(j,{type:"info","show-icon":"",message:"桥 MTC 仍 opt-in",description:"启用后 cc crosschain bridge|swap|send 加 --mtc 才会写 envelope;定期 cc crosschain mtc-batch 关 staging 为批次。完整指南见 docs.chainlesschain.com/guide/mtc-merkle-tree-certs。"})]),_:1}),c(" ── Tab 5: Federation governance (v0.7+v0.8) ───── "),t(O,{key:"governance",tab:"联邦治理"},{default:a(()=>[t(R,{layout:"inline",style:{"margin-bottom":"16px"}},{default:a(()=>[t(v,{label:"联邦 ID"},{default:a(()=>[t(F,{value:e.govFederationId,"onUpdate:value":o[3]||(o[3]=r=>e.govFederationId=r),placeholder:"e.g. fed-test",style:{width:"240px"},"allow-clear":""},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.govLoading,onClick:e.loadGovernanceLog},{default:a(()=>[...o[20]||(o[20]=[s(" 加载 governance.log ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),e.govResult?(i(),T("div",pt,[t(D,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"状态",value:e.govResult.state.status||"—","value-style":{fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"Threshold",value:e.govResult.state.threshold||1,"value-style":{fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"事件总数",value:(e.govResult.events||[]).length,"value-style":{fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1})]),_:1}),t(m,{title:"成员",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(J,{"data-source":e.govResult.state.members||[],columns:e.memberColumns,pagination:!1,size:"small","row-key":"member_id"},null,8,["data-source"])]),_:1}),(e.govResult.state.pending_invites||[]).length?(i(),g(m,{key:0,title:"待投票邀请",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(A,{"data-source":e.govResult.state.pending_invites,size:"small"},{renderItem:a(({item:r})=>[t(G,null,{default:a(()=>[x("span",ht,n(r.member_id),1),t(z,{color:"blue"},{default:a(()=>[s("approve "+n(r.votes.approve.length)+"/"+n(r.required),1)]),_:2},1024),r.votes.reject.length?(i(),g(z,{key:0,color:"red"},{default:a(()=>[s("reject "+n(r.votes.reject.length),1)]),_:2},1024)):c("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):c("v-if",!0),t(m,{title:"事件时间线",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(W,null,{default:a(()=>[(i(!0),T(he,null,He(e.govResult.events||[],r=>(i(),g(ie,{key:r.event_id},{default:a(()=>[x("span",kt,n(r.issued_at),1),t(z,{color:e.eventTypeColor(r.event_type),style:{"margin-left":"8px"}},{default:a(()=>[s(n(r.event_type),1)]),_:2},1032,["color"]),o[21]||(o[21]=s(" actor: ",-1)),x("span",xt,n(r.actor_member_id),1)]),_:2},1024))),128))]),_:1})]),_:1}),c(" ── v0.10: Pending threshold proposals (multi-proposal CRDT) ─── "),e.pendingThresholdsList.length>0?(i(),g(m,{key:1,title:"待批 threshold proposals",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[e.pendingThresholdsList.length>1?(i(),g(j,{key:0,type:"warning","show-icon":"",message:"多 proposal 并发",description:"同一联邦同时存在多个待批 threshold proposal。下方每行可独立确认(CRDT-style 选择);不指定时 CLI 默认确认最新一条。",style:{"margin-bottom":"12px"}})):c("v-if",!0),t(A,{"data-source":e.pendingThresholdsList,size:"small"},{renderItem:a(({item:r})=>[t(G,null,{actions:a(()=>[t(C,{size:"small",type:"primary",loading:e.actionLoading,onClick:N=>e.runConfirmThresholdById(r.event_id)},{default:a(()=>[...o[24]||(o[24]=[s(" 确认这个 ",-1)])]),_:1},8,["loading","onClick"])]),default:a(()=>[t(V,{wrap:""},{default:a(()=>[t(z,{color:"orange"},{default:a(()=>[s("target M = "+n(r.target),1)]),_:2},1024),o[22]||(o[22]=x("span",{style:{"font-size":"11px",color:"var(--text-secondary)"}},"by",-1)),x("span",St,n(r.proposer||"—"),1),o[23]||(o[23]=x("span",{style:{"font-size":"11px",color:"var(--text-secondary)"}},"at",-1)),x("span",wt,n(e.formatTimestamp(r.proposed_at)),1),t(z,{color:"cyan",style:{"font-family":"monospace"}},{default:a(()=>[s(n(e.truncateEventId(r.event_id)),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):c("v-if",!0),c(" ── v0.10: Live sync stats (governance-sync daemon counters) ─── "),e.govSyncStats?(i(),g(m,{key:2,title:"实时同步状态",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(D,{gutter:[12,12]},{default:a(()=>[t(k,{xs:24,sm:8},{default:a(()=>[t(h,{title:"模式",value:e.govSyncStats.mode||"—","value-style":{fontSize:"16px",color:"#1677ff"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(h,{title:"最近 tick",value:e.formatRelative(e.govSyncStats.last_tick_at)||"—","value-style":{fontSize:"16px"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(h,{title:"下次轮询",value:e.govSyncRefreshHint,"value-style":{fontSize:"14px",color:"var(--text-secondary)"}},null,8,["value"])]),_:1})]),_:1}),e.govSyncStats.publish||e.govSyncStats.pull||e.govSyncStats.libp2p?(i(),g(q,{key:0,column:{xs:1,sm:2},size:"small",style:{"margin-top":"12px"}},{default:a(()=>[e.govSyncStats.publish?(i(),g(S,{key:0,label:"Publish"},{default:a(()=>[s(" last "+n(e.govSyncStats.publish.last_published||0)+" / total "+n(e.govSyncStats.publish.total_published||0),1)]),_:1})):c("v-if",!0),e.govSyncStats.pull?(i(),g(S,{key:1,label:"Pull"},{default:a(()=>[s(" last "+n(e.govSyncStats.pull.last_appended||0)+" / total "+n(e.govSyncStats.pull.total_appended||0)+" ",1),e.govSyncStats.pull.last_invalid||e.govSyncStats.pull.last_unknown?(i(),T("span",Ct," · invalid "+n(e.govSyncStats.pull.last_invalid||0)+" / unknown "+n(e.govSyncStats.pull.last_unknown||0),1)):c("v-if",!0)]),_:1})):c("v-if",!0),e.govSyncStats.libp2p?(i(),g(S,{key:2,label:"libp2p wire",span:2},{default:a(()=>[s(" recv "+n(e.govSyncStats.libp2p.wire_received||0)+" · appended "+n(e.govSyncStats.libp2p.wire_appended||0)+" ",1),e.govSyncStats.libp2p.topic?(i(),T("span",zt," ("+n(e.govSyncStats.libp2p.topic)+") ",1)):c("v-if",!0)]),_:1})):c("v-if",!0)]),_:1})):(i(),g(U,{key:1,description:"daemon 还没写过 tick — 启动 governance-sync-serve 或 governance-sync-libp2p 后再加载"}))]),_:1})):c("v-if",!0),c(" ── Operational governance actions (v0.9) ─────── "),t(m,{title:"操作型治理 (签名密钥仍 CLI-only)",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(j,{type:"warning","show-icon":"",message:"安全设计",description:"所有操作通过本机 CLI 子进程执行。私钥永远不进入 web 渲染进程 — 这里只是给 cc mtc federation * 命令拼参数。",style:{"margin-bottom":"12px"}}),t(H,{size:"small"},{default:a(()=>[t(O,{key:"invite",tab:"邀请"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runInvite,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.inviteForm.actor,"onUpdate:value":o[4]||(o[4]=r=>e.inviteForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"candidate"},{default:a(()=>[t(F,{value:e.inviteForm.candidate,"onUpdate:value":o[5]||(o[5]=r=>e.inviteForm.candidate=r),placeholder:"bob",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"pubkey-id"},{default:a(()=>[t(F,{value:e.inviteForm.pubkeyId,"onUpdate:value":o[6]||(o[6]=r=>e.inviteForm.pubkeyId=r),placeholder:"sha256:...",style:{width:"200px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runInvite},{default:a(()=>[...o[25]||(o[25]=[s("invite",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"vote",tab:"投票"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runVote,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.voteForm.actor,"onUpdate:value":o[7]||(o[7]=r=>e.voteForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"candidate"},{default:a(()=>[t(F,{value:e.voteForm.candidate,"onUpdate:value":o[8]||(o[8]=r=>e.voteForm.candidate=r),placeholder:"bob",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"decision"},{default:a(()=>[t(B,{value:e.voteForm.decision,"onUpdate:value":o[9]||(o[9]=r=>e.voteForm.decision=r),style:{width:"110px"}},{default:a(()=>[t(K,{value:"approve"},{default:a(()=>[...o[26]||(o[26]=[s("approve",-1)])]),_:1}),t(K,{value:"reject"},{default:a(()=>[...o[27]||(o[27]=[s("reject",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runVote},{default:a(()=>[...o[28]||(o[28]=[s("vote",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"threshold",tab:"改 threshold"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runProposeThreshold,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.thresholdForm.actor,"onUpdate:value":o[10]||(o[10]=r=>e.thresholdForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"新 M"},{default:a(()=>[t(Q,{value:e.thresholdForm.newM,"onUpdate:value":o[11]||(o[11]=r=>e.thresholdForm.newM=r),min:1,style:{width:"90px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runProposeThreshold},{default:a(()=>[...o[29]||(o[29]=[s("propose",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runConfirmThreshold},{default:a(()=>[...o[30]||(o[30]=[s("confirm",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"revoke",tab:"撤销"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runProposeRevoke,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.revokeForm.actor,"onUpdate:value":o[12]||(o[12]=r=>e.revokeForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"target"},{default:a(()=>[t(F,{value:e.revokeForm.target,"onUpdate:value":o[13]||(o[13]=r=>e.revokeForm.target=r),placeholder:"bob",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"reason"},{default:a(()=>[t(F,{value:e.revokeForm.reason,"onUpdate:value":o[14]||(o[14]=r=>e.revokeForm.reason=r),placeholder:"inactive",style:{width:"160px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runProposeRevoke},{default:a(()=>[...o[31]||(o[31]=[s("propose-revoke",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runConfirmRevoke},{default:a(()=>[...o[32]||(o[32]=[s("confirm-revoke",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"sync",tab:"跨成员同步"},{default:a(()=>[t(R,{layout:"inline"},{default:a(()=>[t(v,{label:"drop-zone"},{default:a(()=>[t(F,{value:e.syncForm.dropZone,"onUpdate:value":o[15]||(o[15]=r=>e.syncForm.dropZone=r),placeholder:"/path/to/shared/dir",style:{width:"220px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(Y,{checked:e.syncForm.verify,"onUpdate:checked":o[16]||(o[16]=r=>e.syncForm.verify=r)},{default:a(()=>[...o[33]||(o[33]=[s("--verify",-1)])]),_:1},8,["checked"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runGovPublish},{default:a(()=>[...o[34]||(o[34]=[s("publish",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runGovPull},{default:a(()=>[...o[35]||(o[35]=[s("pull",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runGovSyncOnce},{default:a(()=>[...o[36]||(o[36]=[s("sync-once",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1}),e.lastActionResult?(i(),g(m,{key:0,size:"small",style:{"margin-top":"12px",background:"var(--bg-hover)"}},{default:a(()=>[x("pre",Ft,n(JSON.stringify(e.lastActionResult,null,2)),1)]),_:1})):c("v-if",!0)]),_:1})])):(i(),g(U,{key:1,description:"输入联邦 ID 加载 governance.log"})),t(j,{style:{"margin-top":"16px"},type:"info","show-icon":"",message:"跨成员同步",description:"cc mtc federation governance-publish/pull --drop-zone 文件系统通道;governance-sync-libp2p --listen 走 libp2p gossipsub 通道;governance-sync-serve 自动 daemon 化。事件签名 + dedupe by event_id 保证幂等。"})]),_:1})]),_:1},8,["activeKey"])])}const Dt=Ne(tt,[["render",It],["__scopeId","data-v-c2eadccb"],["__file","/tmp/cc-web-panel-DaKYjg/repo/packages/web-panel/src/views/Mtc.vue"]]);export{Dt as default};
1
+ import{I as y,J as P,U as x,R as n,c as t,K as a,r as _,o as _e,x as pe,b as $,P as i,Q as s,V as c,S as g,a0 as Ae,a5 as Be,F as he,a2 as Z,$ as Ue,Z as He}from"./vendor-Bn1JzzAn.js";import{_ as Ne,b as ke,u as xe,d as p}from"./index-C3lcOYkZ.js";import{u as le}from"./useShellMode-CgR0wCYM.js";import{a as oe,b as ue,f as Ve,c as qe,d as Ge,p as Se}from"./mtc-parser-DMpcDDsk.js";import{s as Ze,ar as Je,N as We,D as Ke,b6 as Qe,e as Xe,f as Ye,a1 as $e,R as et}from"./icons-DG5UD-6K.js";const tt={__name:"Mtc",setup(we,{expose:o}){o();const{t:L}=ke(),e=xe(),fe=_("status"),ee=_(!1),C=_(oe("")),V=_(""),h=_(!1),m=_(ue("")),k=_(""),z=_(""),D=_(!1),S=_(null),q=$(()=>[{title:L("mtc.historyColumns.seq"),key:"seq",dataIndex:"seq",width:"90px"},{title:L("mtc.historyColumns.namespace"),key:"namespace",dataIndex:"namespace"},{title:L("mtc.historyColumns.treeSize"),key:"treeSize",dataIndex:"treeSize",width:"100px"},{title:L("mtc.historyColumns.treeHeadId"),key:"treeHeadId",dataIndex:"treeHeadId",width:"180px"},{title:L("mtc.historyColumns.publishedAt"),key:"publishedAt",dataIndex:"publishedAt",width:"140px"}]);function E(l,u){return l?l.length<=u?l:l.slice(0,u)+"…":""}async function O(){ee.value=!0;try{if(le().isEmbedded){const l=await e.sendRaw({type:"mtc.audit-status"},3e4),u=l?.result;if(!l?.ok||!u?.success)throw new Error(u?.error||l?.error||"mtc.audit-status failed");C.value=oe(u.status)}else{const{output:l}=await e.execute("audit mtc status --json",3e4);C.value=oe(l)}}catch(l){p.error(L("mtc.messages.loadStatusFailed",{err:l?.message||l}))}finally{ee.value=!1}}async function F(){if(!V.value.trim()){p.warning(L("mtc.messages.stateFileRequired"));return}h.value=!0;try{const l=V.value.trim().replace(/"/g,'\\"'),{output:u}=await e.execute(`mtc publish-status "${l}" --json`,8e3);m.value=ue(u)}catch(l){p.error(L("mtc.messages.loadPublishFailed",{err:l?.message||l}))}finally{h.value=!1}}async function v(){if(!k.value.trim()||!z.value.trim()){p.warning(L("mtc.messages.verifyPathsRequired"));return}D.value=!0,S.value=null;try{const l=k.value.trim().replace(/"/g,'\\"'),u=z.value.trim().replace(/"/g,'\\"'),{output:d}=await e.execute(`mtc verify "${l}" --landmark "${u}" --json`,12e3);S.value=Se(d),S.value.raw||p.error(L("mtc.messages.verifyNoJson"))}catch(l){p.error(L("mtc.messages.verifyFailed",{err:l?.message||l}))}finally{D.value=!1}}const R=_({config:{enabled:!1,mode:"independent",alg:"ed25519",batch_interval_seconds:60,issuer:""},trust_anchors:{chain_count:0,total:0,by_chain:{}},staging:{pending:0},batches:{total:0,latest:null}}),J=$(()=>{switch(R.value.config.mode){case"federated":return"Federated";case"light-client":return"Light Client";default:return"Independent"}}),re=[{title:"chain",key:"chain",dataIndex:"chain",width:"120px"},{title:"锚数",key:"count",dataIndex:"count",width:"80px"}],ne=$(()=>{const l=R.value.trust_anchors.by_chain||{};return Object.entries(l).map(([u,d])=>({key:u,chain:u,count:d}))});function B(l){return{config:{enabled:!1,mode:"independent",alg:"ed25519",batch_interval_seconds:60,issuer:"",...l?.config||{}},trust_anchors:{chain_count:0,total:0,by_chain:{},...l?.trust_anchors||{}},staging:{pending:0,...l?.staging||{}},batches:{total:0,latest:null,...l?.batches||{}}}}const G=_({});let A=null;function ie(l){return l==="ok"?"#52c41a":l==="degraded"?"#faad14":l==="down"?"#ff4d4f":"#888"}async function W(){try{if(le().isEmbedded){const d=await e.sendRaw({type:"mtc.bridge-sla"},3e4),b=d?.result;d?.ok&&b?.success&&b.metrics&&typeof b.metrics.sla_status=="string"&&(G.value=b.metrics);return}const{output:l}=await e.execute("crosschain mtc-sla --json",3e4),u=l.split(/\r?\n/);for(let d=0;d<u.length;d++)if(u[d].trimStart().startsWith("{"))for(let b=u.length;b>d;b--)try{const f=JSON.parse(u.slice(d,b).join(`
2
+ `));if(f&&typeof f.sla_status=="string"){G.value=f;return}}catch{}}catch{}}async function K(){try{if(le().isEmbedded){const d=await e.sendRaw({type:"mtc.bridge-status"},3e4),b=d?.result;if(!d?.ok||!b?.success||!b.status)throw new Error(b?.error||d?.error||"mtc.bridge-status failed");const f=b.status;R.value=B({config:{enabled:f.enabled,mode:f.mode,alg:f.alg,batch_interval_seconds:f.batch_interval_seconds,issuer:f.issuer},trust_anchors:f.trust_anchors,staging:f.staging,batches:f.batches});return}const{output:l}=await e.execute("crosschain mtc-status --json",3e4),u=l.split(/\r?\n/);for(let d=0;d<u.length;d++)if(u[d].trimStart().startsWith("{"))for(let b=u.length;b>d;b--)try{const f=JSON.parse(u.slice(d,b).join(`
3
+ `));if(f&&f.config){R.value=B(f);return}}catch{}}catch(l){p.error("加载桥 MTC 状态失败: "+(l?.message||l))}}const U=_(""),Q=_(!1),X=_(null),H=_(null),r=_("随 governance-log 加载刷新"),N=$(()=>{const l=X.value?.state;return l?Array.isArray(l.pending_thresholds)&&l.pending_thresholds.length>0?l.pending_thresholds:l.pending_threshold&&Number.isInteger(l.pending_threshold.target)?[l.pending_threshold]:[]:[]}),Ce=[{title:"member_id",key:"member_id",dataIndex:"member_id"},{title:"status",key:"status",dataIndex:"status",width:"110px"},{title:"weight",key:"weight",dataIndex:"weight",width:"80px"},{title:"alg",key:"alg",dataIndex:"alg",width:"120px"}];function ze(l){switch(l){case"create":return"cyan";case"invite":case"vote":return"blue";case"leave":case"rotate-key":return"default";case"propose-revoke":case"propose-threshold":return"orange";case"confirm-revoke":case"confirm-threshold":return"gold";case"fork":case"merge":return"purple";case"dispute":case"wind-down":return"red";default:return"default"}}const se=_(!1),te=_(null),ve=_({actor:"",candidate:"",pubkeyId:""}),me=_({actor:"",candidate:"",decision:"approve"}),ae=_({actor:"",newM:2}),de=_({actor:"",target:"",reason:"inactive"}),j=_({dropZone:"",verify:!1});function w(l){return String(l||"").replace(/"/g,"").replace(/[`$]/g,"")}async function M(l,u=!0){if(!U.value.trim()){p.warning("请先输入联邦 ID");return}se.value=!0,te.value=null;try{const d=w(U.value.trim()),b=`mtc federation ${l.replace("<FED>",`"${d}"`)} --json`,{output:f}=await e.execute(b,12e3),T=f.split(/\r?\n/);let I=null;for(let Y=0;Y<T.length;Y++)if(T[Y].trimStart().startsWith("{")){for(let ce=T.length;ce>Y;ce--)try{I=JSON.parse(T.slice(Y,ce).join(`
4
+ `));break}catch{}if(I)break}te.value=I||{raw:f},p.success("命令执行完成"),u&&await ge()}catch(d){p.error("CLI 执行失败: "+(d?.message||d)),te.value={error:d?.message||String(d)}}finally{se.value=!1}}function Fe(){const l=ve.value;if(!l.actor||!l.candidate||!l.pubkeyId){p.warning("actor / candidate / pubkey-id 都必填");return}return M(`invite <FED> "${w(l.candidate)}" --actor "${w(l.actor)}" --candidate-pubkey-id "${w(l.pubkeyId)}"`)}function Ie(){const l=me.value;if(!l.actor||!l.candidate){p.warning("actor / candidate 必填");return}return M(`vote <FED> "${w(l.candidate)}" --actor "${w(l.actor)}" --decision ${l.decision}`)}function Re(){const l=ae.value;if(!l.actor){p.warning("actor 必填");return}return M(`propose-threshold <FED> ${parseInt(l.newM)} --actor "${w(l.actor)}"`)}function Le(){const l=ae.value;if(!l.actor){p.warning("actor 必填");return}return M(`confirm-threshold <FED> --actor "${w(l.actor)}"`)}function Oe(l){const u=(ae.value.actor||"").trim();if(!u){p.warning('请先在"改 threshold"子 tab 填 actor');return}if(!l){p.warning("proposal event_id 缺失");return}return M(`confirm-threshold <FED> --actor "${w(u)}" --proposal-event-id "${w(l)}"`)}function Te(l){return l?l.length<=16?l:`${l.slice(0,8)}…${l.slice(-4)}`:"—"}function Pe(){const l=de.value;if(!l.actor||!l.target){p.warning("actor / target 必填");return}return M(`propose-revoke <FED> "${w(l.target)}" --actor "${w(l.actor)}" --reason "${w(l.reason)}"`)}function Me(){const l=de.value;if(!l.actor||!l.target){p.warning("actor / target 必填");return}return M(`confirm-revoke <FED> "${w(l.target)}" --actor "${w(l.actor)}"`)}function De(){if(!j.value.dropZone){p.warning("drop-zone 必填");return}return M(`governance-publish <FED> --drop-zone "${w(j.value.dropZone)}"`,!1)}function Ee(){if(!j.value.dropZone){p.warning("drop-zone 必填");return}const l=j.value.verify?" --verify":"";return M(`governance-pull <FED> --drop-zone "${w(j.value.dropZone)}"${l}`)}function je(){if(!j.value.dropZone){p.warning("drop-zone 必填");return}const l=j.value.verify?" --verify":"";return M(`governance-sync-serve <FED> --drop-zone "${w(j.value.dropZone)}" --once${l}`)}async function ge(){if(!U.value.trim()){p.warning("请输入联邦 ID");return}Q.value=!0;try{const l=U.value.trim().replace(/"/g,""),{output:u}=await e.execute(`mtc federation governance-log "${l}" --json`,8e3),d=u.split(/\r?\n/);let b=!1;for(let f=0;f<d.length;f++)if(d[f].trimStart().startsWith("{")){for(let T=d.length;T>f;T--)try{const I=JSON.parse(d.slice(f,T).join(`
5
+ `));if(I&&I.state){X.value=I,b=!0;break}}catch{}if(b)break}if(!b){p.error("未能解析 governance-log 输出");return}await be(l)}catch(l){p.error("加载 governance.log 失败: "+(l?.message||l))}finally{Q.value=!1}}async function be(l){if(H.value=null,r.value="随 governance-log 加载刷新",!!l)try{const u=String(l).replace(/"/g,""),{output:d}=await e.execute(`mtc federation governance-sync-stats "${u}" --json`,8e3),b=d.split(/\r?\n/);for(let f=0;f<b.length;f++)if(b[f].trimStart().startsWith("{"))for(let T=b.length;T>f;T--)try{const I=JSON.parse(b.slice(f,T).join(`
6
+ `));if(I&&(I.available!==void 0||I.mode!==void 0)){H.value=I.available===!1?null:I;return}}catch{}}catch{H.value=null}}_e(()=>{O(),K(),W(),A=setInterval(W,3e4)}),pe(()=>{A&&clearInterval(A)});const ye={t:L,ws:e,activeTab:fe,loading:ee,status:C,publishStateFile:V,publishLoading:h,publish:m,verifyEnvelopePath:k,verifyLandmarkPath:z,verifyLoading:D,verifyResult:S,historyColumns:q,truncate:E,loadStatus:O,loadPublishState:F,runVerify:v,bridgeStatus:R,bridgeModeLabel:J,bridgeAnchorColumns:re,bridgeAnchorsTable:ne,mergeBridgeStatus:B,bridgeSla:G,get slaPollHandle(){return A},set slaPollHandle(l){A=l},slaStatusColor:ie,loadBridgeSla:W,loadBridgeStatus:K,govFederationId:U,govLoading:Q,govResult:X,govSyncStats:H,govSyncRefreshHint:r,pendingThresholdsList:N,memberColumns:Ce,eventTypeColor:ze,actionLoading:se,lastActionResult:te,inviteForm:ve,voteForm:me,thresholdForm:ae,revokeForm:de,syncForm:j,shellSafe:w,runGovAction:M,runInvite:Fe,runVote:Ie,runProposeThreshold:Re,runConfirmThreshold:Le,runConfirmThresholdById:Oe,truncateEventId:Te,runProposeRevoke:Pe,runConfirmRevoke:Me,runGovPublish:De,runGovPull:Ee,runGovSyncOnce:je,loadGovernanceLog:ge,loadGovSyncStats:be,ref:_,computed:$,onMounted:_e,get useI18n(){return ke},get ReloadOutlined(){return et},get ClockCircleOutlined(){return $e},get CheckCircleOutlined(){return Ye},get InfoCircleOutlined(){return Xe},get InboxOutlined(){return Qe},get DatabaseOutlined(){return Ke},get NumberOutlined(){return We},get HistoryOutlined(){return Je},get SafetyOutlined(){return Ze},get message(){return p},get useWsStore(){return xe},get useShellMode(){return le},get parseAuditMtcStatus(){return oe},get parsePublishStatus(){return ue},get parseVerifyResult(){return Se},get formatBatchInterval(){return Ge},get formatTimestamp(){return qe},get formatRelative(){return Ve},onUnmounted:pe};return Object.defineProperty(ye,"__isScriptSetup",{enumerable:!1,value:!0}),ye}},at={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},lt={class:"page-title"},ot={class:"page-sub"},rt={style:{"font-family":"monospace"}},nt={style:{"font-family":"monospace"}},it={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},st={key:1,style:{color:"var(--text-muted)"}},dt={key:0,style:{"font-family":"monospace","font-size":"11px","word-break":"break-all"}},ct={key:1,style:{color:"var(--text-muted)"}},ut={key:1,style:{"font-family":"monospace","font-size":"11px"}},ft=["title"],vt={style:{"font-family":"monospace"}},mt={style:{"font-family":"monospace","font-size":"12px"}},gt={style:{"font-family":"monospace","font-size":"12px"}},bt={class:"raw-pre"},yt={style:{"font-family":"monospace"}},_t={key:0,style:{"font-family":"monospace","font-size":"11px",color:"var(--text-tertiary)","margin-left":"8px"}},pt={key:0},ht={style:{"font-family":"monospace"}},kt={style:{"font-family":"monospace",color:"var(--text-secondary)","font-size":"11px"}},xt={style:{"font-family":"monospace"}},St={style:{"font-family":"monospace"}},wt={style:{"font-family":"monospace","font-size":"11px"}},Ct={key:0,style:{color:"#cf1322","margin-left":"8px"}},zt={key:0,style:{"font-family":"monospace","font-size":"11px",color:"var(--text-secondary)","margin-left":"8px"}},Ft={class:"raw-pre",style:{margin:"0"}};function It(we,o,L,e,fe,ee){const C=y("a-button"),V=y("a-space"),h=y("a-statistic"),m=y("a-card"),k=y("a-col"),z=y("a-tag"),D=y("a-row"),S=y("a-descriptions-item"),q=y("a-descriptions"),E=y("a-alert"),O=y("a-tab-pane"),F=y("a-input"),v=y("a-form-item"),R=y("a-form"),J=y("a-table"),re=y("a-collapse-panel"),ne=y("a-collapse"),B=y("a-empty"),G=y("a-list-item"),A=y("a-list"),ie=y("a-timeline-item"),W=y("a-timeline"),K=y("a-select-option"),U=y("a-select"),Q=y("a-input-number"),X=y("a-checkbox"),H=y("a-tabs");return i(),P("div",null,[x("div",at,[x("div",null,[x("h2",lt,n(e.t("mtc.title")),1),x("p",ot,n(e.t("mtc.subtitle")),1)]),t(V,null,{default:a(()=>[t(C,{loading:e.loading,onClick:e.loadStatus},{icon:a(()=>[t(e.ReloadOutlined)]),default:a(()=>[s(" "+n(e.t("mtc.refresh")),1)]),_:1},8,["loading"])]),_:1})]),t(H,{activeKey:e.activeTab,"onUpdate:activeKey":o[17]||(o[17]=r=>e.activeTab=r),class:"mtc-tabs"},{default:a(()=>[c(" ── Tab 1: Audit MTC status ────────────────────────────── "),t(O,{key:"status",tab:e.t("mtc.tabs.status")},{default:a(()=>[t(D,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.enabledLabel"),value:e.status.config.enabled?e.t("mtc.status.enabled"):e.t("mtc.status.disabled"),"value-style":{color:e.status.config.enabled?"#52c41a":"#888",fontSize:"20px"}},{prefix:a(()=>[(i(),g(Ae(e.status.config.enabled?e.CheckCircleOutlined:e.InfoCircleOutlined)))]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.intervalLabel"),value:e.formatBatchInterval(e.status.config.batch_interval_seconds),"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.stagingLabel"),value:e.status.staging.count,"value-style":{color:e.status.staging.count>0?"#faad14":"#888",fontSize:"20px"}},Be({prefix:a(()=>[t(e.InboxOutlined)]),_:2},[e.status.staging.malformed>0?{name:"suffix",fn:a(()=>[t(z,{color:"red",style:{"margin-left":"8px"}},{default:a(()=>[s(n(e.t("mtc.status.stagingMalformed",{count:e.status.staging.malformed})),1)]),_:1})]),key:"0"}:void 0]),1032,["title","value","value-style"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.status.totalBatches"),value:e.status.batches.count,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.DatabaseOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),t(m,{title:e.t("mtc.status.configCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(q,{column:{xs:1,sm:2},size:"small"},{default:a(()=>[t(S,{label:"namespace"},{default:a(()=>[x("span",rt,n(e.status.config.namespace_prefix||"—"),1)]),_:1}),t(S,{label:"issuer"},{default:a(()=>[x("span",nt,n(e.status.config.issuer||"—"),1)]),_:1}),t(S,{label:"oldest queued"},{default:a(()=>[s(n(e.formatTimestamp(e.status.staging.oldest_queued_at)),1)]),_:1}),t(S,{label:"last batch"},{default:a(()=>[e.status.batches.last_batch_id?(i(),P(he,{key:0},[t(z,{color:"cyan",style:{"font-family":"monospace"}},{default:a(()=>[s("#"+n(e.status.batches.last_batch_id),1)]),_:1}),x("span",it,n(e.t("mtc.status.lastBatchSize",{size:e.status.batches.last_tree_size,time:e.formatRelative(e.status.batches.last_closed_at)})),1)],64)):(i(),P("span",st,n(e.t("mtc.status.noBatches")),1))]),_:1}),t(S,{label:"last tree_head_id",span:2},{default:a(()=>[e.status.batches.last_tree_head_id?(i(),P("span",dt,n(e.status.batches.last_tree_head_id),1)):(i(),P("span",ct,"—"))]),_:1})]),_:1})]),_:1},8,["title"]),!e.status.ok&&!e.loading?(i(),g(E,{key:0,type:"info","show-icon":"",message:e.t("mtc.status.loadFailMessage"),description:e.t("mtc.status.loadFailDescription")},null,8,["message","description"])):e.status.config.enabled?c("v-if",!0):(i(),g(E,{key:1,type:"info","show-icon":"",message:e.t("mtc.status.notEnabledMessage"),description:e.t("mtc.status.notEnabledDescription")},null,8,["message","description"]))]),_:1},8,["tab"]),c(" ── Tab 2: Marketplace publisher history ───────────────── "),t(O,{key:"publisher",tab:e.t("mtc.tabs.publisher")},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.loadPublishState,["prevent"])},{default:a(()=>[t(v,{label:e.t("mtc.publisher.stateFileLabel")},{default:a(()=>[t(F,{value:e.publishStateFile,"onUpdate:value":o[0]||(o[0]=r=>e.publishStateFile=r),placeholder:e.t("mtc.publisher.stateFilePlaceholder"),style:{"min-width":"360px"},"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"]),t(v,null,{default:a(()=>[t(C,{loading:e.publishLoading,type:"primary","html-type":"submit"},{default:a(()=>[s(n(e.t("mtc.publisher.queryButton")),1)]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),e.publish.ok&&!e.publish.exists?(i(),g(E,{key:0,type:"info","show-icon":"",message:e.t("mtc.publisher.missingMessage"),description:e.t("mtc.publisher.missingDescription",{path:e.publish.stateFile}),style:{"margin-bottom":"16px"}},null,8,["message","description"])):c("v-if",!0),e.publish.exists?(i(),g(D,{key:1,gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:12,lg:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.publisher.lastSeq"),value:e.publish.lastSeq,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:a(()=>[t(e.NumberOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.publisher.historyEntries"),value:e.publish.historyCount,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:a(()=>[t(e.HistoryOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),t(k,{xs:24,sm:12,lg:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:e.t("mtc.publisher.lastPublished"),value:e.formatRelative(e.publish.lastPublishedAt),"value-style":{color:"#52c41a",fontSize:"16px"}},{prefix:a(()=>[t(e.ClockCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1})):c("v-if",!0),e.publish.exists&&e.publish.history.length>0?(i(),g(J,{key:2,"data-source":e.publish.history,columns:e.historyColumns,pagination:{pageSize:10},size:"small","row-key":"key"},{bodyCell:a(({column:r,record:N})=>[r.key==="seq"?(i(),g(z,{key:0,color:"cyan",style:{"font-family":"monospace"}},{default:a(()=>[s("#"+n(N.seq),1)]),_:2},1024)):r.key==="treeHeadId"?(i(),P("span",ut,n(e.truncate(N.treeHeadId,22)),1)):r.key==="publishedAt"?(i(),P("span",{key:2,title:N.publishedAt},n(e.formatRelative(N.publishedAt)),9,ft)):c("v-if",!0)]),_:1},8,["data-source","columns"])):c("v-if",!0)]),_:1},8,["tab"]),c(" ── Tab 3: Verify tool ─────────────────────────────────── "),t(O,{key:"verify",tab:e.t("mtc.tabs.verify")},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(E,{type:"info","show-icon":"",message:e.t("mtc.verify.infoMessage"),description:e.t("mtc.verify.infoDescription"),style:{"margin-bottom":"16px"}},null,8,["message","description"]),t(R,{layout:"vertical",onSubmit:Z(e.runVerify,["prevent"])},{default:a(()=>[t(v,{label:e.t("mtc.verify.envelopeLabel")},{default:a(()=>[t(F,{value:e.verifyEnvelopePath,"onUpdate:value":o[1]||(o[1]=r=>e.verifyEnvelopePath=r),placeholder:e.t("mtc.verify.envelopePlaceholder"),"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"]),t(v,{label:e.t("mtc.verify.landmarkLabel")},{default:a(()=>[t(F,{value:e.verifyLandmarkPath,"onUpdate:value":o[2]||(o[2]=r=>e.verifyLandmarkPath=r),placeholder:e.t("mtc.verify.landmarkPlaceholder"),"allow-clear":""},null,8,["value","placeholder"])]),_:1},8,["label"]),t(v,null,{default:a(()=>[t(C,{loading:e.verifyLoading,type:"primary",disabled:!e.verifyEnvelopePath||!e.verifyLandmarkPath,onClick:e.runVerify},{icon:a(()=>[t(e.SafetyOutlined)]),default:a(()=>[s(" "+n(e.t("mtc.verify.runButton")),1)]),_:1},8,["loading","disabled"])]),_:1})]),_:1})]),_:1}),e.verifyResult?(i(),g(m,{key:0,title:e.verifyResult.ok?e.t("mtc.verify.passTitle"):e.t("mtc.verify.failTitle"),size:"small",style:Ue({background:"var(--bg-card)",borderColor:e.verifyResult.ok?"#52c41a":"#ff4d4f"})},{default:a(()=>[t(q,{column:1,size:"small",bordered:""},{default:a(()=>[t(S,{label:e.t("mtc.verify.resultLabel")},{default:a(()=>[t(z,{color:e.verifyResult.ok?"green":"red"},{default:a(()=>[s(n(e.verifyResult.ok?"PASS":"FAIL"),1)]),_:1},8,["color"])]),_:1},8,["label"]),e.verifyResult.ok?c("v-if",!0):(i(),g(S,{key:0,label:e.t("mtc.verify.errorCodeLabel")},{default:a(()=>[x("span",vt,n(e.verifyResult.code||e.t("mtc.verify.errorCodeNone")),1),e.verifyResult.recoverable?(i(),g(z,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:a(()=>[s(n(e.t("mtc.verify.recoverable")),1)]),_:1})):c("v-if",!0)]),_:1},8,["label"])),e.verifyResult.leaf?(i(),g(S,{key:1,label:e.t("mtc.verify.subjectLabel")},{default:a(()=>[x("span",mt,n(e.verifyResult.leaf.subject||"—"),1)]),_:1},8,["label"])):c("v-if",!0),e.verifyResult.leaf?(i(),g(S,{key:2,label:e.t("mtc.verify.kindLabel")},{default:a(()=>[t(z,null,{default:a(()=>[s(n(e.verifyResult.leaf.kind||"—"),1)]),_:1})]),_:1},8,["label"])):c("v-if",!0),e.verifyResult.treeHead?(i(),g(S,{key:3,label:e.t("mtc.verify.treeSizeLabel")},{default:a(()=>[s(n(e.verifyResult.treeHead.tree_size),1)]),_:1},8,["label"])):c("v-if",!0),e.verifyResult.treeHead?(i(),g(S,{key:4,label:e.t("mtc.verify.issuerLabel")},{default:a(()=>[x("span",gt,n(e.verifyResult.treeHead.issuer||"—"),1)]),_:1},8,["label"])):c("v-if",!0)]),_:1}),e.verifyResult.raw?(i(),g(ne,{key:0,ghost:"",style:{"margin-top":"12px"}},{default:a(()=>[t(re,{key:"raw",header:e.t("mtc.verify.rawHeader")},{default:a(()=>[x("pre",bt,n(JSON.stringify(e.verifyResult.raw,null,2)),1)]),_:1},8,["header"])]),_:1})):c("v-if",!0)]),_:1},8,["title","style"])):c("v-if",!0)]),_:1},8,["tab"]),c(" ── Tab 4: Cross-chain bridge MTC (v0.6) ────────── "),t(O,{key:"bridge",tab:"跨链桥 MTC"},{default:a(()=>[t(D,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"桥 MTC 集成",value:e.bridgeStatus.config.enabled?"已启用":"未启用","value-style":{color:e.bridgeStatus.config.enabled?"#52c41a":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"互信模式",value:e.bridgeModeLabel,"value-style":{color:"#1677ff",fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"待批次关闭",value:e.bridgeStatus.staging.pending,"value-style":{color:e.bridgeStatus.staging.pending>0?"#faad14":"#888",fontSize:"20px"}},null,8,["value","value-style"])]),_:1})]),_:1})]),_:1}),t(m,{title:"配置",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(q,{column:{xs:1,sm:2},size:"small",bordered:""},{default:a(()=>[t(S,{label:"算法"},{default:a(()=>[t(z,{color:e.bridgeStatus.config.alg==="slh-dsa-128f"?"purple":"blue"},{default:a(()=>[s(n(e.bridgeStatus.config.alg||"—"),1)]),_:1},8,["color"])]),_:1}),t(S,{label:"batch interval"},{default:a(()=>[s(n(e.formatBatchInterval(e.bridgeStatus.config.batch_interval_seconds)),1)]),_:1}),t(S,{label:"issuer"},{default:a(()=>[x("span",yt,n(e.bridgeStatus.config.issuer||"—"),1)]),_:1}),t(S,{label:"batches 总数"},{default:a(()=>[s(n(e.bridgeStatus.batches.total)+" ",1),e.bridgeStatus.batches.latest?(i(),P("span",_t," latest: "+n(e.bridgeStatus.batches.latest),1)):c("v-if",!0)]),_:1})]),_:1})]),_:1}),t(m,{title:"信任锚 (Independent 模式)",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[e.bridgeStatus.trust_anchors.total===0?(i(),g(B,{key:0,description:"未配置信任锚"})):(i(),g(J,{key:1,"data-source":e.bridgeAnchorsTable,columns:e.bridgeAnchorColumns,pagination:!1,size:"small","row-key":"key"},null,8,["data-source"])),o[18]||(o[18]=x("p",{style:{"margin-top":"8px","font-size":"12px",color:"var(--text-tertiary)"}},[s(" 添加:"),x("code",null,"cc crosschain mtc-trust-anchor add <chain> <pubkey-id> --alg --issuer")],-1))]),_:1}),c(" v0.2: SLA / monitoring metrics from cc crosschain mtc-sla "),t(m,{title:"SLA / Monitoring (v0.2)",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(D,{gutter:[12,12]},{default:a(()=>[t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"SLA Status",value:e.bridgeSla.sla_status||"—","value-style":{color:e.slaStatusColor(e.bridgeSla.sla_status),fontSize:"18px"}},null,8,["value","value-style"])]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"Staged pending",value:e.bridgeSla.staged_pending_count??0,"value-style":{fontSize:"18px"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"Batches / hour",value:e.bridgeSla.batches_last_hour??0,"value-style":{fontSize:"18px"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:12,lg:6},{default:a(()=>[t(h,{title:"Last batch",value:e.bridgeSla.seconds_since_last_batch!==null&&e.bridgeSla.seconds_since_last_batch!==void 0?`${e.bridgeSla.seconds_since_last_batch}s ago`:"—","value-style":{fontSize:"14px"}},null,8,["value"])]),_:1})]),_:1}),o[19]||(o[19]=x("p",{style:{"margin-top":"8px","font-size":"12px",color:"var(--text-tertiary)"}},[s(" 通过 "),x("code",null,"cc crosschain mtc-sla --json"),s(" 实时刷新(30s 自动 poll)。可纳入外部 Prometheus / Grafana。 ")],-1))]),_:1}),t(E,{type:"info","show-icon":"",message:"桥 MTC 仍 opt-in",description:"启用后 cc crosschain bridge|swap|send 加 --mtc 才会写 envelope;定期 cc crosschain mtc-batch 关 staging 为批次。完整指南见 docs.chainlesschain.com/guide/mtc-merkle-tree-certs。"})]),_:1}),c(" ── Tab 5: Federation governance (v0.7+v0.8) ───── "),t(O,{key:"governance",tab:"联邦治理"},{default:a(()=>[t(R,{layout:"inline",style:{"margin-bottom":"16px"}},{default:a(()=>[t(v,{label:"联邦 ID"},{default:a(()=>[t(F,{value:e.govFederationId,"onUpdate:value":o[3]||(o[3]=r=>e.govFederationId=r),placeholder:"e.g. fed-test",style:{width:"240px"},"allow-clear":""},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.govLoading,onClick:e.loadGovernanceLog},{default:a(()=>[...o[20]||(o[20]=[s(" 加载 governance.log ",-1)])]),_:1},8,["loading"])]),_:1})]),_:1}),e.govResult?(i(),P("div",pt,[t(D,{gutter:[16,16],style:{"margin-bottom":"16px"}},{default:a(()=>[t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"状态",value:e.govResult.state.status||"—","value-style":{fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"Threshold",value:e.govResult.state.threshold||1,"value-style":{fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(h,{title:"事件总数",value:(e.govResult.events||[]).length,"value-style":{fontSize:"20px"}},null,8,["value"])]),_:1})]),_:1})]),_:1}),t(m,{title:"成员",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(J,{"data-source":e.govResult.state.members||[],columns:e.memberColumns,pagination:!1,size:"small","row-key":"member_id"},null,8,["data-source"])]),_:1}),(e.govResult.state.pending_invites||[]).length?(i(),g(m,{key:0,title:"待投票邀请",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(A,{"data-source":e.govResult.state.pending_invites,size:"small"},{renderItem:a(({item:r})=>[t(G,null,{default:a(()=>[x("span",ht,n(r.member_id),1),t(z,{color:"blue"},{default:a(()=>[s("approve "+n(r.votes.approve.length)+"/"+n(r.required),1)]),_:2},1024),r.votes.reject.length?(i(),g(z,{key:0,color:"red"},{default:a(()=>[s("reject "+n(r.votes.reject.length),1)]),_:2},1024)):c("v-if",!0)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):c("v-if",!0),t(m,{title:"事件时间线",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(W,null,{default:a(()=>[(i(!0),P(he,null,He(e.govResult.events||[],r=>(i(),g(ie,{key:r.event_id},{default:a(()=>[x("span",kt,n(r.issued_at),1),t(z,{color:e.eventTypeColor(r.event_type),style:{"margin-left":"8px"}},{default:a(()=>[s(n(r.event_type),1)]),_:2},1032,["color"]),o[21]||(o[21]=s(" actor: ",-1)),x("span",xt,n(r.actor_member_id),1)]),_:2},1024))),128))]),_:1})]),_:1}),c(" ── v0.10: Pending threshold proposals (multi-proposal CRDT) ─── "),e.pendingThresholdsList.length>0?(i(),g(m,{key:1,title:"待批 threshold proposals",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[e.pendingThresholdsList.length>1?(i(),g(E,{key:0,type:"warning","show-icon":"",message:"多 proposal 并发",description:"同一联邦同时存在多个待批 threshold proposal。下方每行可独立确认(CRDT-style 选择);不指定时 CLI 默认确认最新一条。",style:{"margin-bottom":"12px"}})):c("v-if",!0),t(A,{"data-source":e.pendingThresholdsList,size:"small"},{renderItem:a(({item:r})=>[t(G,null,{actions:a(()=>[t(C,{size:"small",type:"primary",loading:e.actionLoading,onClick:N=>e.runConfirmThresholdById(r.event_id)},{default:a(()=>[...o[24]||(o[24]=[s(" 确认这个 ",-1)])]),_:1},8,["loading","onClick"])]),default:a(()=>[t(V,{wrap:""},{default:a(()=>[t(z,{color:"orange"},{default:a(()=>[s("target M = "+n(r.target),1)]),_:2},1024),o[22]||(o[22]=x("span",{style:{"font-size":"11px",color:"var(--text-secondary)"}},"by",-1)),x("span",St,n(r.proposer||"—"),1),o[23]||(o[23]=x("span",{style:{"font-size":"11px",color:"var(--text-secondary)"}},"at",-1)),x("span",wt,n(e.formatTimestamp(r.proposed_at)),1),t(z,{color:"cyan",style:{"font-family":"monospace"}},{default:a(()=>[s(n(e.truncateEventId(r.event_id)),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])]),_:1})):c("v-if",!0),c(" ── v0.10: Live sync stats (governance-sync daemon counters) ─── "),e.govSyncStats?(i(),g(m,{key:2,title:"实时同步状态",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"16px"}},{default:a(()=>[t(D,{gutter:[12,12]},{default:a(()=>[t(k,{xs:24,sm:8},{default:a(()=>[t(h,{title:"模式",value:e.govSyncStats.mode||"—","value-style":{fontSize:"16px",color:"#1677ff"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(h,{title:"最近 tick",value:e.formatRelative(e.govSyncStats.last_tick_at)||"—","value-style":{fontSize:"16px"}},null,8,["value"])]),_:1}),t(k,{xs:24,sm:8},{default:a(()=>[t(h,{title:"下次轮询",value:e.govSyncRefreshHint,"value-style":{fontSize:"14px",color:"var(--text-secondary)"}},null,8,["value"])]),_:1})]),_:1}),e.govSyncStats.publish||e.govSyncStats.pull||e.govSyncStats.libp2p?(i(),g(q,{key:0,column:{xs:1,sm:2},size:"small",style:{"margin-top":"12px"}},{default:a(()=>[e.govSyncStats.publish?(i(),g(S,{key:0,label:"Publish"},{default:a(()=>[s(" last "+n(e.govSyncStats.publish.last_published||0)+" / total "+n(e.govSyncStats.publish.total_published||0),1)]),_:1})):c("v-if",!0),e.govSyncStats.pull?(i(),g(S,{key:1,label:"Pull"},{default:a(()=>[s(" last "+n(e.govSyncStats.pull.last_appended||0)+" / total "+n(e.govSyncStats.pull.total_appended||0)+" ",1),e.govSyncStats.pull.last_invalid||e.govSyncStats.pull.last_unknown?(i(),P("span",Ct," · invalid "+n(e.govSyncStats.pull.last_invalid||0)+" / unknown "+n(e.govSyncStats.pull.last_unknown||0),1)):c("v-if",!0)]),_:1})):c("v-if",!0),e.govSyncStats.libp2p?(i(),g(S,{key:2,label:"libp2p wire",span:2},{default:a(()=>[s(" recv "+n(e.govSyncStats.libp2p.wire_received||0)+" · appended "+n(e.govSyncStats.libp2p.wire_appended||0)+" ",1),e.govSyncStats.libp2p.topic?(i(),P("span",zt," ("+n(e.govSyncStats.libp2p.topic)+") ",1)):c("v-if",!0)]),_:1})):c("v-if",!0)]),_:1})):(i(),g(B,{key:1,description:"daemon 还没写过 tick — 启动 governance-sync-serve 或 governance-sync-libp2p 后再加载"}))]),_:1})):c("v-if",!0),c(" ── Operational governance actions (v0.9) ─────── "),t(m,{title:"操作型治理 (签名密钥仍 CLI-only)",size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:a(()=>[t(E,{type:"warning","show-icon":"",message:"安全设计",description:"所有操作通过本机 CLI 子进程执行。私钥永远不进入 web 渲染进程 — 这里只是给 cc mtc federation * 命令拼参数。",style:{"margin-bottom":"12px"}}),t(H,{size:"small"},{default:a(()=>[t(O,{key:"invite",tab:"邀请"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runInvite,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.inviteForm.actor,"onUpdate:value":o[4]||(o[4]=r=>e.inviteForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"candidate"},{default:a(()=>[t(F,{value:e.inviteForm.candidate,"onUpdate:value":o[5]||(o[5]=r=>e.inviteForm.candidate=r),placeholder:"bob",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"pubkey-id"},{default:a(()=>[t(F,{value:e.inviteForm.pubkeyId,"onUpdate:value":o[6]||(o[6]=r=>e.inviteForm.pubkeyId=r),placeholder:"sha256:...",style:{width:"200px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runInvite},{default:a(()=>[...o[25]||(o[25]=[s("invite",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"vote",tab:"投票"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runVote,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.voteForm.actor,"onUpdate:value":o[7]||(o[7]=r=>e.voteForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"candidate"},{default:a(()=>[t(F,{value:e.voteForm.candidate,"onUpdate:value":o[8]||(o[8]=r=>e.voteForm.candidate=r),placeholder:"bob",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"decision"},{default:a(()=>[t(U,{value:e.voteForm.decision,"onUpdate:value":o[9]||(o[9]=r=>e.voteForm.decision=r),style:{width:"110px"}},{default:a(()=>[t(K,{value:"approve"},{default:a(()=>[...o[26]||(o[26]=[s("approve",-1)])]),_:1}),t(K,{value:"reject"},{default:a(()=>[...o[27]||(o[27]=[s("reject",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runVote},{default:a(()=>[...o[28]||(o[28]=[s("vote",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"threshold",tab:"改 threshold"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runProposeThreshold,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.thresholdForm.actor,"onUpdate:value":o[10]||(o[10]=r=>e.thresholdForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"新 M"},{default:a(()=>[t(Q,{value:e.thresholdForm.newM,"onUpdate:value":o[11]||(o[11]=r=>e.thresholdForm.newM=r),min:1,style:{width:"90px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runProposeThreshold},{default:a(()=>[...o[29]||(o[29]=[s("propose",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runConfirmThreshold},{default:a(()=>[...o[30]||(o[30]=[s("confirm",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"revoke",tab:"撤销"},{default:a(()=>[t(R,{layout:"inline",onSubmit:Z(e.runProposeRevoke,["prevent"])},{default:a(()=>[t(v,{label:"actor"},{default:a(()=>[t(F,{value:e.revokeForm.actor,"onUpdate:value":o[12]||(o[12]=r=>e.revokeForm.actor=r),placeholder:"alice",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"target"},{default:a(()=>[t(F,{value:e.revokeForm.target,"onUpdate:value":o[13]||(o[13]=r=>e.revokeForm.target=r),placeholder:"bob",style:{width:"120px"}},null,8,["value"])]),_:1}),t(v,{label:"reason"},{default:a(()=>[t(F,{value:e.revokeForm.reason,"onUpdate:value":o[14]||(o[14]=r=>e.revokeForm.reason=r),placeholder:"inactive",style:{width:"160px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runProposeRevoke},{default:a(()=>[...o[31]||(o[31]=[s("propose-revoke",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runConfirmRevoke},{default:a(()=>[...o[32]||(o[32]=[s("confirm-revoke",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1}),t(O,{key:"sync",tab:"跨成员同步"},{default:a(()=>[t(R,{layout:"inline"},{default:a(()=>[t(v,{label:"drop-zone"},{default:a(()=>[t(F,{value:e.syncForm.dropZone,"onUpdate:value":o[15]||(o[15]=r=>e.syncForm.dropZone=r),placeholder:"/path/to/shared/dir",style:{width:"220px"}},null,8,["value"])]),_:1}),t(v,null,{default:a(()=>[t(X,{checked:e.syncForm.verify,"onUpdate:checked":o[16]||(o[16]=r=>e.syncForm.verify=r)},{default:a(()=>[...o[33]||(o[33]=[s("--verify",-1)])]),_:1},8,["checked"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runGovPublish},{default:a(()=>[...o[34]||(o[34]=[s("publish",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{type:"primary",loading:e.actionLoading,onClick:e.runGovPull},{default:a(()=>[...o[35]||(o[35]=[s("pull",-1)])]),_:1},8,["loading"])]),_:1}),t(v,null,{default:a(()=>[t(C,{loading:e.actionLoading,onClick:e.runGovSyncOnce},{default:a(()=>[...o[36]||(o[36]=[s("sync-once",-1)])]),_:1},8,["loading"])]),_:1})]),_:1})]),_:1})]),_:1}),e.lastActionResult?(i(),g(m,{key:0,size:"small",style:{"margin-top":"12px",background:"var(--bg-hover)"}},{default:a(()=>[x("pre",Ft,n(JSON.stringify(e.lastActionResult,null,2)),1)]),_:1})):c("v-if",!0)]),_:1})])):(i(),g(B,{key:1,description:"输入联邦 ID 加载 governance.log"})),t(E,{style:{"margin-top":"16px"},type:"info","show-icon":"",message:"跨成员同步",description:"cc mtc federation governance-publish/pull --drop-zone 文件系统通道;governance-sync-libp2p --listen 走 libp2p gossipsub 通道;governance-sync-serve 自动 daemon 化。事件签名 + dedupe by event_id 保证幂等。"})]),_:1})]),_:1},8,["activeKey"])])}const Dt=Ne(tt,[["render",It],["__scopeId","data-v-c2eadccb"],["__file","/tmp/cc-web-panel-0BTG9G/repo/packages/web-panel/src/views/Mtc.vue"]]);export{Dt as default};