chainlesschain 0.161.9 → 0.161.11

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 (158) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-Cbnj25uU.js → AIOps-Cv7DnNSv.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-DY69UkxV.js → ActionButton-B1m9njbz.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DUzoL75H.js → Analytics-CU5lrpIq.js} +2 -2
  6. package/src/assets/web-panel/assets/AppLayout-BpbfrB7k.css +1 -0
  7. package/src/assets/web-panel/assets/AppLayout-CrQBcjC1.js +3 -0
  8. package/src/assets/web-panel/assets/{Audit-CFJh6huz.js → Audit-DUkzhAbX.js} +1 -1
  9. package/src/assets/web-panel/assets/{Backup-CMTir4tV.js → Backup-L1i5rG4e.js} +1 -1
  10. package/src/assets/web-panel/assets/{BaseInput-BaWXBDdp.js → BaseInput-CQSPRZVh.js} +1 -1
  11. package/src/assets/web-panel/assets/{Chat-DjToexEx.js → Chat-ySuja9_N.js} +1 -1
  12. package/src/assets/web-panel/assets/{Checkbox-DJnhKXhi.js → Checkbox-5jHkbotn.js} +1 -1
  13. package/src/assets/web-panel/assets/{Codegen-CgsgvRJX.js → Codegen-CpTSti2I.js} +1 -1
  14. package/src/assets/web-panel/assets/{Col-MvMGDJAB.js → Col-C5SJSGcO.js} +1 -1
  15. package/src/assets/web-panel/assets/{Community-q26VGOGu.js → Community-0PMz9hPX.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compact-DyLYzWoX.js → Compact-CwrJK_94.js} +1 -1
  17. package/src/assets/web-panel/assets/{Compliance-D_TF9eBc.js → Compliance-BEVqh-i7.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cowork-B9bg988c.js → Cowork-C_UEYiR5.js} +3 -3
  19. package/src/assets/web-panel/assets/{Cron-6k9vTFfd.js → Cron-B4f0_E2W.js} +1 -1
  20. package/src/assets/web-panel/assets/{Crosschain-B7fk2aHi.js → Crosschain-CZT6FKhl.js} +1 -1
  21. package/src/assets/web-panel/assets/{DID-XhCfTFm2.js → DID-LDSJdg_E.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dashboard-Bqk7vtZM.js → Dashboard-CczHBzZy.js} +2 -2
  23. package/src/assets/web-panel/assets/{Dropdown-CDOOZGv7.js → Dropdown-KJXQPCdN.js} +1 -1
  24. package/src/assets/web-panel/assets/{Federation-NajN4oRO.js → Federation-Bu085RVF.js} +1 -1
  25. package/src/assets/web-panel/assets/{FormItemContext-DgMHYlMB.js → FormItemContext-CenKDKRv.js} +1 -1
  26. package/src/assets/web-panel/assets/{Git-CZC5n1Zu.js → Git-Ck3yvIOj.js} +1 -1
  27. package/src/assets/web-panel/assets/{Governance-Br131eUW.js → Governance-C-Wqvp5q.js} +1 -1
  28. package/src/assets/web-panel/assets/{Inference-BHlUfcT-.js → Inference-D1Q4GQsE.js} +1 -1
  29. package/src/assets/web-panel/assets/{KnowledgeGraph-CByROhg-.js → KnowledgeGraph-6-id5kqA.js} +1 -1
  30. package/src/assets/web-panel/assets/{Logs-D8Ghzk4B.js → Logs-BIrBldyi.js} +1 -1
  31. package/src/assets/web-panel/assets/{Marketplace-CnjHPFm7.js → Marketplace-DuEYH2k1.js} +1 -1
  32. package/src/assets/web-panel/assets/{McpTools-C_vszCBU.js → McpTools-CJyrjpOa.js} +3 -3
  33. package/src/assets/web-panel/assets/{Memory-Cl5c_8In.js → Memory-25VBuGGA.js} +1 -1
  34. package/src/assets/web-panel/assets/{MobileBridge-K3KwwCKl.js → MobileBridge-DDepR_yK.js} +3 -3
  35. package/src/assets/web-panel/assets/{MobileBridge-DkkMCDx9.css → MobileBridge-DwxX55b_.css} +1 -1
  36. package/src/assets/web-panel/assets/{Mtc-NfZ8xzyu.js → Mtc-B52jkX63.js} +4 -4
  37. package/src/assets/web-panel/assets/{MtcAudit-BkktYSXj.js → MtcAudit-BimrvH_0.js} +1 -1
  38. package/src/assets/web-panel/assets/Multisig-D-IuEDLa.css +1 -0
  39. package/src/assets/web-panel/assets/Multisig-DWsGuuyz.js +1 -0
  40. package/src/assets/web-panel/assets/{NLProgramming-BhFRuXyi.js → NLProgramming-D9sqtzgg.js} +1 -1
  41. package/src/assets/web-panel/assets/{Notes-BpcAFy8i.js → Notes-BtaoLR6l.js} +1 -1
  42. package/src/assets/web-panel/assets/{NotificationSettings-DKNtYYeo.js → NotificationSettings-DGc4Pnhc.js} +1 -1
  43. package/src/assets/web-panel/assets/{Organization-C61VwQEW.js → Organization-CH8YH1WC.js} +4 -4
  44. package/src/assets/web-panel/assets/{Overflow-WBloac1x.js → Overflow-BEfCQNlN.js} +1 -1
  45. package/src/assets/web-panel/assets/{OverrideContext-DSwW21YS.js → OverrideContext-DYxbd09I.js} +1 -1
  46. package/src/assets/web-panel/assets/{P2P-DGm7EvDg.js → P2P-Bp_HTJ00.js} +2 -2
  47. package/src/assets/web-panel/assets/{Permissions-KFPtoOV6.js → Permissions-UHQF_4gL.js} +4 -4
  48. package/src/assets/web-panel/assets/{Pipeline-CFjFtzZT.js → Pipeline-yCVADMbj.js} +1 -1
  49. package/src/assets/web-panel/assets/{Privacy-T_Kewe_f.js → Privacy-C1oNG_1P.js} +1 -1
  50. package/src/assets/web-panel/assets/ProjectInit-CteEo-wF.css +1 -0
  51. package/src/assets/web-panel/assets/{Projects-xGNn4Ov9.js → ProjectInit-DMW2d6Cb.js} +2 -2
  52. package/src/assets/web-panel/assets/{ProjectSettings-BQl8qTPQ.js → ProjectSettings-5G8pJeC_.js} +1 -1
  53. package/src/assets/web-panel/assets/Projects-BpLpgCga.js +1 -0
  54. package/src/assets/web-panel/assets/Projects-C34BWmmy.css +1 -0
  55. package/src/assets/web-panel/assets/{Providers-ByuUztXe.js → Providers-CL_oE5tl.js} +1 -1
  56. package/src/assets/web-panel/assets/{QuickAsk-BwSXmXvL.js → QuickAsk-BV38kJpn.js} +1 -1
  57. package/src/assets/web-panel/assets/{Recommend-Cp433_5Z.js → Recommend-SAj9Q6gO.js} +1 -1
  58. package/src/assets/web-panel/assets/{Reputation-DE_JSjyi.js → Reputation-1kCD0gaB.js} +1 -1
  59. package/src/assets/web-panel/assets/{Row-DI36Fic1.js → Row-CUF6ofec.js} +1 -1
  60. package/src/assets/web-panel/assets/{RssFeed-DswpSUiI.js → RssFeed-CAJCjHjh.js} +3 -3
  61. package/src/assets/web-panel/assets/{Search-Crs2UKhh.js → Search-cvcqK6k5.js} +1 -1
  62. package/src/assets/web-panel/assets/{Security-W8ViXXbq.js → Security-CQg7wTKN.js} +3 -3
  63. package/src/assets/web-panel/assets/{Services-BIQdyLJM.js → Services-CsUFvNqx.js} +1 -1
  64. package/src/assets/web-panel/assets/{Skeleton-DDiOevKX.js → Skeleton-xBd6cpeg.js} +1 -1
  65. package/src/assets/web-panel/assets/{Skills-v-Vw_jGa.js → Skills-CaroVcXP.js} +1 -1
  66. package/src/assets/web-panel/assets/{Sla-B-ULmz5m.js → Sla-BtpCM7Ko.js} +1 -1
  67. package/src/assets/web-panel/assets/{SpeechSettings--8IIPHri.js → SpeechSettings-BqMJfygi.js} +1 -1
  68. package/src/assets/web-panel/assets/{SyncSettings-D0QiEwJn.js → SyncSettings-CZouEnTT.js} +1 -1
  69. package/src/assets/web-panel/assets/{Tasks-BNSR9FlM.js → Tasks-CXRSaKbt.js} +1 -1
  70. package/src/assets/web-panel/assets/{Templates-CFVkaS-d.js → Templates-DJY8TQ5i.js} +1 -1
  71. package/src/assets/web-panel/assets/{Tenant-quU-tldS.js → Tenant-BvR-WVDe.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tokens-DTqFjS4k.js → Tokens-BvsTsita.js} +1 -1
  73. package/src/assets/web-panel/assets/{Trigger-ZWVirxhN.js → Trigger-BpAXwpX5.js} +1 -1
  74. package/src/assets/web-panel/assets/{Trust-DmaYf5tg.js → Trust-CQn3-pr1.js} +1 -1
  75. package/src/assets/web-panel/assets/{UkeySign-BeYyXtZW.js → UkeySign-mdcVVgmW.js} +1 -1
  76. package/src/assets/web-panel/assets/{VideoEditing-CRdDwD9C.js → VideoEditing-B64a6mxs.js} +1 -1
  77. package/src/assets/web-panel/assets/{Wallet-H-38f7Pv.js → Wallet-CD6sh797.js} +1 -1
  78. package/src/assets/web-panel/assets/{WebAuthn-CCQVzZ0W.js → WebAuthn-CBMAhuJk.js} +4 -4
  79. package/src/assets/web-panel/assets/{WorkflowEditor-B1RFE2oN.js → WorkflowEditor-BL2e4pEf.js} +1 -1
  80. package/src/assets/web-panel/assets/{chat-Z4UoBAeF.js → chat-D0R75-Vf.js} +1 -1
  81. package/src/assets/web-panel/assets/{collapseMotion-6-_FbiKl.js → collapseMotion-CZQhO80h.js} +1 -1
  82. package/src/assets/web-panel/assets/{colors-AecMhEAZ.js → colors-Z5R3KUYW.js} +1 -1
  83. package/src/assets/web-panel/assets/{compact-item-Dfhm05kA.js → compact-item-Buyen0aR.js} +1 -1
  84. package/src/assets/web-panel/assets/{createContext-C7gBVuRm.js → createContext-D9l1X-OX.js} +1 -1
  85. package/src/assets/web-panel/assets/{echarts-BrEnqXDv.js → echarts-TwhxblyG.js} +1 -1
  86. package/src/assets/web-panel/assets/{hasIn-DQarK3iI.js → hasIn-DV4wtumO.js} +1 -1
  87. package/src/assets/web-panel/assets/{icons-B2mcO3YM.js → icons-Q99MnhG8.js} +2 -2
  88. package/src/assets/web-panel/assets/{index-CiVezMja.js → index--pPzkOu2.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-CuPmKar9.js → index-0P8ZPtKp.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-Cy_80Fj7.js → index-AXmFZTsT.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-CS7_x1br.js → index-BAf0-ayI.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DfAZSzZc.js → index-BBFrPlY4.js} +1 -1
  93. package/src/assets/web-panel/assets/index-BBvRNeKy.js +1 -0
  94. package/src/assets/web-panel/assets/{index-C7nHW5ZW.js → index-BJzerWCW.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-OqY41c_z.js → index-BLDanIEV.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BxjOmfVA.js → index-BRWO_MUe.js} +4 -4
  97. package/src/assets/web-panel/assets/{index-5I_kEh5L.js → index-BSXvEQFS.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-78eTUfD9.js → index-BbZ_pXN3.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CFR1Scu8.js → index-BloaIh8i.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CxDBoEkf.js → index-C1u_F_WR.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-D841tepe.js → index-C4m8PjHn.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CCUfW7hO.js → index-CHPsWSeL.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DfA9S79c.js → index-CHs1Rtgi.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-nqKLHlmq.js → index-CLk9-Adx.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BLYMiBRw.js → index-CRvOaSuy.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-B1XdBIuG.js → index-CT46jhtC.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DdtxWGjo.js → index-CoV9UGnc.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C0kyGID6.js → index-CpemtT_B.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DX4CKtlL.js → index-CprQ5h5e.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Dy2fLm3i.js → index-Cs2QeQFi.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-1d6L3YWV.js → index-Cs7GKmFk.js} +1 -1
  112. package/src/assets/web-panel/assets/index-Cyal1Os0.js +1 -0
  113. package/src/assets/web-panel/assets/{index-5P_X26-m.js → index-DBBX0xZN.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-D3Pxfwcc.js → index-DMcK4Son.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-aHqD7CZz.js → index-DO9gd9wz.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-D4_1yL1c.js → index-DYq0yh8a.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DWbRHjgk.js → index-D_g5wyjB.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DtrMx44i.js → index-DtRv6Tqv.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-L6kKxFAO.js → index-KvlSpGws.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-QgJGoGAK.js → index-RpJYGfg0.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-C-4d1ug2.js → index-UAkLBWLE.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B52lOAOU.js → index-WbY1RGjg.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-YJxjR7t9.js → index-Z-i_sfIN.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-d0Iy6r2J.js → index-cTf60nCj.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-Dkh_4r1F.js → index-ry4j00pG.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-Ch9ExDNs.js → index-vSjbNv8F.js} +1 -1
  127. package/src/assets/web-panel/assets/{initDefaultProps-CDOGbz6v.js → initDefaultProps-C5tyEoyp.js} +1 -1
  128. package/src/assets/web-panel/assets/{motion-ChIpIzUN.js → motion-By5VpSMZ.js} +1 -1
  129. package/src/assets/web-panel/assets/{move-DbH3dyN8.js → move-CNRFLi9k.js} +1 -1
  130. package/src/assets/web-panel/assets/{omit-BJ1K-IDI.js → omit-DYc7DRhT.js} +1 -1
  131. package/src/assets/web-panel/assets/{pickAttrs-B0q7EpvV.js → pickAttrs-D667btUF.js} +1 -1
  132. package/src/assets/web-panel/assets/{placementArrow-D7XkOUjs.js → placementArrow-Ce-Y2-Qq.js} +1 -1
  133. package/src/assets/web-panel/assets/{responsiveObserve-efcdE4ju.js → responsiveObserve-BzzJzAds.js} +1 -1
  134. package/src/assets/web-panel/assets/{slide-BgAktMzM.js → slide-CyKGKfJ8.js} +1 -1
  135. package/src/assets/web-panel/assets/{statusUtils-CV83LVbI.js → statusUtils-DffXAKmJ.js} +1 -1
  136. package/src/assets/web-panel/assets/{styleChecker-D1npYi6G.js → styleChecker-CeeSLisW.js} +1 -1
  137. package/src/assets/web-panel/assets/useFlexGapSupport-CCzODKgI.js +1 -0
  138. package/src/assets/web-panel/assets/{useFs-BEvSw9aX.js → useFs--Vkrwu51.js} +1 -1
  139. package/src/assets/web-panel/assets/{useMergedState-n0f81Aew.js → useMergedState-D3PX36GT.js} +1 -1
  140. package/src/assets/web-panel/assets/{useRefs-CTh0C9xI.js → useRefs-opfcK7Pm.js} +1 -1
  141. package/src/assets/web-panel/assets/{useState-4T1Ntfpx.js → useState-Cp5WlLTS.js} +1 -1
  142. package/src/assets/web-panel/assets/{vendor-Ci2pTZ_t.js → vendor-BVLz_z7V.js} +1 -1
  143. package/src/assets/web-panel/assets/{vnode-Duw65sZ1.js → vnode-ChnNrJNw.js} +1 -1
  144. package/src/assets/web-panel/assets/{zoom-CLMtA8PG.js → zoom-DE1Teifl.js} +1 -1
  145. package/src/assets/web-panel/index.html +3 -3
  146. package/src/commands/mtc.js +1 -1
  147. package/src/commands/project.js +258 -0
  148. package/src/index.js +3 -0
  149. package/src/lib/audit-mtc.js +1 -1
  150. package/src/lib/project-runtime.js +171 -0
  151. package/src/assets/web-panel/assets/AppLayout-DATUppSv.js +0 -1
  152. package/src/assets/web-panel/assets/AppLayout-qr7ghxW7.css +0 -1
  153. package/src/assets/web-panel/assets/Multisig-BLRYDn7_.css +0 -1
  154. package/src/assets/web-panel/assets/Multisig-qP51bs1T.js +0 -1
  155. package/src/assets/web-panel/assets/Projects-B5IgXt-x.css +0 -1
  156. package/src/assets/web-panel/assets/index-Cp5G30tN.js +0 -1
  157. package/src/assets/web-panel/assets/index-eoNKQdFC.js +0 -1
  158. package/src/assets/web-panel/assets/useFlexGapSupport-DTH3yXTD.js +0 -1
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-BxjOmfVA.js";import{i as f}from"./motion-ChIpIzUN.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./index-BRWO_MUe.js";import{i as f}from"./motion-By5VpSMZ.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,9 +8,9 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-BxjOmfVA.js"></script>
12
- <link rel="modulepreload" crossorigin href="./assets/vendor-Ci2pTZ_t.js">
13
- <link rel="modulepreload" crossorigin href="./assets/icons-B2mcO3YM.js">
11
+ <script type="module" crossorigin src="./assets/index-BRWO_MUe.js"></script>
12
+ <link rel="modulepreload" crossorigin href="./assets/vendor-BVLz_z7V.js">
13
+ <link rel="modulepreload" crossorigin href="./assets/icons-Q99MnhG8.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-CfX1DEtk.css">
15
15
  </head>
16
16
  <body>
@@ -11,7 +11,7 @@
11
11
  import fs from "node:fs";
12
12
  import path from "node:path";
13
13
  import chalk from "chalk";
14
- import { ed25519 as nobleEd25519 } from "@noble/curves/ed25519";
14
+ import { ed25519 as nobleEd25519 } from "@noble/curves/ed25519.js";
15
15
  import { logger } from "../lib/logger.js";
16
16
  import { bootstrap, shutdown } from "../runtime/bootstrap.js";
17
17
  import { getAllIdentities, getIdentity } from "../lib/did-manager.js";
@@ -0,0 +1,258 @@
1
+ /**
2
+ * v1.3+ #21 P1 — `cc project` CLI surface.
3
+ *
4
+ * 子命令:
5
+ * cc project init <name> Create a new project in desktop DB
6
+ * --description <text> Optional description
7
+ * --type <type> web|document|data|app|presentation|
8
+ * spreadsheet|design|code|workflow|knowledge
9
+ * (default: document)
10
+ * --user <userId> User ID (default: "default")
11
+ * --root <path> Optional root_path on filesystem
12
+ * --json JSON output
13
+ *
14
+ * cc project list [--user <id>] [--status <s>] [--limit <n>] [--json]
15
+ * cc project show <id> [--json]
16
+ * cc project delete <id> [--hard] [--json]
17
+ *
18
+ * 设计 (per #21 v1.2 GA 反馈 "目标在手机端做ai项目的交互要像在电脑端那样丝滑"):
19
+ * CLI 直接读写 desktop chainlesschain.db, 立刻在 desktop UI 出现,
20
+ * Phase 3d sync 同步到手机端 — 桌面/CLI/手机 三端零延迟一致。
21
+ */
22
+
23
+ import chalk from "chalk";
24
+ import {
25
+ openProjectsDb,
26
+ defaultProjectDbPath,
27
+ newProjectId,
28
+ VALID_PROJECT_TYPES,
29
+ VALID_PROJECT_STATUSES,
30
+ } from "../lib/project-runtime.js";
31
+
32
+ const DEFAULT_USER = "default";
33
+
34
+ function _now() {
35
+ return Date.now();
36
+ }
37
+
38
+ function _formatProjectTable(p) {
39
+ return [
40
+ `${chalk.bold("ID")} ${p.id}`,
41
+ `${chalk.bold("Name")} ${p.name}`,
42
+ `${chalk.bold("Type")} ${p.project_type}`,
43
+ `${chalk.bold("Status")} ${_colorStatus(p.status)}`,
44
+ `${chalk.bold("User")} ${p.user_id}`,
45
+ `${chalk.bold("Root")} ${p.root_path || "(none)"}`,
46
+ `${chalk.bold("Files")} ${p.file_count || 0}`,
47
+ `${chalk.bold("Created")} ${new Date(p.created_at).toISOString()}`,
48
+ `${chalk.bold("Updated")} ${new Date(p.updated_at).toISOString()}`,
49
+ p.description ? `${chalk.bold("Desc")} ${p.description}` : null,
50
+ ]
51
+ .filter(Boolean)
52
+ .join("\n");
53
+ }
54
+
55
+ function _colorStatus(s) {
56
+ switch (s) {
57
+ case "draft":
58
+ return chalk.gray(s);
59
+ case "active":
60
+ return chalk.cyan(s);
61
+ case "completed":
62
+ return chalk.green(s);
63
+ case "archived":
64
+ return chalk.yellow(s);
65
+ default:
66
+ return s;
67
+ }
68
+ }
69
+
70
+ export function registerProjectCommand(program) {
71
+ const cmd = program
72
+ .command("project")
73
+ .description(
74
+ "Manage desktop projects (shared SQLite, syncs to mobile via Phase 3d)",
75
+ );
76
+
77
+ // ===== init =====
78
+ cmd
79
+ .command("init <name>")
80
+ .description("Create a new project in desktop DB")
81
+ .option("--description <text>", "Project description")
82
+ .option(
83
+ "--type <type>",
84
+ `Project type (${VALID_PROJECT_TYPES.join("|")})`,
85
+ "document",
86
+ )
87
+ .option("--user <userId>", "Owner user ID", DEFAULT_USER)
88
+ .option("--root <path>", "Root filesystem path")
89
+ .option("--db <path>", "DB path override", defaultProjectDbPath())
90
+ .option("--json", "Output JSON")
91
+ .action(async (name, options) => {
92
+ if (!VALID_PROJECT_TYPES.includes(options.type)) {
93
+ console.error(
94
+ chalk.red(
95
+ `Invalid type "${options.type}". Must be one of: ${VALID_PROJECT_TYPES.join(", ")}`,
96
+ ),
97
+ );
98
+ process.exit(2);
99
+ }
100
+ const { db, close } = await openProjectsDb(options.db);
101
+ try {
102
+ const id = newProjectId();
103
+ const now = _now();
104
+ db.prepare(
105
+ `INSERT INTO projects (
106
+ id, user_id, name, description, project_type, status,
107
+ root_path, created_at, updated_at, sync_status, deleted
108
+ ) VALUES (?, ?, ?, ?, ?, 'active', ?, ?, ?, 'pending', 0)`,
109
+ ).run(
110
+ id,
111
+ options.user,
112
+ name,
113
+ options.description || null,
114
+ options.type,
115
+ options.root || null,
116
+ now,
117
+ now,
118
+ );
119
+ const p = db.prepare("SELECT * FROM projects WHERE id = ?").get(id);
120
+ if (options.json) {
121
+ console.log(JSON.stringify(p, null, 2));
122
+ } else {
123
+ console.log(chalk.green("✓ Project created"));
124
+ console.log(_formatProjectTable(p));
125
+ console.log(
126
+ chalk.gray(
127
+ `\n 桌面 UI 会立刻看到此项目。Phase 3d sync 自动同步到手机端。`,
128
+ ),
129
+ );
130
+ }
131
+ } finally {
132
+ close();
133
+ }
134
+ });
135
+
136
+ // ===== list =====
137
+ cmd
138
+ .command("list")
139
+ .description("List projects")
140
+ .option("--user <userId>", "Filter by user ID", DEFAULT_USER)
141
+ .option(
142
+ "--status <s>",
143
+ `Filter by status (${VALID_PROJECT_STATUSES.join("|")})`,
144
+ )
145
+ .option("--limit <n>", "Max rows", (v) => parseInt(v, 10), 50)
146
+ .option("--db <path>", "DB path override", defaultProjectDbPath())
147
+ .option("--json", "Output JSON")
148
+ .action(async (options) => {
149
+ const { db, close } = await openProjectsDb(options.db);
150
+ try {
151
+ let sql = `SELECT id, user_id, name, description, project_type, status,
152
+ root_path, file_count, created_at, updated_at, sync_status
153
+ FROM projects WHERE user_id = ? AND deleted = 0`;
154
+ const params = [options.user];
155
+ if (options.status) {
156
+ if (!VALID_PROJECT_STATUSES.includes(options.status)) {
157
+ console.error(
158
+ chalk.red(
159
+ `Invalid status "${options.status}". Must be: ${VALID_PROJECT_STATUSES.join(", ")}`,
160
+ ),
161
+ );
162
+ process.exit(2);
163
+ }
164
+ sql += " AND status = ?";
165
+ params.push(options.status);
166
+ }
167
+ sql += " ORDER BY updated_at DESC LIMIT ?";
168
+ params.push(options.limit);
169
+ const rows = db.prepare(sql).all(...params);
170
+ if (options.json) {
171
+ console.log(JSON.stringify(rows, null, 2));
172
+ } else {
173
+ if (rows.length === 0) {
174
+ console.log(chalk.gray("(no projects)"));
175
+ return;
176
+ }
177
+ for (const p of rows) {
178
+ console.log(
179
+ `${chalk.gray(p.id.slice(0, 8))}… ${_colorStatus(p.status.padEnd(10))} ${chalk.bold(
180
+ p.name.padEnd(28),
181
+ )} ${chalk.gray(p.project_type.padEnd(12))} ${new Date(p.updated_at).toISOString()}`,
182
+ );
183
+ }
184
+ }
185
+ } finally {
186
+ close();
187
+ }
188
+ });
189
+
190
+ // ===== show =====
191
+ cmd
192
+ .command("show <id>")
193
+ .description("Show project details")
194
+ .option("--db <path>", "DB path override", defaultProjectDbPath())
195
+ .option("--json", "Output JSON")
196
+ .action(async (id, options) => {
197
+ const { db, close } = await openProjectsDb(options.db);
198
+ try {
199
+ const p = db.prepare("SELECT * FROM projects WHERE id = ?").get(id);
200
+ if (!p) {
201
+ console.error(chalk.red(`Project not found: ${id}`));
202
+ process.exit(2);
203
+ }
204
+ if (options.json) {
205
+ console.log(JSON.stringify(p, null, 2));
206
+ } else {
207
+ console.log(_formatProjectTable(p));
208
+ }
209
+ } finally {
210
+ close();
211
+ }
212
+ });
213
+
214
+ // ===== delete =====
215
+ cmd
216
+ .command("delete <id>")
217
+ .description("Delete a project (soft by default; --hard to truly remove)")
218
+ .option("--hard", "Hard delete (also removes project_files cascade)", false)
219
+ .option("--db <path>", "DB path override", defaultProjectDbPath())
220
+ .option("--json", "Output JSON")
221
+ .action(async (id, options) => {
222
+ const { db, close } = await openProjectsDb(options.db);
223
+ try {
224
+ const existing = db
225
+ .prepare("SELECT id FROM projects WHERE id = ?")
226
+ .get(id);
227
+ if (!existing) {
228
+ console.error(chalk.red(`Project not found: ${id}`));
229
+ process.exit(2);
230
+ }
231
+ if (options.hard) {
232
+ db.prepare("DELETE FROM projects WHERE id = ?").run(id);
233
+ } else {
234
+ db.prepare(
235
+ "UPDATE projects SET deleted = 1, sync_status = 'pending', updated_at = ? WHERE id = ?",
236
+ ).run(_now(), id);
237
+ }
238
+ if (options.json) {
239
+ console.log(
240
+ JSON.stringify({ ok: true, id, hard: !!options.hard }, null, 2),
241
+ );
242
+ } else {
243
+ console.log(
244
+ chalk.green(
245
+ `✓ Project ${options.hard ? "hard-deleted" : "deleted"}: ${id}`,
246
+ ),
247
+ );
248
+ }
249
+ } finally {
250
+ close();
251
+ }
252
+ });
253
+ }
254
+
255
+ // 暴露给单测
256
+ export const _projectInternals = {
257
+ defaultProjectDbPath,
258
+ };
package/src/index.js CHANGED
@@ -196,6 +196,8 @@ import { registerIpfsCommand } from "./commands/ipfs.js";
196
196
  // MTC: Merkle Tree Certificates (Phase 1 Week 3)
197
197
  import { registerMtcCommand } from "./commands/mtc.js";
198
198
  import { registerMultisigCommand } from "./commands/multisig.js";
199
+ // #21 P1: cc project — shared desktop SQLite, Phase 3d sync to mobile
200
+ import { registerProjectCommand } from "./commands/project.js";
199
201
  // Phase 27: Multimodal Collaboration
200
202
  import { registerMultimodalCommand } from "./commands/multimodal.js";
201
203
  // Phase 22: Performance auto-tuning
@@ -581,6 +583,7 @@ export function createProgram(opts = {}) {
581
583
  registerIpfsCommand(program);
582
584
  registerMtcCommand(program);
583
585
  registerMultisigCommand(program);
586
+ registerProjectCommand(program);
584
587
  registerMultimodalCommand(program);
585
588
  registerPerfCommand(program);
586
589
  registerAgentNetworkCommand(program);
@@ -20,7 +20,7 @@
20
20
  import fs from "node:fs";
21
21
  import path from "node:path";
22
22
  import crypto from "node:crypto";
23
- import { ed25519 as nobleEd25519 } from "@noble/curves/ed25519";
23
+ import { ed25519 as nobleEd25519 } from "@noble/curves/ed25519.js";
24
24
  import mtcLib from "@chainlesschain/core-mtc";
25
25
 
26
26
  const { sha256, jcs, encodeHashStr, ed25519, assembleBatch } = mtcLib;
@@ -0,0 +1,171 @@
1
+ /**
2
+ * v1.3+ #21 P1 — `cc project` CLI 共享 runtime。
3
+ *
4
+ * 设计目标 (per v1.2 GA 反馈 "目标在手机端做ai项目的交互要像在电脑端那样丝滑"):
5
+ * CLI 直接读写 desktop app 的 chainlesschain.db, init/list/delete 立刻在
6
+ * desktop UI 出现, Phase 3d sync 同步到手机端 — 无中间层延迟。
7
+ *
8
+ * DB 路径解析: 跟随 Electron app.getPath("userData") 约定:
9
+ * Windows: %APPDATA%/chainlesschain-desktop-vue/data/chainlesschain.db
10
+ * macOS: ~/Library/Application Support/chainlesschain-desktop-vue/data/chainlesschain.db
11
+ * Linux: ~/.config/chainlesschain-desktop-vue/data/chainlesschain.db
12
+ *
13
+ * SQLite driver cascade (per memory feedback_sqlite_wasm_fallback):
14
+ * better-sqlite3-multiple-ciphers → better-sqlite3 → sql.js (WASM)
15
+ *
16
+ * 并发: desktop app 运行时也开同一 DB, 走 WAL mode 允许多读单写, 短查询无冲突。
17
+ */
18
+
19
+ import fs from "node:fs";
20
+ import os from "node:os";
21
+ import path from "node:path";
22
+ import { createRequire } from "node:module";
23
+
24
+ const requireCjs = createRequire(import.meta.url);
25
+
26
+ /** Mirror Electron userData resolution for desktop-app-vue. */
27
+ export function defaultDesktopUserDataDir() {
28
+ const home = os.homedir();
29
+ const productName = "chainlesschain-desktop-vue";
30
+ switch (process.platform) {
31
+ case "win32":
32
+ return path.join(
33
+ process.env.APPDATA || path.join(home, "AppData", "Roaming"),
34
+ productName,
35
+ );
36
+ case "darwin":
37
+ return path.join(home, "Library", "Application Support", productName);
38
+ default:
39
+ return path.join(
40
+ process.env.XDG_CONFIG_HOME || path.join(home, ".config"),
41
+ productName,
42
+ );
43
+ }
44
+ }
45
+
46
+ /** Desktop SQLite DB path (shared with desktop app). */
47
+ export function defaultProjectDbPath() {
48
+ return path.join(defaultDesktopUserDataDir(), "data", "chainlesschain.db");
49
+ }
50
+
51
+ async function _openDatabase(dbPath) {
52
+ if (!fs.existsSync(dbPath)) {
53
+ const e = new Error(
54
+ `Desktop DB not found at: ${dbPath}\n` +
55
+ `Has the desktop app ever been launched? It creates the DB on first run.`,
56
+ );
57
+ e.code = "DB_NOT_FOUND";
58
+ throw e;
59
+ }
60
+ for (const pkg of ["better-sqlite3-multiple-ciphers", "better-sqlite3"]) {
61
+ try {
62
+ const Database = requireCjs(pkg);
63
+ const db = new Database(dbPath);
64
+ // WAL mode: desktop app may be running concurrently. WAL allows
65
+ // multiple readers + one writer with no contention for short ops.
66
+ db.pragma("journal_mode = WAL");
67
+ db.pragma("foreign_keys = ON");
68
+ return { kind: "native", db, close: () => db.close() };
69
+ } catch (_e) {
70
+ /* try next */
71
+ }
72
+ }
73
+ const initSqlJs = requireCjs("sql.js");
74
+ const SQL = await initSqlJs();
75
+ const buf = fs.readFileSync(dbPath);
76
+ const sqlDb = new SQL.Database(buf);
77
+ return {
78
+ kind: "wasm",
79
+ db: _adaptSqlJs(sqlDb),
80
+ close: () => {
81
+ // WASM: write back on close. Desktop should be closed to avoid race.
82
+ const out = sqlDb.export();
83
+ fs.writeFileSync(dbPath, Buffer.from(out));
84
+ sqlDb.close();
85
+ },
86
+ };
87
+ }
88
+
89
+ function _adaptSqlJs(sqlDb) {
90
+ return {
91
+ prepare(sql) {
92
+ return {
93
+ run(...params) {
94
+ const stmt = sqlDb.prepare(sql);
95
+ try {
96
+ stmt.bind(params);
97
+ stmt.step();
98
+ return { changes: sqlDb.getRowsModified(), lastInsertRowid: 0 };
99
+ } finally {
100
+ stmt.free();
101
+ }
102
+ },
103
+ get(...params) {
104
+ const stmt = sqlDb.prepare(sql);
105
+ try {
106
+ stmt.bind(params);
107
+ return stmt.step() ? stmt.getAsObject() : undefined;
108
+ } finally {
109
+ stmt.free();
110
+ }
111
+ },
112
+ all(...params) {
113
+ const stmt = sqlDb.prepare(sql);
114
+ try {
115
+ stmt.bind(params);
116
+ const rows = [];
117
+ while (stmt.step()) rows.push(stmt.getAsObject());
118
+ return rows;
119
+ } finally {
120
+ stmt.free();
121
+ }
122
+ },
123
+ };
124
+ },
125
+ pragma() {
126
+ // sql.js doesn't support pragmas via prepare; quietly ignore.
127
+ },
128
+ exec(sql) {
129
+ sqlDb.exec(sql);
130
+ },
131
+ };
132
+ }
133
+
134
+ /** Generate a project ID matching the desktop convention (UUID v4). */
135
+ export function newProjectId() {
136
+ // Node 14.17+ ships crypto.randomUUID; no extra dep needed.
137
+ const crypto = requireCjs("node:crypto");
138
+ return crypto.randomUUID();
139
+ }
140
+
141
+ /**
142
+ * Open the desktop SQLite DB and return { db, close }.
143
+ *
144
+ * @param {string} [dbPath] Override DB path (default: desktop userData db)
145
+ * @returns {Promise<{ db, close }>}
146
+ */
147
+ export async function openProjectsDb(dbPath = defaultProjectDbPath()) {
148
+ return _openDatabase(dbPath);
149
+ }
150
+
151
+ /** Valid project_type values (matches CHECK constraint in projects table). */
152
+ export const VALID_PROJECT_TYPES = [
153
+ "web",
154
+ "document",
155
+ "data",
156
+ "app",
157
+ "presentation",
158
+ "spreadsheet",
159
+ "design",
160
+ "code",
161
+ "workflow",
162
+ "knowledge",
163
+ ];
164
+
165
+ /** Valid project statuses. */
166
+ export const VALID_PROJECT_STATUSES = [
167
+ "draft",
168
+ "active",
169
+ "completed",
170
+ "archived",
171
+ ];
@@ -1 +0,0 @@
1
- import{f as $,r as K,o as xe,x as rt,K as d,L as c,M as g,c as e,N as t,u as a,R as l,O as i,P as s,Q as L,F as M,Y as et,Z as W,S as j,w as dt,I as pt,H as yt,_ as mt}from"./vendor-Ci2pTZ_t.js";import{u as tt,_ as at,E as ft,a as kt,b as _t,T as gt,c as ht,d as V}from"./index-BxjOmfVA.js";import{u as U}from"./useShellMode-CgR0wCYM.js";import{B as ye,R as vt,F as z,G as x,D as ee,M as fe,h as te,i as ke,j as ae,A as _e,N as ge,k as he,l as ve,m as we,n as be,S as Le,o as $e,p as Oe,q as oe,r as Ce,s as Se,t as Ee,u as Re,v as Ae,w as Ne,x as Te,P as je,y as ne,K as se,z as T,H as Be,J as ie,O as Pe,Q as De,W as Me,U as Ue,V as le,X as Ke,Y as Ie,Z as ce,_ as Fe,$ as Ve,a0 as ze,a1 as qe,a2 as We,a3 as Ge,a4 as Ye,a5 as He,a6 as Je,a7 as Qe,a8 as wt,a9 as Ze,e as bt,aa as Lt}from"./icons-B2mcO3YM.js";import $t from"./index-DWbRHjgk.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BJ1K-IDI.js";import"./pickAttrs-B0q7EpvV.js";import"./initDefaultProps-CDOGbz6v.js";import"./motion-ChIpIzUN.js";import"./raf-Deuc0E8-.js";import"./index-QgJGoGAK.js";import"./index-D4_1yL1c.js";import"./isVisible-C7tPsqfj.js";import"./useState-4T1Ntfpx.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-Dfhm05kA.js";import"./createContext-C7gBVuRm.js";import"./Compact-DyLYzWoX.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-D1npYi6G.js";import"./zoom-CLMtA8PG.js";import"./ActionButton-DY69UkxV.js";import"./vnode-Duw65sZ1.js";const Ot=""+new URL("logo-DBCYUiWP.png",import.meta.url).href,w={notifications:K([]),unreadCount:K(0)};function q(v){if(v&&v.ok===!1)throw new Error(v.error||"notification handler failed");return v?.result??v}function Ct(){const v=tt();async function B({limit:p=50,offset:u=0,isRead:f}={}){if(!U().isEmbedded)return w.notifications.value=[],w.unreadCount.value=0,w.notifications.value;const y=await v.sendRaw({type:"notification.list",limit:p,offset:u,isRead:f},15e3),b=q(y);if(b?.success===!1)throw new Error(b.error||"notification.list failed");return w.notifications.value=Array.isArray(b?.notifications)?b.notifications:[],await O(),w.notifications.value}async function O(){if(!U().isEmbedded)return w.unreadCount.value=0,0;const p=await v.sendRaw({type:"notification.unread-count"},1e4),u=q(p);return w.unreadCount.value=Number(u?.count)||0,w.unreadCount.value}async function h(p){if(p==null||p==="")throw new Error("id is required");if(!U().isEmbedded)return;const u=await v.sendRaw({type:"notification.mark-read",id:p},1e4),f=q(u);if(f?.success===!1)throw new Error(f.error||"notification.mark-read failed");const y=w.notifications.value.find(b=>b.id===p);y&&(y.is_read=1),await O()}async function C(){if(!U().isEmbedded)return;const p=await v.sendRaw({type:"notification.mark-all-read"},1e4),u=q(p);if(u?.success===!1)throw new Error(u.error||"notification.mark-all-read failed");for(const f of w.notifications.value)f.is_read=1;w.unreadCount.value=0}async function R(p,u=""){if(!U().isEmbedded)throw new Error("桌面通知仅在嵌入式 web-shell 中可用");const f=await v.sendRaw({type:"notification.send-desktop",title:p,body:u},1e4),y=q(f);if(y?.success===!1)throw new Error(y.error||"notification.send-desktop failed")}return{notifications:$(()=>w.notifications.value),unreadCount:$(()=>w.unreadCount.value),refresh:B,refreshUnreadCount:O,markRead:h,markAllRead:C,sendDesktop:R}}const St={class:"notif-toolbar"},Et={class:"notif-body"},Rt={key:2,class:"notif-list"},At=["onClick"],Nt={class:"notif-row"},Tt={class:"notif-title"},jt={class:"notif-time"},Bt={key:0,class:"notif-message"},Pt={__name:"NotificationBell",setup(v){const B=K(!1),O=K("all"),h=K(!1),{notifications:C,unreadCount:R,refresh:p,markRead:u,markAllRead:f}=Ct();function y(){Y()}xe(()=>{window.addEventListener("cc:open-notification-drawer",y)}),rt(()=>{window.removeEventListener("cc:open-notification-drawer",y)});const b=$(()=>O.value==="unread"?C.value.filter(m=>!m.is_read):C.value);async function G(){if(U().isEmbedded){h.value=!0;try{await p({limit:100})}catch{}finally{h.value=!1}}}async function Y(){B.value=!0,await G()}async function H(m){if(!m.is_read)try{await u(m.id)}catch{}}async function J(){try{await f()}catch(m){console.warn("[NotificationBell] markAllRead failed:",m?.message||m)}}function ue(m){if(!m)return"";const k=typeof m=="string"?Date.parse(m):Number(m);if(!Number.isFinite(k))return String(m);const S=Date.now()-k,P=6e4,A=60*P,I=24*A;return S<P?"刚刚":S<A?`${Math.floor(S/P)} 分钟前`:S<I?`${Math.floor(S/A)} 小时前`:new Date(k).toLocaleDateString()}return(m,k)=>{const S=d("a-badge"),P=d("a-tooltip"),A=d("a-radio-button"),I=d("a-radio-group"),F=d("a-space"),Q=d("a-button"),re=d("a-empty"),de=d("a-spin"),pe=d("a-drawer");return c(),g(M,null,[e(P,{title:"通知"},{default:t(()=>[e(S,{count:a(R),"overflow-count":99,offset:[-4,4]},{default:t(()=>[l("button",{type:"button",class:"notif-bell-btn","aria-label":"通知",onClick:Y},[e(a(ye))])]),_:1},8,["count"])]),_:1}),e(pe,{open:B.value,"onUpdate:open":k[1]||(k[1]=_=>B.value=_),title:"通知中心",placement:"right",width:400,"body-style":{padding:0}},{default:t(()=>[l("div",St,[e(F,null,{default:t(()=>[e(I,{value:O.value,"onUpdate:value":k[0]||(k[0]=_=>O.value=_),size:"small","button-style":"solid"},{default:t(()=>[e(A,{value:"all"},{default:t(()=>[i("全部 ("+s(a(C).length)+")",1)]),_:1}),e(A,{value:"unread"},{default:t(()=>[i("未读 ("+s(a(R))+")",1)]),_:1})]),_:1},8,["value"])]),_:1}),e(F,null,{default:t(()=>[e(Q,{size:"small",loading:h.value,onClick:G},{icon:t(()=>[e(a(vt))]),_:1},8,["loading"]),e(Q,{size:"small",disabled:a(R)===0,onClick:J},{default:t(()=>[...k[2]||(k[2]=[i(" 全部已读 ",-1)])]),_:1},8,["disabled"])]),_:1})]),l("div",Et,[!h.value&&b.value.length===0?(c(),L(re,{key:0,description:"暂无通知",image:a(ft).PRESENTED_IMAGE_SIMPLE,style:{padding:"60px 0"}},null,8,["image"])):h.value?(c(),L(de,{key:1,style:{display:"block",padding:"60px"}})):(c(),g("ul",Rt,[(c(!0),g(M,null,et(b.value,_=>(c(),g("li",{key:_.id,class:W(["notif-item",{unread:!_.is_read}]),onClick:n=>H(_)},[l("div",Nt,[l("div",Tt,s(_.title||_.message||"(无标题)"),1),l("span",jt,s(ue(_.created_at)),1)]),_.message&&_.title?(c(),g("div",Bt,s(_.message),1)):j("",!0)],10,At))),128))]))])]),_:1},8,["open"])],64)}}},Dt=at(Pt,[["__scopeId","data-v-af539070"]]),Mt=["src"],Ut={key:0,class:"logo-text"},Kt={key:0,class:"mode-banner project"},It={class:"banner-info"},Ft={class:"banner-name"},Vt={class:"banner-sub"},zt={key:1,class:"mode-banner global"},qt={class:"banner-name"},Wt=["title"],Gt={class:"group-label"},Yt={class:"group-label"},Ht={class:"group-label"},Jt={class:"group-label"},Qt={class:"group-label"},Zt={class:"group-label"},Xt={class:"group-label"},xt={class:"group-label"},ea={class:"group-label"},ta={key:0,class:"footer-text"},aa={class:"header-left"},oa={class:"header-right"},na={class:"theme-switcher"},sa=["data-theme-key","onClick"],ia=["data-locale"],la={class:"lang-switch-label"},ca={class:"version-tag"},Xe="cc.web-panel.sidebar.openKeys",ua={__name:"AppLayout",setup(v){const B=pt(),O=yt(),h=tt(),C=kt(),{t:R}=_t(),p=U(),u=K(!1),f=window.__CC_CONFIG__||{},y=$(()=>f.mode==="project"),b="v5.0.3.49",G=$(()=>C.current),Y=$(()=>C.config.vars["--menu-mode"]),H=$(()=>{const n=O.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp",quickask:"quick-ask",ukeysign:"ukey-sign"}[n]||n]}),J=["g-overview","g-config","g-data","g-advanced","g-enterprise","g-social","g-media","g-extension"];function ue(){try{const n=localStorage.getItem(Xe);if(n){const r=JSON.parse(n);if(Array.isArray(r))return r.filter(o=>J.includes(o))}}catch{}return[...J]}const m=K(ue());dt(m,n=>{try{localStorage.setItem(Xe,JSON.stringify(n))}catch{}},{deep:!0});const k=$(()=>h.status),S=$(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[h.status]||"default"),P=$(()=>{const n=`appLayout.footerStatus.${h.status}`,r=R(n);return r===n?R("appLayout.footerStatus.unknown"):r});function A(n){C.setTheme(n)}const{current:I,supported:F,setLocale:Q}=ht();function re(){const n=F[(F.indexOf(I.value)+1)%F.length];Q(n)}async function de(n){try{const r=await h.sendRaw({type:"window.open",role:n},1e4);if(r?.ok===!1){V.error(`打开失败:${r.error||"未知"}`);return}const o=r?.result??r;o?.reason==="role_reserved"?V.warning("该窗口角色被保留"):o?.reason}catch(r){V.error(`打开桌面窗口失败:${r.message||r}`)}}async function pe(){$t.confirm({title:"切换到桌面壳?",content:"回到 V5/V6 桌面壳。完整 electronAPI 表面(UKey 硬件 / 原生对话框 / 系统设置等)会重新可用,但失去 web-panel 的 SPA 体验。保存后需要重启应用才生效。",okText:"切换并重启",cancelText:"取消",centered:!0,async onOk(){try{const n=await h.sendRaw({type:"shell.switch",target:"desktop"},5e3);if(n?.ok===!1)throw new Error(n.error||"shell.switch returned failure");V.loading({content:"正在重启…",duration:0})}catch(n){const r=n instanceof Error?n.message:String(n);V.error("切换失败:"+r)}}})}function _({key:n}){if(typeof n=="string"&&n.startsWith("desktop:")){de(n);return}B.push({mcp:"/mcp"}[n]||`/${n}`)}return xe(()=>h.connect()),(n,r)=>{const o=d("a-menu-item"),E=d("a-sub-menu"),D=d("a-menu-divider"),ot=d("a-menu"),nt=d("a-badge"),st=d("a-layout-sider"),Z=d("a-tooltip"),it=d("a-tag"),lt=d("a-layout-header"),ct=d("router-view"),ut=d("a-layout-content"),me=d("a-layout");return c(),L(me,{class:"app-root"},{default:t(()=>[e(st,{collapsed:u.value,"onUpdate:collapsed":r[2]||(r[2]=N=>u.value=N),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[l("div",{class:W(["logo",{collapsed:u.value}])},[l("img",{src:a(Ot),alt:"ChainlessChain",class:"logo-icon"},null,8,Mt),u.value?j("",!0):(c(),g("span",Ut,"ChainlessChain"))],2),u.value?(c(),g("div",{key:1,class:"mode-icon-sm",title:y.value?a(f).projectName:n.$t("appLayout.scope.global")},[y.value?(c(),L(a(z),{key:0,style:{color:"#1677ff"}})):(c(),L(a(x),{key:1,style:{color:"#722ed1"}}))],8,Wt)):(c(),g(M,{key:0},[y.value?(c(),g("div",Kt,[e(a(z),{class:"banner-icon"}),l("div",It,[l("div",Ft,s(a(f).projectName||n.$t("appLayout.scope.fallbackProject")),1),l("div",Vt,s(n.$t("appLayout.scope.projectPanel")),1)])])):(c(),g("div",zt,[e(a(x),{class:"banner-icon"}),l("span",qt,s(n.$t("appLayout.scope.global")),1)]))],64)),e(ot,{selectedKeys:H.value,"onUpdate:selectedKeys":r[0]||(r[0]=N=>H.value=N),openKeys:m.value,"onUpdate:openKeys":r[1]||(r[1]=N=>m.value=N),theme:Y.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:_},{default:t(()=>[u.value?(c(),g(M,{key:1},[e(o,{key:"dashboard"},{icon:t(()=>[e(a(ee))]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(a(fe))]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(a(te))]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(a(ke))]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(a(ae))]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(a(_e))]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(a(ge))]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(a(he))]),_:1}),e(D,{class:"divider-sm"}),e(o,{key:"skills"},{icon:t(()=>[e(a(ve))]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(a(we))]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(a(be))]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(a(z))]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(a(Le))]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(a(ye))]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(a($e))]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(a(Oe))]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(a(oe))]),_:1}),e(D,{class:"divider-sm"}),e(o,{key:"notes"},{icon:t(()=>[e(a(Ce))]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(a(Se))]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(a(Ee))]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(a(Re))]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(a(Ae))]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(a(Ne))]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(a(Te))]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(a(je))]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(a(te))]),_:1}),e(D,{class:"divider-sm"}),e(o,{key:"security"},{icon:t(()=>[e(a(ne))]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(a(se))]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(a(T))]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(a(Be))]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(a(T))]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(a(T))]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(a(ie))]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(a(Pe))]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(a(De))]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(a(Me))]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(a(Ue))]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(a(le))]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(a(oe))]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(a(Ke))]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(a(Ie))]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(a(T))]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(a(ce))]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(a(Fe))]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(a(Ve))]),_:1}),e(D,{class:"divider-sm"}),e(o,{key:"wallet"},{icon:t(()=>[e(a(ze))]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(a(ie))]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(a(qe))]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(a(ee))]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(a(We))]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(a(Ge))]),_:1}),e(D,{class:"divider-sm"}),e(o,{key:"community"},{icon:t(()=>[e(a(Ye))]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(a(He))]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(a(Je))]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(a(Qe))]),_:1}),e(D,{class:"divider-sm"}),e(o,{key:"rssfeed"},{icon:t(()=>[e(a(Ze))]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(a(se))]),_:1}),a(p).isEmbedded?(c(),g(M,{key:0},[e(D,{class:"divider-sm"}),e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(a(ne))]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(a(le))]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(a(ce))]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(a(ae))]),_:1})],64)):j("",!0)],64)):(c(),g(M,{key:0},[e(E,{key:"g-overview"},{title:t(()=>[l("span",Gt,s(n.$t("appLayout.groups.overview")),1)]),default:t(()=>[e(o,{key:"dashboard"},{icon:t(()=>[e(a(ee))]),default:t(()=>[i(s(n.$t("appLayout.items.dashboard")),1)]),_:1}),e(o,{key:"chat"},{icon:t(()=>[e(a(fe))]),default:t(()=>[i(s(n.$t("appLayout.items.chat")),1)]),_:1}),e(o,{key:"quick-ask"},{icon:t(()=>[e(a(te))]),default:t(()=>[i(s(n.$t("appLayout.items.quickAsk")),1)]),_:1}),e(o,{key:"cowork"},{icon:t(()=>[e(a(ke))]),default:t(()=>[i(s(n.$t("appLayout.items.cowork")),1)]),_:1}),e(o,{key:"services"},{icon:t(()=>[e(a(ae))]),default:t(()=>[i(s(n.$t("appLayout.items.services")),1)]),_:1}),e(o,{key:"aiops"},{icon:t(()=>[e(a(_e))]),default:t(()=>[i(s(n.$t("appLayout.items.aiops")),1)]),_:1}),e(o,{key:"tokens"},{icon:t(()=>[e(a(ge))]),default:t(()=>[i(s(n.$t("appLayout.items.tokens")),1)]),_:1}),e(o,{key:"logs"},{icon:t(()=>[e(a(he))]),default:t(()=>[i(s(n.$t("appLayout.items.logs")),1)]),_:1})]),_:1}),e(E,{key:"g-config"},{title:t(()=>[l("span",Yt,s(n.$t("appLayout.groups.config")),1)]),default:t(()=>[e(o,{key:"skills"},{icon:t(()=>[e(a(ve))]),default:t(()=>[i(s(n.$t("appLayout.items.skills")),1)]),_:1}),e(o,{key:"providers"},{icon:t(()=>[e(a(we))]),default:t(()=>[i(s(n.$t("appLayout.items.providers")),1)]),_:1}),e(o,{key:"mcp"},{icon:t(()=>[e(a(be))]),default:t(()=>[i(s(n.$t("appLayout.items.mcp")),1)]),_:1}),e(o,{key:"project-settings"},{icon:t(()=>[e(a(z))]),default:t(()=>[i(s(n.$t("appLayout.items.projectSettings")),1)]),_:1}),e(o,{key:"speech-settings"},{icon:t(()=>[e(a(Le))]),default:t(()=>[i(s(n.$t("appLayout.items.speechSettings")),1)]),_:1}),e(o,{key:"notification-settings"},{icon:t(()=>[e(a(ye))]),default:t(()=>[i(s(n.$t("appLayout.items.notificationSettings")),1)]),_:1}),e(o,{key:"sync-settings"},{icon:t(()=>[e(a($e))]),default:t(()=>[i(s(n.$t("appLayout.items.syncSettings")),1)]),_:1}),e(o,{key:"nlprog"},{icon:t(()=>[e(a(Oe))]),default:t(()=>[i(s(n.$t("appLayout.items.nlprog")),1)]),_:1}),e(o,{key:"codegen"},{icon:t(()=>[e(a(oe))]),default:t(()=>[i(s(n.$t("appLayout.items.codegen")),1)]),_:1})]),_:1}),e(E,{key:"g-data"},{title:t(()=>[l("span",Ht,s(n.$t("appLayout.groups.data")),1)]),default:t(()=>[e(o,{key:"notes"},{icon:t(()=>[e(a(Ce))]),default:t(()=>[i(s(n.$t("appLayout.items.notes")),1)]),_:1}),e(o,{key:"search"},{icon:t(()=>[e(a(Se))]),default:t(()=>[i(s(n.$t("appLayout.items.search")),1)]),_:1}),e(o,{key:"memory"},{icon:t(()=>[e(a(Ee))]),default:t(()=>[i(s(n.$t("appLayout.items.memory")),1)]),_:1}),e(o,{key:"knowledge"},{icon:t(()=>[e(a(Re))]),default:t(()=>[i(s(n.$t("appLayout.items.knowledge")),1)]),_:1}),e(o,{key:"marketplace"},{icon:t(()=>[e(a(Ae))]),default:t(()=>[i(s(n.$t("appLayout.items.marketplace")),1)]),_:1}),e(o,{key:"cron"},{icon:t(()=>[e(a(Ne))]),default:t(()=>[i(s(n.$t("appLayout.items.cron")),1)]),_:1}),e(o,{key:"workflow"},{icon:t(()=>[e(a(Te))]),default:t(()=>[i(s(n.$t("appLayout.items.workflow")),1)]),_:1}),e(o,{key:"pipeline"},{icon:t(()=>[e(a(je))]),default:t(()=>[i(s(n.$t("appLayout.items.pipeline")),1)]),_:1}),e(o,{key:"tasks"},{icon:t(()=>[e(a(te))]),default:t(()=>[i(s(n.$t("appLayout.items.tasks")),1)]),_:1})]),_:1}),e(E,{key:"g-advanced"},{title:t(()=>[l("span",Jt,s(n.$t("appLayout.groups.advanced")),1)]),default:t(()=>[e(o,{key:"security"},{icon:t(()=>[e(a(ne))]),default:t(()=>[i(s(n.$t("appLayout.items.security")),1)]),_:1}),e(o,{key:"ukey-sign"},{icon:t(()=>[e(a(se))]),default:t(()=>[i(s(n.$t("appLayout.items.ukeySign")),1)]),_:1}),e(o,{key:"trust"},{icon:t(()=>[e(a(T))]),default:t(()=>[i(s(n.$t("appLayout.items.trust")),1)]),_:1}),e(o,{key:"audit"},{icon:t(()=>[e(a(Be))]),default:t(()=>[i(s(n.$t("appLayout.items.audit")),1)]),_:1}),e(o,{key:"mtc"},{icon:t(()=>[e(a(T))]),default:t(()=>[i(s(n.$t("appLayout.items.mtc")),1)]),_:1}),e(o,{key:"mtc-audit"},{icon:t(()=>[e(a(T))]),default:t(()=>[i(s(n.$t("appLayout.items.mtcAudit","MTC 审计")),1)]),_:1}),e(o,{key:"multisig"},{icon:t(()=>[e(a(ie))]),default:t(()=>[i(s(n.$t("appLayout.items.multisig","M-of-N 多签")),1)]),_:1}),e(o,{key:"did"},{icon:t(()=>[e(a(Pe))]),default:t(()=>[i(s(n.$t("appLayout.items.did")),1)]),_:1}),e(o,{key:"permissions"},{icon:t(()=>[e(a(De))]),default:t(()=>[i(s(n.$t("appLayout.items.permissions")),1)]),_:1}),e(o,{key:"p2p"},{icon:t(()=>[e(a(Me))]),default:t(()=>[i(s(n.$t("appLayout.items.p2p")),1)]),_:1}),e(o,{key:"mobile-bridge"},{icon:t(()=>[e(a(Ue))]),default:t(()=>[i(s(n.$t("appLayout.items.mobileBridge","移动桥")),1)]),_:1}),e(o,{key:"backup"},{icon:t(()=>[e(a(le))]),default:t(()=>[i(s(n.$t("appLayout.items.backup")),1)]),_:1}),e(o,{key:"git"},{icon:t(()=>[e(a(oe))]),default:t(()=>[i(s(n.$t("appLayout.items.git")),1)]),_:1}),e(o,{key:"projects"},{icon:t(()=>[e(a(Ke))]),default:t(()=>[i(s(n.$t("appLayout.items.projects")),1)]),_:1}),e(o,{key:"crosschain"},{icon:t(()=>[e(a(Ie))]),default:t(()=>[i(s(n.$t("appLayout.items.crosschain")),1)]),_:1}),e(o,{key:"compliance"},{icon:t(()=>[e(a(T))]),default:t(()=>[i(s(n.$t("appLayout.items.compliance")),1)]),_:1}),e(o,{key:"privacy"},{icon:t(()=>[e(a(ce))]),default:t(()=>[i(s(n.$t("appLayout.items.privacy")),1)]),_:1}),e(o,{key:"inference"},{icon:t(()=>[e(a(Fe))]),default:t(()=>[i(s(n.$t("appLayout.items.inference")),1)]),_:1}),e(o,{key:"federation"},{icon:t(()=>[e(a(Ve))]),default:t(()=>[i(s(n.$t("appLayout.items.federation")),1)]),_:1})]),_:1}),e(E,{key:"g-enterprise"},{title:t(()=>[l("span",Qt,s(n.$t("appLayout.groups.enterprise")),1)]),default:t(()=>[e(o,{key:"wallet"},{icon:t(()=>[e(a(ze))]),default:t(()=>[i(s(n.$t("appLayout.items.wallet")),1)]),_:1}),e(o,{key:"organization"},{icon:t(()=>[e(a(ie))]),default:t(()=>[i(s(n.$t("appLayout.items.organization")),1)]),_:1}),e(o,{key:"tenant"},{icon:t(()=>[e(a(qe))]),default:t(()=>[i(s(n.$t("appLayout.items.tenant")),1)]),_:1}),e(o,{key:"sla"},{icon:t(()=>[e(a(ee))]),default:t(()=>[i(s(n.$t("appLayout.items.sla")),1)]),_:1}),e(o,{key:"analytics"},{icon:t(()=>[e(a(We))]),default:t(()=>[i(s(n.$t("appLayout.items.analytics")),1)]),_:1}),e(o,{key:"templates"},{icon:t(()=>[e(a(Ge))]),default:t(()=>[i(s(n.$t("appLayout.items.templates")),1)]),_:1})]),_:1}),e(E,{key:"g-social"},{title:t(()=>[l("span",Zt,s(n.$t("appLayout.groups.social")),1)]),default:t(()=>[e(o,{key:"community"},{icon:t(()=>[e(a(Ye))]),default:t(()=>[i(s(n.$t("appLayout.items.community")),1)]),_:1}),e(o,{key:"governance"},{icon:t(()=>[e(a(He))]),default:t(()=>[i(s(n.$t("appLayout.items.governance")),1)]),_:1}),e(o,{key:"reputation"},{icon:t(()=>[e(a(Je))]),default:t(()=>[i(s(n.$t("appLayout.items.reputation")),1)]),_:1}),e(o,{key:"recommend"},{icon:t(()=>[e(a(Qe))]),default:t(()=>[i(s(n.$t("appLayout.items.recommend")),1)]),_:1})]),_:1}),e(E,{key:"g-media"},{title:t(()=>[l("span",Xt,s(n.$t("appLayout.groups.media")),1)]),default:t(()=>[e(o,{key:"video"},{icon:t(()=>[e(a(wt))]),default:t(()=>[i(s(n.$t("appLayout.items.video")),1)]),_:1})]),_:1}),e(E,{key:"g-extension"},{title:t(()=>[l("span",xt,s(n.$t("appLayout.groups.extension")),1)]),default:t(()=>[e(o,{key:"rssfeed"},{icon:t(()=>[e(a(Ze))]),default:t(()=>[i(s(n.$t("appLayout.items.rssfeed")),1)]),_:1}),e(o,{key:"webauthn"},{icon:t(()=>[e(a(se))]),default:t(()=>[i(s(n.$t("appLayout.items.webauthn")),1)]),_:1})]),_:1}),a(p).isEmbedded?(c(),L(E,{key:"g-desktop"},{title:t(()=>[l("span",ea,s(n.$t("appLayout.groups.desktop")),1)]),default:t(()=>[e(o,{key:"desktop:hardware-wallet"},{icon:t(()=>[e(a(ne))]),default:t(()=>[i(s(n.$t("appLayout.items.desktopHardware")),1)]),_:1}),e(o,{key:"desktop:backup-dashboard"},{icon:t(()=>[e(a(le))]),default:t(()=>[i(s(n.$t("appLayout.items.desktopBackup")),1)]),_:1}),e(o,{key:"desktop:llm-test-chat"},{icon:t(()=>[e(a(ce))]),default:t(()=>[i(s(n.$t("appLayout.items.desktopLlmTest")),1)]),_:1}),e(o,{key:"desktop:settings"},{icon:t(()=>[e(a(ae))]),default:t(()=>[i(s(n.$t("appLayout.items.desktopSettings")),1)]),_:1})]),_:1})):j("",!0)],64))]),_:1},8,["selectedKeys","openKeys","theme","inline-collapsed"]),l("div",{class:W(["sidebar-footer",{collapsed:u.value}])},[e(nt,{status:S.value},null,8,["status"]),u.value?j("",!0):(c(),g("span",ta,s(P.value),1))],2)]),_:1},8,["collapsed"]),e(me,{class:"main-area"},{default:t(()=>[e(lt,{class:"app-header"},{default:t(()=>[l("div",aa,[l("div",{class:W(["scope-tag",y.value?"project":"global"])},[(c(),L(mt(y.value?a(z):a(x)))),l("span",null,s(y.value?a(f).projectName||n.$t("appLayout.scope.fallbackProject"):n.$t("appLayout.scope.global")),1),y.value&&a(f).projectRoot?(c(),L(Z,{key:0,title:a(f).projectRoot},{default:t(()=>[e(a(bt),{class:"info-icon"})]),_:1},8,["title"])):j("",!0)],2)]),l("div",oa,[l("div",na,[(c(!0),g(M,null,et(a(gt),(N,X)=>(c(),L(Z,{key:X,title:N.label},{default:t(()=>[l("button",{class:W(["theme-btn",{active:G.value===X}]),"data-theme-key":X,onClick:ra=>A(X)},s(N.icon),11,sa)]),_:2},1032,["title"]))),128))]),e(Z,{title:n.$t("language.label")},{default:t(()=>[l("button",{class:"lang-switch-btn","data-locale":a(I),onClick:re},[e(a(x),{class:"lang-switch-icon"}),l("span",la,s(n.$t("language.switch")),1)],8,ia)]),_:1},8,["title"]),a(p).isEmbedded?(c(),L(Dt,{key:0})):j("",!0),l("span",ca,s(a(b)),1),a(p).isEmbedded?(c(),L(Z,{key:1,title:n.$t("appLayout.shellSwitch")},{default:t(()=>[l("button",{type:"button",class:"shell-switch-btn",onClick:pe},[e(a(Lt))])]),_:1},8,["title"])):j("",!0),e(it,{color:k.value==="connected"?"green":k.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[i(s(k.value==="connected"?n.$t("appLayout.wsStatus.connected"):k.value==="connecting"?n.$t("appLayout.wsStatus.connecting"):n.$t("appLayout.wsStatus.disconnected")),1)]),_:1},8,["color"])])]),_:1}),e(ut,{class:"page-content"},{default:t(()=>[e(ct)]),_:1})]),_:1})]),_:1})}}},Da=at(ua,[["__scopeId","data-v-165c176e"]]);export{Da as default};
@@ -1 +0,0 @@
1
- .notif-bell-btn[data-v-af539070]{width:32px;height:32px;border:none;background:transparent;border-radius:50%;cursor:pointer;color:var(--text-primary);display:inline-flex;align-items:center;justify-content:center;font-size:16px;transition:background .15s,transform .15s}.notif-bell-btn[data-v-af539070]:hover{background:var(--bg-card-hover);transform:scale(1.1)}.notif-toolbar[data-v-af539070]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--border-color);background:var(--bg-card)}.notif-body[data-v-af539070]{max-height:calc(100vh - 130px);overflow-y:auto}.notif-list[data-v-af539070]{list-style:none;margin:0;padding:0}.notif-item[data-v-af539070]{padding:12px 16px;border-bottom:1px solid var(--border-color);cursor:pointer;transition:background .15s}.notif-item[data-v-af539070]:hover{background:var(--bg-card-hover)}.notif-item.unread[data-v-af539070]{background:#1677ff14}.notif-row[data-v-af539070]{display:flex;align-items:baseline;justify-content:space-between;gap:8px}.notif-title[data-v-af539070]{font-weight:500;color:var(--text-primary);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notif-time[data-v-af539070]{flex-shrink:0;font-size:11px;color:var(--text-muted)}.notif-message[data-v-af539070]{margin-top:4px;font-size:12px;color:var(--text-secondary);line-height:1.5;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.app-root[data-v-165c176e]{height:100vh;background:var(--bg-base);overflow:hidden}.sidebar[data-v-165c176e]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s;height:100vh}[data-v-165c176e] .ant-layout-sider-children{display:flex;flex-direction:column;overflow:hidden;height:100%}.main-area[data-v-165c176e]{background:var(--bg-base);height:100vh;display:flex;flex-direction:column}.logo[data-v-165c176e]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-165c176e]{padding:0;justify-content:center}.logo-icon[data-v-165c176e]{width:24px;height:24px;flex-shrink:0;object-fit:contain}.logo-text[data-v-165c176e]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-165c176e]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-165c176e]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-165c176e]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-165c176e]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-165c176e]{color:#722ed1}.banner-info[data-v-165c176e]{flex:1;min-width:0}.banner-name[data-v-165c176e]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-165c176e]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-165c176e]{color:#c084fc}.mode-icon-sm[data-v-165c176e]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-165c176e]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important;flex:1;overflow-y:auto;overflow-x:hidden}.group-label[data-v-165c176e]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-165c176e] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-165c176e] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-165c176e]{margin:4px 0!important}.sidebar-footer[data-v-165c176e]{flex-shrink:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-165c176e]{justify-content:center;padding:8px 0}.footer-text[data-v-165c176e]{color:var(--text-secondary);font-size:11px}.app-header[data-v-165c176e]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-165c176e],.header-right[data-v-165c176e]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-165c176e]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-165c176e]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-165c176e]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-165c176e]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-165c176e]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-165c176e]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-165c176e]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-165c176e]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-165c176e]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-165c176e]{margin:0!important;font-size:11px}.lang-switch-btn[data-v-165c176e]{display:inline-flex;align-items:center;gap:5px;height:28px;padding:0 12px;border:1px solid var(--border-color);border-radius:14px;background:var(--bg-card);color:var(--text-primary);font-size:12px;font-weight:500;cursor:pointer;transition:background .15s,color .15s,border-color .15s,transform .15s}.lang-switch-btn[data-v-165c176e]:hover{background:var(--bg-card-hover);color:#1677ff;border-color:#1677ff;transform:scale(1.04)}.lang-switch-icon[data-v-165c176e]{font-size:14px}.lang-switch-label[data-v-165c176e]{line-height:1}.shell-switch-btn[data-v-165c176e]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:background .15s,transform .15s,color .15s;opacity:.6}.shell-switch-btn[data-v-165c176e]:hover{opacity:1;transform:scale(1.15);background:var(--bg-card-hover);color:var(--text-primary)}.page-content[data-v-165c176e]{padding:24px;overflow:auto;background:var(--bg-base);flex:1;min-height:0}
@@ -1 +0,0 @@
1
- .page-title[data-v-2a136202]{font-size:22px;font-weight:600;margin:0;color:var(--text-primary)}.page-sub[data-v-2a136202]{font-size:13px;color:var(--text-secondary);margin:4px 0 0}.filter-bar[data-v-2a136202]{display:flex;align-items:center;margin-bottom:16px}.multisig-row[data-v-2a136202]{cursor:pointer}.multisig-row[data-v-2a136202]:hover{background:var(--bg-hover, rgba(22, 119, 255, .05))}
@@ -1 +0,0 @@
1
- import{o as me,M as I,R as f,c as a,N as t,K as i,r as b,L as c,O as s,u as g,P as r,Q as p,$ as fe,a1 as j,S as x,F as _e,Y as ve,f as H}from"./vendor-Ci2pTZ_t.js";import{_ as ye,u as ge,d as m}from"./index-BxjOmfVA.js";import{R as be,w as Y,k as xe,b7 as ke,f as G,d as we,c as he}from"./icons-B2mcO3YM.js";import Ce from"./index-DWbRHjgk.js";import"./KeyCode-D63Tfrq7.js";import"./omit-BJ1K-IDI.js";import"./pickAttrs-B0q7EpvV.js";import"./initDefaultProps-CDOGbz6v.js";import"./motion-ChIpIzUN.js";import"./raf-Deuc0E8-.js";import"./index-QgJGoGAK.js";import"./index-D4_1yL1c.js";import"./isVisible-C7tPsqfj.js";import"./useState-4T1Ntfpx.js";import"./devWarning-CNIS3FrJ.js";import"./warning-Pq00owYb.js";import"./compact-item-Dfhm05kA.js";import"./createContext-C7gBVuRm.js";import"./Compact-DyLYzWoX.js";import"./_getTag-BVc6NQ_K.js";import"./styleChecker-D1npYi6G.js";import"./zoom-CLMtA8PG.js";import"./ActionButton-DY69UkxV.js";import"./vnode-Duw65sZ1.js";const ze={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},Me={class:"filter-bar"},Se={key:0,style:{"font-size":"12px"}},$e={style:{margin:"0 0 8px 0"}},De={style:{"margin-left":"8px",color:"var(--text-secondary)"}},Ae={style:{"margin-top":"8px"}},Le={style:{cursor:"pointer",color:"var(--text-secondary)"}},Oe={key:0},Ie={style:{margin:"0","max-height":"240px",overflow:"auto","font-size":"12px"}},Je={style:{margin:"16px 0 8px 0"}},je={style:{"font-size":"12px"}},Fe={__name:"Multisig",setup(Ne){const k=ge(),D=b(!1),A=b([]),J=b([]),F=b("proposals"),L=b(""),O=b(""),h=b(!1),n=b(null),X=[{title:"ID",key:"id",width:200},{title:"Domain",dataIndex:"domain",width:220},{title:"状态",key:"state",width:110},{title:"阈值",key:"sigs",width:80},{title:"创建",key:"createdAt",width:140},{title:"过期",key:"expiresAt",width:140},{title:"操作",key:"actions",width:240,fixed:"right"}],Z=[{title:"DID",dataIndex:"did"},{title:"Alg",dataIndex:"alg",width:200}],$=H(()=>{const o={pending:0,reached:0,consumed:0,cancelled:0,expired:0};for(const e of A.value)o[e.state]!==void 0&&(o[e.state]+=1);return o}),ee=H(()=>A.value.filter(o=>!(L.value&&o.state!==L.value||O.value&&!o.domain.toLowerCase().includes(O.value.toLowerCase()))));function N(o){switch(o){case"pending":return"gold";case"reached":return"cyan";case"consumed":return"green";case"cancelled":return"default";case"expired":return"red";default:return"default"}}function P(o){const e=o-Date.now(),d=Math.abs(e)/6e4;if(d<60)return e>0?`${Math.round(d)} 分钟后`:`${Math.round(d)} 分钟前`;const v=d/60;if(v<24)return e>0?`${Math.round(v)} 小时后`:`${Math.round(v)} 小时前`;const y=v/24;return e>0?`${Math.round(y)} 天后`:`${Math.round(y)} 天前`}async function C(){D.value=!0;try{const[o,e]=await Promise.all([k.executeJson("multisig list --limit 500 --json",1e4).catch(()=>[]),Promise.all(["marketplace.purchase","did.rotate","crosschain.outbound"].map(async d=>{try{const v=await k.executeJson(`multisig policy show ${d} --json`,8e3);return{domain:d,policy:v,updatedAtMs:Date.now()}}catch{return null}})).then(d=>d.filter(Boolean))]);A.value=Array.isArray(o)?o:[],J.value=Array.isArray(e)?e:[]}catch(o){m.error("加载失败: "+(o.message||o))}finally{D.value=!1}}async function T(o){try{const e=await k.executeJson(`multisig show ${o.id} --json`,8e3);n.value=e,h.value=!0}catch(e){m.error("加载详情失败: "+(e.message||e))}}function te(o){return{onClick:()=>T(o)}}async function B(o){Ce.confirm({title:`取消提案 ${o.id.slice(0,12)}…?`,content:"已签名的成员需要重新发起新提案。此操作不可撤销。",okText:"取消提案",okType:"danger",cancelText:"保持",onOk:async()=>{try{const e=await k.executeJson(`multisig cancel ${o.id} --reason web-shell --json`,8e3);e.ok?(m.success("提案已取消"),h.value=!1,await C()):m.error("取消失败: "+e.reason)}catch(e){m.error(e.message||String(e))}}})}async function K(o){try{const e=await k.executeJson(`marketplace consume ${o.id} --json`,1e4);e.status==="consumed"?(m.success(`订单 ${e.order.itemId} 已执行 (¥${(e.order.amountFen/100).toFixed(2)})`),h.value=!1,await C()):m.error("执行失败: "+(e.reason||JSON.stringify(e)))}catch(e){m.error(e.message||String(e))}}async function ae(o){try{const e=await k.executeJson(`multisig finalize ${o.id} --json`,8e3);e.ok?(m.success("提案已 finalize"),h.value=!1,await C()):m.error("Finalize 失败: "+e.reason)}catch(e){m.error(e.message||String(e))}}async function oe(){try{const o=await k.executeJson("multisig sweep --json",8e3);o.expired===0?m.info("无过期提案"):(m.success(`已标记 ${o.expired} 条提案为过期`),await C())}catch(o){m.error(o.message||String(o))}}return me(C),(o,e)=>{const d=i("a-button"),v=i("a-space"),y=i("a-statistic"),w=i("a-card"),z=i("a-col"),le=i("a-row"),M=i("a-radio-button"),se=i("a-radio-group"),ne=i("a-input-search"),S=i("a-tag"),R=i("a-tooltip"),U=i("a-table"),q=i("a-tab-pane"),re=i("a-empty"),_=i("a-descriptions-item"),V=i("a-descriptions"),E=i("a-list-item"),Q=i("a-list"),ie=i("a-tabs"),ue=i("a-list-item-meta"),de=i("a-divider"),ce=i("a-alert"),pe=i("a-drawer");return c(),I("div",null,[f("div",ze,[e[9]||(e[9]=f("div",null,[f("h2",{class:"page-title"},"M-of-N 多签"),f("p",{class:"page-sub"},"marketplace.purchase 大额、DID 关键操作、跨链桥 outbound 的联合签名审批")],-1)),a(v,null,{default:t(()=>[a(d,{loading:D.value,onClick:C},{icon:t(()=>[a(g(be))]),default:t(()=>[e[7]||(e[7]=s(" 刷新 ",-1))]),_:1},8,["loading"]),a(d,{onClick:oe},{icon:t(()=>[a(g(Y))]),default:t(()=>[e[8]||(e[8]=s(" 扫过期 ",-1))]),_:1})]),_:1})]),a(le,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[a(z,{xs:12,sm:8,lg:4},{default:t(()=>[a(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(y,{title:"总提案",value:A.value.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[a(g(xe))]),_:1},8,["value"])]),_:1})]),_:1}),a(z,{xs:12,sm:8,lg:4},{default:t(()=>[a(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(y,{title:"待签",value:$.value.pending,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[a(g(Y))]),_:1},8,["value"])]),_:1})]),_:1}),a(z,{xs:12,sm:8,lg:4},{default:t(()=>[a(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(y,{title:"已达阈值",value:$.value.reached,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[a(g(ke))]),_:1},8,["value"])]),_:1})]),_:1}),a(z,{xs:12,sm:8,lg:4},{default:t(()=>[a(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(y,{title:"已执行",value:$.value.consumed,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:t(()=>[a(g(G))]),_:1},8,["value"])]),_:1})]),_:1}),a(z,{xs:12,sm:8,lg:4},{default:t(()=>[a(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(y,{title:"已取消",value:$.value.cancelled,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:t(()=>[a(g(we))]),_:1},8,["value"])]),_:1})]),_:1}),a(z,{xs:12,sm:8,lg:4},{default:t(()=>[a(w,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[a(y,{title:"已过期",value:$.value.expired,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:t(()=>[a(g(he))]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),a(ie,{activeKey:F.value,"onUpdate:activeKey":e[2]||(e[2]=l=>F.value=l)},{default:t(()=>[a(q,{key:"proposals",tab:"提案列表"},{default:t(()=>[f("div",Me,[a(se,{value:L.value,"onUpdate:value":e[0]||(e[0]=l=>L.value=l),size:"small","button-style":"solid"},{default:t(()=>[a(M,{value:""},{default:t(()=>[...e[10]||(e[10]=[s("全部",-1)])]),_:1}),a(M,{value:"pending"},{default:t(()=>[...e[11]||(e[11]=[s("待签",-1)])]),_:1}),a(M,{value:"reached"},{default:t(()=>[...e[12]||(e[12]=[s("已达阈值",-1)])]),_:1}),a(M,{value:"consumed"},{default:t(()=>[...e[13]||(e[13]=[s("已执行",-1)])]),_:1}),a(M,{value:"cancelled"},{default:t(()=>[...e[14]||(e[14]=[s("已取消",-1)])]),_:1}),a(M,{value:"expired"},{default:t(()=>[...e[15]||(e[15]=[s("已过期",-1)])]),_:1})]),_:1},8,["value"]),a(ne,{value:O.value,"onUpdate:value":e[1]||(e[1]=l=>O.value=l),placeholder:"按 domain 过滤 (marketplace.purchase 等)","allow-clear":"",style:{"max-width":"360px","margin-left":"12px"}},null,8,["value"])]),a(U,{columns:X,"data-source":ee.value,loading:D.value,pagination:{pageSize:20,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"]},"row-key":"id",size:"middle",onRowClick:te,"row-class-name":()=>"multisig-row"},{bodyCell:t(({column:l,record:u})=>[l.key==="id"?(c(),I("code",Se,r(u.id.slice(0,16))+"…",1)):l.key==="state"?(c(),p(S,{key:1,color:N(u.state)},{default:t(()=>[s(r(u.state),1)]),_:2},1032,["color"])):l.key==="sigs"?(c(),p(S,{key:2,color:u.n===u.m?"cyan":"default"},{default:t(()=>[s(r(u.m)+"/"+r(u.n),1)]),_:2},1032,["color"])):l.key==="createdAt"?(c(),p(R,{key:3,title:new Date(u.createdAtMs).toLocaleString()},{default:t(()=>[s(r(P(u.createdAtMs)),1)]),_:2},1032,["title"])):l.key==="expiresAt"?(c(),p(R,{key:4,title:new Date(u.expiresAtMs).toLocaleString()},{default:t(()=>[f("span",{style:fe({color:u.expiresAtMs<Date.now()?"#ff4d4f":"inherit"})},r(P(u.expiresAtMs)),5)]),_:2},1032,["title"])):l.key==="actions"?(c(),p(v,{key:5,size:"small"},{default:t(()=>[a(d,{size:"small",onClick:j(W=>T(u),["stop"])},{default:t(()=>[...e[16]||(e[16]=[s("详情",-1)])]),_:1},8,["onClick"]),u.state==="pending"||u.state==="reached"?(c(),p(d,{key:0,size:"small",danger:"",onClick:j(W=>B(u),["stop"])},{default:t(()=>[...e[17]||(e[17]=[s("取消",-1)])]),_:1},8,["onClick"])):x("",!0),u.state==="reached"&&u.domain==="marketplace.purchase"?(c(),p(d,{key:1,size:"small",type:"primary",onClick:j(W=>K(u),["stop"])},{default:t(()=>[...e[18]||(e[18]=[s("执行购买",-1)])]),_:1},8,["onClick"])):x("",!0)]),_:2},1024)):x("",!0)]),_:1},8,["data-source","loading"])]),_:1}),a(q,{key:"policies",tab:"域策略"},{default:t(()=>[J.value.length===0?(c(),p(re,{key:0,description:"暂无域策略 — 用 CLI 配置: cc multisig policy set <domain> --m <M> --members <json>"})):(c(),p(Q,{key:1,"data-source":J.value,"item-layout":"vertical"},{renderItem:t(({item:l})=>[a(E,null,{default:t(()=>[a(w,null,{default:t(()=>[f("h4",$e,[a(S,{color:"purple"},{default:t(()=>[s(r(l.domain),1)]),_:2},1024),f("span",De,[s(r(l.policy.m)+"-of-"+r(l.policy.members.length)+" ",1),l.policy.requirePqc?(c(),p(S,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:t(()=>[...e[19]||(e[19]=[s("requirePQC",-1)])]),_:1})):x("",!0)])]),a(V,{size:"small",column:2},{default:t(()=>[a(_,{label:"阈值 M"},{default:t(()=>[s(r(l.policy.m),1)]),_:2},1024),a(_,{label:"成员数 N"},{default:t(()=>[s(r(l.policy.members.length),1)]),_:2},1024),a(_,{label:"算法"},{default:t(()=>[(c(!0),I(_e,null,ve(l.policy.algorithms||[],u=>(c(),p(S,{key:u,size:"small"},{default:t(()=>[s(r(u),1)]),_:2},1024))),128))]),_:2},1024),a(_,{label:"默认有效期"},{default:t(()=>[s(r(Math.round((l.policy.defaultExpiryMs||864e5)/1e3/60/60))+"h ",1)]),_:2},1024)]),_:2},1024),f("details",Ae,[f("summary",Le,"展开成员列表 ("+r(l.policy.members.length)+")",1),a(U,{columns:Z,"data-source":l.policy.members,pagination:!1,size:"small","row-key":"did",style:{"margin-top":"8px"}},null,8,["data-source"])])]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]))]),_:1})]),_:1},8,["activeKey"]),a(pe,{open:h.value,"onUpdate:open":e[6]||(e[6]=l=>h.value=l),title:n.value?`提案 ${n.value.proposal.id}`:"提案详情",width:"640","destroy-on-close":""},{default:t(()=>[n.value?(c(),I("div",Oe,[a(V,{column:1,bordered:"",size:"small"},{default:t(()=>[a(_,{label:"Domain"},{default:t(()=>[s(r(n.value.proposal.domain),1)]),_:1}),a(_,{label:"状态"},{default:t(()=>[a(S,{color:N(n.value.proposal.state)},{default:t(()=>[s(r(n.value.proposal.state),1)]),_:1},8,["color"])]),_:1}),a(_,{label:"阈值"},{default:t(()=>[s(r(n.value.proposal.thresholdM)+"-of-"+r(n.value.proposal.memberSet.length),1)]),_:1}),a(_,{label:"已签 / 需签"},{default:t(()=>[s(r(n.value.signatures.length)+" / "+r(n.value.proposal.thresholdM),1)]),_:1}),a(_,{label:"发起方"},{default:t(()=>[s(r(n.value.proposal.initiatorDid),1)]),_:1}),a(_,{label:"创建时间"},{default:t(()=>[s(r(new Date(n.value.proposal.createdAtMs).toLocaleString()),1)]),_:1}),a(_,{label:"过期时间"},{default:t(()=>[s(r(new Date(n.value.proposal.expiresAtMs).toLocaleString()),1)]),_:1}),a(_,{label:"Payload"},{default:t(()=>[f("pre",Ie,r(n.value.proposal.payload?JSON.stringify(n.value.proposal.payload,null,2):n.value.proposal.payloadJcs),1)]),_:1})]),_:1}),f("h4",Je,"签名列表 ("+r(n.value.signatures.length)+")",1),a(Q,{"data-source":n.value.signatures,size:"small"},{renderItem:t(({item:l})=>[a(E,null,{default:t(()=>[a(ue,null,{title:t(()=>[a(g(G),{style:{color:"#52c41a","margin-right":"6px"}}),f("code",je,r(l.signerDid),1)]),description:t(()=>[s(r(l.alg)+" — "+r(new Date(l.signedAtMs).toLocaleString()),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]),a(de),a(ce,{message:"签名 / 执行操作需通过 CLI 提供私钥",description:"Web shell 不直接持有私钥(v1.3 接 Unified KeyStore)。本面板用于查看提案状态,操作请用:cc multisig sign / cancel,或 cc marketplace consume。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}}),a(v,null,{default:t(()=>[n.value.proposal.state==="pending"||n.value.proposal.state==="reached"?(c(),p(d,{key:0,danger:"",onClick:e[3]||(e[3]=l=>B(n.value.proposal))},{default:t(()=>[...e[20]||(e[20]=[s("取消提案",-1)])]),_:1})):x("",!0),n.value.proposal.state==="reached"&&n.value.proposal.domain==="marketplace.purchase"?(c(),p(d,{key:1,type:"primary",onClick:e[4]||(e[4]=l=>K(n.value.proposal))},{default:t(()=>[...e[21]||(e[21]=[s("执行购买 (cc marketplace consume)",-1)])]),_:1})):x("",!0),n.value.proposal.state==="reached"&&n.value.proposal.domain!=="marketplace.purchase"?(c(),p(d,{key:2,type:"primary",onClick:e[5]||(e[5]=l=>ae(n.value.proposal))},{default:t(()=>[...e[22]||(e[22]=[s("finalize (cc multisig finalize)",-1)])]),_:1})):x("",!0)]),_:1})])):x("",!0)]),_:1},8,["open","title"])])}}},it=ye(Fe,[["__scopeId","data-v-2a136202"]]);export{it as default};
@@ -1 +0,0 @@
1
- .template-card[data-v-55e98756]{transition:border-color .2s,box-shadow .2s}.template-card[data-v-55e98756]:hover{border-color:#1677ff!important}.template-selected[data-v-55e98756]{border-color:#1677ff!important;box-shadow:0 0 0 2px #1677ff26}
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-DI36Fic1.js";import{R as t}from"./index-BxjOmfVA.js";import"./responsiveObserve-efcdE4ju.js";import"./vendor-Ci2pTZ_t.js";import"./useFlexGapSupport-DTH3yXTD.js";import"./styleChecker-D1npYi6G.js";import"./index-OqY41c_z.js";import"./icons-B2mcO3YM.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-MvMGDJAB.js";import{R as t}from"./index-BxjOmfVA.js";import"./index-OqY41c_z.js";import"./vendor-Ci2pTZ_t.js";import"./icons-B2mcO3YM.js";const s=t(o);export{s as default};
@@ -1 +0,0 @@
1
- import{d as o}from"./styleChecker-D1npYi6G.js";import{o as t,s}from"./vendor-Ci2pTZ_t.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};