chainlesschain 0.161.12 → 0.162.0

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 (145) 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-B1dwBvzW.js → AIOps-Dn8q-Cu4.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-DfR4oLvh.js → ActionButton-BePEVs4O.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-D3ZYGXjr.js → Analytics-CKp-5Gi0.js} +1 -1
  6. package/src/assets/web-panel/assets/{AppLayout-CsmOoh-7.js → AppLayout-BSudqld0.js} +2 -2
  7. package/src/assets/web-panel/assets/{Audit-B4gwDm63.js → Audit-iefpSeRG.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-T42uSArV.js → Backup-Ce43ZIhD.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-CFi52nMs.js → BaseInput-BvGiwRav.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-D7Vvok1V.js → Chat-BAaQg-Oc.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-Dwaflpww.js → Checkbox-Dvn8uxKO.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-BIqx3G0b.js → Codegen-CTcZCayj.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-DzIUYUNu.js → Col-CBFpGgb5.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-DKePtzhk.js → Community-DmCYaV9M.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-CirVV9Wq.js → Compact-DnOD5uMF.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-CrXOr0sy.js → Compliance-u53e9lg-.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-BEBP6Tht.js → Cowork-CL5ohuXH.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cron-k7nNUuqh.js → Cron-DubcmRgt.js} +1 -1
  19. package/src/assets/web-panel/assets/{Crosschain-CBnX0Dhq.js → Crosschain-BWXcUXc3.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-B48FszWS.js → DID-Cw0i8WjE.js} +1 -1
  21. package/src/assets/web-panel/assets/{Dashboard-Pb3qfFpp.js → Dashboard-BbofvIWH.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-pUHy4CQ2.js → Dropdown-DN6ur5xV.js} +1 -1
  23. package/src/assets/web-panel/assets/{Federation-CT0Qs-kR.js → Federation-CA-rIdkY.js} +1 -1
  24. package/src/assets/web-panel/assets/{FormItemContext-CbJJp5BR.js → FormItemContext-D_HGU4aA.js} +1 -1
  25. package/src/assets/web-panel/assets/{Git-B3mGNLQe.js → Git-CBWFs6Uk.js} +1 -1
  26. package/src/assets/web-panel/assets/{Governance-BKf4733q.js → Governance-Cx6PTC43.js} +1 -1
  27. package/src/assets/web-panel/assets/{Inference-DZjU541G.js → Inference-Ubk1VstS.js} +1 -1
  28. package/src/assets/web-panel/assets/{KnowledgeGraph-C8L-7Dd1.js → KnowledgeGraph-DTB10MYO.js} +1 -1
  29. package/src/assets/web-panel/assets/{Logs-CwDwOiKv.js → Logs-Tfk4FBVC.js} +1 -1
  30. package/src/assets/web-panel/assets/{Marketplace-C2YWWU0M.js → Marketplace-BAsztG4O.js} +1 -1
  31. package/src/assets/web-panel/assets/{McpTools-dIbkOypF.js → McpTools-DliPfvuK.js} +1 -1
  32. package/src/assets/web-panel/assets/{Memory-7eF8WzcY.js → Memory-hkw6Xwyv.js} +1 -1
  33. package/src/assets/web-panel/assets/{MobileBridge-C74GHLbX.js → MobileBridge-eeNMFGj6.js} +1 -1
  34. package/src/assets/web-panel/assets/{Mtc-CSEDo5Fo.js → Mtc-BP3Riowm.js} +1 -1
  35. package/src/assets/web-panel/assets/{MtcAudit-DiJXxOrB.js → MtcAudit-DvD7pE7V.js} +1 -1
  36. package/src/assets/web-panel/assets/Multisig-CPtc-fVL.js +7 -0
  37. package/src/assets/web-panel/assets/Multisig-kwPDnXnl.css +1 -0
  38. package/src/assets/web-panel/assets/{NLProgramming-DjF-gIUw.js → NLProgramming-1y__Epjg.js} +1 -1
  39. package/src/assets/web-panel/assets/{Notes-BUE5CvMO.js → Notes-CEvJqMP8.js} +1 -1
  40. package/src/assets/web-panel/assets/{NotificationSettings-Dfbrobje.js → NotificationSettings-wmCYm99r.js} +1 -1
  41. package/src/assets/web-panel/assets/{Organization-C6YvqjQB.js → Organization-CSoz8gGr.js} +1 -1
  42. package/src/assets/web-panel/assets/{Overflow-BvHNhdMR.js → Overflow-kf1mnFrM.js} +1 -1
  43. package/src/assets/web-panel/assets/{P2P-BO0hQHFS.js → P2P-C4GfXJ8Z.js} +1 -1
  44. package/src/assets/web-panel/assets/{Permissions-CCPlrJeP.js → Permissions-CW1Mn95X.js} +1 -1
  45. package/src/assets/web-panel/assets/{Pipeline-DTCL3FjJ.js → Pipeline-CM1ppddn.js} +1 -1
  46. package/src/assets/web-panel/assets/{Privacy-08DYgOe_.js → Privacy-DuAY5fEm.js} +1 -1
  47. package/src/assets/web-panel/assets/{ProjectInit-B7j-Z8sa.js → ProjectInit-C72779b6.js} +1 -1
  48. package/src/assets/web-panel/assets/{ProjectSettings-CFqLhV1w.js → ProjectSettings-CAilXWam.js} +1 -1
  49. package/src/assets/web-panel/assets/{Projects-BPlpx2UN.js → Projects-DTIlVTkF.js} +1 -1
  50. package/src/assets/web-panel/assets/{Providers-BCBPbVbF.js → Providers-Cf6Yv8bu.js} +1 -1
  51. package/src/assets/web-panel/assets/{QuickAsk-C8Job6zl.js → QuickAsk-CK1_VVzw.js} +1 -1
  52. package/src/assets/web-panel/assets/{Recommend-DOV_Aje-.js → Recommend-QBC7KgvR.js} +1 -1
  53. package/src/assets/web-panel/assets/{Reputation-DOgK_dIK.js → Reputation-ju6lWzMM.js} +1 -1
  54. package/src/assets/web-panel/assets/{Row-8jdU1xYg.js → Row-DQwipGEm.js} +1 -1
  55. package/src/assets/web-panel/assets/{RssFeed-B289OgNZ.js → RssFeed-DkLGmeLW.js} +1 -1
  56. package/src/assets/web-panel/assets/{Search-cr0AndFE.js → Search-YYhitzkt.js} +1 -1
  57. package/src/assets/web-panel/assets/{Security-w4diykaE.js → Security-DEllaBqe.js} +1 -1
  58. package/src/assets/web-panel/assets/{Services-dTxAI5cG.js → Services-BgPHBq9S.js} +1 -1
  59. package/src/assets/web-panel/assets/{Skeleton-B3FiUiRo.js → Skeleton-DHEyJI7c.js} +1 -1
  60. package/src/assets/web-panel/assets/{Skills-DgtBTAFC.js → Skills-c212vgf3.js} +1 -1
  61. package/src/assets/web-panel/assets/{Sla-B4Y6bvbL.js → Sla-COqhw_no.js} +1 -1
  62. package/src/assets/web-panel/assets/{SpeechSettings-C8FEvArc.js → SpeechSettings-Bmds06su.js} +1 -1
  63. package/src/assets/web-panel/assets/{SyncSettings-CHvV5L0m.js → SyncSettings-Bx1_A34Y.js} +1 -1
  64. package/src/assets/web-panel/assets/{Tasks-B4Py5ORS.js → Tasks-B0Lo_9aN.js} +1 -1
  65. package/src/assets/web-panel/assets/{Templates-MeTyXM5u.js → Templates-D0RcpfuW.js} +1 -1
  66. package/src/assets/web-panel/assets/{Tenant-Doiz7wyQ.js → Tenant-G0yVctLy.js} +1 -1
  67. package/src/assets/web-panel/assets/{Terminal-DSEAdwWN.js → Terminal-DqgLtK3c.js} +1 -1
  68. package/src/assets/web-panel/assets/{Tokens-BBrtaEKt.js → Tokens-Cdt0aqCc.js} +1 -1
  69. package/src/assets/web-panel/assets/{Trigger-nPvjho27.js → Trigger-DFbfZFuJ.js} +1 -1
  70. package/src/assets/web-panel/assets/{Trust-BFwPyS_6.js → Trust-BQXsWPz6.js} +1 -1
  71. package/src/assets/web-panel/assets/{UkeySign-DFsHoY1J.js → UkeySign-DBem5Xkj.js} +1 -1
  72. package/src/assets/web-panel/assets/{VideoEditing-FkSKqHE9.js → VideoEditing-B1yipKKv.js} +1 -1
  73. package/src/assets/web-panel/assets/{Wallet-AXo-_4-w.js → Wallet-iPJtU5QZ.js} +1 -1
  74. package/src/assets/web-panel/assets/{WebAuthn-DoScnQ-4.js → WebAuthn-HLb9srUL.js} +1 -1
  75. package/src/assets/web-panel/assets/{WorkflowEditor-IEMfIax-.js → WorkflowEditor-BSqXL8GD.js} +1 -1
  76. package/src/assets/web-panel/assets/{chat-pc1ciH6T.js → chat-D_J-ZVBh.js} +1 -1
  77. package/src/assets/web-panel/assets/{colors-CjkIkB0e.js → colors-B126JcB4.js} +1 -1
  78. package/src/assets/web-panel/assets/{compact-item-CQZnkP5p.js → compact-item-Bw5EEKw4.js} +1 -1
  79. package/src/assets/web-panel/assets/{createContext-B1McGnV-.js → createContext-xLJXI46O.js} +1 -1
  80. package/src/assets/web-panel/assets/{hasIn-CbkA6peP.js → hasIn-K8QCNlyy.js} +1 -1
  81. package/src/assets/web-panel/assets/{index-ChCCGHwz.js → index-85lab9HJ.js} +1 -1
  82. package/src/assets/web-panel/assets/{index-DYAWIXFt.js → index-B9ztiTnX.js} +1 -1
  83. package/src/assets/web-panel/assets/index-BEYypR_d.js +1 -0
  84. package/src/assets/web-panel/assets/{index-wwQ_ZkWN.js → index-BQ_NIMQS.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-BNLeseG1.js → index-BSgvvXgq.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-DcSe5y5O.js → index-BWUG9yVI.js} +1 -1
  87. package/src/assets/web-panel/assets/{index-uWvLy_3T.js → index-B_PqXUkT.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-CJr12ypE.js → index-BaXXyyT0.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-NRWBOo4F.js → index-Bptjq-wQ.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-Dzfj71tf.js → index-BsbKjK1o.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-DMjPzhsp.js → index-Bv9odL87.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-5c4JzwY3.js → index-C2CgD7TN.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CzZ3LxPK.js → index-COCq6xuZ.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-Dn7SHV2e.js → index-CVeuzjxG.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-DGb36exe.js → index-CWBajOcE.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-C5mpCgak.js → index-CvAey6iD.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-CKledOCh.js → index-DFPVNSby.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-B8r6OBuk.js → index-DFwF_JeQ.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-DjxVsyn_.js → index-DLZZi1Km.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DPzT5L14.js → index-DY5Oc3z6.js} +3 -3
  101. package/src/assets/web-panel/assets/index-DZWfmuM2.js +1 -0
  102. package/src/assets/web-panel/assets/{index-CFCQl1hk.js → index-DZcij18m.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D4rhVRSV.js → index-Da7bZewp.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-C052wi94.js → index-DdMzLeDn.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BTyhXFDW.js → index-Dj8BNg-z.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DHtiecyM.js → index-DlX09aXr.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DjM0jsm1.js → index-DrfiELFa.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CGke5qZp.js → index-Dt0Tp8TS.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CKwkP66s.js → index-DvNCyE3A.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DWq64zmv.js → index-LZYGhjVr.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Di5tuS0d.js → index-fMwtau_-.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CEENN81t.js → index-mqHxeING.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DHpwwlmv.js → index-mzNWO8Yy.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DJWYN-AT.js → index-p3d5_s7V.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-C0Lj7Yl0.js → index-qJbfToeQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-fqI1KnP_.js → index-sAfwWh0R.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-DsChgzu2.js → index-xJkPbv0L.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CJbqE5Sw.js → index-yhA-qP4Y.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-Bs-romIz.js → index-zEr6BW9X.js} +1 -1
  120. package/src/assets/web-panel/assets/{initDefaultProps-BTloFqyf.js → initDefaultProps-CacwmJft.js} +1 -1
  121. package/src/assets/web-panel/assets/{motion-44iMBc1o.js → motion-BWrP7Lz6.js} +1 -1
  122. package/src/assets/web-panel/assets/{move-CyWQI5eW.js → move-imnbiy1n.js} +1 -1
  123. package/src/assets/web-panel/assets/{omit-CXfJtuFy.js → omit-BlaOv91I.js} +1 -1
  124. package/src/assets/web-panel/assets/{pickAttrs-ANFpSZes.js → pickAttrs-DUGKp0ro.js} +1 -1
  125. package/src/assets/web-panel/assets/{placementArrow-CigX-url.js → placementArrow-P0ZA4yAK.js} +1 -1
  126. package/src/assets/web-panel/assets/{responsiveObserve-Ch48RA0m.js → responsiveObserve-CZz-M9cI.js} +1 -1
  127. package/src/assets/web-panel/assets/{slide-BEz3LORF.js → slide-BEnICwoX.js} +1 -1
  128. package/src/assets/web-panel/assets/{statusUtils-D9EniG8V.js → statusUtils-DdYKRSiH.js} +1 -1
  129. package/src/assets/web-panel/assets/{styleChecker-C1IvuY3L.js → styleChecker-DgUxvOQt.js} +1 -1
  130. package/src/assets/web-panel/assets/{useFlexGapSupport-C92oHeXB.js → useFlexGapSupport-BUEmeWdR.js} +1 -1
  131. package/src/assets/web-panel/assets/{useFs-CJhvFpgB.js → useFs-BXsj6Z5e.js} +1 -1
  132. package/src/assets/web-panel/assets/{vnode-BPkyunN_.js → vnode-B3Pp583L.js} +1 -1
  133. package/src/assets/web-panel/assets/{zoom-B6Ipb64r.js → zoom-D-LYfiQh.js} +1 -1
  134. package/src/assets/web-panel/index.html +1 -1
  135. package/src/commands/crosschain.js +403 -1
  136. package/src/commands/pair.js +291 -0
  137. package/src/index.js +2 -0
  138. package/src/lib/cross-chain-mtc.js +275 -6
  139. package/src/lib/cross-chain.js +48 -2
  140. package/src/lib/lan-pairing-preflight.js +425 -0
  141. package/src/lib/lan-pairing-tokens.js +264 -0
  142. package/src/assets/web-panel/assets/Multisig-D-IuEDLa.css +0 -1
  143. package/src/assets/web-panel/assets/Multisig-FZTU5ri6.js +0 -1
  144. package/src/assets/web-panel/assets/index-BXfePRef.js +0 -1
  145. package/src/assets/web-panel/assets/index-Dc4fj_Ys.js +0 -1
@@ -1 +1 @@
1
- import{h as i}from"./index-DPzT5L14.js";const L=(e,o,t,n,p)=>{const r=e/2,a=0,s=r,m=t*1/Math.sqrt(2),h=r-t*(1-1/Math.sqrt(2)),b=r-o*(1/Math.sqrt(2)),u=t*(Math.sqrt(2)-1)+o*(1/Math.sqrt(2)),g=2*r-b,w=u,d=2*r-m,c=h,A=2*r-a,x=s,v=r*Math.sqrt(2)+t*(Math.sqrt(2)-2),$=t*(Math.sqrt(2)-1);return{pointerEvents:"none",width:e,height:e,overflow:"hidden","&::after":{content:'""',position:"absolute",width:v,height:v,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${o}px 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:p,zIndex:0,background:"transparent"},"&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:e,height:e/2,background:n,clipPath:{_multi_value_:!0,value:[`polygon(${$}px 100%, 50% ${$}px, ${2*r-$}px 100%, ${$}px 100%)`,`path('M ${a} ${s} A ${t} ${t} 0 0 0 ${m} ${h} L ${b} ${u} A ${o} ${o} 0 0 1 ${g} ${w} L ${d} ${c} A ${t} ${t} 0 0 0 ${A} ${x} Z')`]},content:'""'}}},f={adjustX:1,adjustY:1},l=[0,0],j={left:{points:["cr","cl"],overflow:f,offset:[-4,0],targetOffset:l},right:{points:["cl","cr"],overflow:f,offset:[4,0],targetOffset:l},top:{points:["bc","tc"],overflow:f,offset:[0,-4],targetOffset:l},bottom:{points:["tc","bc"],overflow:f,offset:[0,4],targetOffset:l},topLeft:{points:["bl","tl"],overflow:f,offset:[0,-4],targetOffset:l},leftTop:{points:["tr","tl"],overflow:f,offset:[-4,0],targetOffset:l},topRight:{points:["br","tr"],overflow:f,offset:[0,-4],targetOffset:l},rightTop:{points:["tl","tr"],overflow:f,offset:[4,0],targetOffset:l},bottomRight:{points:["tr","br"],overflow:f,offset:[0,4],targetOffset:l},rightBottom:{points:["bl","br"],overflow:f,offset:[4,0],targetOffset:l},bottomLeft:{points:["tl","bl"],overflow:f,offset:[0,4],targetOffset:l},leftBottom:{points:["br","bl"],overflow:f,offset:[-4,0],targetOffset:l}},M={adjustX:1,adjustY:1},O={adjustX:0,adjustY:0},T=[0,0];function k(e){return typeof e=="boolean"?e?M:O:i(i({},O),e)}function Y(e){const{arrowWidth:o=4,horizontalArrowShift:t=16,verticalArrowShift:n=8,autoAdjustOverflow:p,arrowPointAtCenter:r}=e,a={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(t+o),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(n+o)]},topRight:{points:["br","tc"],offset:[t+o,-4]},rightTop:{points:["tl","cr"],offset:[4,-(n+o)]},bottomRight:{points:["tr","bc"],offset:[t+o,4]},rightBottom:{points:["bl","cr"],offset:[4,n+o]},bottomLeft:{points:["tl","bc"],offset:[-(t+o),4]},leftBottom:{points:["br","cl"],offset:[-4,n+o]}};return Object.keys(a).forEach(s=>{a[s]=r?i(i({},a[s]),{overflow:k(p),targetOffset:T}):i(i({},j[s]),{overflow:k(p)}),a[s].ignoreShake=!0}),a}function _(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return e.map(t=>`${o}${t}`).join(",")}const X=8;function B(e){const o=X,{sizePopupArrow:t,contentRadius:n,borderRadiusOuter:p,limitVerticalRadius:r}=e,a=t/2-Math.ceil(p*(Math.sqrt(2)-1)),s=(n>12?n+2:12)-a,m=r?o-a:s;return{dropdownArrowOffset:s,dropdownArrowOffsetVertical:m}}function q(e,o){const{componentCls:t,sizePopupArrow:n,marginXXS:p,borderRadiusXS:r,borderRadiusOuter:a,boxShadowPopoverArrow:s}=e,{colorBg:m,showArrowCls:h,contentRadius:b=e.borderRadiusLG,limitVerticalRadius:u}=o,{dropdownArrowOffsetVertical:g,dropdownArrowOffset:w}=B({sizePopupArrow:n,contentRadius:b,borderRadiusOuter:a,limitVerticalRadius:u}),d=n/2+p;return{[t]:{[`${t}-arrow`]:[i(i({position:"absolute",zIndex:1,display:"block"},L(n,r,a,m,s)),{"&:before":{background:m}})],[[`&-placement-top ${t}-arrow`,`&-placement-topLeft ${t}-arrow`,`&-placement-topRight ${t}-arrow`].join(",")]:{bottom:0,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},[`&-placement-topLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-topRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-bottom ${t}-arrow`,`&-placement-bottomLeft ${t}-arrow`,`&-placement-bottomRight ${t}-arrow`].join(",")]:{top:0,transform:"translateY(-100%)"},[`&-placement-bottom ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},[`&-placement-bottomLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-bottomRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-left ${t}-arrow`,`&-placement-leftTop ${t}-arrow`,`&-placement-leftBottom ${t}-arrow`].join(",")]:{right:{_skip_check_:!0,value:0},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop ${t}-arrow`]:{top:g},[`&-placement-leftBottom ${t}-arrow`]:{bottom:g},[[`&-placement-right ${t}-arrow`,`&-placement-rightTop ${t}-arrow`,`&-placement-rightBottom ${t}-arrow`].join(",")]:{left:{_skip_check_:!0,value:0},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop ${t}-arrow`]:{top:g},[`&-placement-rightBottom ${t}-arrow`]:{bottom:g},[_(["&-placement-topLeft","&-placement-top","&-placement-topRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingBottom:d},[_(["&-placement-bottomLeft","&-placement-bottom","&-placement-bottomRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingTop:d},[_(["&-placement-leftTop","&-placement-left","&-placement-leftBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingRight:{_skip_check_:!0,value:d}},[_(["&-placement-rightTop","&-placement-right","&-placement-rightBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingLeft:{_skip_check_:!0,value:d}}}}}export{X as M,Y as a,B as b,q as g,j as p,L as r};
1
+ import{h as i}from"./index-DY5Oc3z6.js";const L=(e,o,t,n,p)=>{const r=e/2,a=0,s=r,m=t*1/Math.sqrt(2),h=r-t*(1-1/Math.sqrt(2)),b=r-o*(1/Math.sqrt(2)),u=t*(Math.sqrt(2)-1)+o*(1/Math.sqrt(2)),g=2*r-b,w=u,d=2*r-m,c=h,A=2*r-a,x=s,v=r*Math.sqrt(2)+t*(Math.sqrt(2)-2),$=t*(Math.sqrt(2)-1);return{pointerEvents:"none",width:e,height:e,overflow:"hidden","&::after":{content:'""',position:"absolute",width:v,height:v,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${o}px 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:p,zIndex:0,background:"transparent"},"&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:e,height:e/2,background:n,clipPath:{_multi_value_:!0,value:[`polygon(${$}px 100%, 50% ${$}px, ${2*r-$}px 100%, ${$}px 100%)`,`path('M ${a} ${s} A ${t} ${t} 0 0 0 ${m} ${h} L ${b} ${u} A ${o} ${o} 0 0 1 ${g} ${w} L ${d} ${c} A ${t} ${t} 0 0 0 ${A} ${x} Z')`]},content:'""'}}},f={adjustX:1,adjustY:1},l=[0,0],j={left:{points:["cr","cl"],overflow:f,offset:[-4,0],targetOffset:l},right:{points:["cl","cr"],overflow:f,offset:[4,0],targetOffset:l},top:{points:["bc","tc"],overflow:f,offset:[0,-4],targetOffset:l},bottom:{points:["tc","bc"],overflow:f,offset:[0,4],targetOffset:l},topLeft:{points:["bl","tl"],overflow:f,offset:[0,-4],targetOffset:l},leftTop:{points:["tr","tl"],overflow:f,offset:[-4,0],targetOffset:l},topRight:{points:["br","tr"],overflow:f,offset:[0,-4],targetOffset:l},rightTop:{points:["tl","tr"],overflow:f,offset:[4,0],targetOffset:l},bottomRight:{points:["tr","br"],overflow:f,offset:[0,4],targetOffset:l},rightBottom:{points:["bl","br"],overflow:f,offset:[4,0],targetOffset:l},bottomLeft:{points:["tl","bl"],overflow:f,offset:[0,4],targetOffset:l},leftBottom:{points:["br","bl"],overflow:f,offset:[-4,0],targetOffset:l}},M={adjustX:1,adjustY:1},O={adjustX:0,adjustY:0},T=[0,0];function k(e){return typeof e=="boolean"?e?M:O:i(i({},O),e)}function Y(e){const{arrowWidth:o=4,horizontalArrowShift:t=16,verticalArrowShift:n=8,autoAdjustOverflow:p,arrowPointAtCenter:r}=e,a={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(t+o),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(n+o)]},topRight:{points:["br","tc"],offset:[t+o,-4]},rightTop:{points:["tl","cr"],offset:[4,-(n+o)]},bottomRight:{points:["tr","bc"],offset:[t+o,4]},rightBottom:{points:["bl","cr"],offset:[4,n+o]},bottomLeft:{points:["tl","bc"],offset:[-(t+o),4]},leftBottom:{points:["br","cl"],offset:[-4,n+o]}};return Object.keys(a).forEach(s=>{a[s]=r?i(i({},a[s]),{overflow:k(p),targetOffset:T}):i(i({},j[s]),{overflow:k(p)}),a[s].ignoreShake=!0}),a}function _(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return e.map(t=>`${o}${t}`).join(",")}const X=8;function B(e){const o=X,{sizePopupArrow:t,contentRadius:n,borderRadiusOuter:p,limitVerticalRadius:r}=e,a=t/2-Math.ceil(p*(Math.sqrt(2)-1)),s=(n>12?n+2:12)-a,m=r?o-a:s;return{dropdownArrowOffset:s,dropdownArrowOffsetVertical:m}}function q(e,o){const{componentCls:t,sizePopupArrow:n,marginXXS:p,borderRadiusXS:r,borderRadiusOuter:a,boxShadowPopoverArrow:s}=e,{colorBg:m,showArrowCls:h,contentRadius:b=e.borderRadiusLG,limitVerticalRadius:u}=o,{dropdownArrowOffsetVertical:g,dropdownArrowOffset:w}=B({sizePopupArrow:n,contentRadius:b,borderRadiusOuter:a,limitVerticalRadius:u}),d=n/2+p;return{[t]:{[`${t}-arrow`]:[i(i({position:"absolute",zIndex:1,display:"block"},L(n,r,a,m,s)),{"&:before":{background:m}})],[[`&-placement-top ${t}-arrow`,`&-placement-topLeft ${t}-arrow`,`&-placement-topRight ${t}-arrow`].join(",")]:{bottom:0,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},[`&-placement-topLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-topRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-bottom ${t}-arrow`,`&-placement-bottomLeft ${t}-arrow`,`&-placement-bottomRight ${t}-arrow`].join(",")]:{top:0,transform:"translateY(-100%)"},[`&-placement-bottom ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},[`&-placement-bottomLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-bottomRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-left ${t}-arrow`,`&-placement-leftTop ${t}-arrow`,`&-placement-leftBottom ${t}-arrow`].join(",")]:{right:{_skip_check_:!0,value:0},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop ${t}-arrow`]:{top:g},[`&-placement-leftBottom ${t}-arrow`]:{bottom:g},[[`&-placement-right ${t}-arrow`,`&-placement-rightTop ${t}-arrow`,`&-placement-rightBottom ${t}-arrow`].join(",")]:{left:{_skip_check_:!0,value:0},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop ${t}-arrow`]:{top:g},[`&-placement-rightBottom ${t}-arrow`]:{bottom:g},[_(["&-placement-topLeft","&-placement-top","&-placement-topRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingBottom:d},[_(["&-placement-bottomLeft","&-placement-bottom","&-placement-bottomRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingTop:d},[_(["&-placement-leftTop","&-placement-left","&-placement-leftBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingRight:{_skip_check_:!0,value:d}},[_(["&-placement-rightTop","&-placement-right","&-placement-rightBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingLeft:{_skip_check_:!0,value:d}}}}}export{X as M,Y as a,B as b,q as g,j as p,L as r};
@@ -1 +1 @@
1
- import{I as o,h}from"./index-DPzT5L14.js";import{f as x}from"./vendor-M5lGV-wr.js";const b=["xxxl","xxl","xl","lg","md","sm","xs"],p=r=>({xs:`(max-width: ${r.screenXSMax}px)`,sm:`(min-width: ${r.screenSM}px)`,md:`(min-width: ${r.screenMD}px)`,lg:`(min-width: ${r.screenLG}px)`,xl:`(min-width: ${r.screenXL}px)`,xxl:`(min-width: ${r.screenXXL}px)`,xxxl:`{min-width: ${r.screenXXXL}px}`});function w(){const[,r]=o();return x(()=>{const n=p(r.value),i=new Map;let a=-1,c={};return{matchHandlers:{},dispatch(e){return c=e,i.forEach(t=>t(c)),i.size>=1},subscribe(e){return i.size||this.register(),a+=1,i.set(a,e),e(c),a},unsubscribe(e){i.delete(e),i.size||this.unregister()},unregister(){Object.keys(n).forEach(e=>{const t=n[e],s=this.matchHandlers[t];s?.mql.removeListener(s?.listener)}),i.clear()},register(){Object.keys(n).forEach(e=>{const t=n[e],s=l=>{let{matches:m}=l;this.dispatch(h(h({},c),{[e]:m}))},d=window.matchMedia(t);d.addListener(s),this.matchHandlers[t]={mql:d,listener:s},s(d)})},responsiveMap:n}})}export{b as r,w as u};
1
+ import{I as o,h}from"./index-DY5Oc3z6.js";import{f as x}from"./vendor-M5lGV-wr.js";const b=["xxxl","xxl","xl","lg","md","sm","xs"],p=r=>({xs:`(max-width: ${r.screenXSMax}px)`,sm:`(min-width: ${r.screenSM}px)`,md:`(min-width: ${r.screenMD}px)`,lg:`(min-width: ${r.screenLG}px)`,xl:`(min-width: ${r.screenXL}px)`,xxl:`(min-width: ${r.screenXXL}px)`,xxxl:`{min-width: ${r.screenXXXL}px}`});function w(){const[,r]=o();return x(()=>{const n=p(r.value),i=new Map;let a=-1,c={};return{matchHandlers:{},dispatch(e){return c=e,i.forEach(t=>t(c)),i.size>=1},subscribe(e){return i.size||this.register(),a+=1,i.set(a,e),e(c),a},unsubscribe(e){i.delete(e),i.size||this.unregister()},unregister(){Object.keys(n).forEach(e=>{const t=n[e],s=this.matchHandlers[t];s?.mql.removeListener(s?.listener)}),i.clear()},register(){Object.keys(n).forEach(e=>{const t=n[e],s=l=>{let{matches:m}=l;this.dispatch(h(h({},c),{[e]:m}))},d=window.matchMedia(t);d.addListener(s),this.matchHandlers[t]={mql:d,listener:s},s(d)})},responsiveMap:n}})}export{b as r,w as u};
@@ -1,4 +1,4 @@
1
- import{K as n}from"./index-DPzT5L14.js";import{i as e}from"./motion-44iMBc1o.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
1
+ import{K as n}from"./index-DY5Oc3z6.js";import{i as e}from"./motion-BWrP7Lz6.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
2
2
  ${i}-enter,
3
3
  ${i}-appear
4
4
  `]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:t.motionEaseOutQuint},[`${i}-leave`]:{animationTimingFunction:t.motionEaseInQuint}}]};export{f as a,c as b,m as c,K as i,l as s};
@@ -1 +1 @@
1
- import{i as e}from"./index-DPzT5L14.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
1
+ import{i as e}from"./index-DY5Oc3z6.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
@@ -1 +1 @@
1
- import{A as d}from"./index-DPzT5L14.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
1
+ import{A as d}from"./index-DY5Oc3z6.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
@@ -1 +1 @@
1
- import{d as o}from"./styleChecker-C1IvuY3L.js";import{o as t,s}from"./vendor-M5lGV-wr.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};
1
+ import{d as o}from"./styleChecker-DgUxvOQt.js";import{o as t,s}from"./vendor-M5lGV-wr.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};
@@ -1 +1 @@
1
- import{u as d}from"./index-DPzT5L14.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
1
+ import{u as d}from"./index-DY5Oc3z6.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
@@ -1 +1 @@
1
- import{M as i,h as a,w as l}from"./index-DPzT5L14.js";import{a5 as o,k as d,C as g,F as f,A as p}from"./vendor-M5lGV-wr.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>d(r)?!(r.type===g||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
1
+ import{M as i,h as a,w as l}from"./index-DY5Oc3z6.js";import{a5 as o,k as d,C as g,F as f,A as p}from"./vendor-M5lGV-wr.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>d(r)?!(r.type===g||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-DPzT5L14.js";import{i as f}from"./motion-44iMBc1o.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-DY5Oc3z6.js";import{i as f}from"./motion-BWrP7Lz6.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,7 +8,7 @@
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-DPzT5L14.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-DY5Oc3z6.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-M5lGV-wr.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-NT6gy8Ee.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-CfX1DEtk.css">
@@ -1,5 +1,10 @@
1
1
  /**
2
2
  * `cc crosschain` — CLI surface for Phase 89 Cross-Chain Interoperability.
3
+ *
4
+ * #21 B.5 Layer 1 PR1 (2026-05-15): `cc crosschain bridge --require-multisig`
5
+ * opt-in routes outbound bridge through m-of-n multisig (domain
6
+ * `crosschain.bridge.outbound`); `cc crosschain bridge-consume <proposalId>`
7
+ * finalizes after threshold is reached. Mirrors marketplace purchase/consume.
3
8
  */
4
9
 
5
10
  import fs from "node:fs";
@@ -8,6 +13,14 @@ import { Command } from "commander";
8
13
 
9
14
  import { bootstrap } from "../runtime/bootstrap.js";
10
15
  import { getHomeDir } from "../lib/paths.js";
16
+ import {
17
+ openMultisigManager,
18
+ defaultMultisigDbPath,
19
+ defaultMultisigLogPath,
20
+ readSecretKey,
21
+ } from "../lib/multisig-runtime.js";
22
+
23
+ const MULTISIG_BRIDGE_OUTBOUND_DOMAIN = "crosschain.bridge.outbound";
11
24
  import {
12
25
  getCrossChainMtcDir,
13
26
  getBridgeMtcStatus,
@@ -111,6 +124,299 @@ function _maybeStageMtc(opts, opBuilder) {
111
124
  }
112
125
  }
113
126
 
127
+ /**
128
+ * #21 B.5 Layer 1 — open a multisig proposal for an outbound bridge.
129
+ * Does NOT insert into cc_bridges yet; bridge-consume does that after
130
+ * the proposal reaches threshold. Mirrors marketplace.purchase.
131
+ */
132
+ async function _bridgePropose({
133
+ fromChain,
134
+ toChain,
135
+ amount,
136
+ asset,
137
+ sender,
138
+ recipient,
139
+ initiator,
140
+ alg,
141
+ key,
142
+ multisigDb,
143
+ multisigLog,
144
+ json,
145
+ }) {
146
+ if (!initiator) {
147
+ const out = {
148
+ status: "blocked",
149
+ reason: "missing_initiator",
150
+ path: "multisig",
151
+ };
152
+ if (json) console.log(JSON.stringify(out, null, 2));
153
+ else
154
+ console.error(
155
+ "✗ --initiator <did> required when --require-multisig is set",
156
+ );
157
+ process.exitCode = 2;
158
+ return out;
159
+ }
160
+ if (!key) {
161
+ const out = {
162
+ status: "blocked",
163
+ reason: "missing_key",
164
+ path: "multisig",
165
+ };
166
+ if (json) console.log(JSON.stringify(out, null, 2));
167
+ else
168
+ console.error(
169
+ "✗ --key <hex|path> required when --require-multisig is set",
170
+ );
171
+ process.exitCode = 2;
172
+ return out;
173
+ }
174
+
175
+ const { store, mgr, close } = await openMultisigManager(
176
+ multisigDb,
177
+ multisigLog,
178
+ );
179
+ try {
180
+ const policy = store.getPolicy(MULTISIG_BRIDGE_OUTBOUND_DOMAIN);
181
+ if (!policy) {
182
+ const out = {
183
+ status: "blocked",
184
+ reason: "no_policy",
185
+ path: "multisig",
186
+ domain: MULTISIG_BRIDGE_OUTBOUND_DOMAIN,
187
+ };
188
+ if (json) console.log(JSON.stringify(out, null, 2));
189
+ else
190
+ console.error(
191
+ `✗ No multisig policy for domain "${MULTISIG_BRIDGE_OUTBOUND_DOMAIN}". Run: cc multisig policy set ${MULTISIG_BRIDGE_OUTBOUND_DOMAIN} --m <M> --members <json>`,
192
+ );
193
+ process.exitCode = 2;
194
+ return out;
195
+ }
196
+
197
+ const secretKey = readSecretKey(key);
198
+ const payload = {
199
+ fromChain,
200
+ toChain,
201
+ asset: asset || "native",
202
+ amount,
203
+ sender: sender || null,
204
+ recipient: recipient || null,
205
+ };
206
+ const result = mgr.propose({
207
+ domain: MULTISIG_BRIDGE_OUTBOUND_DOMAIN,
208
+ payload,
209
+ policy,
210
+ initiator: { did: initiator, alg: alg || "Ed25519", secretKey },
211
+ });
212
+ const out = {
213
+ status: "needs_co_sign",
214
+ path: "multisig",
215
+ proposalId: result.proposal.id,
216
+ reachedThreshold: result.reachedThreshold,
217
+ requiredSigs: policy.m,
218
+ memberCount: policy.members.length,
219
+ payload,
220
+ };
221
+ if (json) {
222
+ console.log(JSON.stringify(out, null, 2));
223
+ } else {
224
+ console.log(
225
+ `↪ Routed through multisig (domain ${MULTISIG_BRIDGE_OUTBOUND_DOMAIN})`,
226
+ );
227
+ console.log(` proposalId: ${result.proposal.id}`);
228
+ console.log(` needs ${policy.m} of ${policy.members.length} signatures`);
229
+ if (result.reachedThreshold)
230
+ console.log(
231
+ ` ✓ threshold reached on first signature — run: cc crosschain bridge-consume ${result.proposal.id}`,
232
+ );
233
+ }
234
+ return out;
235
+ } finally {
236
+ close();
237
+ }
238
+ }
239
+
240
+ /**
241
+ * #21 B.5 Layer 1 — finalize an outbound bridge after multisig threshold.
242
+ * Reads the proposal's payload, executes the actual bridgeAsset() insert,
243
+ * then marks the proposal consumed. Mirrors marketplace.consume.
244
+ *
245
+ * PR4 — when `mtc=true`, additionally stage the bridge op with multisig
246
+ * provenance via `_maybeStageMtc` so closeBatch carries it into the MTC
247
+ * envelope leaf (and downstream wrapper attachment / Layer 3 broadcast).
248
+ */
249
+ async function _bridgeConsume({
250
+ db,
251
+ proposalId,
252
+ multisigDb,
253
+ multisigLog,
254
+ json,
255
+ mtc,
256
+ mtcConfigDir,
257
+ }) {
258
+ const { mgr, close } = await openMultisigManager(multisigDb, multisigLog);
259
+ try {
260
+ const got = mgr.get(proposalId);
261
+ if (!got) {
262
+ const out = { status: "error", reason: "proposal_not_found" };
263
+ if (json) console.log(JSON.stringify(out, null, 2));
264
+ else console.error(`✗ No proposal: ${proposalId}`);
265
+ process.exitCode = 2;
266
+ return out;
267
+ }
268
+ if (got.proposal.domain !== MULTISIG_BRIDGE_OUTBOUND_DOMAIN) {
269
+ const out = {
270
+ status: "error",
271
+ reason: "wrong_domain",
272
+ expected: MULTISIG_BRIDGE_OUTBOUND_DOMAIN,
273
+ actual: got.proposal.domain,
274
+ };
275
+ if (json) console.log(JSON.stringify(out, null, 2));
276
+ else
277
+ console.error(
278
+ `✗ Proposal domain "${got.proposal.domain}" is not "${MULTISIG_BRIDGE_OUTBOUND_DOMAIN}" — use the matching consume command for that domain instead.`,
279
+ );
280
+ process.exitCode = 2;
281
+ return out;
282
+ }
283
+ if (got.proposal.state !== "reached") {
284
+ const out = {
285
+ status: "error",
286
+ reason: `proposal_state_${got.proposal.state}`,
287
+ };
288
+ if (json) console.log(JSON.stringify(out, null, 2));
289
+ else
290
+ console.error(
291
+ `✗ Proposal state is "${got.proposal.state}", need "reached" — sign more before consume.`,
292
+ );
293
+ process.exitCode = 2;
294
+ return out;
295
+ }
296
+
297
+ const payload = JSON.parse(got.proposal.payloadJcs);
298
+
299
+ // #21 B.5 Layer 2 PR1 — extract m-of-n provenance from the reached
300
+ // proposal and persist it alongside the bridge row. signatures are
301
+ // returned sorted by signer_did ASC (store.getSignatures), so the array
302
+ // ordering is canonical for any downstream onchain verifier.
303
+ const signatures = got.signatures || [];
304
+ // PR4 adds thresholdM + memberCountN so the carry-forward MTC staging
305
+ // can build the canonical multisig_provenance shape required by
306
+ // attachMultisigProvenance / verifyMultisigProvenance.
307
+ const multisigContext = {
308
+ proposalId: got.proposal.id,
309
+ thresholdM: got.proposal.thresholdM,
310
+ memberCountN: Array.isArray(got.proposal.memberSet)
311
+ ? got.proposal.memberSet.length
312
+ : signatures.length,
313
+ signers: signatures.map((s) => s.signerDid),
314
+ partialSigs: signatures.map((s) => ({
315
+ did: s.signerDid,
316
+ alg: s.alg,
317
+ sig: Buffer.isBuffer(s.sig) ? s.sig.toString("hex") : String(s.sig),
318
+ })),
319
+ };
320
+
321
+ const bridgeResult = bridgeAsset(
322
+ db,
323
+ {
324
+ fromChain: payload.fromChain,
325
+ toChain: payload.toChain,
326
+ asset: payload.asset,
327
+ amount: payload.amount,
328
+ senderAddress: payload.sender,
329
+ recipientAddress: payload.recipient,
330
+ },
331
+ multisigContext,
332
+ );
333
+ if (!bridgeResult.bridgeId) {
334
+ const out = {
335
+ status: "error",
336
+ reason: `bridge_insert_failed_${bridgeResult.reason}`,
337
+ proposalId,
338
+ };
339
+ if (json) console.log(JSON.stringify(out, null, 2));
340
+ else
341
+ console.error(
342
+ `✗ Bridge insert failed: ${bridgeResult.reason} — proposal left in "reached" state`,
343
+ );
344
+ process.exitCode = 1;
345
+ return out;
346
+ }
347
+ const finalizeRes = mgr.finalize(proposalId);
348
+ if (!finalizeRes.ok) {
349
+ const out = {
350
+ status: "error",
351
+ reason: finalizeRes.reason,
352
+ proposalId,
353
+ bridgeId: bridgeResult.bridgeId,
354
+ };
355
+ if (json) console.log(JSON.stringify(out, null, 2));
356
+ else
357
+ console.error(
358
+ `✗ Finalize failed: ${finalizeRes.reason} (bridge row ${bridgeResult.bridgeId} already inserted)`,
359
+ );
360
+ process.exitCode = 1;
361
+ return out;
362
+ }
363
+
364
+ // PR4 — opt-in MTC staging carries the multisig provenance forward into
365
+ // closeBatch / wrapper envelope. Same `_maybeStageMtc` helper as the
366
+ // legacy direct-bridge path, just with an enriched op shape including
367
+ // the canonical `multisig_provenance` field.
368
+ const mtcStaged = _maybeStageMtc({ mtc, mtcConfigDir }, () => ({
369
+ bridge_op: "lock",
370
+ src_chain: payload.fromChain,
371
+ dst_chain: payload.toChain,
372
+ src_tx_hash: bridgeResult.bridgeId,
373
+ amount: String(payload.amount),
374
+ asset: payload.asset || "native",
375
+ src_did: payload.sender || null,
376
+ dst_did: payload.recipient || null,
377
+ issued_at: new Date().toISOString(),
378
+ multisig_provenance: {
379
+ proposal_id: multisigContext.proposalId,
380
+ threshold_m: multisigContext.thresholdM,
381
+ member_count_n: multisigContext.memberCountN,
382
+ signers: multisigContext.signers,
383
+ partial_sigs: multisigContext.partialSigs,
384
+ },
385
+ }));
386
+
387
+ const out = {
388
+ status: "consumed",
389
+ proposalId,
390
+ bridgeId: bridgeResult.bridgeId,
391
+ fee: bridgeResult.fee,
392
+ payload,
393
+ // Layer 2 provenance — surface what was persisted on the bridge row.
394
+ signers: multisigContext.signers,
395
+ partialSigCount: multisigContext.partialSigs.length,
396
+ // PR4 — surface MTC staging result when --mtc was passed.
397
+ mtc: mtcStaged,
398
+ };
399
+ if (json) {
400
+ console.log(JSON.stringify(out, null, 2));
401
+ } else {
402
+ console.log(
403
+ `✓ Bridge consumed — ${payload.fromChain} → ${payload.toChain}, amount ${payload.amount} ${payload.asset}`,
404
+ );
405
+ console.log(
406
+ ` bridgeId: ${bridgeResult.bridgeId} (fee ${bridgeResult.fee})`,
407
+ );
408
+ console.log(` proposalId: ${proposalId}`);
409
+ if (mtcStaged?.staged)
410
+ console.log(` MTC envelope staged: ${mtcStaged.path}`);
411
+ else if (mtcStaged && !mtcStaged.staged)
412
+ console.log(` MTC stage skipped: ${mtcStaged.reason}`);
413
+ }
414
+ return out;
415
+ } finally {
416
+ close();
417
+ }
418
+ }
419
+
114
420
  export function registerCrossChainCommand(program) {
115
421
  const cc = new Command("crosschain")
116
422
  .description("Cross-chain interoperability (Phase 89)")
@@ -174,9 +480,49 @@ export function registerCrossChainCommand(program) {
174
480
  "On success, stage an MTC bridge envelope (requires cc crosschain mtc-batch to close)",
175
481
  )
176
482
  .option("--mtc-config-dir <dir>", "Override MTC config root")
483
+ .option(
484
+ "--require-multisig",
485
+ "Route through m-of-n multisig (domain crosschain.bridge.outbound). Requires --initiator + --key + policy set.",
486
+ )
487
+ .option(
488
+ "--initiator <did>",
489
+ "Initiator DID for multisig proposal (required when --require-multisig)",
490
+ )
491
+ .option("--alg <alg>", "Initiator signing alg", "Ed25519")
492
+ .option(
493
+ "--key <hex|path>",
494
+ "Initiator secret key hex or path to hex file (required when --require-multisig)",
495
+ )
496
+ .option(
497
+ "--multisig-db <path>",
498
+ "Multisig SQLite DB path (default ~/.chainlesschain/multisig.db)",
499
+ )
500
+ .option(
501
+ "--multisig-log <path>",
502
+ "Multisig governance log path (default ~/.chainlesschain/multisig.governance.log)",
503
+ )
177
504
  .option("--json", "JSON output")
178
- .action((fromChain, toChain, amount, opts) => {
505
+ .action(async (fromChain, toChain, amount, opts) => {
179
506
  const db = _dbFromCtx(cc);
507
+
508
+ if (opts.requireMultisig) {
509
+ return _bridgePropose({
510
+ db,
511
+ fromChain,
512
+ toChain,
513
+ amount: parseFloat(amount),
514
+ asset: opts.asset,
515
+ sender: opts.sender,
516
+ recipient: opts.recipient,
517
+ initiator: opts.initiator,
518
+ alg: opts.alg,
519
+ key: opts.key,
520
+ multisigDb: opts.multisigDb || defaultMultisigDbPath(),
521
+ multisigLog: opts.multisigLog || defaultMultisigLogPath(),
522
+ json: opts.json,
523
+ });
524
+ }
525
+
180
526
  const result = bridgeAsset(db, {
181
527
  fromChain,
182
528
  toChain,
@@ -208,6 +554,37 @@ export function registerCrossChainCommand(program) {
208
554
  console.log(`MTC stage skipped: ${mtc.reason}`);
209
555
  });
210
556
 
557
+ cc.command("bridge-consume <proposalId>")
558
+ .description(
559
+ "Finalize a multisig-gated bridge after threshold reached — performs the SQLite insert and marks proposal consumed",
560
+ )
561
+ .option(
562
+ "--multisig-db <path>",
563
+ "Multisig SQLite DB path (default ~/.chainlesschain/multisig.db)",
564
+ )
565
+ .option(
566
+ "--multisig-log <path>",
567
+ "Multisig governance log path (default ~/.chainlesschain/multisig.governance.log)",
568
+ )
569
+ .option(
570
+ "--mtc",
571
+ "On success, stage an MTC bridge envelope carrying the multisig provenance (requires cc crosschain mtc-batch to close)",
572
+ )
573
+ .option("--mtc-config-dir <dir>", "Override MTC config root")
574
+ .option("--json", "JSON output")
575
+ .action(async (proposalId, opts) => {
576
+ const db = _dbFromCtx(cc);
577
+ return _bridgeConsume({
578
+ db,
579
+ proposalId,
580
+ multisigDb: opts.multisigDb || defaultMultisigDbPath(),
581
+ multisigLog: opts.multisigLog || defaultMultisigLogPath(),
582
+ json: opts.json,
583
+ mtc: opts.mtc,
584
+ mtcConfigDir: opts.mtcConfigDir,
585
+ });
586
+ });
587
+
211
588
  cc.command("bridge-status <bridge-id> <status>")
212
589
  .description("Update bridge status")
213
590
  .option("-t, --tx-hash <hash>", "Transaction hash")
@@ -242,6 +619,31 @@ export function registerCrossChainCommand(program) {
242
619
  if (b.lock_tx_hash) console.log(`Lock TX: ${b.lock_tx_hash}`);
243
620
  if (b.mint_tx_hash) console.log(`Mint TX: ${b.mint_tx_hash}`);
244
621
  if (b.error_message) console.log(`Error: ${b.error_message}`);
622
+ // #21 B.5 Layer 2 PR1 — surface m-of-n provenance when present.
623
+ if (b.multisig_proposal_id) {
624
+ console.log(`Multisig: ${b.multisig_proposal_id}`);
625
+ try {
626
+ const signers = b.signers_did_json
627
+ ? JSON.parse(b.signers_did_json)
628
+ : [];
629
+ const sigs = b.partial_sigs_json
630
+ ? JSON.parse(b.partial_sigs_json)
631
+ : [];
632
+ console.log(
633
+ `Signers: ${signers.length} — ${signers.join(", ") || "(none)"}`,
634
+ );
635
+ if (sigs.length) {
636
+ const algs = [...new Set(sigs.map((s) => s.alg))].join("+");
637
+ console.log(`Sigs: ${sigs.length} partial (${algs})`);
638
+ }
639
+ } catch (_err) {
640
+ /* malformed provenance JSON — show raw cell content */
641
+ if (b.signers_did_json)
642
+ console.log(`Signers: ${b.signers_did_json}`);
643
+ if (b.partial_sigs_json)
644
+ console.log(`Sigs: ${b.partial_sigs_json}`);
645
+ }
646
+ }
245
647
  });
246
648
 
247
649
  cc.command("bridges")