chainlesschain 0.162.85 → 0.162.86

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 (151) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-9s5boloe.js → AIOps-BsWi0a9a.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-nuq5gtIb.js → ActionButton-CgU09_bk.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DrDHYSjZ.js → Analytics-EAT1K7a2.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BDs4ULs3.js → AppLayout-scmKwxG-.js} +5 -5
  6. package/src/assets/web-panel/assets/{Audit-DaqX39ZA.js → Audit-BjUhZorx.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-ZpAZcYWU.js → Backup-UZynrFEB.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-rEL4bCmz.js → BaseInput-Dw7VRL38.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-LkXtveTN.js → Chat-jFpknfRR.js} +6 -6
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-BdkD-opG.js → ChatBubbleRenderer-V8GFgU1l.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-B_nJ54jp.js → Checkbox-A6QNjulp.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-C0NHbbUn.js → Codegen-plIAoFPy.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-Bijl1DuU.js → Col-p8jds0fN.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-CVxkvzf7.js → Community-CjdSyAYH.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-CXmuCEc2.js → Compact-D_pwxcOz.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-CsP-YVrE.js → Compliance-lKVtLubh.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-B31Nw8vF.js → Cowork-C1N1klDH.js} +3 -3
  18. package/src/assets/web-panel/assets/{Cron-Bo_cDFwM.js → Cron-De82luS5.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-D0C8hYOr.js → Crosschain-Ye0orjca.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-eq7i-KXB.js → DID-Ci2zdZFM.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-CVRBWNgx.js → Dashboard-8ttZ4QQ9.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-DcEm3tiv.js → Dropdown-BON5tdO8.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-B16xNYan.js → EmailListRenderer-iPlELXWj.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-C1THZ4cA.js → FamilyGuardDashboard-BNBYL3FW.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-BO6tO2cA.js → Federation-Bur4PRzE.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-BLCjbBnQ.js → FormItemContext-BlOvhD7K.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-HGQG6O9G.js → GenericCardRenderer-BoVvb2xa.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-DN44Wtw8.js → Git-B__nMbw1.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-BwUlWRZa.js → Governance-DK0Zgh2N.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-CI7XUJpq.js → Inference-BddQ7oih.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-D5AFdDA1.js → KnowledgeGraph-CvFX71Ed.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-ChxfsVjf.js → Logs-L2sBQLYZ.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-fzmD7edl.js → Marketplace-BCWe7HDC.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-egeEEiOo.js → McpTools-DqKH9JPl.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-ClfkU0Zc.js → Memory-DWWABKsb.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-CZP0a7ug.js → MobileBridge-B2eLD-PB.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileProjects-ClhNmxpO.js → MobileProjects-cieCNE_S.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-2W2NWMiR.js → Mtc-Y-5_ueBj.js} +4 -4
  39. package/src/assets/web-panel/assets/{MtcAudit-BTH5f5vy.js → MtcAudit-D00-m4zy.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-Dm-8GZVC.js → Multisig-2YOBtc_K.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-CWvQYw0f.js → NLProgramming-kRWZBnaz.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-Ba9QC8Nt.js → Notes-DPRHkyl5.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-DhGUAxEK.js → NotificationSettings-vJOg9C4W.js} +1 -1
  44. package/src/assets/web-panel/assets/OrderTableRenderer-B0Y6J6Nc.js +1 -0
  45. package/src/assets/web-panel/assets/{Organization-BE6PoYoV.js → Organization-BuISwIXd.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-CidZn_Vh.js → Overflow-BNGHwMDw.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-D8KPm4lA.js → P2P-DHBBs29l.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-uALWSx7o.js → PdhVaultBrowser-D9zGzba7.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-DBRrTNke.js → Permissions-QLkdu-G_.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-DYhCXT0Y.js → PersonalDataHub-BuQlObqk.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-CcP7z75i.js → Pipeline-D_ycs0g9.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-DIL17ASI.js → Privacy-oN6XDVGm.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-UbjZrOSd.js → ProjectInit-BGThFxbb.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-DEi3eB8z.js → ProjectSettings-BxWieeHC.js} +2 -2
  55. package/src/assets/web-panel/assets/Projects-DOd58I-_.js +1 -0
  56. package/src/assets/web-panel/assets/{Providers-BDh_Pzi1.js → Providers-kREzYT7U.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-BDRMDklR.js → QuickAsk-Cw11_JEa.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-SiCcAGiO.js → Recommend-CDWYEzDP.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-CHG51BYr.js → Reputation-BuDEzBoL.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-syZxxDmc.js → Row-Bxxu4Xtz.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-CLfcVChu.js → RssFeed-BpEsZmwI.js} +2 -2
  62. package/src/assets/web-panel/assets/{Search-By-0Z5NO.js → Search-BKDmySFl.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-gxHVmg1J.js → Security-gJvuDQw2.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-DGbUxRrs.js → Services-XmNshc8J.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-JiyfBUz-.js → Skeleton-sGp0pOss.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-C4xFz9Bd.js → Skills-O-23QIht.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-DyeMx6KJ.js → Sla-DVxzPFWL.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-CY8SKnF9.js → SpeechSettings-CdZV4JqV.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-t3ZgQs5m.js → SyncSettings-CzKwdZHi.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-BavjuZCf.js → Tasks-2QWjs9uX.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-dZ0agBUO.js → Templates-dKai3F-y.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-DEoI-tNH.js → Tenant-DGtGH0wG.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-DK2OhsAg.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-CUS477-i.js → TimelineRenderer-Dq4yqkky.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-B9-haDN7.js → Tokens-C2qbIdlP.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-den4MocY.js → Trigger-Cqee0r__.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-DqnPipcT.js → Trust-D2qJ8aQY.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-CmPLZGO2.js → UkeySign-DVvv_9zC.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-BcldEyuI.js → VideoEditing-B-34cGbd.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-Dap9Ydle.js → Wallet-ChvGDsZH.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-cSNYDx2c.js → WebAuthn-h7kqS8ou.js} +5 -5
  82. package/src/assets/web-panel/assets/{WorkflowEditor-R4gjxnPH.js → WorkflowEditor-AUqprf8Y.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-Dgaug64C.js → chat-i7hUCh_C.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-CzEwsWwx.js → colors-DjtDsEu7.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-DWfrBoYH.js → compact-item-CyoTiRay.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-DTQOT4YN.js → createContext-byecyZks.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-D3_gOwpU.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-BZffORzo.js → hasIn-CJVaIlUw.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-DGjB2DHG.js → index-1SXdlEmZ.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-DFYzC2yk.js → index-B4gYSyri.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-C0YRxk_4.js → index-BD3pqRA9.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-C-aIuwpi.js → index-BLaQNt_7.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-3of1AqNk.js → index-BRWjzWaM.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-D7h9VCvX.js → index-BscEBCR0.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-MpkucUn9.js → index-BxkXcXNs.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-D_TSRl0O.js → index-C2I6a-RA.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D6B2nVTh.js → index-C3mMDCOE.js} +1 -1
  98. package/src/assets/web-panel/assets/index-C4MOtXdA.js +1 -0
  99. package/src/assets/web-panel/assets/{index-FEhVHCgN.js → index-C8beUhKO.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-OoAfomZi.js → index-CDf8t-mU.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-CR6f7W_w.js → index-COs_6PQ5.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-B5fMCVs_.js → index-Cme6n3eY.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CKs7M2hi.js → index-CnjxYq-t.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-D3XaluNc.js → index-Cr42QNqy.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-CU_6ho7E.js → index-CtdcStbl.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-CN37EzzF.js → index-D3JKjMEY.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BgqftzvZ.js → index-DH7suqAN.js} +3 -3
  108. package/src/assets/web-panel/assets/{index-C7wTpk38.js → index-DKeNd7yb.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BgWQb3ab.js → index-DLIQMCBQ.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-Bz3VXQHs.js → index-DXgZwbRe.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-Bx9jDCsw.js → index-Dc8QTolS.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-OvBi64nW.js → index-DoAiXnUJ.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-B4Zncxxn.js → index-DwI-ZhZq.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-C2pcp3GP.js → index-DwV8P00A.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-4Vr4kM9h.js → index-DznVBVpM.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-CCHs-tnT.js → index-EZd5K5UE.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CFNgAerJ.js → index-K1wX1vnH.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DRAeb51w.js → index-KIqcaJ6Q.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CV7WR2SO.js → index-Qesr-8RD.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-BI6qopNT.js → index-RYkcxXFq.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-CS3ZkiIg.js → index-XGSqce94.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Ov5m4jW7.js → index-a6qb2NLc.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-Dlc29Z4D.js → index-gWPWksKr.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-CZWIp8ei.js → index-jAdTCN4U.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-CXK7GqtK.js → index-kOZvf-u5.js} +1 -1
  126. package/src/assets/web-panel/assets/index-nH2eOdD9.js +1 -0
  127. package/src/assets/web-panel/assets/{index-Cl1aGzuh.js → index-sUJ2fbT9.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-B2v8eGiE.js → initDefaultProps-C9XZl-TO.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-CwkWvaNW.js → motion-DTSNqE6t.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-BYJ058wL.js → move-DTmo8xnK.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-B3nuYFSU.js → omit-Dd9VzuaV.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-0hcTSJaT.js → pickAttrs-CRTbePD_.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-D6IUlBKU.js → placementArrow-cPPZNiDG.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-FKtuDNR2.js → responsiveObserve-CWSLBUlY.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-B_QbBNod.js → slide-Bu6wM4Vm.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-rGTl4pd7.js → statusUtils-BQSVPEW6.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-DSo1kqIn.js → styleChecker-CIH0NQmx.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-CxkZaI6s.js → useFlexGapSupport-Cw2z1E4v.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-DrW3e3kn.js → useFs-CEf8lFD8.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-CVKkAaON.js → usePersonalDataHub-C-xuLSv-.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-lTUDdHso.js → vnode-D6QpJFSY.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-D9qIJ7kF.js → zoom-DccRPdcN.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/lib/image-input.js +27 -3
  145. package/src/runtime/headless-stream.js +40 -2
  146. package/src/assets/web-panel/assets/OrderTableRenderer-DwM-WxqV.js +0 -1
  147. package/src/assets/web-panel/assets/Projects-DhHbGqmv.js +0 -1
  148. package/src/assets/web-panel/assets/Terminal-CvMaElnO.js +0 -3
  149. package/src/assets/web-panel/assets/devWarning-BpZTkDGI.js +0 -1
  150. package/src/assets/web-panel/assets/index-CmQTcEwA.js +0 -1
  151. package/src/assets/web-panel/assets/index-vzAexOhR.js +0 -1
@@ -1,13 +1,13 @@
1
- import{I as u,P as p,J as E,V as y,c as o,K as t,F as X,Q as r,R as s,U as f,Z as ne,S as k,w as ae,b as F,r as S,o as le,$ as re,a2 as Z}from"./vendor-BvqAck49.js";import{_ as ie,u as $,d as g}from"./index-BgqftzvZ.js";import{u as ee}from"./useShellMode-CgR0wCYM.js";import oe from"./index-OvBi64nW.js";import{a4 as se,c as de,d as ue,aO as ce,f as pe,a0 as me,R as fe}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-B3nuYFSU.js";import"./pickAttrs-0hcTSJaT.js";import"./initDefaultProps-B2v8eGiE.js";import"./motion-CwkWvaNW.js";import"./raf-Deuc0E8-.js";import"./index-D6B2nVTh.js";import"./index-Cl1aGzuh.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-BpZTkDGI.js";import"./compact-item-DWfrBoYH.js";import"./createContext-DTQOT4YN.js";import"./Compact-CXmuCEc2.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-DSo1kqIn.js";import"./zoom-D9qIJ7kF.js";import"./ActionButton-nuq5gtIb.js";import"./vnode-lTUDdHso.js";const ge={__name:"SignProposalModal",props:{open:{type:Boolean,default:!1},proposal:{type:Object,default:null}},emits:["update:open","signed"],setup(G,{expose:a,emit:U}){a();const e=G,h=U,B=$(),{isEmbedded:_}=ee(),b=S(!1),x=S(null),v=S("ukey"),C=S(""),D=S(!1);async function z(d,K,n,c=15e3){if(_){const P=await B.sendRaw({type:d,...K},c);if(!P?.ok){const V=P?.error;throw new Error(typeof V=="string"?V:V?.message||`${d} failed`)}return P.result}return B.executeJson(n,c)}const w=F(()=>e.proposal?.proposal??{}),L=F(()=>new Set((e.proposal?.signatures??[]).map(d=>d.signerDid))),I=F(()=>L.value.size),j=F(()=>(w.value?.memberSet??[]).filter(d=>!L.value.has(d.did))),T=F(()=>{const d=w.value?.payloadHash;return!d||typeof d!="string"?"(unavailable)":d.length<=12?d:`${d.slice(0,8)}…${d.slice(-4)}`}),J=F(()=>{const d=w.value?.payload;try{return d?JSON.stringify(d,null,2):w.value?.payloadJcs||"(empty)"}catch{return String(d)}}),R=F(()=>b.value||!x.value?!1:v.value==="hex"?/^[0-9a-fA-F]{2,}$/.test(C.value.trim()):v.value==="ukey"),m=F(()=>v.value==="ukey"?"签名将通过主进程调用 U-Key 硬件 (Windows) / simulation 驱动 (macOS/Linux)。 请确认 payload hash 与发起方提供的一致。私钥不出硬件边界。":"调试模式:私钥 hex 仅供 CLI / dev 测试。生产环境请使用 U-Key 硬件源。");function O(d){return d?d.length<=28?d:`${d.slice(0,20)}…${d.slice(-8)}`:""}function N(){x.value=null,v.value="ukey",C.value="",D.value=!1,b.value=!1}ae(()=>e.open,d=>{d&&N()}),ae(j,d=>{d.length>0&&!x.value&&(x.value=d[0].did)});function H(d){b.value||h("update:open",d)}function Q(){b.value||h("update:open",!1)}async function Y(){if(!R.value)return;const d=v.value==="hex"?{secretKeyHex:C.value.trim()}:{},K=w.value.memberSet.find(n=>n.did===x.value);b.value=!0;try{const n=await z("multisig.sign",{proposalId:w.value.id,signerDid:x.value,alg:K?.alg??"Ed25519",source:v.value,params:d},v.value==="hex"?`multisig sign ${w.value.id} --signer ${x.value} --key ${d.secretKeyHex} --json`:`multisig sign ${w.value.id} --signer ${x.value} --json`,2e4);if(n.accepted)g.success(n.reachedThreshold?"✓ 签名已接受 — 达到阈值":"✓ 签名已接受"),h("signed",n),h("update:open",!1);else{const c=n.reason||"unknown",P=n.detail?` (${n.detail})`:"";g.error(`签名失败: ${c}${P}`)}}catch(n){g.error(n.message||String(n))}finally{b.value=!1}}const q={props:e,emit:h,ws:B,isEmbedded:_,signing:b,signerDid:x,keySource:v,hexInput:C,hashExpanded:D,callMultisigTopic:z,detail:w,signedSet:L,signedCount:I,pendingMembers:j,shortHash:T,payloadJson:J,canSign:R,riskDescription:m,shortDid:O,reset:N,onUpdateOpen:H,onCancel:Q,onConfirmSign:Y,ref:S,computed:F,watch:ae,get message(){return g},get useWsStore(){return $},get useShellMode(){return ee}};return Object.defineProperty(q,"__isScriptSetup",{enumerable:!1,value:!0}),q}},ye={style:{"font-size":"12px"}},_e={style:{margin:"8px 0 0","max-height":"200px",overflow:"auto","font-size":"11px"}},ve={style:{"margin-bottom":"16px"}},be={style:{"font-size":"12px"}},ke={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},xe={style:{"margin-bottom":"16px"}};function he(G,a,U,e,h,B){const _=u("a-tag"),b=u("a-descriptions-item"),x=u("a-descriptions"),v=u("a-divider"),C=u("a-select-option"),D=u("a-select"),z=u("a-typography-text"),w=u("a-radio"),L=u("a-radio-group"),I=u("a-input-password"),j=u("a-alert"),T=u("a-button"),J=u("a-space"),R=u("a-modal");return p(),E(X,null,[y(`
1
+ import{I as u,P as p,J as E,V as y,c as o,K as t,F as X,Q as r,R as s,U as f,Z as ne,S as k,w as ae,b as F,r as S,o as le,$ as re,a2 as Y}from"./vendor-BvqAck49.js";import{_ as ie,u as $,d as g}from"./index-DH7suqAN.js";import{u as ee}from"./useShellMode-CgR0wCYM.js";import oe from"./index-DoAiXnUJ.js";import{a4 as se,c as de,d as ue,aO as ce,f as pe,a0 as me,R as fe}from"./icons-DP3uiYxy.js";import"./KeyCode-D63Tfrq7.js";import"./omit-Dd9VzuaV.js";import"./pickAttrs-CRTbePD_.js";import"./initDefaultProps-C9XZl-TO.js";import"./motion-DTSNqE6t.js";import"./raf-Deuc0E8-.js";import"./index-C3mMDCOE.js";import"./index-sUJ2fbT9.js";import"./isVisible-C7tPsqfj.js";import"./useState-BK4hy8Ma.js";import"./devWarning-D3_gOwpU.js";import"./compact-item-CyoTiRay.js";import"./createContext-byecyZks.js";import"./Compact-D_pwxcOz.js";import"./_getTag-DnrRH4E6.js";import"./styleChecker-CIH0NQmx.js";import"./zoom-DccRPdcN.js";import"./ActionButton-CgU09_bk.js";import"./vnode-D6QpJFSY.js";const ge={__name:"SignProposalModal",props:{open:{type:Boolean,default:!1},proposal:{type:Object,default:null}},emits:["update:open","signed"],setup(Z,{expose:a,emit:j}){a();const e=Z,h=j,B=$(),{isEmbedded:_}=ee(),b=S(!1),x=S(null),v=S("ukey"),C=S(""),D=S(!1);async function z(d,K,n,c=15e3){if(_){const P=await B.sendRaw({type:d,...K},c);if(!P?.ok){const Q=P?.error;throw new Error(typeof Q=="string"?Q:Q?.message||`${d} failed`)}return P.result}return B.executeJson(n,c)}const w=F(()=>e.proposal?.proposal??{}),L=F(()=>new Set((e.proposal?.signatures??[]).map(d=>d.signerDid))),I=F(()=>L.value.size),U=F(()=>(w.value?.memberSet??[]).filter(d=>!L.value.has(d.did))),T=F(()=>{const d=w.value?.payloadHash;return!d||typeof d!="string"?"(unavailable)":d.length<=12?d:`${d.slice(0,8)}…${d.slice(-4)}`}),J=F(()=>{const d=w.value?.payload;try{return d?JSON.stringify(d,null,2):w.value?.payloadJcs||"(empty)"}catch{return String(d)}}),R=F(()=>b.value||!x.value?!1:v.value==="hex"?/^[0-9a-fA-F]{2,}$/.test(C.value.trim()):v.value==="ukey"),m=F(()=>v.value==="ukey"?"签名将通过主进程调用 U-Key 硬件 (Windows) / simulation 驱动 (macOS/Linux)。 请确认 payload hash 与发起方提供的一致。私钥不出硬件边界。":"调试模式:私钥 hex 仅供 CLI / dev 测试。生产环境请使用 U-Key 硬件源。");function O(d){return d?d.length<=28?d:`${d.slice(0,20)}…${d.slice(-8)}`:""}function N(){x.value=null,v.value="ukey",C.value="",D.value=!1,b.value=!1}ae(()=>e.open,d=>{d&&N()}),ae(U,d=>{d.length>0&&!x.value&&(x.value=d[0].did)});function H(d){b.value||h("update:open",d)}function W(){b.value||h("update:open",!1)}async function G(){if(!R.value)return;const d=v.value==="hex"?{secretKeyHex:C.value.trim()}:{},K=w.value.memberSet.find(n=>n.did===x.value);b.value=!0;try{const n=await z("multisig.sign",{proposalId:w.value.id,signerDid:x.value,alg:K?.alg??"Ed25519",source:v.value,params:d},v.value==="hex"?`multisig sign ${w.value.id} --signer ${x.value} --key ${d.secretKeyHex} --json`:`multisig sign ${w.value.id} --signer ${x.value} --json`,2e4);if(n.accepted)g.success(n.reachedThreshold?"✓ 签名已接受 — 达到阈值":"✓ 签名已接受"),h("signed",n),h("update:open",!1);else{const c=n.reason||"unknown",P=n.detail?` (${n.detail})`:"";g.error(`签名失败: ${c}${P}`)}}catch(n){g.error(n.message||String(n))}finally{b.value=!1}}const q={props:e,emit:h,ws:B,isEmbedded:_,signing:b,signerDid:x,keySource:v,hexInput:C,hashExpanded:D,callMultisigTopic:z,detail:w,signedSet:L,signedCount:I,pendingMembers:U,shortHash:T,payloadJson:J,canSign:R,riskDescription:m,shortDid:O,reset:N,onUpdateOpen:H,onCancel:W,onConfirmSign:G,ref:S,computed:F,watch:ae,get message(){return g},get useWsStore(){return $},get useShellMode(){return ee}};return Object.defineProperty(q,"__isScriptSetup",{enumerable:!1,value:!0}),q}},ye={style:{"font-size":"12px"}},_e={style:{margin:"8px 0 0","max-height":"200px",overflow:"auto","font-size":"11px"}},ve={style:{"margin-bottom":"16px"}},be={style:{"font-size":"12px"}},ke={style:{"margin-left":"8px",color:"var(--text-secondary)","font-size":"12px"}},xe={style:{"margin-bottom":"16px"}};function he(Z,a,j,e,h,B){const _=u("a-tag"),b=u("a-descriptions-item"),x=u("a-descriptions"),v=u("a-divider"),C=u("a-select-option"),D=u("a-select"),z=u("a-typography-text"),w=u("a-radio"),L=u("a-radio-group"),I=u("a-input-password"),U=u("a-alert"),T=u("a-button"),J=u("a-space"),R=u("a-modal");return p(),E(X,null,[y(`
2
2
  #21 B.1 PR2b — multisig 提案签名 Modal。
3
3
  设计:A.2 §2.4 高风险二次确认;§2.4.c payload hash 短码 (head 8 + tail 4)
4
4
  §2.1.a 高风险红 (danger 主按钮)
5
5
  架构:renderer 永远不持私钥。source='ukey' 走主进程 ukeyManager (默认推荐);
6
6
  source='hex' 仅调试用 hidden by default。
7
- `),o(R,{open:U.open,title:"签名提案",width:600,"mask-closable":!1,keyboard:!1,"destroy-on-close":"","onUpdate:open":e.onUpdateOpen},{footer:t(()=>[o(J,null,{default:t(()=>[o(T,{disabled:e.signing,onClick:e.onCancel},{default:t(()=>[...a[12]||(a[12]=[r("取消",-1)])]),_:1},8,["disabled"]),o(T,{type:"primary",danger:"",loading:e.signing,disabled:!e.canSign,onClick:e.onConfirmSign},{default:t(()=>[...a[13]||(a[13]=[r("立即签名",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[U.proposal?(p(),E(X,{key:0},[o(x,{column:1,bordered:"",size:"small"},{default:t(()=>[o(b,{label:"Domain"},{default:t(()=>[o(_,{color:"purple"},{default:t(()=>[r(s(e.detail.domain),1)]),_:1})]),_:1}),o(b,{label:"Proposal ID"},{default:t(()=>[f("code",ye,s(e.detail.id),1)]),_:1}),o(b,{label:"阈值"},{default:t(()=>[r(s(e.detail.thresholdM)+"-of-"+s(e.detail.memberSet.length),1)]),_:1}),o(b,{label:"已签 / 需签"},{default:t(()=>[r(s(e.signedCount)+" / "+s(e.detail.thresholdM),1)]),_:1}),o(b,{label:"Payload hash"},{default:t(()=>[e.hashExpanded?(p(),E("code",{key:1,class:"hash-full",style:{cursor:"pointer","font-size":"11px","word-break":"break-all"},onClick:a[1]||(a[1]=m=>e.hashExpanded=!1)},s(e.detail.payloadHash||"(unavailable)"),1)):(p(),E("code",{key:0,class:"hash-short",style:{cursor:"pointer","font-size":"12px"},onClick:a[0]||(a[0]=m=>e.hashExpanded=!0),title:"点击展开完整 hash"},s(e.shortHash),1))]),_:1}),o(b,{label:"Payload"},{default:t(()=>[f("details",null,[a[5]||(a[5]=f("summary",{style:{cursor:"pointer",color:"var(--text-secondary)"}}," 展开 (JCS) ",-1)),f("pre",_e,s(e.payloadJson),1)])]),_:1})]),_:1}),o(v),y(" Signer DID 选择 "),f("div",ve,[a[7]||(a[7]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"签名身份 (DID)",-1)),o(D,{value:e.signerDid,"onUpdate:value":a[2]||(a[2]=m=>e.signerDid=m),style:{width:"100%"},placeholder:"选择签名成员",disabled:e.signing},{default:t(()=>[(p(!0),E(X,null,ne(e.pendingMembers,m=>(p(),k(C,{key:m.did,value:m.did},{default:t(()=>[f("code",be,s(e.shortDid(m.did)),1),f("span",ke," ("+s(m.alg)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","disabled"]),e.pendingMembers.length===0?(p(),k(z,{key:0,type:"warning",style:{"font-size":"12px"}},{default:t(()=>[...a[6]||(a[6]=[r(" 所有成员均已签名 (达阈值) ",-1)])]),_:1})):y("v-if",!0)]),y(" 密钥来源 "),f("div",xe,[a[11]||(a[11]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"密钥来源",-1)),o(L,{value:e.keySource,"onUpdate:value":a[3]||(a[3]=m=>e.keySource=m),disabled:e.signing},{default:t(()=>[o(w,{value:"ukey"},{default:t(()=>[...a[8]||(a[8]=[f("strong",null,"U-Key 硬件",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 推荐 (PIN 确认 via 主进程) ",-1)])]),_:1}),a[10]||(a[10]=f("br",null,null,-1)),o(w,{value:"hex",style:{"margin-top":"6px"}},{default:t(()=>[...a[9]||(a[9]=[f("strong",null,"软件 hex",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 调试用 — 私钥不应在 UI 输入 ",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.keySource==="hex"?(p(),k(I,{key:0,value:e.hexInput,"onUpdate:value":a[4]||(a[4]=m=>e.hexInput=m),placeholder:"hex (32 bytes = 64 chars Ed25519)",style:{"margin-top":"8px"},disabled:e.signing},null,8,["value","disabled"])):y("v-if",!0)]),y(" 警示 "),o(j,{message:"高风险操作",description:e.riskDescription,type:"warning","show-icon":"",style:{"margin-bottom":"8px"}},null,8,["description"])],64)):y("v-if",!0)]),_:1},8,["open"])],2112)}const we=ie(ge,[["render",he],["__scopeId","data-v-060feb8a"],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/views/SignProposalModal.vue"]]),Ce={__name:"Multisig",setup(G,{expose:a}){a();const U=$(),{isEmbedded:e}=ee();async function h(i,l,M,A=8e3){if(e){const W=await U.sendRaw({type:i,...l},A);if(!W?.ok){const te=W?.error;throw new Error(typeof te=="string"?te:te?.message||`${i} failed`)}return W.result}return U.executeJson(M,A)}const B=S(!1),_=S([]),b=S([]),x=S("proposals"),v=S(""),C=S(""),D=S(!1),z=S(null),w=S(!1),L=S(null),I=[{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"}],j=[{title:"DID",dataIndex:"did"},{title:"Alg",dataIndex:"alg",width:200}],T=F(()=>{const i={pending:0,reached:0,consumed:0,cancelled:0,expired:0};for(const l of _.value)i[l.state]!==void 0&&(i[l.state]+=1);return i}),J=F(()=>_.value.filter(i=>!(v.value&&i.state!==v.value||C.value&&!i.domain.toLowerCase().includes(C.value.toLowerCase()))));function R(i){switch(i){case"pending":return"gold";case"reached":return"cyan";case"consumed":return"green";case"cancelled":return"default";case"expired":return"red";default:return"default"}}function m(i){const l=i-Date.now(),M=Math.abs(l)/6e4;if(M<60)return l>0?`${Math.round(M)} 分钟后`:`${Math.round(M)} 分钟前`;const A=M/60;if(A<24)return l>0?`${Math.round(A)} 小时后`:`${Math.round(A)} 小时前`;const W=A/24;return l>0?`${Math.round(W)} 天后`:`${Math.round(W)} 天前`}async function O(){B.value=!0;try{const[i,l]=await Promise.all([h("multisig.list",{limit:500},"multisig list --limit 500 --json",1e4).catch(()=>[]),Promise.all(["marketplace.purchase","crosschain.bridge.outbound","did.rotate"].map(async M=>{try{const A=await h("multisig.policy.show",{domain:M},`multisig policy show ${M} --json`,8e3);return{domain:M,policy:A,updatedAtMs:Date.now()}}catch{return null}})).then(M=>M.filter(Boolean))]);_.value=Array.isArray(i)?i:[],b.value=Array.isArray(l)?l:[]}catch(i){g.error("加载失败: "+(i.message||i))}finally{B.value=!1}}async function N(i){try{const l=await h("multisig.show",{proposalId:i.id},`multisig show ${i.id} --json`,8e3);z.value=l,D.value=!0}catch(l){g.error("加载详情失败: "+(l.message||l))}}function H(i){return{onClick:()=>N(i)}}async function Q(i){oe.confirm({title:`取消提案 ${i.id.slice(0,12)}…?`,content:"已签名的成员需要重新发起新提案。此操作不可撤销。",okText:"取消提案",okType:"danger",cancelText:"保持",onOk:async()=>{try{const l=await h("multisig.cancel",{proposalId:i.id,reason:"web-shell"},`multisig cancel ${i.id} --reason web-shell --json`,8e3);l.ok?(g.success("提案已取消"),D.value=!1,await O()):g.error("取消失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}})}async function Y(i){try{const l=await h("multisig.show",{proposalId:i.id},`multisig show ${i.id} --json`,8e3);L.value=l,w.value=!0}catch(l){g.error("加载提案详情失败: "+(l.message||l))}}function q(){z.value&&(L.value=z.value,w.value=!0)}async function d(){D.value=!1,await O()}async function K(i){try{const l=await h("marketplace.consume",{proposalId:i.id},`marketplace consume ${i.id} --json`,1e4);l.status==="consumed"?(g.success(`订单 ${l.order.itemId} 已执行 (¥${(l.order.amountFen/100).toFixed(2)})`),D.value=!1,await O()):g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function n(i){try{const l=await h("crosschain.bridge.consume",{proposalId:i.id},`crosschain bridge-consume ${i.id} --json`,1e4);if(l.status==="consumed"){const M=l.payload||{},A=`${M.fromChain||"?"} → ${M.toChain||"?"} (amount ${M.amount??"?"})`;l.bridgeId?g.success(`跨链桥已执行: ${A} · bridgeId ${l.bridgeId}`):(g.success(`跨链桥提案已 finalize: ${A}`),oe.info({title:"跨链桥提案 finalize 完成",content:`Proposal 已标记 consumed。
7
+ `),o(R,{open:j.open,title:"签名提案",width:600,"mask-closable":!1,keyboard:!1,"destroy-on-close":"","onUpdate:open":e.onUpdateOpen},{footer:t(()=>[o(J,null,{default:t(()=>[o(T,{disabled:e.signing,onClick:e.onCancel},{default:t(()=>[...a[12]||(a[12]=[r("取消",-1)])]),_:1},8,["disabled"]),o(T,{type:"primary",danger:"",loading:e.signing,disabled:!e.canSign,onClick:e.onConfirmSign},{default:t(()=>[...a[13]||(a[13]=[r("立即签名",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[j.proposal?(p(),E(X,{key:0},[o(x,{column:1,bordered:"",size:"small"},{default:t(()=>[o(b,{label:"Domain"},{default:t(()=>[o(_,{color:"purple"},{default:t(()=>[r(s(e.detail.domain),1)]),_:1})]),_:1}),o(b,{label:"Proposal ID"},{default:t(()=>[f("code",ye,s(e.detail.id),1)]),_:1}),o(b,{label:"阈值"},{default:t(()=>[r(s(e.detail.thresholdM)+"-of-"+s(e.detail.memberSet.length),1)]),_:1}),o(b,{label:"已签 / 需签"},{default:t(()=>[r(s(e.signedCount)+" / "+s(e.detail.thresholdM),1)]),_:1}),o(b,{label:"Payload hash"},{default:t(()=>[e.hashExpanded?(p(),E("code",{key:1,class:"hash-full",style:{cursor:"pointer","font-size":"11px","word-break":"break-all"},onClick:a[1]||(a[1]=m=>e.hashExpanded=!1)},s(e.detail.payloadHash||"(unavailable)"),1)):(p(),E("code",{key:0,class:"hash-short",style:{cursor:"pointer","font-size":"12px"},onClick:a[0]||(a[0]=m=>e.hashExpanded=!0),title:"点击展开完整 hash"},s(e.shortHash),1))]),_:1}),o(b,{label:"Payload"},{default:t(()=>[f("details",null,[a[5]||(a[5]=f("summary",{style:{cursor:"pointer",color:"var(--text-secondary)"}}," 展开 (JCS) ",-1)),f("pre",_e,s(e.payloadJson),1)])]),_:1})]),_:1}),o(v),y(" Signer DID 选择 "),f("div",ve,[a[7]||(a[7]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"签名身份 (DID)",-1)),o(D,{value:e.signerDid,"onUpdate:value":a[2]||(a[2]=m=>e.signerDid=m),style:{width:"100%"},placeholder:"选择签名成员",disabled:e.signing},{default:t(()=>[(p(!0),E(X,null,ne(e.pendingMembers,m=>(p(),k(C,{key:m.did,value:m.did},{default:t(()=>[f("code",be,s(e.shortDid(m.did)),1),f("span",ke," ("+s(m.alg)+") ",1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","disabled"]),e.pendingMembers.length===0?(p(),k(z,{key:0,type:"warning",style:{"font-size":"12px"}},{default:t(()=>[...a[6]||(a[6]=[r(" 所有成员均已签名 (达阈值) ",-1)])]),_:1})):y("v-if",!0)]),y(" 密钥来源 "),f("div",xe,[a[11]||(a[11]=f("div",{style:{"margin-bottom":"8px","font-weight":"500"}},"密钥来源",-1)),o(L,{value:e.keySource,"onUpdate:value":a[3]||(a[3]=m=>e.keySource=m),disabled:e.signing},{default:t(()=>[o(w,{value:"ukey"},{default:t(()=>[...a[8]||(a[8]=[f("strong",null,"U-Key 硬件",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 推荐 (PIN 确认 via 主进程) ",-1)])]),_:1}),a[10]||(a[10]=f("br",null,null,-1)),o(w,{value:"hex",style:{"margin-top":"6px"}},{default:t(()=>[...a[9]||(a[9]=[f("strong",null,"软件 hex",-1),f("span",{style:{color:"var(--text-secondary)","margin-left":"8px","font-size":"12px"}}," 调试用 — 私钥不应在 UI 输入 ",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.keySource==="hex"?(p(),k(I,{key:0,value:e.hexInput,"onUpdate:value":a[4]||(a[4]=m=>e.hexInput=m),placeholder:"hex (32 bytes = 64 chars Ed25519)",style:{"margin-top":"8px"},disabled:e.signing},null,8,["value","disabled"])):y("v-if",!0)]),y(" 警示 "),o(U,{message:"高风险操作",description:e.riskDescription,type:"warning","show-icon":"",style:{"margin-bottom":"8px"}},null,8,["description"])],64)):y("v-if",!0)]),_:1},8,["open"])],2112)}const we=ie(ge,[["render",he],["__scopeId","data-v-060feb8a"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/views/SignProposalModal.vue"]]),Ce={__name:"Multisig",setup(Z,{expose:a}){a();const j=$(),{isEmbedded:e}=ee();async function h(i,l,M,A=8e3){if(e){const V=await j.sendRaw({type:i,...l},A);if(!V?.ok){const te=V?.error;throw new Error(typeof te=="string"?te:te?.message||`${i} failed`)}return V.result}return j.executeJson(M,A)}const B=S(!1),_=S([]),b=S([]),x=S("proposals"),v=S(""),C=S(""),D=S(!1),z=S(null),w=S(!1),L=S(null),I=[{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"}],U=[{title:"DID",dataIndex:"did"},{title:"Alg",dataIndex:"alg",width:200}],T=F(()=>{const i={pending:0,reached:0,consumed:0,cancelled:0,expired:0};for(const l of _.value)i[l.state]!==void 0&&(i[l.state]+=1);return i}),J=F(()=>_.value.filter(i=>!(v.value&&i.state!==v.value||C.value&&!i.domain.toLowerCase().includes(C.value.toLowerCase()))));function R(i){switch(i){case"pending":return"gold";case"reached":return"cyan";case"consumed":return"green";case"cancelled":return"default";case"expired":return"red";default:return"default"}}function m(i){const l=i-Date.now(),M=Math.abs(l)/6e4;if(M<60)return l>0?`${Math.round(M)} 分钟后`:`${Math.round(M)} 分钟前`;const A=M/60;if(A<24)return l>0?`${Math.round(A)} 小时后`:`${Math.round(A)} 小时前`;const V=A/24;return l>0?`${Math.round(V)} 天后`:`${Math.round(V)} 天前`}async function O(){B.value=!0;try{const[i,l]=await Promise.all([h("multisig.list",{limit:500},"multisig list --limit 500 --json",1e4).catch(()=>[]),Promise.all(["marketplace.purchase","crosschain.bridge.outbound","did.rotate"].map(async M=>{try{const A=await h("multisig.policy.show",{domain:M},`multisig policy show ${M} --json`,8e3);return{domain:M,policy:A,updatedAtMs:Date.now()}}catch{return null}})).then(M=>M.filter(Boolean))]);_.value=Array.isArray(i)?i:[],b.value=Array.isArray(l)?l:[]}catch(i){g.error("加载失败: "+(i.message||i))}finally{B.value=!1}}async function N(i){try{const l=await h("multisig.show",{proposalId:i.id},`multisig show ${i.id} --json`,8e3);z.value=l,D.value=!0}catch(l){g.error("加载详情失败: "+(l.message||l))}}function H(i){return{onClick:()=>N(i)}}async function W(i){oe.confirm({title:`取消提案 ${i.id.slice(0,12)}…?`,content:"已签名的成员需要重新发起新提案。此操作不可撤销。",okText:"取消提案",okType:"danger",cancelText:"保持",onOk:async()=>{try{const l=await h("multisig.cancel",{proposalId:i.id,reason:"web-shell"},`multisig cancel ${i.id} --reason web-shell --json`,8e3);l.ok?(g.success("提案已取消"),D.value=!1,await O()):g.error("取消失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}})}async function G(i){try{const l=await h("multisig.show",{proposalId:i.id},`multisig show ${i.id} --json`,8e3);L.value=l,w.value=!0}catch(l){g.error("加载提案详情失败: "+(l.message||l))}}function q(){z.value&&(L.value=z.value,w.value=!0)}async function d(){D.value=!1,await O()}async function K(i){try{const l=await h("marketplace.consume",{proposalId:i.id},`marketplace consume ${i.id} --json`,1e4);l.status==="consumed"?(g.success(`订单 ${l.order.itemId} 已执行 (¥${(l.order.amountFen/100).toFixed(2)})`),D.value=!1,await O()):g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function n(i){try{const l=await h("crosschain.bridge.consume",{proposalId:i.id},`crosschain bridge-consume ${i.id} --json`,1e4);if(l.status==="consumed"){const M=l.payload||{},A=`${M.fromChain||"?"} → ${M.toChain||"?"} (amount ${M.amount??"?"})`;l.bridgeId?g.success(`跨链桥已执行: ${A} · bridgeId ${l.bridgeId}`):(g.success(`跨链桥提案已 finalize: ${A}`),oe.info({title:"跨链桥提案 finalize 完成",content:`Proposal 已标记 consumed。
8
8
 
9
9
  在 CLI 侧运行以下命令完成 cc_bridges 行插入:
10
10
 
11
11
  cc crosschain bridge-consume ${i.id}
12
12
 
13
- web-shell 不持有 crosschain DB 句柄,实际 SQLite 插入仍由 CLI 端执行。`})),D.value=!1,await O()}else g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function c(i){try{const l=await h("multisig.finalize",{proposalId:i.id},`multisig finalize ${i.id} --json`,8e3);l.ok?(g.success("提案已 finalize"),D.value=!1,await O()):g.error("Finalize 失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}async function P(){try{const i=await h("multisig.sweep",{},"multisig sweep --json",8e3);i.expired===0?g.info("无过期提案"):(g.success(`已标记 ${i.expired} 条提案为过期`),await O())}catch(i){g.error(i.message||String(i))}}le(O);const V={ws:U,isEmbedded:e,callMultisigTopic:h,loading:B,proposals:_,policies:b,activeTab:x,stateFilter:v,domainFilter:C,detailOpen:D,detail:z,signOpen:w,signProposalDetail:L,columns:I,memberColumns:j,countByState:T,filteredProposals:J,stateColor:R,relTime:m,loadAll:O,openDetail:N,onRowClick:H,onCancel:Q,onSignFromList:Y,onSignFromDetail:q,onSigned:d,onConsume:K,onBridgeConsume:n,onFinalize:c,onSweep:P,ref:S,computed:F,onMounted:le,get ReloadOutlined(){return fe},get ClockCircleOutlined(){return me},get CheckCircleOutlined(){return pe},get CheckSquareOutlined(){return ce},get CloseCircleOutlined(){return ue},get ExclamationCircleOutlined(){return de},get FileTextOutlined(){return se},get message(){return g},get Modal(){return oe},get useWsStore(){return $},get useShellMode(){return ee},SignProposalModal:we};return Object.defineProperty(V,"__isScriptSetup",{enumerable:!1,value:!0}),V}},Se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"filter-bar"},Me={key:0,style:{"font-size":"12px"}},De={style:{margin:"0 0 8px 0"}},Oe={style:{"margin-left":"8px",color:"var(--text-secondary)"}},Ie={style:{"margin-top":"8px"}},Pe={style:{cursor:"pointer",color:"var(--text-secondary)"}},Ae={key:0},Fe={style:{margin:"0","max-height":"240px",overflow:"auto","font-size":"12px"}},Le={style:{margin:"16px 0 8px 0"}},Ue={style:{"font-size":"12px"}};function Be(G,a,U,e,h,B){const _=u("a-button"),b=u("a-space"),x=u("a-statistic"),v=u("a-card"),C=u("a-col"),D=u("a-row"),z=u("a-radio-button"),w=u("a-radio-group"),L=u("a-input-search"),I=u("a-tag"),j=u("a-tooltip"),T=u("a-table"),J=u("a-tab-pane"),R=u("a-empty"),m=u("a-descriptions-item"),O=u("a-descriptions"),N=u("a-list-item"),H=u("a-list"),Q=u("a-tabs"),Y=u("a-list-item-meta"),q=u("a-divider"),d=u("a-alert"),K=u("a-drawer");return p(),E("div",null,[f("div",Se,[a[12]||(a[12]=f("div",null,[f("h2",{class:"page-title"},"M-of-N 多签"),f("p",{class:"page-sub"},"marketplace.purchase 大额、DID 关键操作、跨链桥 outbound 的联合签名审批")],-1)),o(b,null,{default:t(()=>[o(_,{loading:e.loading,onClick:e.loadAll},{icon:t(()=>[o(e.ReloadOutlined)]),default:t(()=>[a[10]||(a[10]=r(" 刷新 ",-1))]),_:1},8,["loading"]),o(_,{onClick:e.onSweep},{icon:t(()=>[o(e.ClockCircleOutlined)]),default:t(()=>[a[11]||(a[11]=r(" 扫过期 ",-1))]),_:1})]),_:1})]),y(" Stats "),o(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"总提案",value:e.proposals.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[o(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"待签",value:e.countByState.pending,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[o(e.ClockCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已达阈值",value:e.countByState.reached,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已执行",value:e.countByState.consumed,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已取消",value:e.countByState.cancelled,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:t(()=>[o(e.CloseCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已过期",value:e.countByState.expired,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:t(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(Q,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=n=>e.activeTab=n)},{default:t(()=>[y(" Proposals tab "),o(J,{key:"proposals",tab:"提案列表"},{default:t(()=>[f("div",ze,[o(w,{value:e.stateFilter,"onUpdate:value":a[0]||(a[0]=n=>e.stateFilter=n),size:"small","button-style":"solid"},{default:t(()=>[o(z,{value:""},{default:t(()=>[...a[13]||(a[13]=[r("全部",-1)])]),_:1}),o(z,{value:"pending"},{default:t(()=>[...a[14]||(a[14]=[r("待签",-1)])]),_:1}),o(z,{value:"reached"},{default:t(()=>[...a[15]||(a[15]=[r("已达阈值",-1)])]),_:1}),o(z,{value:"consumed"},{default:t(()=>[...a[16]||(a[16]=[r("已执行",-1)])]),_:1}),o(z,{value:"cancelled"},{default:t(()=>[...a[17]||(a[17]=[r("已取消",-1)])]),_:1}),o(z,{value:"expired"},{default:t(()=>[...a[18]||(a[18]=[r("已过期",-1)])]),_:1})]),_:1},8,["value"]),o(L,{value:e.domainFilter,"onUpdate:value":a[1]||(a[1]=n=>e.domainFilter=n),placeholder:"按 domain 过滤 (marketplace.purchase 等)","allow-clear":"",style:{"max-width":"360px","margin-left":"12px"}},null,8,["value"])]),o(T,{columns:e.columns,"data-source":e.filteredProposals,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"]},"row-key":"id",size:"middle",onRowClick:e.onRowClick,"row-class-name":()=>"multisig-row"},{bodyCell:t(({column:n,record:c})=>[n.key==="id"?(p(),E("code",Me,s(c.id.slice(0,16))+"…",1)):n.key==="state"?(p(),k(I,{key:1,color:e.stateColor(c.state)},{default:t(()=>[r(s(c.state),1)]),_:2},1032,["color"])):n.key==="sigs"?(p(),k(I,{key:2,color:c.n===c.m?"cyan":"default"},{default:t(()=>[r(s(c.m)+"/"+s(c.n),1)]),_:2},1032,["color"])):n.key==="createdAt"?(p(),k(j,{key:3,title:new Date(c.createdAtMs).toLocaleString()},{default:t(()=>[r(s(e.relTime(c.createdAtMs)),1)]),_:2},1032,["title"])):n.key==="expiresAt"?(p(),k(j,{key:4,title:new Date(c.expiresAtMs).toLocaleString()},{default:t(()=>[f("span",{style:re({color:c.expiresAtMs<Date.now()?"#ff4d4f":"inherit"})},s(e.relTime(c.expiresAtMs)),5)]),_:2},1032,["title"])):n.key==="actions"?(p(),k(b,{key:5,size:"small"},{default:t(()=>[o(_,{size:"small",onClick:Z(P=>e.openDetail(c),["stop"])},{default:t(()=>[...a[19]||(a[19]=[r("详情",-1)])]),_:1},8,["onClick"]),c.state==="pending"||c.state==="reached"?(p(),k(_,{key:0,size:"small",danger:"",onClick:Z(P=>e.onCancel(c),["stop"])},{default:t(()=>[...a[20]||(a[20]=[r("取消",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="pending"?(p(),k(_,{key:1,size:"small",type:"primary",onClick:Z(P=>e.onSignFromList(c),["stop"])},{default:t(()=>[...a[21]||(a[21]=[r("签名",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="marketplace.purchase"?(p(),k(_,{key:2,size:"small",type:"primary",onClick:Z(P=>e.onConsume(c),["stop"])},{default:t(()=>[...a[22]||(a[22]=[r("执行购买",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,size:"small",type:"primary",onClick:Z(P=>e.onBridgeConsume(c),["stop"])},{default:t(()=>[...a[23]||(a[23]=[r("执行跨链桥",-1)])]),_:1},8,["onClick"])):y("v-if",!0)]),_:2},1024)):y("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1}),y(" Policies tab "),o(J,{key:"policies",tab:"域策略"},{default:t(()=>[e.policies.length===0?(p(),k(R,{key:0,description:"暂无域策略 — 用 CLI 配置: cc multisig policy set <domain> --m <M> --members <json>"})):(p(),k(H,{key:1,"data-source":e.policies,"item-layout":"vertical"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(v,null,{default:t(()=>[f("h4",De,[o(I,{color:"purple"},{default:t(()=>[r(s(n.domain),1)]),_:2},1024),f("span",Oe,[r(s(n.policy.m)+"-of-"+s(n.policy.members.length)+" ",1),n.policy.requirePqc?(p(),k(I,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:t(()=>[...a[24]||(a[24]=[r("requirePQC",-1)])]),_:1})):y("v-if",!0)])]),o(O,{size:"small",column:2},{default:t(()=>[o(m,{label:"阈值 M"},{default:t(()=>[r(s(n.policy.m),1)]),_:2},1024),o(m,{label:"成员数 N"},{default:t(()=>[r(s(n.policy.members.length),1)]),_:2},1024),o(m,{label:"算法"},{default:t(()=>[(p(!0),E(X,null,ne(n.policy.algorithms||[],c=>(p(),k(I,{key:c,size:"small"},{default:t(()=>[r(s(c),1)]),_:2},1024))),128))]),_:2},1024),o(m,{label:"默认有效期"},{default:t(()=>[r(s(Math.round((n.policy.defaultExpiryMs||864e5)/1e3/60/60))+"h ",1)]),_:2},1024)]),_:2},1024),f("details",Ie,[f("summary",Pe,"展开成员列表 ("+s(n.policy.members.length)+")",1),o(T,{columns:e.memberColumns,"data-source":n.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"]),y(" Detail drawer "),o(K,{open:e.detailOpen,"onUpdate:open":a[8]||(a[8]=n=>e.detailOpen=n),title:e.detail?`提案 ${e.detail.proposal.id}`:"提案详情",width:"640","destroy-on-close":""},{default:t(()=>[e.detail?(p(),E("div",Ae,[o(O,{column:1,bordered:"",size:"small"},{default:t(()=>[o(m,{label:"Domain"},{default:t(()=>[r(s(e.detail.proposal.domain),1)]),_:1}),o(m,{label:"状态"},{default:t(()=>[o(I,{color:e.stateColor(e.detail.proposal.state)},{default:t(()=>[r(s(e.detail.proposal.state),1)]),_:1},8,["color"])]),_:1}),o(m,{label:"阈值"},{default:t(()=>[r(s(e.detail.proposal.thresholdM)+"-of-"+s(e.detail.proposal.memberSet.length),1)]),_:1}),o(m,{label:"已签 / 需签"},{default:t(()=>[r(s(e.detail.signatures.length)+" / "+s(e.detail.proposal.thresholdM),1)]),_:1}),o(m,{label:"发起方"},{default:t(()=>[r(s(e.detail.proposal.initiatorDid),1)]),_:1}),o(m,{label:"创建时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.createdAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"过期时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.expiresAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"Payload"},{default:t(()=>[f("pre",Fe,s(e.detail.proposal.payload?JSON.stringify(e.detail.proposal.payload,null,2):e.detail.proposal.payloadJcs),1)]),_:1})]),_:1}),f("h4",Le,"签名列表 ("+s(e.detail.signatures.length)+")",1),o(H,{"data-source":e.detail.signatures,size:"small"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(Y,null,{title:t(()=>[o(e.CheckCircleOutlined,{style:{color:"#52c41a","margin-right":"6px"}}),f("code",Ue,s(n.signerDid),1)]),description:t(()=>[r(s(n.alg)+" — "+s(new Date(n.signedAtMs).toLocaleString()),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]),o(q),o(d,{message:"签名 / 执行操作需通过 CLI 提供私钥",description:"Web shell 不直接持有私钥(接 Unified KeyStore 仍未收口)。本面板用于查看提案状态,签名请用 cc multisig sign;执行已 reached 的提案可在此面板按 domain 直达(marketplace.purchase / crosschain.bridge.outbound),其它 domain 走 cc multisig finalize。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}}),o(b,null,{default:t(()=>[e.detail.proposal.state==="pending"||e.detail.proposal.state==="reached"?(p(),k(_,{key:0,danger:"",onClick:a[3]||(a[3]=n=>e.onCancel(e.detail.proposal))},{default:t(()=>[...a[25]||(a[25]=[r("取消提案",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="pending"?(p(),k(_,{key:1,type:"primary",onClick:a[4]||(a[4]=n=>e.onSignFromDetail())},{default:t(()=>[...a[26]||(a[26]=[r("签名 (multisig.sign)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="marketplace.purchase"?(p(),k(_,{key:2,type:"primary",onClick:a[5]||(a[5]=n=>e.onConsume(e.detail.proposal))},{default:t(()=>[...a[27]||(a[27]=[r("执行购买 (cc marketplace consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,type:"primary",onClick:a[6]||(a[6]=n=>e.onBridgeConsume(e.detail.proposal))},{default:t(()=>[...a[28]||(a[28]=[r("执行跨链桥 (cc crosschain bridge-consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain!=="marketplace.purchase"&&e.detail.proposal.domain!=="crosschain.bridge.outbound"?(p(),k(_,{key:4,type:"primary",onClick:a[7]||(a[7]=n=>e.onFinalize(e.detail.proposal))},{default:t(()=>[...a[29]||(a[29]=[r("finalize (cc multisig finalize)",-1)])]),_:1})):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"]),y(" #21 B.1 PR2b — Sign Proposal Modal "),o(e.SignProposalModal,{open:e.signOpen,"onUpdate:open":a[9]||(a[9]=n=>e.signOpen=n),proposal:e.signProposalDetail,onSigned:e.onSigned},null,8,["open","proposal"])])}const rt=ie(Ce,[["render",Be],["__scopeId","data-v-429bfa1a"],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/views/Multisig.vue"]]);export{rt as default};
13
+ web-shell 不持有 crosschain DB 句柄,实际 SQLite 插入仍由 CLI 端执行。`})),D.value=!1,await O()}else g.error("执行失败: "+(l.reason||JSON.stringify(l)))}catch(l){g.error(l.message||String(l))}}async function c(i){try{const l=await h("multisig.finalize",{proposalId:i.id},`multisig finalize ${i.id} --json`,8e3);l.ok?(g.success("提案已 finalize"),D.value=!1,await O()):g.error("Finalize 失败: "+l.reason)}catch(l){g.error(l.message||String(l))}}async function P(){try{const i=await h("multisig.sweep",{},"multisig sweep --json",8e3);i.expired===0?g.info("无过期提案"):(g.success(`已标记 ${i.expired} 条提案为过期`),await O())}catch(i){g.error(i.message||String(i))}}le(O);const Q={ws:j,isEmbedded:e,callMultisigTopic:h,loading:B,proposals:_,policies:b,activeTab:x,stateFilter:v,domainFilter:C,detailOpen:D,detail:z,signOpen:w,signProposalDetail:L,columns:I,memberColumns:U,countByState:T,filteredProposals:J,stateColor:R,relTime:m,loadAll:O,openDetail:N,onRowClick:H,onCancel:W,onSignFromList:G,onSignFromDetail:q,onSigned:d,onConsume:K,onBridgeConsume:n,onFinalize:c,onSweep:P,ref:S,computed:F,onMounted:le,get ReloadOutlined(){return fe},get ClockCircleOutlined(){return me},get CheckCircleOutlined(){return pe},get CheckSquareOutlined(){return ce},get CloseCircleOutlined(){return ue},get ExclamationCircleOutlined(){return de},get FileTextOutlined(){return se},get message(){return g},get Modal(){return oe},get useWsStore(){return $},get useShellMode(){return ee},SignProposalModal:we};return Object.defineProperty(Q,"__isScriptSetup",{enumerable:!1,value:!0}),Q}},Se={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"filter-bar"},Me={key:0,style:{"font-size":"12px"}},De={style:{margin:"0 0 8px 0"}},Oe={style:{"margin-left":"8px",color:"var(--text-secondary)"}},Ie={style:{"margin-top":"8px"}},Pe={style:{cursor:"pointer",color:"var(--text-secondary)"}},Ae={key:0},Fe={style:{margin:"0","max-height":"240px",overflow:"auto","font-size":"12px"}},Le={style:{margin:"16px 0 8px 0"}},je={style:{"font-size":"12px"}};function Be(Z,a,j,e,h,B){const _=u("a-button"),b=u("a-space"),x=u("a-statistic"),v=u("a-card"),C=u("a-col"),D=u("a-row"),z=u("a-radio-button"),w=u("a-radio-group"),L=u("a-input-search"),I=u("a-tag"),U=u("a-tooltip"),T=u("a-table"),J=u("a-tab-pane"),R=u("a-empty"),m=u("a-descriptions-item"),O=u("a-descriptions"),N=u("a-list-item"),H=u("a-list"),W=u("a-tabs"),G=u("a-list-item-meta"),q=u("a-divider"),d=u("a-alert"),K=u("a-drawer");return p(),E("div",null,[f("div",Se,[a[12]||(a[12]=f("div",null,[f("h2",{class:"page-title"},"M-of-N 多签"),f("p",{class:"page-sub"},"marketplace.purchase 大额、DID 关键操作、跨链桥 outbound 的联合签名审批")],-1)),o(b,null,{default:t(()=>[o(_,{loading:e.loading,onClick:e.loadAll},{icon:t(()=>[o(e.ReloadOutlined)]),default:t(()=>[a[10]||(a[10]=r(" 刷新 ",-1))]),_:1},8,["loading"]),o(_,{onClick:e.onSweep},{icon:t(()=>[o(e.ClockCircleOutlined)]),default:t(()=>[a[11]||(a[11]=r(" 扫过期 ",-1))]),_:1})]),_:1})]),y(" Stats "),o(D,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:t(()=>[o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"总提案",value:e.proposals.length,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:t(()=>[o(e.FileTextOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"待签",value:e.countByState.pending,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:t(()=>[o(e.ClockCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已达阈值",value:e.countByState.reached,"value-style":{color:"#13c2c2",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckSquareOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已执行",value:e.countByState.consumed,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:t(()=>[o(e.CheckCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已取消",value:e.countByState.cancelled,"value-style":{color:"#8c8c8c",fontSize:"20px"}},{prefix:t(()=>[o(e.CloseCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1}),o(C,{xs:12,sm:8,lg:4},{default:t(()=>[o(v,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:t(()=>[o(x,{title:"已过期",value:e.countByState.expired,"value-style":{color:"#ff4d4f",fontSize:"20px"}},{prefix:t(()=>[o(e.ExclamationCircleOutlined)]),_:1},8,["value"])]),_:1})]),_:1})]),_:1}),o(W,{activeKey:e.activeTab,"onUpdate:activeKey":a[2]||(a[2]=n=>e.activeTab=n)},{default:t(()=>[y(" Proposals tab "),o(J,{key:"proposals",tab:"提案列表"},{default:t(()=>[f("div",ze,[o(w,{value:e.stateFilter,"onUpdate:value":a[0]||(a[0]=n=>e.stateFilter=n),size:"small","button-style":"solid"},{default:t(()=>[o(z,{value:""},{default:t(()=>[...a[13]||(a[13]=[r("全部",-1)])]),_:1}),o(z,{value:"pending"},{default:t(()=>[...a[14]||(a[14]=[r("待签",-1)])]),_:1}),o(z,{value:"reached"},{default:t(()=>[...a[15]||(a[15]=[r("已达阈值",-1)])]),_:1}),o(z,{value:"consumed"},{default:t(()=>[...a[16]||(a[16]=[r("已执行",-1)])]),_:1}),o(z,{value:"cancelled"},{default:t(()=>[...a[17]||(a[17]=[r("已取消",-1)])]),_:1}),o(z,{value:"expired"},{default:t(()=>[...a[18]||(a[18]=[r("已过期",-1)])]),_:1})]),_:1},8,["value"]),o(L,{value:e.domainFilter,"onUpdate:value":a[1]||(a[1]=n=>e.domainFilter=n),placeholder:"按 domain 过滤 (marketplace.purchase 等)","allow-clear":"",style:{"max-width":"360px","margin-left":"12px"}},null,8,["value"])]),o(T,{columns:e.columns,"data-source":e.filteredProposals,loading:e.loading,pagination:{pageSize:20,showSizeChanger:!0,pageSizeOptions:["10","20","50","100"]},"row-key":"id",size:"middle",onRowClick:e.onRowClick,"row-class-name":()=>"multisig-row"},{bodyCell:t(({column:n,record:c})=>[n.key==="id"?(p(),E("code",Me,s(c.id.slice(0,16))+"…",1)):n.key==="state"?(p(),k(I,{key:1,color:e.stateColor(c.state)},{default:t(()=>[r(s(c.state),1)]),_:2},1032,["color"])):n.key==="sigs"?(p(),k(I,{key:2,color:c.n===c.m?"cyan":"default"},{default:t(()=>[r(s(c.m)+"/"+s(c.n),1)]),_:2},1032,["color"])):n.key==="createdAt"?(p(),k(U,{key:3,title:new Date(c.createdAtMs).toLocaleString()},{default:t(()=>[r(s(e.relTime(c.createdAtMs)),1)]),_:2},1032,["title"])):n.key==="expiresAt"?(p(),k(U,{key:4,title:new Date(c.expiresAtMs).toLocaleString()},{default:t(()=>[f("span",{style:re({color:c.expiresAtMs<Date.now()?"#ff4d4f":"inherit"})},s(e.relTime(c.expiresAtMs)),5)]),_:2},1032,["title"])):n.key==="actions"?(p(),k(b,{key:5,size:"small"},{default:t(()=>[o(_,{size:"small",onClick:Y(P=>e.openDetail(c),["stop"])},{default:t(()=>[...a[19]||(a[19]=[r("详情",-1)])]),_:1},8,["onClick"]),c.state==="pending"||c.state==="reached"?(p(),k(_,{key:0,size:"small",danger:"",onClick:Y(P=>e.onCancel(c),["stop"])},{default:t(()=>[...a[20]||(a[20]=[r("取消",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="pending"?(p(),k(_,{key:1,size:"small",type:"primary",onClick:Y(P=>e.onSignFromList(c),["stop"])},{default:t(()=>[...a[21]||(a[21]=[r("签名",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="marketplace.purchase"?(p(),k(_,{key:2,size:"small",type:"primary",onClick:Y(P=>e.onConsume(c),["stop"])},{default:t(()=>[...a[22]||(a[22]=[r("执行购买",-1)])]),_:1},8,["onClick"])):y("v-if",!0),c.state==="reached"&&c.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,size:"small",type:"primary",onClick:Y(P=>e.onBridgeConsume(c),["stop"])},{default:t(()=>[...a[23]||(a[23]=[r("执行跨链桥",-1)])]),_:1},8,["onClick"])):y("v-if",!0)]),_:2},1024)):y("v-if",!0)]),_:1},8,["data-source","loading"])]),_:1}),y(" Policies tab "),o(J,{key:"policies",tab:"域策略"},{default:t(()=>[e.policies.length===0?(p(),k(R,{key:0,description:"暂无域策略 — 用 CLI 配置: cc multisig policy set <domain> --m <M> --members <json>"})):(p(),k(H,{key:1,"data-source":e.policies,"item-layout":"vertical"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(v,null,{default:t(()=>[f("h4",De,[o(I,{color:"purple"},{default:t(()=>[r(s(n.domain),1)]),_:2},1024),f("span",Oe,[r(s(n.policy.m)+"-of-"+s(n.policy.members.length)+" ",1),n.policy.requirePqc?(p(),k(I,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:t(()=>[...a[24]||(a[24]=[r("requirePQC",-1)])]),_:1})):y("v-if",!0)])]),o(O,{size:"small",column:2},{default:t(()=>[o(m,{label:"阈值 M"},{default:t(()=>[r(s(n.policy.m),1)]),_:2},1024),o(m,{label:"成员数 N"},{default:t(()=>[r(s(n.policy.members.length),1)]),_:2},1024),o(m,{label:"算法"},{default:t(()=>[(p(!0),E(X,null,ne(n.policy.algorithms||[],c=>(p(),k(I,{key:c,size:"small"},{default:t(()=>[r(s(c),1)]),_:2},1024))),128))]),_:2},1024),o(m,{label:"默认有效期"},{default:t(()=>[r(s(Math.round((n.policy.defaultExpiryMs||864e5)/1e3/60/60))+"h ",1)]),_:2},1024)]),_:2},1024),f("details",Ie,[f("summary",Pe,"展开成员列表 ("+s(n.policy.members.length)+")",1),o(T,{columns:e.memberColumns,"data-source":n.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"]),y(" Detail drawer "),o(K,{open:e.detailOpen,"onUpdate:open":a[8]||(a[8]=n=>e.detailOpen=n),title:e.detail?`提案 ${e.detail.proposal.id}`:"提案详情",width:"640","destroy-on-close":""},{default:t(()=>[e.detail?(p(),E("div",Ae,[o(O,{column:1,bordered:"",size:"small"},{default:t(()=>[o(m,{label:"Domain"},{default:t(()=>[r(s(e.detail.proposal.domain),1)]),_:1}),o(m,{label:"状态"},{default:t(()=>[o(I,{color:e.stateColor(e.detail.proposal.state)},{default:t(()=>[r(s(e.detail.proposal.state),1)]),_:1},8,["color"])]),_:1}),o(m,{label:"阈值"},{default:t(()=>[r(s(e.detail.proposal.thresholdM)+"-of-"+s(e.detail.proposal.memberSet.length),1)]),_:1}),o(m,{label:"已签 / 需签"},{default:t(()=>[r(s(e.detail.signatures.length)+" / "+s(e.detail.proposal.thresholdM),1)]),_:1}),o(m,{label:"发起方"},{default:t(()=>[r(s(e.detail.proposal.initiatorDid),1)]),_:1}),o(m,{label:"创建时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.createdAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"过期时间"},{default:t(()=>[r(s(new Date(e.detail.proposal.expiresAtMs).toLocaleString()),1)]),_:1}),o(m,{label:"Payload"},{default:t(()=>[f("pre",Fe,s(e.detail.proposal.payload?JSON.stringify(e.detail.proposal.payload,null,2):e.detail.proposal.payloadJcs),1)]),_:1})]),_:1}),f("h4",Le,"签名列表 ("+s(e.detail.signatures.length)+")",1),o(H,{"data-source":e.detail.signatures,size:"small"},{renderItem:t(({item:n})=>[o(N,null,{default:t(()=>[o(G,null,{title:t(()=>[o(e.CheckCircleOutlined,{style:{color:"#52c41a","margin-right":"6px"}}),f("code",je,s(n.signerDid),1)]),description:t(()=>[r(s(n.alg)+" — "+s(new Date(n.signedAtMs).toLocaleString()),1)]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"]),o(q),o(d,{message:"签名 / 执行操作需通过 CLI 提供私钥",description:"Web shell 不直接持有私钥(接 Unified KeyStore 仍未收口)。本面板用于查看提案状态,签名请用 cc multisig sign;执行已 reached 的提案可在此面板按 domain 直达(marketplace.purchase / crosschain.bridge.outbound),其它 domain 走 cc multisig finalize。",type:"info","show-icon":"",style:{"margin-bottom":"12px"}}),o(b,null,{default:t(()=>[e.detail.proposal.state==="pending"||e.detail.proposal.state==="reached"?(p(),k(_,{key:0,danger:"",onClick:a[3]||(a[3]=n=>e.onCancel(e.detail.proposal))},{default:t(()=>[...a[25]||(a[25]=[r("取消提案",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="pending"?(p(),k(_,{key:1,type:"primary",onClick:a[4]||(a[4]=n=>e.onSignFromDetail())},{default:t(()=>[...a[26]||(a[26]=[r("签名 (multisig.sign)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="marketplace.purchase"?(p(),k(_,{key:2,type:"primary",onClick:a[5]||(a[5]=n=>e.onConsume(e.detail.proposal))},{default:t(()=>[...a[27]||(a[27]=[r("执行购买 (cc marketplace consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain==="crosschain.bridge.outbound"?(p(),k(_,{key:3,type:"primary",onClick:a[6]||(a[6]=n=>e.onBridgeConsume(e.detail.proposal))},{default:t(()=>[...a[28]||(a[28]=[r("执行跨链桥 (cc crosschain bridge-consume)",-1)])]),_:1})):y("v-if",!0),e.detail.proposal.state==="reached"&&e.detail.proposal.domain!=="marketplace.purchase"&&e.detail.proposal.domain!=="crosschain.bridge.outbound"?(p(),k(_,{key:4,type:"primary",onClick:a[7]||(a[7]=n=>e.onFinalize(e.detail.proposal))},{default:t(()=>[...a[29]||(a[29]=[r("finalize (cc multisig finalize)",-1)])]),_:1})):y("v-if",!0)]),_:1})])):y("v-if",!0)]),_:1},8,["open","title"]),y(" #21 B.1 PR2b — Sign Proposal Modal "),o(e.SignProposalModal,{open:e.signOpen,"onUpdate:open":a[9]||(a[9]=n=>e.signOpen=n),proposal:e.signProposalDetail,onSigned:e.onSigned},null,8,["open","proposal"])])}const rt=ie(Ce,[["render",Be],["__scopeId","data-v-429bfa1a"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/views/Multisig.vue"]]);export{rt as default};
@@ -1 +1 @@
1
- import{I as m,J as y,U as b,R as i,c as a,K as o,V as p,S as k,o as ut,a as ot,b as K,r as _,P as d,Q as u,F as S,Z as R,$ as It}from"./vendor-BvqAck49.js";import{_ as Dt,u as pt,b as ft,d as v}from"./index-BgqftzvZ.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a$ as Pt,f as Mt,ai as Jt,a4 as Bt,o as Vt,Q as Yt,as as qt,R as Gt}from"./icons-DP3uiYxy.js";function Y(e){const n=Ut(e);if(!n)return null;try{return JSON.parse(n)}catch{}const c=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!c)return null;try{return JSON.parse(c[0])}catch{return null}}const Ct=Object.freeze(["create_component","add_feature","fix_bug","refactor","add_api","add_test","update_style","configure","general"]),Kt=Object.freeze(["draft","complete","refined"]),Tt=Object.freeze(["naming","architecture","testing","style","imports","components"]);function j(e,n=0){return typeof e=="number"&&Number.isFinite(e)?e:n}function W(e,n){if(e==null)return n;if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function mt(e){const n=Y(e);return!n||typeof n!="object"||Array.isArray(n)?null:{intent:String(n.intent||"general"),confidence:j(n.confidence,0)}}function gt(e){const n=Y(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.entities)?n.entities.map(t=>t&&typeof t=="object"?{type:String(t.type||""),value:String(t.value||"")}:null).filter(Boolean):[];return{entities:c,count:j(n.count,c.length)}}function yt(e){const n=Y(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.detected)?n.detected.filter(t=>typeof t=="string"):[];return{detected:c,primary:n.primary?String(n.primary):c[0]||null}}function Wt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,inputText:e.inputText??e.input_text??"",intent:String(e.intent||"general"),entities:W(e.entities,[]),techStack:W(e.techStack??e.tech_stack,[]),spec:W(e.spec,null),completenessScore:j(e.completenessScore??e.completeness_score,0),ambiguities:W(e.ambiguities,[]),status:String(e.status||"draft").toLowerCase(),createdAt:e.createdAt??e.created_at??null,updatedAt:e.updatedAt??e.updated_at??null,_idx:n}:null}function vt(e){const n=Y(e);return Array.isArray(n)?n.map(Wt).filter(Boolean):[]}function bt(e){const n=Y(e);return!n||typeof n!="object"||Array.isArray(n)||n.translationId===void 0?null:{translated:!!n.translated,translationId:n.translationId,intent:String(n.intent||""),completeness:j(n.completeness,0)}}function _t(e){if(!e)return{noDb:!1,error:""};const n=/No ChainlessChain project database/i.test(e)||/Cannot read properties of undefined \(reading ['"]prepare['"]\)/i.test(e)||/TypeError.*prepare/i.test(e),c=e.match(/Error:\s*(No ChainlessChain project database[^\r\n]*)/i);if(c)return{noDb:!0,error:c[1].trim()};const t=e.match(/TypeError:\s*(.+?)(?:\r?\n|$)/i);return{noDb:n,error:t?t[1].trim():""}}function Qt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,category:String(e.category||""),pattern:String(e.pattern||""),examples:W(e.examples,[]),confidence:j(e.confidence,0),sourceFiles:W(e.sourceFiles??e.source_files,[]),createdAt:e.createdAt??e.created_at??null,_idx:n}:null}function kt(e){const n=Y(e);return Array.isArray(n)?n.map(Qt).filter(Boolean):[]}const Zt={translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}};function xt(e){const n=JSON.parse(JSON.stringify(Zt));for(const t of Ct)n.translations.byIntent[t]=0;for(const t of Tt)n.conventions.byCategory[t]=0;const c=Y(e);if(!c||typeof c!="object"||Array.isArray(c))return n;if(c.translations&&typeof c.translations=="object"){if(n.translations.total=j(c.translations.total,0),n.translations.avgCompleteness=j(c.translations.avgCompleteness??c.translations.avg_completeness,0),c.translations.byIntent&&typeof c.translations.byIntent=="object")for(const[t,z]of Object.entries(c.translations.byIntent))typeof z=="number"&&Number.isFinite(z)&&(n.translations.byIntent[t]=z);if(c.translations.byStatus&&typeof c.translations.byStatus=="object")for(const t of Object.keys(n.translations.byStatus))n.translations.byStatus[t]=j(c.translations.byStatus[t],0)}if(c.conventions&&typeof c.conventions=="object"&&(n.conventions.total=j(c.conventions.total,0),c.conventions.byCategory&&typeof c.conventions.byCategory=="object"))for(const[t,z]of Object.entries(c.conventions.byCategory))typeof z=="number"&&Number.isFinite(z)&&(n.conventions.byCategory[t]=z);return n}function Ht(e){if(e==null||e==="")return"—";const n=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(n.getTime())?String(e):n.toLocaleString("zh-CN",{hour12:!1})}const Xt={__name:"NLProgramming",setup(e,{expose:n}){n();const c=pt(),{t}=ft(),z=_(!1),X=_(!1),F=_(!1),E=_(!1),q=_([]),P=_([]),G=_({translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}}),I=_("translations"),A=_(""),N=_(""),Q=_(""),C=_(!1),O=_(!1),M=_(!1),Z=_(!1),H=ot({text:""}),w=ot({text:"",intent:null}),x=ot({category:"naming",pattern:"",examples:"",confidence:.8}),J=_(null),L=_(null),T=_(null),D=_({noDb:!1,error:""}),B=_(null),$=K(()=>[{title:t("nlprog.translationCols.inputText"),key:"inputText"},{title:t("nlprog.translationCols.intent"),key:"intent",width:"140px"},{title:t("nlprog.translationCols.completeness"),key:"completeness",width:"160px"},{title:t("nlprog.translationCols.status"),key:"status",width:"100px"},{title:t("nlprog.translationCols.updatedAt"),key:"updatedAt",width:"160px"},{title:t("nlprog.translationCols.action"),key:"action",width:"210px"}]),tt=K(()=>[{title:t("nlprog.conventionCols.category"),key:"category",width:"120px"},{title:t("nlprog.conventionCols.pattern"),key:"pattern"},{title:t("nlprog.conventionCols.examples"),key:"examples",width:"220px"},{title:t("nlprog.conventionCols.confidence"),key:"confidence",width:"90px"},{title:t("nlprog.conventionCols.createdAt"),key:"createdAt",width:"160px"},{title:t("nlprog.conventionCols.action"),key:"action",width:"90px"}]),at=K(()=>G.value.translations.avgCompleteness*100),lt=K(()=>{let r=q.value;return A.value&&(r=r.filter(s=>s.intent===A.value)),N.value&&(r=r.filter(s=>s.status===N.value)),r}),rt=K(()=>Q.value?P.value.filter(r=>r.category===Q.value):P.value);function U(r){const s=`nlprog.intentLabels.${r}`,g=t(s);return g===s?r:g}function st(r){return{create_component:"blue",add_feature:"green",fix_bug:"red",refactor:"purple",add_api:"cyan",add_test:"orange",update_style:"magenta",configure:"gold",general:"default"}[r]||"default"}function l(r){const s=`nlprog.statusLabels.${r}`,g=t(s);return g===s?r:g}function f(r){return{draft:"default",complete:"green",refined:"cyan"}[r]||"default"}function h(r){const s=`nlprog.categoryLabels.${r}`,g=t(s);return g===s?r:g}function ht(r){return{naming:"blue",architecture:"purple",testing:"cyan",style:"magenta",imports:"orange",components:"green"}[r]||"default"}function St(r){return r>=.7?"#52c41a":r>=.4?"#faad14":"#ff4d4f"}function zt(r,s){return r?r.length>s?r.slice(0,s)+"...":r:""}function At(r){if(r==null)return"—";if(typeof r=="string")return r;try{return JSON.stringify(r,null,2)}catch{return String(r)}}function Ft({key:r}){r==="analyze"?(J.value=null,L.value=null,T.value=null,C.value=!0):r==="translate"?(D.value={noDb:!1,error:""},O.value=!0):r==="convention"&&(M.value=!0)}async function V(){z.value=!0;try{const[r,s,g]=await Promise.all([c.execute("nlprog list --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog conventions --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog stats --json",8e3).catch(()=>({output:""}))]);q.value=vt(r.output),P.value=kt(s.output),G.value=xt(g.output)}catch(r){v.error(t("nlprog.msg.loadFailed")+": "+(r?.message||r))}finally{z.value=!1}}async function Ot(){const r=H.text.trim();if(!r){v.warning(t("nlprog.msg.textEmpty"));return}X.value=!0,J.value=null,L.value=null,T.value=null;try{const s=r.replace(/"/g,'\\"'),[g,et,nt]=await Promise.all([c.execute(`nlprog classify "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog extract "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog detect-stack "${s}" --json`,8e3).catch(()=>({output:""}))]);J.value=mt(g.output),L.value=gt(et.output),T.value=yt(nt.output),!J.value&&!L.value&&!T.value&&v.error(t("nlprog.msg.analyzeFailed"))}catch(s){v.error(t("nlprog.msg.analyzeFailed")+": "+(s?.message||s))}finally{X.value=!1}}async function Rt(){const r=w.text.trim();if(!r){v.warning(t("nlprog.msg.translateTextEmpty"));return}F.value=!0,D.value={noDb:!1,error:""};try{const s=[`nlprog translate "${r.replace(/"/g,'\\"')}"`];w.intent&&s.push(`--intent ${w.intent}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),12e3),et=_t(g);if(et.noDb){D.value=et;return}const nt=bt(g);if(!nt){v.error(t("nlprog.msg.translateFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.translateSuccess",{pct:(nt.completeness*100).toFixed(0)})),O.value=!1,it(),await V()}catch(s){v.error(t("nlprog.msg.translateFailed")+": "+(s?.message||s))}finally{F.value=!1}}async function Nt(r,s){if(s!==r.status)try{const{output:g}=await c.execute(`nlprog status ${r.id} ${s} --json`,8e3);if(/error|invalid/i.test(g)&&!/"updated"/.test(g)){v.error(t("nlprog.msg.transitionFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.transitionSuccess",{label:l(s)})),await V()}catch(g){v.error(t("nlprog.msg.transitionFailed")+": "+(g?.message||g))}}async function wt(r){try{const{output:s}=await c.execute(`nlprog remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await V()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function Lt(r){B.value=r,Z.value=!0}async function jt(){const r=x.pattern.trim();if(!r){v.warning(t("nlprog.msg.patternEmpty"));return}if(x.examples.trim())try{JSON.parse(x.examples)}catch{v.warning(t("nlprog.msg.examplesBadJson"));return}E.value=!0;try{const s=[`nlprog convention-add --category ${x.category}`];s.push(`--pattern "${r.replace(/"/g,'\\"')}"`),x.examples.trim()&&s.push(`--examples '${x.examples.trim().replace(/'/g,"'\\''")}'`),x.confidence!=null&&s.push(`--confidence ${x.confidence}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),1e4);if(/error|invalid|失败/i.test(g)&&!/"added"/.test(g)){v.error(t("nlprog.msg.addFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.addSuccess")),M.value=!1,ct(),I.value="conventions",await V()}catch(s){v.error(t("nlprog.msg.addFailed")+": "+(s?.message||s))}finally{E.value=!1}}async function Et(r){try{const{output:s}=await c.execute(`nlprog convention-remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await V()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function it(){w.text="",w.intent=null}function ct(){x.category="naming",x.pattern="",x.examples="",x.confidence=.8}ut(V);const dt={ws:c,t,loading:z,analyzing:X,translating:F,adding:E,translations:q,conventions:P,stats:G,activeTab:I,intentFilter:A,statusFilter:N,categoryFilter:Q,showAnalyzeModal:C,showTranslateModal:O,showConventionModal:M,showDetailsModal:Z,analyzeForm:H,translateForm:w,conventionForm:x,classifyResult:J,extractResult:L,stackResult:T,translateError:D,currentTranslation:B,translationColumns:$,conventionColumns:tt,avgCompletenessPct:at,filteredTranslations:lt,filteredConventions:rt,intentLabel:U,intentColor:st,statusLabel:l,statusColor:f,categoryLabel:h,categoryColor:ht,completenessColor:St,truncate:zt,formatJson:At,handleNewClick:Ft,loadAll:V,runAnalyze:Ot,runTranslate:Rt,transitionStatus:Nt,removeTranslation:wt,showTranslationDetails:Lt,addConvention:jt,removeConvention:Et,resetTranslateForm:it,resetConventionForm:ct,ref:_,computed:K,onMounted:ut,reactive:ot,get ReloadOutlined(){return Gt},get PlusOutlined(){return qt},get CodeOutlined(){return Yt},get BulbOutlined(){return Vt},get FileTextOutlined(){return Bt},get EditOutlined(){return Jt},get CheckCircleOutlined(){return Mt},get RiseOutlined(){return Pt},get message(){return v},get useI18n(){return ft},get useWsStore(){return pt},get parseClassifyResult(){return mt},get parseExtractResult(){return gt},get parseStackResult(){return yt},get parseTranslations(){return vt},get parseTranslateResult(){return bt},get detectTranslateError(){return _t},get parseConventions(){return kt},get parseStats(){return xt},get formatNlprogTime(){return Ht},get INTENTS(){return Ct},get TRANSLATION_STATUSES(){return Kt},get STYLE_CATEGORIES(){return Tt}};return Object.defineProperty(dt,"__isScriptSetup",{enumerable:!1,value:!0}),dt}},$t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ee={class:"page-sub"},ne={class:"filter-bar"},oe={key:0,style:{color:"var(--text-primary)"}},ae={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},le={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},re={class:"filter-bar"},se={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ie={key:0,style:{color:"var(--text-muted)"}},ce={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},de={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ue={key:0,style:{"margin-bottom":"12px"}},pe={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},fe={style:{color:"var(--text-secondary)","font-size":"12px"}},me={key:1,style:{"margin-bottom":"12px"}},ge={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},ye={key:0,style:{color:"var(--text-muted)"}},ve={key:2},be={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},_e={key:0,style:{color:"var(--text-muted)"}},ke={key:0,style:{"padding-top":"8px"}},xe={style:{"white-space":"pre-wrap",color:"var(--text-primary)"}},Ce={style:{"margin-top":"16px"}},Te={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},he={class:"json-block"},Se={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},ze={class:"json-block"},Ae={key:0},Fe={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},Oe={class:"json-block"};function Re(e,n,c,t,z,X){const F=m("a-button"),E=m("a-menu-item"),q=m("a-menu"),P=m("a-dropdown"),G=m("a-space"),I=m("a-statistic"),A=m("a-card"),N=m("a-col"),Q=m("a-row"),C=m("a-tag"),O=m("a-radio-button"),M=m("a-radio-group"),Z=m("a-progress"),H=m("a-popconfirm"),w=m("a-table"),x=m("a-tab-pane"),J=m("a-tabs"),L=m("a-textarea"),T=m("a-form-item"),D=m("a-form"),B=m("a-modal"),$=m("a-select-option"),tt=m("a-select"),at=m("a-alert"),lt=m("a-input"),rt=m("a-input-number"),U=m("a-descriptions-item"),st=m("a-descriptions");return d(),y("div",null,[b("div",$t,[b("div",null,[b("h2",te,i(e.$t("nlprog.title")),1),b("p",ee,i(e.$t("nlprog.subtitle")),1)]),a(G,null,{default:o(()=>[a(F,{loading:t.loading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.refresh")),1)]),_:1},8,["loading"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(q,{onClick:t.handleNewClick},{default:o(()=>[a(E,{key:"analyze"},{default:o(()=>[a(t.BulbOutlined),u(" "+i(e.$t("nlprog.actions.analyze")),1)]),_:1}),a(E,{key:"translate"},{default:o(()=>[a(t.CodeOutlined),u(" "+i(e.$t("nlprog.actions.translate")),1)]),_:1}),a(E,{key:"convention"},{default:o(()=>[a(t.FileTextOutlined),u(" "+i(e.$t("nlprog.actions.convention")),1)]),_:1})]),_:1})]),default:o(()=>[a(F,{type:"primary"},{icon:o(()=>[a(t.PlusOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stat cards "),a(Q,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.translations"),value:t.stats.translations.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.CodeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.avgCompleteness"),value:t.avgCompletenessPct,precision:1,suffix:"%","value-style":{color:t.stats.translations.avgCompleteness>=.7?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.drafts"),value:t.stats.translations.byStatus.draft,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.EditOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.completed"),value:t.stats.translations.byStatus.complete,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:24,sm:8,lg:4},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.conventions"),value:t.stats.conventions.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.FileTextOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Intent breakdown "),t.stats.translations.total>0?(d(),k(A,{key:0,title:e.$t("nlprog.intentCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:o(()=>[a(G,{size:[12,8],wrap:""},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(C,{key:l,color:t.intentColor(l)},{default:o(()=>[u(i(t.intentLabel(l))+": "+i(t.stats.translations.byIntent[l]||0),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),a(J,{activeKey:t.activeTab,"onUpdate:activeKey":n[3]||(n[3]=l=>t.activeTab=l),class:"nlprog-tabs"},{default:o(()=>[p(" ── Translations tab ──────────────────────────────────────── "),a(x,{key:"translations",tab:e.$t("nlprog.tabs.translations")},{default:o(()=>[b("div",ne,[a(M,{value:t.intentFilter,"onUpdate:value":n[0]||(n[0]=l=>t.intentFilter=l),size:"small"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allIntents")),1)]),_:1}),(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(M,{value:t.statusFilter,"onUpdate:value":n[1]||(n[1]=l=>t.statusFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allStatuses")),1)]),_:1}),(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.statusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.translationColumns,"data-source":t.filteredTranslations,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="inputText"?(d(),y("span",oe,i(t.truncate(f.inputText,80)),1)):p("v-if",!0),l.key==="intent"?(d(),k(C,{key:1,color:t.intentColor(f.intent),style:{"font-size":"11px"}},{default:o(()=>[u(i(t.intentLabel(f.intent)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="completeness"?(d(),k(Z,{key:2,percent:Math.round(f.completenessScore*100),size:"small","stroke-color":t.completenessColor(f.completenessScore),format:()=>(f.completenessScore*100).toFixed(0)+"%"},null,8,["percent","stroke-color","format"])):p("v-if",!0),l.key==="status"?(d(),k(C,{key:3,color:t.statusColor(f.status)},{default:o(()=>[u(i(t.statusLabel(f.status)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="updatedAt"?(d(),y("span",ae,i(t.formatNlprogTime(f.updatedAt)),1)):p("v-if",!0),l.key==="action"?(d(),y(S,{key:5},[a(F,{size:"small",type:"link",onClick:h=>t.showTranslationDetails(f)},{default:o(()=>[u(i(e.$t("nlprog.table.actionDetails")),1)]),_:1},8,["onClick"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(q,{onClick:h=>t.transitionStatus(f,h.key)},{default:o(()=>[(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,h=>(d(),k(E,{key:h,disabled:h===f.status},{default:o(()=>[u(i(t.statusLabel(h)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:o(()=>[a(F,{size:"small",type:"link"},{default:o(()=>[u(i(e.$t("nlprog.table.actionStatusDropdown")),1)]),_:1})]),_:2},1024),a(H,{title:e.$t("nlprog.deleteTranslationConfirm.title"),"ok-text":e.$t("nlprog.deleteTranslationConfirm.ok"),"cancel-text":e.$t("nlprog.deleteTranslationConfirm.cancel"),onConfirm:h=>t.removeTranslation(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteTranslationConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):p("v-if",!0)]),emptyText:o(()=>[b("div",le,[a(t.CodeOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(t.intentFilter||t.statusFilter?e.$t("nlprog.table.emptyTranslationsFiltered"):e.$t("nlprog.table.emptyTranslations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Conventions tab ──────────────────────────────────────── "),a(x,{key:"conventions",tab:e.$t("nlprog.tabs.conventions")},{default:o(()=>[b("div",re,[a(M,{value:t.categoryFilter,"onUpdate:value":n[2]||(n[2]=l=>t.categoryFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allCategories")),1)]),_:1}),(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.conventionColumns,"data-source":t.filteredConventions,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="category"?(d(),k(C,{key:0,color:t.categoryColor(f.category)},{default:o(()=>[u(i(t.categoryLabel(f.category)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="pattern"?(d(),y("span",se,i(f.pattern),1)):p("v-if",!0),l.key==="examples"?(d(),y(S,{key:2},[(d(!0),y(S,null,R(Array.isArray(f.examples)?f.examples.slice(0,3):[],h=>(d(),k(C,{key:h,color:"default",style:{"font-size":"10px","font-family":"monospace",margin:"1px"}},{default:o(()=>[u(i(h),1)]),_:2},1024))),128)),!Array.isArray(f.examples)||f.examples.length===0?(d(),y("span",ie,"—")):p("v-if",!0)],64)):p("v-if",!0),l.key==="confidence"?(d(),y("span",{key:3,style:It({color:t.completenessColor(f.confidence),fontWeight:500})},i((f.confidence*100).toFixed(0))+"% ",5)):p("v-if",!0),l.key==="createdAt"?(d(),y("span",ce,i(t.formatNlprogTime(f.createdAt)),1)):p("v-if",!0),l.key==="action"?(d(),k(H,{key:5,title:e.$t("nlprog.deleteConventionConfirm.title"),"ok-text":e.$t("nlprog.deleteConventionConfirm.ok"),"cancel-text":e.$t("nlprog.deleteConventionConfirm.cancel"),onConfirm:h=>t.removeConvention(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteConventionConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):p("v-if",!0)]),emptyText:o(()=>[b("div",de,[a(t.FileTextOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(e.$t("nlprog.table.emptyConventions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Analyze modal ────────────────────────────────────────── "),a(B,{open:t.showAnalyzeModal,"onUpdate:open":n[5]||(n[5]=l=>t.showAnalyzeModal=l),title:e.$t("nlprog.analyze_modal.title"),"confirm-loading":t.analyzing,width:600,"ok-text":e.$t("nlprog.analyze_modal.ok"),"cancel-text":e.$t("nlprog.analyze_modal.cancel"),onOk:t.runAnalyze},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.analyze_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.analyzeForm.text,"onUpdate:value":n[4]||(n[4]=l=>t.analyzeForm.text=l),placeholder:e.$t("nlprog.analyze_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.classifyResult||t.extractResult||t.stackResult?(d(),k(A,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[t.classifyResult?(d(),y("div",ue,[b("div",pe,i(e.$t("nlprog.analyze_modal.intent")),1),a(C,{color:t.intentColor(t.classifyResult.intent),style:{"margin-right":"6px"}},{default:o(()=>[u(i(t.intentLabel(t.classifyResult.intent)),1)]),_:1},8,["color"]),b("span",fe,i(e.$t("nlprog.analyze_modal.confidenceLine",{pct:(t.classifyResult.confidence*100).toFixed(0)})),1)])):p("v-if",!0),t.extractResult?(d(),y("div",me,[b("div",ge,i(e.$t("nlprog.analyze_modal.entities",{n:t.extractResult.count})),1),t.extractResult.entities.length?p("v-if",!0):(d(),y("span",ye,i(e.$t("nlprog.analyze_modal.notDetected")),1)),(d(!0),y(S,null,R(t.extractResult.entities,(l,f)=>(d(),k(C,{key:f,color:"purple",style:{"font-family":"monospace","font-size":"11px",margin:"1px"}},{default:o(()=>[u(" ["+i(l.type)+"] "+i(l.value),1)]),_:2},1024))),128))])):p("v-if",!0),t.stackResult?(d(),y("div",ve,[b("div",be,i(e.$t("nlprog.analyze_modal.stack")),1),t.stackResult.detected.length?(d(),y(S,{key:1},[a(C,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[u(i(e.$t("nlprog.analyze_modal.stackPrimary",{name:t.stackResult.primary})),1)]),_:1}),(d(!0),y(S,null,R(t.stackResult.detected.filter(l=>l!==t.stackResult.primary),l=>(d(),k(C,{key:l,color:"default",style:{"font-family":"monospace","font-size":"11px"}},{default:o(()=>[u(i(l),1)]),_:2},1024))),128))],64)):(d(),y("span",_e,i(e.$t("nlprog.analyze_modal.notDetected")),1))])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translate modal ──────────────────────────────────────── "),a(B,{open:t.showTranslateModal,"onUpdate:open":n[8]||(n[8]=l=>t.showTranslateModal=l),title:e.$t("nlprog.translate_modal.title"),"confirm-loading":t.translating,width:540,"ok-text":e.$t("nlprog.translate_modal.ok"),"cancel-text":e.$t("nlprog.translate_modal.cancel"),onOk:t.runTranslate,onCancel:t.resetTranslateForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.translate_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.translateForm.text,"onUpdate:value":n[6]||(n[6]=l=>t.translateForm.text=l),placeholder:e.$t("nlprog.translate_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.translate_modal.intentLabel")},{default:o(()=>[a(tt,{value:t.translateForm.intent,"onUpdate:value":n[7]||(n[7]=l=>t.translateForm.intent=l),"allow-clear":"",placeholder:e.$t("nlprog.translate_modal.intentPlaceholder")},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.translateError.noDb?(d(),k(at,{key:0,type:"warning","show-icon":"",message:e.$t("nlprog.translate_modal.noDbMessage"),description:e.$t("nlprog.translate_modal.noDbDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Add convention modal ─────────────────────────────────── "),a(B,{open:t.showConventionModal,"onUpdate:open":n[13]||(n[13]=l=>t.showConventionModal=l),title:e.$t("nlprog.convention_modal.title"),"confirm-loading":t.adding,width:540,"ok-text":e.$t("nlprog.convention_modal.ok"),"cancel-text":e.$t("nlprog.convention_modal.cancel"),onOk:t.addConvention,onCancel:t.resetConventionForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.convention_modal.categoryLabel"),required:""},{default:o(()=>[a(tt,{value:t.conventionForm.category,"onUpdate:value":n[9]||(n[9]=l=>t.conventionForm.category=l)},{default:o(()=>[(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.patternLabel"),required:""},{default:o(()=>[a(lt,{value:t.conventionForm.pattern,"onUpdate:value":n[10]||(n[10]=l=>t.conventionForm.pattern=l),placeholder:e.$t("nlprog.convention_modal.patternPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.examplesLabel")},{default:o(()=>[a(L,{value:t.conventionForm.examples,"onUpdate:value":n[11]||(n[11]=l=>t.conventionForm.examples=l),placeholder:e.$t("nlprog.convention_modal.examplesPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.confidenceLabel")},{default:o(()=>[a(rt,{value:t.conventionForm.confidence,"onUpdate:value":n[12]||(n[12]=l=>t.conventionForm.confidence=l),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translation details modal ────────────────────────────── "),a(B,{open:t.showDetailsModal,"onUpdate:open":n[14]||(n[14]=l=>t.showDetailsModal=l),title:e.$t("nlprog.details.title",{id:t.currentTranslation?.id?.slice(0,8)||""}),width:720,footer:null},{default:o(()=>[t.currentTranslation?(d(),y("div",ke,[a(st,{column:2,size:"small",bordered:""},{default:o(()=>[a(U,{label:e.$t("nlprog.details.intent")},{default:o(()=>[a(C,{color:t.intentColor(t.currentTranslation.intent)},{default:o(()=>[u(i(t.intentLabel(t.currentTranslation.intent)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.status")},{default:o(()=>[a(C,{color:t.statusColor(t.currentTranslation.status)},{default:o(()=>[u(i(t.statusLabel(t.currentTranslation.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.completeness"),span:2},{default:o(()=>[a(Z,{percent:Math.round(t.currentTranslation.completenessScore*100),"stroke-color":t.completenessColor(t.currentTranslation.completenessScore),size:"small"},null,8,["percent","stroke-color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.createdAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.createdAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.updatedAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.updatedAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.inputText"),span:2},{default:o(()=>[b("span",xe,i(t.currentTranslation.inputText),1)]),_:1},8,["label"])]),_:1}),b("div",Ce,[b("h4",Te,i(e.$t("nlprog.details.entities")),1),b("pre",he,i(t.formatJson(t.currentTranslation.entities)),1)]),b("div",null,[b("h4",Se,i(e.$t("nlprog.details.techStack")),1),b("pre",ze,i(t.formatJson(t.currentTranslation.techStack)),1)]),t.currentTranslation.spec?(d(),y("div",Ae,[b("h4",Fe,i(e.$t("nlprog.details.spec")),1),b("pre",Oe,i(t.formatJson(t.currentTranslation.spec)),1)])):p("v-if",!0)])):p("v-if",!0)]),_:1},8,["open","title"])])}const Ee=Dt(Xt,[["render",Re],["__scopeId","data-v-4c4216b9"],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/views/NLProgramming.vue"]]);export{Ee as default};
1
+ import{I as m,J as y,U as b,R as i,c as a,K as o,V as p,S as k,o as ut,a as ot,b as K,r as _,P as d,Q as u,F as S,Z as R,$ as It}from"./vendor-BvqAck49.js";import{_ as Dt,u as pt,b as ft,d as v}from"./index-DH7suqAN.js";import{s as Ut}from"./community-parser-CO25nZFt.js";import{a$ as Pt,f as Mt,ai as Jt,a4 as Bt,o as Gt,Q as Vt,as as Yt,R as qt}from"./icons-DP3uiYxy.js";function V(e){const n=Ut(e);if(!n)return null;try{return JSON.parse(n)}catch{}const c=n.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(!c)return null;try{return JSON.parse(c[0])}catch{return null}}const Ct=Object.freeze(["create_component","add_feature","fix_bug","refactor","add_api","add_test","update_style","configure","general"]),Kt=Object.freeze(["draft","complete","refined"]),Tt=Object.freeze(["naming","architecture","testing","style","imports","components"]);function j(e,n=0){return typeof e=="number"&&Number.isFinite(e)?e:n}function Q(e,n){if(e==null)return n;if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}function mt(e){const n=V(e);return!n||typeof n!="object"||Array.isArray(n)?null:{intent:String(n.intent||"general"),confidence:j(n.confidence,0)}}function gt(e){const n=V(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.entities)?n.entities.map(t=>t&&typeof t=="object"?{type:String(t.type||""),value:String(t.value||"")}:null).filter(Boolean):[];return{entities:c,count:j(n.count,c.length)}}function yt(e){const n=V(e);if(!n||typeof n!="object"||Array.isArray(n))return null;const c=Array.isArray(n.detected)?n.detected.filter(t=>typeof t=="string"):[];return{detected:c,primary:n.primary?String(n.primary):c[0]||null}}function Qt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,inputText:e.inputText??e.input_text??"",intent:String(e.intent||"general"),entities:Q(e.entities,[]),techStack:Q(e.techStack??e.tech_stack,[]),spec:Q(e.spec,null),completenessScore:j(e.completenessScore??e.completeness_score,0),ambiguities:Q(e.ambiguities,[]),status:String(e.status||"draft").toLowerCase(),createdAt:e.createdAt??e.created_at??null,updatedAt:e.updatedAt??e.updated_at??null,_idx:n}:null}function vt(e){const n=V(e);return Array.isArray(n)?n.map(Qt).filter(Boolean):[]}function bt(e){const n=V(e);return!n||typeof n!="object"||Array.isArray(n)||n.translationId===void 0?null:{translated:!!n.translated,translationId:n.translationId,intent:String(n.intent||""),completeness:j(n.completeness,0)}}function _t(e){if(!e)return{noDb:!1,error:""};const n=/No ChainlessChain project database/i.test(e)||/Cannot read properties of undefined \(reading ['"]prepare['"]\)/i.test(e)||/TypeError.*prepare/i.test(e),c=e.match(/Error:\s*(No ChainlessChain project database[^\r\n]*)/i);if(c)return{noDb:!0,error:c[1].trim()};const t=e.match(/TypeError:\s*(.+?)(?:\r?\n|$)/i);return{noDb:n,error:t?t[1].trim():""}}function Wt(e,n=0){if(!e||typeof e!="object")return null;const c=e.id||"";return c?{key:c,id:c,category:String(e.category||""),pattern:String(e.pattern||""),examples:Q(e.examples,[]),confidence:j(e.confidence,0),sourceFiles:Q(e.sourceFiles??e.source_files,[]),createdAt:e.createdAt??e.created_at??null,_idx:n}:null}function kt(e){const n=V(e);return Array.isArray(n)?n.map(Wt).filter(Boolean):[]}const Zt={translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}};function xt(e){const n=JSON.parse(JSON.stringify(Zt));for(const t of Ct)n.translations.byIntent[t]=0;for(const t of Tt)n.conventions.byCategory[t]=0;const c=V(e);if(!c||typeof c!="object"||Array.isArray(c))return n;if(c.translations&&typeof c.translations=="object"){if(n.translations.total=j(c.translations.total,0),n.translations.avgCompleteness=j(c.translations.avgCompleteness??c.translations.avg_completeness,0),c.translations.byIntent&&typeof c.translations.byIntent=="object")for(const[t,z]of Object.entries(c.translations.byIntent))typeof z=="number"&&Number.isFinite(z)&&(n.translations.byIntent[t]=z);if(c.translations.byStatus&&typeof c.translations.byStatus=="object")for(const t of Object.keys(n.translations.byStatus))n.translations.byStatus[t]=j(c.translations.byStatus[t],0)}if(c.conventions&&typeof c.conventions=="object"&&(n.conventions.total=j(c.conventions.total,0),c.conventions.byCategory&&typeof c.conventions.byCategory=="object"))for(const[t,z]of Object.entries(c.conventions.byCategory))typeof z=="number"&&Number.isFinite(z)&&(n.conventions.byCategory[t]=z);return n}function Ht(e){if(e==null||e==="")return"—";const n=typeof e=="number"?new Date(e):new Date(String(e));return isNaN(n.getTime())?String(e):n.toLocaleString("zh-CN",{hour12:!1})}const Xt={__name:"NLProgramming",setup(e,{expose:n}){n();const c=pt(),{t}=ft(),z=_(!1),X=_(!1),F=_(!1),E=_(!1),Y=_([]),P=_([]),q=_({translations:{total:0,byIntent:{},byStatus:{draft:0,complete:0,refined:0},avgCompleteness:0},conventions:{total:0,byCategory:{}}}),I=_("translations"),A=_(""),N=_(""),W=_(""),C=_(!1),O=_(!1),M=_(!1),Z=_(!1),H=ot({text:""}),w=ot({text:"",intent:null}),x=ot({category:"naming",pattern:"",examples:"",confidence:.8}),J=_(null),L=_(null),T=_(null),D=_({noDb:!1,error:""}),B=_(null),$=K(()=>[{title:t("nlprog.translationCols.inputText"),key:"inputText"},{title:t("nlprog.translationCols.intent"),key:"intent",width:"140px"},{title:t("nlprog.translationCols.completeness"),key:"completeness",width:"160px"},{title:t("nlprog.translationCols.status"),key:"status",width:"100px"},{title:t("nlprog.translationCols.updatedAt"),key:"updatedAt",width:"160px"},{title:t("nlprog.translationCols.action"),key:"action",width:"210px"}]),tt=K(()=>[{title:t("nlprog.conventionCols.category"),key:"category",width:"120px"},{title:t("nlprog.conventionCols.pattern"),key:"pattern"},{title:t("nlprog.conventionCols.examples"),key:"examples",width:"220px"},{title:t("nlprog.conventionCols.confidence"),key:"confidence",width:"90px"},{title:t("nlprog.conventionCols.createdAt"),key:"createdAt",width:"160px"},{title:t("nlprog.conventionCols.action"),key:"action",width:"90px"}]),at=K(()=>q.value.translations.avgCompleteness*100),lt=K(()=>{let r=Y.value;return A.value&&(r=r.filter(s=>s.intent===A.value)),N.value&&(r=r.filter(s=>s.status===N.value)),r}),rt=K(()=>W.value?P.value.filter(r=>r.category===W.value):P.value);function U(r){const s=`nlprog.intentLabels.${r}`,g=t(s);return g===s?r:g}function st(r){return{create_component:"blue",add_feature:"green",fix_bug:"red",refactor:"purple",add_api:"cyan",add_test:"orange",update_style:"magenta",configure:"gold",general:"default"}[r]||"default"}function l(r){const s=`nlprog.statusLabels.${r}`,g=t(s);return g===s?r:g}function f(r){return{draft:"default",complete:"green",refined:"cyan"}[r]||"default"}function h(r){const s=`nlprog.categoryLabels.${r}`,g=t(s);return g===s?r:g}function ht(r){return{naming:"blue",architecture:"purple",testing:"cyan",style:"magenta",imports:"orange",components:"green"}[r]||"default"}function St(r){return r>=.7?"#52c41a":r>=.4?"#faad14":"#ff4d4f"}function zt(r,s){return r?r.length>s?r.slice(0,s)+"...":r:""}function At(r){if(r==null)return"—";if(typeof r=="string")return r;try{return JSON.stringify(r,null,2)}catch{return String(r)}}function Ft({key:r}){r==="analyze"?(J.value=null,L.value=null,T.value=null,C.value=!0):r==="translate"?(D.value={noDb:!1,error:""},O.value=!0):r==="convention"&&(M.value=!0)}async function G(){z.value=!0;try{const[r,s,g]=await Promise.all([c.execute("nlprog list --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog conventions --limit 200 --json",1e4).catch(()=>({output:""})),c.execute("nlprog stats --json",8e3).catch(()=>({output:""}))]);Y.value=vt(r.output),P.value=kt(s.output),q.value=xt(g.output)}catch(r){v.error(t("nlprog.msg.loadFailed")+": "+(r?.message||r))}finally{z.value=!1}}async function Ot(){const r=H.text.trim();if(!r){v.warning(t("nlprog.msg.textEmpty"));return}X.value=!0,J.value=null,L.value=null,T.value=null;try{const s=r.replace(/"/g,'\\"'),[g,et,nt]=await Promise.all([c.execute(`nlprog classify "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog extract "${s}" --json`,8e3).catch(()=>({output:""})),c.execute(`nlprog detect-stack "${s}" --json`,8e3).catch(()=>({output:""}))]);J.value=mt(g.output),L.value=gt(et.output),T.value=yt(nt.output),!J.value&&!L.value&&!T.value&&v.error(t("nlprog.msg.analyzeFailed"))}catch(s){v.error(t("nlprog.msg.analyzeFailed")+": "+(s?.message||s))}finally{X.value=!1}}async function Rt(){const r=w.text.trim();if(!r){v.warning(t("nlprog.msg.translateTextEmpty"));return}F.value=!0,D.value={noDb:!1,error:""};try{const s=[`nlprog translate "${r.replace(/"/g,'\\"')}"`];w.intent&&s.push(`--intent ${w.intent}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),12e3),et=_t(g);if(et.noDb){D.value=et;return}const nt=bt(g);if(!nt){v.error(t("nlprog.msg.translateFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.translateSuccess",{pct:(nt.completeness*100).toFixed(0)})),O.value=!1,it(),await G()}catch(s){v.error(t("nlprog.msg.translateFailed")+": "+(s?.message||s))}finally{F.value=!1}}async function Nt(r,s){if(s!==r.status)try{const{output:g}=await c.execute(`nlprog status ${r.id} ${s} --json`,8e3);if(/error|invalid/i.test(g)&&!/"updated"/.test(g)){v.error(t("nlprog.msg.transitionFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.transitionSuccess",{label:l(s)})),await G()}catch(g){v.error(t("nlprog.msg.transitionFailed")+": "+(g?.message||g))}}async function wt(r){try{const{output:s}=await c.execute(`nlprog remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await G()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function Lt(r){B.value=r,Z.value=!0}async function jt(){const r=x.pattern.trim();if(!r){v.warning(t("nlprog.msg.patternEmpty"));return}if(x.examples.trim())try{JSON.parse(x.examples)}catch{v.warning(t("nlprog.msg.examplesBadJson"));return}E.value=!0;try{const s=[`nlprog convention-add --category ${x.category}`];s.push(`--pattern "${r.replace(/"/g,'\\"')}"`),x.examples.trim()&&s.push(`--examples '${x.examples.trim().replace(/'/g,"'\\''")}'`),x.confidence!=null&&s.push(`--confidence ${x.confidence}`),s.push("--json");const{output:g}=await c.execute(s.join(" "),1e4);if(/error|invalid|失败/i.test(g)&&!/"added"/.test(g)){v.error(t("nlprog.msg.addFailed")+": "+g.slice(0,120));return}v.success(t("nlprog.msg.addSuccess")),M.value=!1,ct(),I.value="conventions",await G()}catch(s){v.error(t("nlprog.msg.addFailed")+": "+(s?.message||s))}finally{E.value=!1}}async function Et(r){try{const{output:s}=await c.execute(`nlprog convention-remove ${r.id} --json`,8e3);if(/error/i.test(s)&&!/"removed"/.test(s)){v.error(t("nlprog.msg.deleteFailed")+": "+s.slice(0,120));return}v.success(t("nlprog.msg.deleteSuccess")),await G()}catch(s){v.error(t("nlprog.msg.deleteFailed")+": "+(s?.message||s))}}function it(){w.text="",w.intent=null}function ct(){x.category="naming",x.pattern="",x.examples="",x.confidence=.8}ut(G);const dt={ws:c,t,loading:z,analyzing:X,translating:F,adding:E,translations:Y,conventions:P,stats:q,activeTab:I,intentFilter:A,statusFilter:N,categoryFilter:W,showAnalyzeModal:C,showTranslateModal:O,showConventionModal:M,showDetailsModal:Z,analyzeForm:H,translateForm:w,conventionForm:x,classifyResult:J,extractResult:L,stackResult:T,translateError:D,currentTranslation:B,translationColumns:$,conventionColumns:tt,avgCompletenessPct:at,filteredTranslations:lt,filteredConventions:rt,intentLabel:U,intentColor:st,statusLabel:l,statusColor:f,categoryLabel:h,categoryColor:ht,completenessColor:St,truncate:zt,formatJson:At,handleNewClick:Ft,loadAll:G,runAnalyze:Ot,runTranslate:Rt,transitionStatus:Nt,removeTranslation:wt,showTranslationDetails:Lt,addConvention:jt,removeConvention:Et,resetTranslateForm:it,resetConventionForm:ct,ref:_,computed:K,onMounted:ut,reactive:ot,get ReloadOutlined(){return qt},get PlusOutlined(){return Yt},get CodeOutlined(){return Vt},get BulbOutlined(){return Gt},get FileTextOutlined(){return Bt},get EditOutlined(){return Jt},get CheckCircleOutlined(){return Mt},get RiseOutlined(){return Pt},get message(){return v},get useI18n(){return ft},get useWsStore(){return pt},get parseClassifyResult(){return mt},get parseExtractResult(){return gt},get parseStackResult(){return yt},get parseTranslations(){return vt},get parseTranslateResult(){return bt},get detectTranslateError(){return _t},get parseConventions(){return kt},get parseStats(){return xt},get formatNlprogTime(){return Ht},get INTENTS(){return Ct},get TRANSLATION_STATUSES(){return Kt},get STYLE_CATEGORIES(){return Tt}};return Object.defineProperty(dt,"__isScriptSetup",{enumerable:!1,value:!0}),dt}},$t={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},te={class:"page-title"},ee={class:"page-sub"},ne={class:"filter-bar"},oe={key:0,style:{color:"var(--text-primary)"}},ae={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},le={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},re={class:"filter-bar"},se={key:1,style:{color:"var(--text-primary)","font-family":"monospace","font-size":"12px"}},ie={key:0,style:{color:"var(--text-muted)"}},ce={key:4,style:{color:"var(--text-secondary)","font-size":"11px"}},de={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},ue={key:0,style:{"margin-bottom":"12px"}},pe={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},fe={style:{color:"var(--text-secondary)","font-size":"12px"}},me={key:1,style:{"margin-bottom":"12px"}},ge={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},ye={key:0,style:{color:"var(--text-muted)"}},ve={key:2},be={style:{"font-size":"12px",color:"var(--text-secondary)","margin-bottom":"4px"}},_e={key:0,style:{color:"var(--text-muted)"}},ke={key:0,style:{"padding-top":"8px"}},xe={style:{"white-space":"pre-wrap",color:"var(--text-primary)"}},Ce={style:{"margin-top":"16px"}},Te={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},he={class:"json-block"},Se={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},ze={class:"json-block"},Ae={key:0},Fe={style:{color:"var(--text-primary)","font-size":"13px","margin-bottom":"8px"}},Oe={class:"json-block"};function Re(e,n,c,t,z,X){const F=m("a-button"),E=m("a-menu-item"),Y=m("a-menu"),P=m("a-dropdown"),q=m("a-space"),I=m("a-statistic"),A=m("a-card"),N=m("a-col"),W=m("a-row"),C=m("a-tag"),O=m("a-radio-button"),M=m("a-radio-group"),Z=m("a-progress"),H=m("a-popconfirm"),w=m("a-table"),x=m("a-tab-pane"),J=m("a-tabs"),L=m("a-textarea"),T=m("a-form-item"),D=m("a-form"),B=m("a-modal"),$=m("a-select-option"),tt=m("a-select"),at=m("a-alert"),lt=m("a-input"),rt=m("a-input-number"),U=m("a-descriptions-item"),st=m("a-descriptions");return d(),y("div",null,[b("div",$t,[b("div",null,[b("h2",te,i(e.$t("nlprog.title")),1),b("p",ee,i(e.$t("nlprog.subtitle")),1)]),a(q,null,{default:o(()=>[a(F,{loading:t.loading,onClick:t.loadAll},{icon:o(()=>[a(t.ReloadOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.refresh")),1)]),_:1},8,["loading"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(Y,{onClick:t.handleNewClick},{default:o(()=>[a(E,{key:"analyze"},{default:o(()=>[a(t.BulbOutlined),u(" "+i(e.$t("nlprog.actions.analyze")),1)]),_:1}),a(E,{key:"translate"},{default:o(()=>[a(t.CodeOutlined),u(" "+i(e.$t("nlprog.actions.translate")),1)]),_:1}),a(E,{key:"convention"},{default:o(()=>[a(t.FileTextOutlined),u(" "+i(e.$t("nlprog.actions.convention")),1)]),_:1})]),_:1})]),default:o(()=>[a(F,{type:"primary"},{icon:o(()=>[a(t.PlusOutlined)]),default:o(()=>[u(" "+i(e.$t("nlprog.actionDropdown")),1)]),_:1})]),_:1})]),_:1})]),p(" Stat cards "),a(W,{gutter:[16,16],style:{"margin-bottom":"20px"}},{default:o(()=>[a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.translations"),value:t.stats.translations.total,"value-style":{color:"#1677ff",fontSize:"20px"}},{prefix:o(()=>[a(t.CodeOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.avgCompleteness"),value:t.avgCompletenessPct,precision:1,suffix:"%","value-style":{color:t.stats.translations.avgCompleteness>=.7?"#52c41a":"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.RiseOutlined)]),_:1},8,["title","value","value-style"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.drafts"),value:t.stats.translations.byStatus.draft,"value-style":{color:"#faad14",fontSize:"20px"}},{prefix:o(()=>[a(t.EditOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:12,sm:8,lg:5},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.completed"),value:t.stats.translations.byStatus.complete,"value-style":{color:"#52c41a",fontSize:"20px"}},{prefix:o(()=>[a(t.CheckCircleOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1}),a(N,{xs:24,sm:8,lg:4},{default:o(()=>[a(A,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:o(()=>[a(I,{title:e.$t("nlprog.stats.conventions"),value:t.stats.conventions.total,"value-style":{color:"#722ed1",fontSize:"20px"}},{prefix:o(()=>[a(t.FileTextOutlined)]),_:1},8,["title","value"])]),_:1})]),_:1})]),_:1}),p(" Intent breakdown "),t.stats.translations.total>0?(d(),k(A,{key:0,title:e.$t("nlprog.intentCard"),size:"small",style:{background:"var(--bg-card)","border-color":"var(--border-color)","margin-bottom":"20px"},"body-style":{padding:"12px 16px"}},{default:o(()=>[a(q,{size:[12,8],wrap:""},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(C,{key:l,color:t.intentColor(l)},{default:o(()=>[u(i(t.intentLabel(l))+": "+i(t.stats.translations.byIntent[l]||0),1)]),_:2},1032,["color"]))),128))]),_:1})]),_:1},8,["title"])):p("v-if",!0),p(" Tabs "),a(J,{activeKey:t.activeTab,"onUpdate:activeKey":n[3]||(n[3]=l=>t.activeTab=l),class:"nlprog-tabs"},{default:o(()=>[p(" ── Translations tab ──────────────────────────────────────── "),a(x,{key:"translations",tab:e.$t("nlprog.tabs.translations")},{default:o(()=>[b("div",ne,[a(M,{value:t.intentFilter,"onUpdate:value":n[0]||(n[0]=l=>t.intentFilter=l),size:"small"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allIntents")),1)]),_:1}),(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"]),a(M,{value:t.statusFilter,"onUpdate:value":n[1]||(n[1]=l=>t.statusFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allStatuses")),1)]),_:1}),(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.statusLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.translationColumns,"data-source":t.filteredTranslations,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="inputText"?(d(),y("span",oe,i(t.truncate(f.inputText,80)),1)):p("v-if",!0),l.key==="intent"?(d(),k(C,{key:1,color:t.intentColor(f.intent),style:{"font-size":"11px"}},{default:o(()=>[u(i(t.intentLabel(f.intent)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="completeness"?(d(),k(Z,{key:2,percent:Math.round(f.completenessScore*100),size:"small","stroke-color":t.completenessColor(f.completenessScore),format:()=>(f.completenessScore*100).toFixed(0)+"%"},null,8,["percent","stroke-color","format"])):p("v-if",!0),l.key==="status"?(d(),k(C,{key:3,color:t.statusColor(f.status)},{default:o(()=>[u(i(t.statusLabel(f.status)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="updatedAt"?(d(),y("span",ae,i(t.formatNlprogTime(f.updatedAt)),1)):p("v-if",!0),l.key==="action"?(d(),y(S,{key:5},[a(F,{size:"small",type:"link",onClick:h=>t.showTranslationDetails(f)},{default:o(()=>[u(i(e.$t("nlprog.table.actionDetails")),1)]),_:1},8,["onClick"]),a(P,{trigger:["click"]},{overlay:o(()=>[a(Y,{onClick:h=>t.transitionStatus(f,h.key)},{default:o(()=>[(d(!0),y(S,null,R(t.TRANSLATION_STATUSES,h=>(d(),k(E,{key:h,disabled:h===f.status},{default:o(()=>[u(i(t.statusLabel(h)),1)]),_:2},1032,["disabled"]))),128))]),_:2},1032,["onClick"])]),default:o(()=>[a(F,{size:"small",type:"link"},{default:o(()=>[u(i(e.$t("nlprog.table.actionStatusDropdown")),1)]),_:1})]),_:2},1024),a(H,{title:e.$t("nlprog.deleteTranslationConfirm.title"),"ok-text":e.$t("nlprog.deleteTranslationConfirm.ok"),"cancel-text":e.$t("nlprog.deleteTranslationConfirm.cancel"),onConfirm:h=>t.removeTranslation(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteTranslationConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])],64)):p("v-if",!0)]),emptyText:o(()=>[b("div",le,[a(t.CodeOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(t.intentFilter||t.statusFilter?e.$t("nlprog.table.emptyTranslationsFiltered"):e.$t("nlprog.table.emptyTranslations")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"]),p(" ── Conventions tab ──────────────────────────────────────── "),a(x,{key:"conventions",tab:e.$t("nlprog.tabs.conventions")},{default:o(()=>[b("div",re,[a(M,{value:t.categoryFilter,"onUpdate:value":n[2]||(n[2]=l=>t.categoryFilter=l),size:"small","button-style":"solid"},{default:o(()=>[a(O,{value:""},{default:o(()=>[u(i(e.$t("nlprog.filter.allCategories")),1)]),_:1}),(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k(O,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),a(w,{columns:t.conventionColumns,"data-source":t.filteredConventions,pagination:{pageSize:20,showTotal:l=>e.$t("nlprog.table.totalSuffix",{n:l})},size:"small",loading:t.loading,style:{background:"var(--bg-card)"}},{bodyCell:o(({column:l,record:f})=>[l.key==="category"?(d(),k(C,{key:0,color:t.categoryColor(f.category)},{default:o(()=>[u(i(t.categoryLabel(f.category)),1)]),_:2},1032,["color"])):p("v-if",!0),l.key==="pattern"?(d(),y("span",se,i(f.pattern),1)):p("v-if",!0),l.key==="examples"?(d(),y(S,{key:2},[(d(!0),y(S,null,R(Array.isArray(f.examples)?f.examples.slice(0,3):[],h=>(d(),k(C,{key:h,color:"default",style:{"font-size":"10px","font-family":"monospace",margin:"1px"}},{default:o(()=>[u(i(h),1)]),_:2},1024))),128)),!Array.isArray(f.examples)||f.examples.length===0?(d(),y("span",ie,"—")):p("v-if",!0)],64)):p("v-if",!0),l.key==="confidence"?(d(),y("span",{key:3,style:It({color:t.completenessColor(f.confidence),fontWeight:500})},i((f.confidence*100).toFixed(0))+"% ",5)):p("v-if",!0),l.key==="createdAt"?(d(),y("span",ce,i(t.formatNlprogTime(f.createdAt)),1)):p("v-if",!0),l.key==="action"?(d(),k(H,{key:5,title:e.$t("nlprog.deleteConventionConfirm.title"),"ok-text":e.$t("nlprog.deleteConventionConfirm.ok"),"cancel-text":e.$t("nlprog.deleteConventionConfirm.cancel"),onConfirm:h=>t.removeConvention(f)},{default:o(()=>[a(F,{size:"small",type:"link",danger:""},{default:o(()=>[u(i(e.$t("nlprog.deleteConventionConfirm.ok")),1)]),_:1})]),_:1},8,["title","ok-text","cancel-text","onConfirm"])):p("v-if",!0)]),emptyText:o(()=>[b("div",de,[a(t.FileTextOutlined,{style:{"font-size":"36px","margin-bottom":"10px",display:"block"}}),u(" "+i(e.$t("nlprog.table.emptyConventions")),1)])]),_:1},8,["columns","data-source","pagination","loading"])]),_:1},8,["tab"])]),_:1},8,["activeKey"]),p(" ── Analyze modal ────────────────────────────────────────── "),a(B,{open:t.showAnalyzeModal,"onUpdate:open":n[5]||(n[5]=l=>t.showAnalyzeModal=l),title:e.$t("nlprog.analyze_modal.title"),"confirm-loading":t.analyzing,width:600,"ok-text":e.$t("nlprog.analyze_modal.ok"),"cancel-text":e.$t("nlprog.analyze_modal.cancel"),onOk:t.runAnalyze},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.analyze_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.analyzeForm.text,"onUpdate:value":n[4]||(n[4]=l=>t.analyzeForm.text=l),placeholder:e.$t("nlprog.analyze_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.classifyResult||t.extractResult||t.stackResult?(d(),k(A,{key:0,size:"small",style:{background:"var(--bg-base)","margin-top":"8px"}},{default:o(()=>[t.classifyResult?(d(),y("div",ue,[b("div",pe,i(e.$t("nlprog.analyze_modal.intent")),1),a(C,{color:t.intentColor(t.classifyResult.intent),style:{"margin-right":"6px"}},{default:o(()=>[u(i(t.intentLabel(t.classifyResult.intent)),1)]),_:1},8,["color"]),b("span",fe,i(e.$t("nlprog.analyze_modal.confidenceLine",{pct:(t.classifyResult.confidence*100).toFixed(0)})),1)])):p("v-if",!0),t.extractResult?(d(),y("div",me,[b("div",ge,i(e.$t("nlprog.analyze_modal.entities",{n:t.extractResult.count})),1),t.extractResult.entities.length?p("v-if",!0):(d(),y("span",ye,i(e.$t("nlprog.analyze_modal.notDetected")),1)),(d(!0),y(S,null,R(t.extractResult.entities,(l,f)=>(d(),k(C,{key:f,color:"purple",style:{"font-family":"monospace","font-size":"11px",margin:"1px"}},{default:o(()=>[u(" ["+i(l.type)+"] "+i(l.value),1)]),_:2},1024))),128))])):p("v-if",!0),t.stackResult?(d(),y("div",ve,[b("div",be,i(e.$t("nlprog.analyze_modal.stack")),1),t.stackResult.detected.length?(d(),y(S,{key:1},[a(C,{color:"cyan",style:{"font-family":"monospace"}},{default:o(()=>[u(i(e.$t("nlprog.analyze_modal.stackPrimary",{name:t.stackResult.primary})),1)]),_:1}),(d(!0),y(S,null,R(t.stackResult.detected.filter(l=>l!==t.stackResult.primary),l=>(d(),k(C,{key:l,color:"default",style:{"font-family":"monospace","font-size":"11px"}},{default:o(()=>[u(i(l),1)]),_:2},1024))),128))],64)):(d(),y("span",_e,i(e.$t("nlprog.analyze_modal.notDetected")),1))])):p("v-if",!0)]),_:1})):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translate modal ──────────────────────────────────────── "),a(B,{open:t.showTranslateModal,"onUpdate:open":n[8]||(n[8]=l=>t.showTranslateModal=l),title:e.$t("nlprog.translate_modal.title"),"confirm-loading":t.translating,width:540,"ok-text":e.$t("nlprog.translate_modal.ok"),"cancel-text":e.$t("nlprog.translate_modal.cancel"),onOk:t.runTranslate,onCancel:t.resetTranslateForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.translate_modal.textLabel"),required:""},{default:o(()=>[a(L,{value:t.translateForm.text,"onUpdate:value":n[6]||(n[6]=l=>t.translateForm.text=l),placeholder:e.$t("nlprog.translate_modal.textPlaceholder"),"auto-size":{minRows:3,maxRows:6}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.translate_modal.intentLabel")},{default:o(()=>[a(tt,{value:t.translateForm.intent,"onUpdate:value":n[7]||(n[7]=l=>t.translateForm.intent=l),"allow-clear":"",placeholder:e.$t("nlprog.translate_modal.intentPlaceholder")},{default:o(()=>[(d(!0),y(S,null,R(t.INTENTS,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.intentLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value","placeholder"])]),_:1},8,["label"])]),_:1}),t.translateError.noDb?(d(),k(at,{key:0,type:"warning","show-icon":"",message:e.$t("nlprog.translate_modal.noDbMessage"),description:e.$t("nlprog.translate_modal.noDbDescription"),style:{"margin-top":"12px"}},null,8,["message","description"])):p("v-if",!0)]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Add convention modal ─────────────────────────────────── "),a(B,{open:t.showConventionModal,"onUpdate:open":n[13]||(n[13]=l=>t.showConventionModal=l),title:e.$t("nlprog.convention_modal.title"),"confirm-loading":t.adding,width:540,"ok-text":e.$t("nlprog.convention_modal.ok"),"cancel-text":e.$t("nlprog.convention_modal.cancel"),onOk:t.addConvention,onCancel:t.resetConventionForm},{default:o(()=>[a(D,{"label-col":{span:5},"wrapper-col":{span:19},style:{"margin-top":"16px"}},{default:o(()=>[a(T,{label:e.$t("nlprog.convention_modal.categoryLabel"),required:""},{default:o(()=>[a(tt,{value:t.conventionForm.category,"onUpdate:value":n[9]||(n[9]=l=>t.conventionForm.category=l)},{default:o(()=>[(d(!0),y(S,null,R(t.STYLE_CATEGORIES,l=>(d(),k($,{key:l,value:l},{default:o(()=>[u(i(t.categoryLabel(l)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.patternLabel"),required:""},{default:o(()=>[a(lt,{value:t.conventionForm.pattern,"onUpdate:value":n[10]||(n[10]=l=>t.conventionForm.pattern=l),placeholder:e.$t("nlprog.convention_modal.patternPlaceholder")},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.examplesLabel")},{default:o(()=>[a(L,{value:t.conventionForm.examples,"onUpdate:value":n[11]||(n[11]=l=>t.conventionForm.examples=l),placeholder:e.$t("nlprog.convention_modal.examplesPlaceholder"),"auto-size":{minRows:2,maxRows:4}},null,8,["value","placeholder"])]),_:1},8,["label"]),a(T,{label:e.$t("nlprog.convention_modal.confidenceLabel")},{default:o(()=>[a(rt,{value:t.conventionForm.confidence,"onUpdate:value":n[12]||(n[12]=l=>t.conventionForm.confidence=l),min:0,max:1,step:.05,style:{width:"100%"}},null,8,["value"])]),_:1},8,["label"])]),_:1})]),_:1},8,["open","title","confirm-loading","ok-text","cancel-text"]),p(" ── Translation details modal ────────────────────────────── "),a(B,{open:t.showDetailsModal,"onUpdate:open":n[14]||(n[14]=l=>t.showDetailsModal=l),title:e.$t("nlprog.details.title",{id:t.currentTranslation?.id?.slice(0,8)||""}),width:720,footer:null},{default:o(()=>[t.currentTranslation?(d(),y("div",ke,[a(st,{column:2,size:"small",bordered:""},{default:o(()=>[a(U,{label:e.$t("nlprog.details.intent")},{default:o(()=>[a(C,{color:t.intentColor(t.currentTranslation.intent)},{default:o(()=>[u(i(t.intentLabel(t.currentTranslation.intent)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.status")},{default:o(()=>[a(C,{color:t.statusColor(t.currentTranslation.status)},{default:o(()=>[u(i(t.statusLabel(t.currentTranslation.status)),1)]),_:1},8,["color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.completeness"),span:2},{default:o(()=>[a(Z,{percent:Math.round(t.currentTranslation.completenessScore*100),"stroke-color":t.completenessColor(t.currentTranslation.completenessScore),size:"small"},null,8,["percent","stroke-color"])]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.createdAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.createdAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.updatedAt")},{default:o(()=>[u(i(t.formatNlprogTime(t.currentTranslation.updatedAt)),1)]),_:1},8,["label"]),a(U,{label:e.$t("nlprog.details.inputText"),span:2},{default:o(()=>[b("span",xe,i(t.currentTranslation.inputText),1)]),_:1},8,["label"])]),_:1}),b("div",Ce,[b("h4",Te,i(e.$t("nlprog.details.entities")),1),b("pre",he,i(t.formatJson(t.currentTranslation.entities)),1)]),b("div",null,[b("h4",Se,i(e.$t("nlprog.details.techStack")),1),b("pre",ze,i(t.formatJson(t.currentTranslation.techStack)),1)]),t.currentTranslation.spec?(d(),y("div",Ae,[b("h4",Fe,i(e.$t("nlprog.details.spec")),1),b("pre",Oe,i(t.formatJson(t.currentTranslation.spec)),1)])):p("v-if",!0)])):p("v-if",!0)]),_:1},8,["open","title"])])}const Ee=Dt(Xt,[["render",Re],["__scopeId","data-v-4c4216b9"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/views/NLProgramming.vue"]]);export{Ee as default};
@@ -1,7 +1,7 @@
1
- import{I as f,P as w,S as T,K as a,J as U,c as o,V as x,w as A,b as P,a as Y,r as u,U as L,Q as k,R as D,F as te,M as le,o as re,Z as se}from"./vendor-BvqAck49.js";import{u as J,_ as ae,d as C}from"./index-BgqftzvZ.js";import{u as ie}from"./useFs-DrW3e3kn.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aw as me,ax as ue,ay as pe,az as ge,a4 as ve,R as we,as as _e}from"./icons-DP3uiYxy.js";function ye(m){if(m&&m.ok===!1)throw new Error(m.error||"knowledge handler failed");return m?.result??m}function oe(m){return String(m).replace(/(["\\])/g,"\\$1")}function Z(){const m=J();async function t({title:b,content:e,tags:h=[],type:g="note"}={}){if(typeof b!="string"||!b.trim())throw new Error("title is required");if(typeof e!="string")throw new Error("content is required");const r=Array.isArray(h)?h.filter(Boolean):[];if(de().isEmbedded){const i=await m.sendRaw({type:"knowledge.add-item",item:{title:b.trim(),content:e,tags:r,type:g}},2e4),_=ye(i);if(_?.success===!1)throw new Error(_.error||"knowledge.add-item failed");return _?.item??null}let s=`note add "${oe(b.trim())}" -c "${oe(e)}"`;r.length&&(s+=` -t "${oe(r.join(","))}"`);const{output:d}=await m.execute(s,15e3);if(d&&/^[\s\S]*✖|error/i.test(d))throw new Error(d.slice(0,200));return{title:b.trim(),content:e,tags:r,type:g}}return{addItem:t}}const he={__name:"ClipboardImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=Z(),r=P({get:()=>e.modelValue,set:p=>h("update:modelValue",p)}),s=u(!1),d=u(""),i=Y({title:"",content:"",tagsRaw:""}),_=()=>`剪贴板导入 - ${new Date().toLocaleString()}`;function S(){i.title=_(),i.content="",i.tagsRaw="",d.value=""}async function v(){if(d.value="",!navigator.clipboard?.readText){d.value="当前环境不支持剪贴板读取 API";return}try{const p=await navigator.clipboard.readText();i.content=p||"",p||(d.value="剪贴板为空")}catch(p){d.value="读取剪贴板失败:"+(p?.message||String(p))}}A(()=>e.modelValue,async p=>{p&&(S(),await v())},{immediate:!0});async function O(){if(!i.content.trim()){C.warning("内容为空,无法保存");return}s.value=!0;try{const p=i.tagsRaw.split(/[,,]/).map(c=>c.trim()).filter(Boolean),n=await g.addItem({title:i.title.trim()||_(),content:i.content,tags:p,type:"note"});C.success("已保存到知识库"),h("saved",n),r.value=!1}catch(p){C.error("保存失败:"+(p?.message||String(p)))}finally{s.value=!1}}function V(){r.value=!1}const E={props:e,emit:h,knowledge:g,open:r,loading:s,readError:d,formState:i,defaultTitle:_,resetForm:S,readClipboard:v,handleSave:O,handleCancel:V,ref:u,reactive:Y,computed:P,watch:A,get message(){return C},get useKnowledge(){return Z}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}},be={key:0,style:{"margin-bottom":"16px"}};function Se(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-input"),d=f("a-form-item"),i=f("a-textarea"),_=f("a-form"),S=f("a-modal");return w(),T(S,{open:e.open,"onUpdate:open":t[3]||(t[3]=v=>e.open=v),title:"剪贴板导入",width:640,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.formState.content.trim()},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.readError?(w(),U("div",be,[o(r,{type:"warning","show-icon":"",message:e.readError,description:"请确认浏览器/系统已授予剪贴板读取权限,或手动粘贴到下方输入框。"},null,8,["message"])])):x("v-if",!0),o(_,{layout:"vertical",model:e.formState},{default:a(()=>[o(d,{label:"标题"},{default:a(()=>[o(s,{value:e.formState.title,"onUpdate:value":t[0]||(t[0]=v=>e.formState.title=v),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),o(d,{label:"内容"},{default:a(()=>[o(i,{value:e.formState.content,"onUpdate:value":t[1]||(t[1]=v=>e.formState.content=v),placeholder:"粘贴或编辑要保存的内容…","auto-size":{minRows:10,maxRows:20},"show-count":""},null,8,["value"])]),_:1}),o(d,{label:"标签(逗号分隔,可选)"},{default:a(()=>[o(s,{value:e.formState.tagsRaw,"onUpdate:value":t[2]||(t[2]=v=>e.formState.tagsRaw=v),placeholder:"例如:素材, 链接","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["open","ok-text","ok-button-props"])}const xe=ae(he,[["render",Se],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/components/ClipboardImportDialog.vue"]]);function ne(m){if(m&&m.ok===!1)throw new Error(m.error||"screenshot handler failed");return m?.result??m}function ce(){const m=J();if(!de().isEmbedded)return{unsupported:!0,capture:async()=>{throw new Error("截图需要桌面壳;浏览器模式不支持")},ocr:async()=>{throw new Error("OCR 仅在桌面壳可用")},cleanup:async()=>{}};async function b({screenIndex:g}={}){const r=await m.sendRaw({type:"screenshot.capture",screenIndex:g},3e4),s=ne(r);if(s?.success===!1)throw new Error(s.error||"screenshot.capture failed");return s}async function e(g,r,s){if(!g)throw new Error("path is required");const d=await m.sendRaw({type:"screenshot.ocr",path:g,lang:r,engine:s},9e4),i=ne(d);if(i?.success===!1)throw new Error(i.error||"screenshot.ocr failed");return i}async function h(g){if(g)try{const r=await m.sendRaw({type:"screenshot.cleanup",path:g},1e4),s=ne(r);s?.success===!1&&console.warn("[useScreenshot] cleanup failed:",s.error)}catch(r){console.warn("[useScreenshot] cleanup error:",r?.message||r)}}return{unsupported:!1,capture:b,ocr:e,cleanup:h}}const ke={__name:"ScreenshotImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=ce(),r=Z(),s=P({get:()=>e.modelValue,set:y=>h("update:modelValue",y)}),d=u(!1),i=u(!1),_=u(!1),S=u(""),v=u(null),O=u("auto"),V=u(null),E=u(""),p=u(""),n=u(null),c=Y({title:"",content:"",tagsRaw:""}),N=P(()=>!!n.value&&(c.content.trim()||"").length>0),B=()=>`截图识别 - ${new Date().toLocaleString()}`;function q(){c.title=B(),c.content="",c.tagsRaw="",S.value="",v.value=null,V.value=null,E.value="",p.value="",n.value=null}async function M(){n.value?.path&&await g.cleanup(n.value.path)}async function j(){if(g.unsupported)return S.value="浏览器模式不支持截图,请用桌面壳",null;i.value=!0;try{return await g.capture({})}catch(y){return S.value=y?.message||String(y),null}finally{i.value=!1}}async function z(y){if(y){_.value=!0;try{const l=await g.ocr(y,void 0,O.value);c.content=l.text||"",v.value=typeof l.confidence=="number"?l.confidence:null,V.value=l.engine||null,E.value=l.model||"",p.value=l.fallbackReason||"",l.text||C.info("OCR 未识别到文本,可手动输入")}catch(l){C.warning("OCR 失败: "+(l?.message||String(l)))}finally{_.value=!1}}}async function Q(){p.value=""}async function G(){await M(),q();const y=await j();y&&(n.value=y,await z(y.path))}async function W(){n.value?.path&&await z(n.value.path)}A(()=>e.modelValue,async y=>{if(y){q();const l=await j();l&&(n.value=l,await z(l.path))}else await M(),n.value=null},{immediate:!0});async function H(){if(!N.value){C.warning("识别文本为空,无法保存");return}d.value=!0;try{const y=c.tagsRaw.split(/[,,]/).map(I=>I.trim()).filter(Boolean),l=await r.addItem({title:c.title.trim()||B(),content:c.content,tags:y,type:"note"});C.success("已保存到知识库"),h("saved",l),await M(),s.value=!1}catch(y){C.error("保存失败: "+(y?.message||String(y)))}finally{d.value=!1}}async function X(){await M(),s.value=!1}const K={props:e,emit:h,screenshot:g,knowledge:r,open:s,loading:d,capturing:i,ocrLoading:_,captureError:S,ocrConfidence:v,ocrEngine:O,engineUsed:V,ocrModel:E,ocrFallbackReason:p,shot:n,formState:c,canSave:N,defaultTitle:B,resetState:q,cleanupShot:M,runCapture:j,runOcr:z,handleEngineChange:Q,handleRecapture:G,handleRerunOcr:W,handleSave:H,handleCancel:X,ref:u,reactive:Y,computed:P,watch:A,get message(){return C},get CameraOutlined(){return ue},get ScanOutlined(){return me},get useScreenshot(){return ce},get useKnowledge(){return Z}};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},Ce={key:0,style:{"margin-bottom":"16px"}},Oe={key:1,class:"ss-error"},Re={key:2},Ne={class:"ss-actions"},Ee={key:0,class:"ss-preview"},Ie=["src"];function Ue(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-button"),d=f("a-select-option"),i=f("a-select"),_=f("a-tag"),S=f("a-tooltip"),v=f("a-input"),O=f("a-form-item"),V=f("a-spin"),E=f("a-textarea"),p=f("a-form"),n=f("a-modal");return w(),T(n,{open:e.open,"onUpdate:open":t[4]||(t[4]=c=>e.open=c),title:"截图识别",width:780,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.canSave},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.screenshot.unsupported?(w(),U("div",Ce,[o(r,{type:"warning","show-icon":"",message:"浏览器模式不支持截图",description:"screenshot-desktop 需要 OS 原生 API,请用桌面壳 (cc desktop) 打开本面板。"})])):e.captureError?(w(),U("div",Oe,[o(r,{type:"error","show-icon":"",message:e.captureError},null,8,["message"])])):(w(),U("div",Re,[L("div",Ne,[o(s,{size:"small",loading:e.capturing,onClick:e.handleRecapture},{icon:a(()=>[o(e.CameraOutlined)]),default:a(()=>[t[5]||(t[5]=k(" 重新截图 ",-1))]),_:1},8,["loading"]),o(s,{size:"small",loading:e.ocrLoading,disabled:!e.shot||e.ocrLoading,onClick:e.handleRerunOcr},{icon:a(()=>[o(e.ScanOutlined)]),default:a(()=>[t[6]||(t[6]=k(" 重跑 OCR ",-1))]),_:1},8,["loading","disabled"]),o(i,{value:e.ocrEngine,"onUpdate:value":t[0]||(t[0]=c=>e.ocrEngine=c),size:"small",style:{width:"140px"},disabled:e.ocrLoading,onChange:e.handleEngineChange},{default:a(()=>[o(d,{value:"auto"},{default:a(()=>[...t[7]||(t[7]=[k("自动 (推荐)",-1)])]),_:1}),o(d,{value:"llm"},{default:a(()=>[...t[8]||(t[8]=[k("视觉 LLM",-1)])]),_:1}),o(d,{value:"tesseract"},{default:a(()=>[...t[9]||(t[9]=[k("本地 Tesseract",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.engineUsed==="llm"?(w(),T(_,{key:0,color:"blue"},{default:a(()=>[k(D(e.ocrModel||"豆包视觉"),1)]),_:1})):e.engineUsed==="tesseract"&&e.ocrConfidence!==null?(w(),T(_,{key:1},{default:a(()=>[k(" Tesseract · "+D(e.ocrConfidence)+"% ",1)]),_:1})):x("v-if",!0),e.ocrFallbackReason?(w(),T(S,{key:2,title:`LLM 识别失败已回落 Tesseract: ${e.ocrFallbackReason}`},{default:a(()=>[o(_,{color:"orange"},{default:a(()=>[...t[10]||(t[10]=[k("回落 Tesseract",-1)])]),_:1})]),_:1},8,["title"])):x("v-if",!0)]),e.shot?.dataUrl?(w(),U("div",Ee,[L("img",{src:e.shot.dataUrl,alt:"screenshot"},null,8,Ie)])):x("v-if",!0),o(p,{layout:"vertical",model:e.formState},{default:a(()=>[o(O,{label:"标题"},{default:a(()=>[o(v,{value:e.formState.title,"onUpdate:value":t[1]||(t[1]=c=>e.formState.title=c),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),o(O,null,{label:a(()=>[t[11]||(t[11]=L("span",null,"识别文本",-1)),e.ocrLoading?(w(),T(V,{key:0,size:"small",style:{"margin-left":"8px"}})):x("v-if",!0)]),default:a(()=>[o(E,{value:e.formState.content,"onUpdate:value":t[2]||(t[2]=c=>e.formState.content=c),placeholder:e.ocrLoading?"正在识别…":"识别结果,可手动编辑","auto-size":{minRows:8,maxRows:16},"show-count":""},null,8,["value","placeholder"])]),_:1}),o(O,{label:"标签 (逗号分隔, 可选)"},{default:a(()=>[o(v,{value:e.formState.tagsRaw,"onUpdate:value":t[3]||(t[3]=c=>e.formState.tagsRaw=c),placeholder:"例如: 截图, 参考","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]))]),_:1},8,["open","ok-text","ok-button-props"])}const Ve=ae(ke,[["render",Ue],["__scopeId","data-v-1d6234fd"],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/components/ScreenshotImportDialog.vue"]]),Le={__name:"Notes",setup(m,{expose:t}){t();const b=J(),e=ie(),h=le(),g=u(!1),r=u(!1),s=u(!1),d=u(!1),i=u(""),_=u([]),S=u([]),v=u(!1),O=u(""),V=u(!1),E=u(!1),p=u(!1),n=u(!1),c=u(null),N=u({title:"",content:"",tags:""});async function B(){C.success("剪贴板内容已保存到知识库"),await z()}async function q(){C.success("截图内容已保存到知识库"),await z()}const M=P(()=>v.value?S.value:_.value),j=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function z(){r.value=!0,i.value="";try{const{output:l}=await b.execute("note list",2e4);_.value=Q(l)}catch(l){i.value=`加载失败: ${l.message}`}finally{r.value=!1}}function Q(l){const I=[],$=l.split(`
2
- `);for(const ee of $){const R=ee.trim();if(!R||R.startsWith("─")||R.startsWith("Note")||R.match(/^\d+ note/i))continue;const F=R.match(/^(\d+)\.\s+(.+?)(?:\s+\[([^\]]+)\])?\s*(?:-\s*(.*))?$/);F?I.push({key:F[1],id:F[1],title:F[2].trim(),tags:F[3]?F[3].split(",").map(fe=>fe.trim()):[],preview:(F[4]||"").trim().slice(0,100),content:""}):R.length>2&&!R.startsWith("✖")&&!R.startsWith("[")&&I.push({key:I.length,id:String(I.length),title:R,tags:[],preview:"",content:""})}return I}async function G(){if(!O.value.trim()){W();return}s.value=!0,v.value=!0;try{const{output:l}=await b.execute(`note search "${O.value}"`,15e3);S.value=Q(l)}catch{S.value=[]}finally{s.value=!1}}function W(){O.value="",v.value=!1,S.value=[]}async function H(){if(!N.value.title.trim()){C.warning("请输入标题");return}d.value=!0;try{let l=`note add "${N.value.title}"`;N.value.content&&(l+=` -c "${N.value.content.replace(/"/g,'\\"')}"`),N.value.tags&&(l+=` -t "${N.value.tags}"`);const{output:I}=await b.execute(l,15e3);I.includes("✖")||I.toLowerCase().includes("error")?C.error("添加失败: "+I.slice(0,100)):(C.success("笔记已添加"),V.value=!1,N.value={title:"",content:"",tags:""},await z())}catch(l){C.error("添加失败: "+l.message)}finally{d.value=!1}}function X(l){c.value=l,E.value=!0}async function K(){if(!c.value)return;const l=c.value,I=l.tags?.length?`tags: [${l.tags.join(", ")}]
1
+ import{I as f,P as w,S as T,K as a,J as V,c as n,V as x,w as A,b as P,a as G,r as u,U as L,Q as k,R as D,F as te,M as le,o as re,Z as se}from"./vendor-BvqAck49.js";import{u as Y,_ as ae,d as C}from"./index-DH7suqAN.js";import{u as ie}from"./useFs-CEf8lFD8.js";import{u as de}from"./useShellMode-CgR0wCYM.js";import{aw as me,ax as ue,ay as pe,az as ge,a4 as ve,R as we,as as _e}from"./icons-DP3uiYxy.js";function ye(m){if(m&&m.ok===!1)throw new Error(m.error||"knowledge handler failed");return m?.result??m}function ne(m){return String(m).replace(/(["\\])/g,"\\$1")}function J(){const m=Y();async function t({title:b,content:e,tags:h=[],type:g="note"}={}){if(typeof b!="string"||!b.trim())throw new Error("title is required");if(typeof e!="string")throw new Error("content is required");const r=Array.isArray(h)?h.filter(Boolean):[];if(de().isEmbedded){const i=await m.sendRaw({type:"knowledge.add-item",item:{title:b.trim(),content:e,tags:r,type:g}},2e4),_=ye(i);if(_?.success===!1)throw new Error(_.error||"knowledge.add-item failed");return _?.item??null}let s=`note add "${ne(b.trim())}" -c "${ne(e)}"`;r.length&&(s+=` -t "${ne(r.join(","))}"`);const{output:d}=await m.execute(s,15e3);if(d&&/^[\s\S]*✖|error/i.test(d))throw new Error(d.slice(0,200));return{title:b.trim(),content:e,tags:r,type:g}}return{addItem:t}}const he={__name:"ClipboardImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=J(),r=P({get:()=>e.modelValue,set:p=>h("update:modelValue",p)}),s=u(!1),d=u(""),i=G({title:"",content:"",tagsRaw:""}),_=()=>`剪贴板导入 - ${new Date().toLocaleString()}`;function S(){i.title=_(),i.content="",i.tagsRaw="",d.value=""}async function v(){if(d.value="",!navigator.clipboard?.readText){d.value="当前环境不支持剪贴板读取 API";return}try{const p=await navigator.clipboard.readText();i.content=p||"",p||(d.value="剪贴板为空")}catch(p){d.value="读取剪贴板失败:"+(p?.message||String(p))}}A(()=>e.modelValue,async p=>{p&&(S(),await v())},{immediate:!0});async function O(){if(!i.content.trim()){C.warning("内容为空,无法保存");return}s.value=!0;try{const p=i.tagsRaw.split(/[,,]/).map(c=>c.trim()).filter(Boolean),o=await g.addItem({title:i.title.trim()||_(),content:i.content,tags:p,type:"note"});C.success("已保存到知识库"),h("saved",o),r.value=!1}catch(p){C.error("保存失败:"+(p?.message||String(p)))}finally{s.value=!1}}function U(){r.value=!1}const E={props:e,emit:h,knowledge:g,open:r,loading:s,readError:d,formState:i,defaultTitle:_,resetForm:S,readClipboard:v,handleSave:O,handleCancel:U,ref:u,reactive:G,computed:P,watch:A,get message(){return C},get useKnowledge(){return J}};return Object.defineProperty(E,"__isScriptSetup",{enumerable:!1,value:!0}),E}},be={key:0,style:{"margin-bottom":"16px"}};function Se(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-input"),d=f("a-form-item"),i=f("a-textarea"),_=f("a-form"),S=f("a-modal");return w(),T(S,{open:e.open,"onUpdate:open":t[3]||(t[3]=v=>e.open=v),title:"剪贴板导入",width:640,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.formState.content.trim()},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.readError?(w(),V("div",be,[n(r,{type:"warning","show-icon":"",message:e.readError,description:"请确认浏览器/系统已授予剪贴板读取权限,或手动粘贴到下方输入框。"},null,8,["message"])])):x("v-if",!0),n(_,{layout:"vertical",model:e.formState},{default:a(()=>[n(d,{label:"标题"},{default:a(()=>[n(s,{value:e.formState.title,"onUpdate:value":t[0]||(t[0]=v=>e.formState.title=v),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),n(d,{label:"内容"},{default:a(()=>[n(i,{value:e.formState.content,"onUpdate:value":t[1]||(t[1]=v=>e.formState.content=v),placeholder:"粘贴或编辑要保存的内容…","auto-size":{minRows:10,maxRows:20},"show-count":""},null,8,["value"])]),_:1}),n(d,{label:"标签(逗号分隔,可选)"},{default:a(()=>[n(s,{value:e.formState.tagsRaw,"onUpdate:value":t[2]||(t[2]=v=>e.formState.tagsRaw=v),placeholder:"例如:素材, 链接","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]),_:1},8,["open","ok-text","ok-button-props"])}const xe=ae(he,[["render",Se],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/components/ClipboardImportDialog.vue"]]);function oe(m){if(m&&m.ok===!1)throw new Error(m.error||"screenshot handler failed");return m?.result??m}function ce(){const m=Y();if(!de().isEmbedded)return{unsupported:!0,capture:async()=>{throw new Error("截图需要桌面壳;浏览器模式不支持")},ocr:async()=>{throw new Error("OCR 仅在桌面壳可用")},cleanup:async()=>{}};async function b({screenIndex:g}={}){const r=await m.sendRaw({type:"screenshot.capture",screenIndex:g},3e4),s=oe(r);if(s?.success===!1)throw new Error(s.error||"screenshot.capture failed");return s}async function e(g,r,s){if(!g)throw new Error("path is required");const d=await m.sendRaw({type:"screenshot.ocr",path:g,lang:r,engine:s},9e4),i=oe(d);if(i?.success===!1)throw new Error(i.error||"screenshot.ocr failed");return i}async function h(g){if(g)try{const r=await m.sendRaw({type:"screenshot.cleanup",path:g},1e4),s=oe(r);s?.success===!1&&console.warn("[useScreenshot] cleanup failed:",s.error)}catch(r){console.warn("[useScreenshot] cleanup error:",r?.message||r)}}return{unsupported:!1,capture:b,ocr:e,cleanup:h}}const ke={__name:"ScreenshotImportDialog",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","saved"],setup(m,{expose:t,emit:b}){t();const e=m,h=b,g=ce(),r=J(),s=P({get:()=>e.modelValue,set:y=>h("update:modelValue",y)}),d=u(!1),i=u(!1),_=u(!1),S=u(""),v=u(null),O=u("auto"),U=u(null),E=u(""),p=u(""),o=u(null),c=G({title:"",content:"",tagsRaw:""}),N=P(()=>!!o.value&&(c.content.trim()||"").length>0),j=()=>`截图识别 - ${new Date().toLocaleString()}`;function B(){c.title=j(),c.content="",c.tagsRaw="",S.value="",v.value=null,U.value=null,E.value="",p.value="",o.value=null}async function M(){o.value?.path&&await g.cleanup(o.value.path)}async function Q(){if(g.unsupported)return S.value="浏览器模式不支持截图,请用桌面壳",null;i.value=!0;try{return await g.capture({})}catch(y){return S.value=y?.message||String(y),null}finally{i.value=!1}}async function z(y){if(y){_.value=!0;try{const l=await g.ocr(y,void 0,O.value);c.content=l.text||"",v.value=typeof l.confidence=="number"?l.confidence:null,U.value=l.engine||null,E.value=l.model||"",p.value=l.fallbackReason||"",l.text||C.info("OCR 未识别到文本,可手动输入")}catch(l){C.warning("OCR 失败: "+(l?.message||String(l)))}finally{_.value=!1}}}async function q(){p.value=""}async function Z(){await M(),B();const y=await Q();y&&(o.value=y,await z(y.path))}async function W(){o.value?.path&&await z(o.value.path)}A(()=>e.modelValue,async y=>{if(y){B();const l=await Q();l&&(o.value=l,await z(l.path))}else await M(),o.value=null},{immediate:!0});async function H(){if(!N.value){C.warning("识别文本为空,无法保存");return}d.value=!0;try{const y=c.tagsRaw.split(/[,,]/).map(I=>I.trim()).filter(Boolean),l=await r.addItem({title:c.title.trim()||j(),content:c.content,tags:y,type:"note"});C.success("已保存到知识库"),h("saved",l),await M(),s.value=!1}catch(y){C.error("保存失败: "+(y?.message||String(y)))}finally{d.value=!1}}async function X(){await M(),s.value=!1}const K={props:e,emit:h,screenshot:g,knowledge:r,open:s,loading:d,capturing:i,ocrLoading:_,captureError:S,ocrConfidence:v,ocrEngine:O,engineUsed:U,ocrModel:E,ocrFallbackReason:p,shot:o,formState:c,canSave:N,defaultTitle:j,resetState:B,cleanupShot:M,runCapture:Q,runOcr:z,handleEngineChange:q,handleRecapture:Z,handleRerunOcr:W,handleSave:H,handleCancel:X,ref:u,reactive:G,computed:P,watch:A,get message(){return C},get CameraOutlined(){return ue},get ScanOutlined(){return me},get useScreenshot(){return ce},get useKnowledge(){return J}};return Object.defineProperty(K,"__isScriptSetup",{enumerable:!1,value:!0}),K}},Ce={key:0,style:{"margin-bottom":"16px"}},Oe={key:1,class:"ss-error"},Re={key:2},Ne={class:"ss-actions"},Ee={key:0,class:"ss-preview"},Ie=["src"];function Ve(m,t,b,e,h,g){const r=f("a-alert"),s=f("a-button"),d=f("a-select-option"),i=f("a-select"),_=f("a-tag"),S=f("a-tooltip"),v=f("a-input"),O=f("a-form-item"),U=f("a-spin"),E=f("a-textarea"),p=f("a-form"),o=f("a-modal");return w(),T(o,{open:e.open,"onUpdate:open":t[4]||(t[4]=c=>e.open=c),title:"截图识别",width:780,"ok-text":e.loading?"保存中…":"保存到知识库","cancel-text":"取消","ok-button-props":{loading:e.loading,disabled:!e.canSave},onOk:e.handleSave,onCancel:e.handleCancel},{default:a(()=>[e.screenshot.unsupported?(w(),V("div",Ce,[n(r,{type:"warning","show-icon":"",message:"浏览器模式不支持截图",description:"screenshot-desktop 需要 OS 原生 API,请用桌面壳 (cc desktop) 打开本面板。"})])):e.captureError?(w(),V("div",Oe,[n(r,{type:"error","show-icon":"",message:e.captureError},null,8,["message"])])):(w(),V("div",Re,[L("div",Ne,[n(s,{size:"small",loading:e.capturing,onClick:e.handleRecapture},{icon:a(()=>[n(e.CameraOutlined)]),default:a(()=>[t[5]||(t[5]=k(" 重新截图 ",-1))]),_:1},8,["loading"]),n(s,{size:"small",loading:e.ocrLoading,disabled:!e.shot||e.ocrLoading,onClick:e.handleRerunOcr},{icon:a(()=>[n(e.ScanOutlined)]),default:a(()=>[t[6]||(t[6]=k(" 重跑 OCR ",-1))]),_:1},8,["loading","disabled"]),n(i,{value:e.ocrEngine,"onUpdate:value":t[0]||(t[0]=c=>e.ocrEngine=c),size:"small",style:{width:"140px"},disabled:e.ocrLoading,onChange:e.handleEngineChange},{default:a(()=>[n(d,{value:"auto"},{default:a(()=>[...t[7]||(t[7]=[k("自动 (推荐)",-1)])]),_:1}),n(d,{value:"llm"},{default:a(()=>[...t[8]||(t[8]=[k("视觉 LLM",-1)])]),_:1}),n(d,{value:"tesseract"},{default:a(()=>[...t[9]||(t[9]=[k("本地 Tesseract",-1)])]),_:1})]),_:1},8,["value","disabled"]),e.engineUsed==="llm"?(w(),T(_,{key:0,color:"blue"},{default:a(()=>[k(D(e.ocrModel||"豆包视觉"),1)]),_:1})):e.engineUsed==="tesseract"&&e.ocrConfidence!==null?(w(),T(_,{key:1},{default:a(()=>[k(" Tesseract · "+D(e.ocrConfidence)+"% ",1)]),_:1})):x("v-if",!0),e.ocrFallbackReason?(w(),T(S,{key:2,title:`LLM 识别失败已回落 Tesseract: ${e.ocrFallbackReason}`},{default:a(()=>[n(_,{color:"orange"},{default:a(()=>[...t[10]||(t[10]=[k("回落 Tesseract",-1)])]),_:1})]),_:1},8,["title"])):x("v-if",!0)]),e.shot?.dataUrl?(w(),V("div",Ee,[L("img",{src:e.shot.dataUrl,alt:"screenshot"},null,8,Ie)])):x("v-if",!0),n(p,{layout:"vertical",model:e.formState},{default:a(()=>[n(O,{label:"标题"},{default:a(()=>[n(v,{value:e.formState.title,"onUpdate:value":t[1]||(t[1]=c=>e.formState.title=c),placeholder:"导入条目的标题","allow-clear":""},null,8,["value"])]),_:1}),n(O,null,{label:a(()=>[t[11]||(t[11]=L("span",null,"识别文本",-1)),e.ocrLoading?(w(),T(U,{key:0,size:"small",style:{"margin-left":"8px"}})):x("v-if",!0)]),default:a(()=>[n(E,{value:e.formState.content,"onUpdate:value":t[2]||(t[2]=c=>e.formState.content=c),placeholder:e.ocrLoading?"正在识别…":"识别结果,可手动编辑","auto-size":{minRows:8,maxRows:16},"show-count":""},null,8,["value","placeholder"])]),_:1}),n(O,{label:"标签 (逗号分隔, 可选)"},{default:a(()=>[n(v,{value:e.formState.tagsRaw,"onUpdate:value":t[3]||(t[3]=c=>e.formState.tagsRaw=c),placeholder:"例如: 截图, 参考","allow-clear":""},null,8,["value"])]),_:1})]),_:1},8,["model"])]))]),_:1},8,["open","ok-text","ok-button-props"])}const Ue=ae(ke,[["render",Ve],["__scopeId","data-v-1d6234fd"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/components/ScreenshotImportDialog.vue"]]),Le={__name:"Notes",setup(m,{expose:t}){t();const b=Y(),e=ie(),h=le(),g=u(!1),r=u(!1),s=u(!1),d=u(!1),i=u(""),_=u([]),S=u([]),v=u(!1),O=u(""),U=u(!1),E=u(!1),p=u(!1),o=u(!1),c=u(null),N=u({title:"",content:"",tags:""});async function j(){C.success("剪贴板内容已保存到知识库"),await z()}async function B(){C.success("截图内容已保存到知识库"),await z()}const M=P(()=>v.value?S.value:_.value),Q=[{title:"标题",dataIndex:"title",key:"title",width:"30%"},{title:"预览",key:"content",ellipsis:!0},{title:"标签",key:"tags",width:"20%"},{title:"操作",key:"actions",width:"80px"}];async function z(){r.value=!0,i.value="";try{const{output:l}=await b.execute("note list",2e4);_.value=q(l)}catch(l){i.value=`加载失败: ${l.message}`}finally{r.value=!1}}function q(l){const I=[],$=l.split(`
2
+ `);for(const ee of $){const R=ee.trim();if(!R||R.startsWith("─")||R.startsWith("Note")||R.match(/^\d+ note/i))continue;const F=R.match(/^(\d+)\.\s+(.+?)(?:\s+\[([^\]]+)\])?\s*(?:-\s*(.*))?$/);F?I.push({key:F[1],id:F[1],title:F[2].trim(),tags:F[3]?F[3].split(",").map(fe=>fe.trim()):[],preview:(F[4]||"").trim().slice(0,100),content:""}):R.length>2&&!R.startsWith("✖")&&!R.startsWith("[")&&I.push({key:I.length,id:String(I.length),title:R,tags:[],preview:"",content:""})}return I}async function Z(){if(!O.value.trim()){W();return}s.value=!0,v.value=!0;try{const{output:l}=await b.execute(`note search "${O.value}"`,15e3);S.value=q(l)}catch{S.value=[]}finally{s.value=!1}}function W(){O.value="",v.value=!1,S.value=[]}async function H(){if(!N.value.title.trim()){C.warning("请输入标题");return}d.value=!0;try{let l=`note add "${N.value.title}"`;N.value.content&&(l+=` -c "${N.value.content.replace(/"/g,'\\"')}"`),N.value.tags&&(l+=` -t "${N.value.tags}"`);const{output:I}=await b.execute(l,15e3);I.includes("✖")||I.toLowerCase().includes("error")?C.error("添加失败: "+I.slice(0,100)):(C.success("笔记已添加"),U.value=!1,N.value={title:"",content:"",tags:""},await z())}catch(l){C.error("添加失败: "+l.message)}finally{d.value=!1}}function X(l){c.value=l,E.value=!0}async function K(){if(!c.value)return;const l=c.value,I=l.tags?.length?`tags: [${l.tags.join(", ")}]
3
3
 
4
4
  `:"",$=`# ${l.title}
5
5
 
6
6
  ${I}${l.content||l.preview||""}
7
- `,ee=(l.title||"note").replace(/[\\/:*?"<>|\x00-\x1f]+/g,"_").slice(0,80)||"note";g.value=!0;try{const R=await e.saveText($,{defaultPath:`${ee}.md`,filters:[{name:"Markdown",extensions:["md"]}]});if(R.canceled)return;C.success(R.path?`已导出到 ${R.path}`:"已导出")}catch(R){C.error(`导出失败: ${R.message||R}`)}finally{g.value=!1}}re(()=>{z(),h.query.clipboardImport&&(p.value=!0),h.query.screenshotOcr&&(n.value=!0)}),A(()=>h.query.clipboardImport,l=>{l&&(p.value=!0)}),A(()=>h.query.screenshotOcr,l=>{l&&(n.value=!0)});const y={ws:b,fs:e,route:h,exporting:g,loading:r,searching:s,adding:d,error:i,notes:_,searchResults:S,isSearchMode:v,searchQuery:O,showAdd:V,showView:E,showClipboardImport:p,showScreenshotImport:n,viewingNote:c,newNote:N,onClipboardSaved:B,onScreenshotSaved:q,displayNotes:M,columns:j,loadNotes:z,parseNoteList:Q,doSearch:G,clearSearch:W,addNote:H,viewNote:X,exportNote:K,ref:u,computed:P,onMounted:re,watch:A,get useRoute(){return le},get PlusOutlined(){return _e},get ReloadOutlined(){return we},get FileTextOutlined(){return ve},get DownloadOutlined(){return ge},get SnippetsOutlined(){return pe},get CameraOutlined(){return ue},get message(){return C},get useWsStore(){return J},get useFs(){return ie},ClipboardImportDialog:xe,ScreenshotImportDialog:Ve};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}},Te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"page-sub"},De={style:{"margin-bottom":"16px",display:"flex",gap:"10px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Fe={key:0,style:{color:"#e0e0e0","font-weight":"500"}},Ae={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},Be={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},qe={style:{"margin-bottom":"10px"}},je={style:{"white-space":"pre-wrap",color:"#ccc","font-family":"inherit","line-height":"1.7",background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}};function Qe(m,t,b,e,h,g){const r=f("a-button"),s=f("a-space"),d=f("a-input-search"),i=f("a-tag"),_=f("a-spin"),S=f("a-table"),v=f("a-input"),O=f("a-form-item"),V=f("a-textarea"),E=f("a-form"),p=f("a-modal");return w(),U("div",null,[L("div",Te,[L("div",null,[t[12]||(t[12]=L("h2",{class:"page-title"},"笔记管理",-1)),L("p",ze,"个人知识库 · "+D(e.notes.length)+" 条笔记",1)]),o(s,null,{default:a(()=>[o(r,{onClick:t[0]||(t[0]=n=>e.showAdd=!0),type:"primary"},{icon:a(()=>[o(e.PlusOutlined)]),default:a(()=>[t[13]||(t[13]=k(" 新建笔记 ",-1))]),_:1}),o(r,{onClick:t[1]||(t[1]=n=>e.showClipboardImport=!0)},{icon:a(()=>[o(e.SnippetsOutlined)]),default:a(()=>[t[14]||(t[14]=k(" 剪贴板导入 ",-1))]),_:1}),o(r,{onClick:t[2]||(t[2]=n=>e.showScreenshotImport=!0)},{icon:a(()=>[o(e.CameraOutlined)]),default:a(()=>[t[15]||(t[15]=k(" 截图识别 ",-1))]),_:1}),o(r,{ghost:"",loading:e.loading,onClick:e.loadNotes},{icon:a(()=>[o(e.ReloadOutlined)]),default:a(()=>[t[16]||(t[16]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),x(" Search "),L("div",De,[o(d,{value:e.searchQuery,"onUpdate:value":t[3]||(t[3]=n=>e.searchQuery=n),placeholder:"搜索笔记...","allow-clear":"",style:{"max-width":"400px"},loading:e.searching,onSearch:e.doSearch,onClear:e.clearSearch},null,8,["value","loading"]),e.isSearchMode?(w(),T(i,{key:0,color:"blue",closable:"",onClose:e.clearSearch},{default:a(()=>[k(" 搜索: "+D(e.searchQuery),1)]),_:1})):x("v-if",!0)]),x(" Loading "),e.loading?(w(),U("div",Me,[o(_,{size:"large"})])):(w(),U(te,{key:1},[x(" Notes Table "),o(S,{columns:e.columns,"data-source":e.displayNotes,pagination:{pageSize:20,showTotal:n=>`共 ${n} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"note-row"},{bodyCell:a(({column:n,record:c})=>[n.key==="title"?(w(),U("span",Fe,D(c.title),1)):x("v-if",!0),n.key==="tags"?(w(!0),U(te,{key:1},se(c.tags,N=>(w(),T(i,{key:N,color:"blue",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[k(D(N),1)]),_:2},1024))),128)):x("v-if",!0),n.key==="content"?(w(),U("span",Ae,D(c.preview),1)):x("v-if",!0),n.key==="actions"?(w(),T(r,{key:3,size:"small",type:"link",onClick:N=>e.viewNote(c)},{default:a(()=>[...t[17]||(t[17]=[k("查看",-1)])]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:a(()=>[L("div",Pe,[o(e.FileTextOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),k(" "+D(e.error||'暂无笔记,点击"新建笔记"添加'),1)])]),_:1},8,["data-source","pagination"])],2112)),x(" Add Note Modal "),o(p,{open:e.showAdd,"onUpdate:open":t[7]||(t[7]=n=>e.showAdd=n),title:"新建笔记","confirm-loading":e.adding,onOk:e.addNote},{default:a(()=>[o(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[o(O,{label:"标题",required:""},{default:a(()=>[o(v,{value:e.newNote.title,"onUpdate:value":t[4]||(t[4]=n=>e.newNote.title=n),placeholder:"笔记标题"},null,8,["value"])]),_:1}),o(O,{label:"内容"},{default:a(()=>[o(V,{value:e.newNote.content,"onUpdate:value":t[5]||(t[5]=n=>e.newNote.content=n),rows:5,placeholder:"笔记内容..."},null,8,["value"])]),_:1}),o(O,{label:"标签"},{default:a(()=>[o(v,{value:e.newNote.tags,"onUpdate:value":t[6]||(t[6]=n=>e.newNote.tags=n),placeholder:"用逗号分隔,如: work,ideas"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),x(" Clipboard import modal "),o(e.ClipboardImportDialog,{modelValue:e.showClipboardImport,"onUpdate:modelValue":t[8]||(t[8]=n=>e.showClipboardImport=n),onSaved:e.onClipboardSaved},null,8,["modelValue"]),x(" Screenshot OCR modal "),o(e.ScreenshotImportDialog,{modelValue:e.showScreenshotImport,"onUpdate:modelValue":t[9]||(t[9]=n=>e.showScreenshotImport=n),onSaved:e.onScreenshotSaved},null,8,["modelValue"]),x(" View Note Modal "),o(p,{open:e.showView,"onUpdate:open":t[11]||(t[11]=n=>e.showView=n),title:e.viewingNote?.title,width:"700px"},{footer:a(()=>[o(r,{onClick:t[10]||(t[10]=n=>e.showView=!1)},{default:a(()=>[...t[18]||(t[18]=[k("关闭",-1)])]),_:1}),e.viewingNote?(w(),T(r,{key:0,type:"primary",loading:e.exporting,onClick:e.exportNote},{icon:a(()=>[o(e.DownloadOutlined)]),default:a(()=>[t[19]||(t[19]=k(" 导出 .md ",-1))]),_:1},8,["loading"])):x("v-if",!0)]),default:a(()=>[e.viewingNote?(w(),U("div",Be,[L("div",qe,[(w(!0),U(te,null,se(e.viewingNote.tags,n=>(w(),T(i,{key:n,color:"blue"},{default:a(()=>[k(D(n),1)]),_:2},1024))),128))]),L("pre",je,D(e.viewingNote.content||e.viewingNote.preview),1)])):x("v-if",!0)]),_:1},8,["open","title"])])}const Ge=ae(Le,[["render",Qe],["__scopeId","data-v-7992c921"],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/views/Notes.vue"]]);export{Ge as default};
7
+ `,ee=(l.title||"note").replace(/[\\/:*?"<>|\x00-\x1f]+/g,"_").slice(0,80)||"note";g.value=!0;try{const R=await e.saveText($,{defaultPath:`${ee}.md`,filters:[{name:"Markdown",extensions:["md"]}]});if(R.canceled)return;C.success(R.path?`已导出到 ${R.path}`:"已导出")}catch(R){C.error(`导出失败: ${R.message||R}`)}finally{g.value=!1}}re(()=>{z(),h.query.clipboardImport&&(p.value=!0),h.query.screenshotOcr&&(o.value=!0)}),A(()=>h.query.clipboardImport,l=>{l&&(p.value=!0)}),A(()=>h.query.screenshotOcr,l=>{l&&(o.value=!0)});const y={ws:b,fs:e,route:h,exporting:g,loading:r,searching:s,adding:d,error:i,notes:_,searchResults:S,isSearchMode:v,searchQuery:O,showAdd:U,showView:E,showClipboardImport:p,showScreenshotImport:o,viewingNote:c,newNote:N,onClipboardSaved:j,onScreenshotSaved:B,displayNotes:M,columns:Q,loadNotes:z,parseNoteList:q,doSearch:Z,clearSearch:W,addNote:H,viewNote:X,exportNote:K,ref:u,computed:P,onMounted:re,watch:A,get useRoute(){return le},get PlusOutlined(){return _e},get ReloadOutlined(){return we},get FileTextOutlined(){return ve},get DownloadOutlined(){return ge},get SnippetsOutlined(){return pe},get CameraOutlined(){return ue},get message(){return C},get useWsStore(){return Y},get useFs(){return ie},ClipboardImportDialog:xe,ScreenshotImportDialog:Ue};return Object.defineProperty(y,"__isScriptSetup",{enumerable:!1,value:!0}),y}},Te={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},ze={class:"page-sub"},De={style:{"margin-bottom":"16px",display:"flex",gap:"10px"}},Me={key:0,style:{"text-align":"center",padding:"60px"}},Fe={key:0,style:{color:"#e0e0e0","font-weight":"500"}},Ae={key:2,style:{color:"var(--text-secondary)","font-size":"12px"}},Pe={style:{padding:"40px",color:"var(--text-muted)","text-align":"center"}},je={key:0,style:{"max-height":"60vh","overflow-y":"auto"}},Be={style:{"margin-bottom":"10px"}},Qe={style:{"white-space":"pre-wrap",color:"#ccc","font-family":"inherit","line-height":"1.7",background:"var(--bg-base)",padding:"16px","border-radius":"6px",border:"1px solid var(--border-color)"}};function qe(m,t,b,e,h,g){const r=f("a-button"),s=f("a-space"),d=f("a-input-search"),i=f("a-tag"),_=f("a-spin"),S=f("a-table"),v=f("a-input"),O=f("a-form-item"),U=f("a-textarea"),E=f("a-form"),p=f("a-modal");return w(),V("div",null,[L("div",Te,[L("div",null,[t[12]||(t[12]=L("h2",{class:"page-title"},"笔记管理",-1)),L("p",ze,"个人知识库 · "+D(e.notes.length)+" 条笔记",1)]),n(s,null,{default:a(()=>[n(r,{onClick:t[0]||(t[0]=o=>e.showAdd=!0),type:"primary"},{icon:a(()=>[n(e.PlusOutlined)]),default:a(()=>[t[13]||(t[13]=k(" 新建笔记 ",-1))]),_:1}),n(r,{onClick:t[1]||(t[1]=o=>e.showClipboardImport=!0)},{icon:a(()=>[n(e.SnippetsOutlined)]),default:a(()=>[t[14]||(t[14]=k(" 剪贴板导入 ",-1))]),_:1}),n(r,{onClick:t[2]||(t[2]=o=>e.showScreenshotImport=!0)},{icon:a(()=>[n(e.CameraOutlined)]),default:a(()=>[t[15]||(t[15]=k(" 截图识别 ",-1))]),_:1}),n(r,{ghost:"",loading:e.loading,onClick:e.loadNotes},{icon:a(()=>[n(e.ReloadOutlined)]),default:a(()=>[t[16]||(t[16]=k(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),x(" Search "),L("div",De,[n(d,{value:e.searchQuery,"onUpdate:value":t[3]||(t[3]=o=>e.searchQuery=o),placeholder:"搜索笔记...","allow-clear":"",style:{"max-width":"400px"},loading:e.searching,onSearch:e.doSearch,onClear:e.clearSearch},null,8,["value","loading"]),e.isSearchMode?(w(),T(i,{key:0,color:"blue",closable:"",onClose:e.clearSearch},{default:a(()=>[k(" 搜索: "+D(e.searchQuery),1)]),_:1})):x("v-if",!0)]),x(" Loading "),e.loading?(w(),V("div",Me,[n(_,{size:"large"})])):(w(),V(te,{key:1},[x(" Notes Table "),n(S,{columns:e.columns,"data-source":e.displayNotes,pagination:{pageSize:20,showTotal:o=>`共 ${o} 条`},size:"small",style:{background:"var(--bg-card)"},"row-class-name":()=>"note-row"},{bodyCell:a(({column:o,record:c})=>[o.key==="title"?(w(),V("span",Fe,D(c.title),1)):x("v-if",!0),o.key==="tags"?(w(!0),V(te,{key:1},se(c.tags,N=>(w(),T(i,{key:N,color:"blue",style:{"font-size":"10px",margin:"1px"}},{default:a(()=>[k(D(N),1)]),_:2},1024))),128)):x("v-if",!0),o.key==="content"?(w(),V("span",Ae,D(c.preview),1)):x("v-if",!0),o.key==="actions"?(w(),T(r,{key:3,size:"small",type:"link",onClick:N=>e.viewNote(c)},{default:a(()=>[...t[17]||(t[17]=[k("查看",-1)])]),_:1},8,["onClick"])):x("v-if",!0)]),emptyText:a(()=>[L("div",Pe,[n(e.FileTextOutlined,{style:{"font-size":"40px","margin-bottom":"12px",display:"block"}}),k(" "+D(e.error||'暂无笔记,点击"新建笔记"添加'),1)])]),_:1},8,["data-source","pagination"])],2112)),x(" Add Note Modal "),n(p,{open:e.showAdd,"onUpdate:open":t[7]||(t[7]=o=>e.showAdd=o),title:"新建笔记","confirm-loading":e.adding,onOk:e.addNote},{default:a(()=>[n(E,{"label-col":{span:4},"wrapper-col":{span:20},style:{"margin-top":"16px"}},{default:a(()=>[n(O,{label:"标题",required:""},{default:a(()=>[n(v,{value:e.newNote.title,"onUpdate:value":t[4]||(t[4]=o=>e.newNote.title=o),placeholder:"笔记标题"},null,8,["value"])]),_:1}),n(O,{label:"内容"},{default:a(()=>[n(U,{value:e.newNote.content,"onUpdate:value":t[5]||(t[5]=o=>e.newNote.content=o),rows:5,placeholder:"笔记内容..."},null,8,["value"])]),_:1}),n(O,{label:"标签"},{default:a(()=>[n(v,{value:e.newNote.tags,"onUpdate:value":t[6]||(t[6]=o=>e.newNote.tags=o),placeholder:"用逗号分隔,如: work,ideas"},null,8,["value"])]),_:1})]),_:1})]),_:1},8,["open","confirm-loading"]),x(" Clipboard import modal "),n(e.ClipboardImportDialog,{modelValue:e.showClipboardImport,"onUpdate:modelValue":t[8]||(t[8]=o=>e.showClipboardImport=o),onSaved:e.onClipboardSaved},null,8,["modelValue"]),x(" Screenshot OCR modal "),n(e.ScreenshotImportDialog,{modelValue:e.showScreenshotImport,"onUpdate:modelValue":t[9]||(t[9]=o=>e.showScreenshotImport=o),onSaved:e.onScreenshotSaved},null,8,["modelValue"]),x(" View Note Modal "),n(p,{open:e.showView,"onUpdate:open":t[11]||(t[11]=o=>e.showView=o),title:e.viewingNote?.title,width:"700px"},{footer:a(()=>[n(r,{onClick:t[10]||(t[10]=o=>e.showView=!1)},{default:a(()=>[...t[18]||(t[18]=[k("关闭",-1)])]),_:1}),e.viewingNote?(w(),T(r,{key:0,type:"primary",loading:e.exporting,onClick:e.exportNote},{icon:a(()=>[n(e.DownloadOutlined)]),default:a(()=>[t[19]||(t[19]=k(" 导出 .md ",-1))]),_:1},8,["loading"])):x("v-if",!0)]),default:a(()=>[e.viewingNote?(w(),V("div",je,[L("div",Be,[(w(!0),V(te,null,se(e.viewingNote.tags,o=>(w(),T(i,{key:o,color:"blue"},{default:a(()=>[k(D(o),1)]),_:2},1024))),128))]),L("pre",Qe,D(e.viewingNote.content||e.viewingNote.preview),1)])):x("v-if",!0)]),_:1},8,["open","title"])])}const Ze=ae(Le,[["render",qe],["__scopeId","data-v-7992c921"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/views/Notes.vue"]]);export{Ze as default};
@@ -1 +1 @@
1
- import{r as b,I as f,J as h,U as d,S as R,V as E,c as n,K as c,o as N,P as k,F as V,Q as O,R as B}from"./vendor-BvqAck49.js";import{u as L,_ as D,d as S}from"./index-BgqftzvZ.js";import{u as F}from"./useShellMode-CgR0wCYM.js";import{R as U}from"./icons-DP3uiYxy.js";const p={enabled:!0,sound:!0,badge:!0,desktop:!0};function x(s){if(s&&s.ok===!1)throw new Error(s.error||"notification-settings handler failed");return s?.result??s}const u={settings:b({...p})};function T(){const s=L(),t=F().isEmbedded;async function _(){if(!t)return u.settings.value={...p},u.settings.value;const a=await s.sendRaw({type:"notification-settings.get"},1e4),o=x(a);if(o?.success===!1)throw new Error(o.error||"notification-settings.get failed");return u.settings.value={...p,...o?.settings||{}},u.settings.value}async function e(a){if(!a||typeof a!="object")throw new Error("patch is required");if(!t)throw new Error("通知设置仅在嵌入式 web-shell 中可写");const o=await s.sendRaw({type:"notification-settings.update",settings:a},1e4),i=x(o);if(i?.success===!1)throw new Error(i.error||"notification-settings.update failed");return u.settings.value={...p,...i?.settings||{}},u.settings.value}return{settings:u.settings,isEmbedded:t,load:_,update:e,DEFAULTS:p}}const j={__name:"NotificationSettings",setup(s,{expose:t}){t();const{settings:_,isEmbedded:e,load:a,update:o}=T(),i=b(!1),l=b(!1),g=b("");async function v(){i.value=!0;try{await a()}catch(m){S.error("加载失败: "+(m?.message||String(m)))}finally{i.value=!1}}async function y(m,r){if(e){l.value=!0;try{await o({[m]:r}),g.value=new Date().toLocaleTimeString(),S.success("已保存")}catch(C){S.error("保存失败: "+(C?.message||String(C))),await a().catch(()=>{})}finally{l.value=!1}}}N(v);const w={settings:_,isEmbedded:e,load:a,update:o,loading:i,saving:l,lastSaved:g,reload:v,onToggle:y,ref:b,onMounted:N,get message(){return S},get ReloadOutlined(){return U},get useNotificationSettings(){return T}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},A={class:"footer-row"},I={key:0,class:"last-saved"};function M(s,t,_,e,a,o){const i=f("a-alert"),l=f("a-switch"),g=f("a-form-item"),v=f("a-form"),y=f("a-divider"),w=f("a-button"),m=f("a-card");return k(),h("div",null,[t[9]||(t[9]=d("div",{class:"page-head"},[d("div",null,[d("h2",{class:"page-title"},"通知设置"),d("p",{class:"page-sub"},"控制应用通知行为 · 与桌面 V5/V6 设置同源")])],-1)),e.isEmbedded?E("v-if",!0):(k(),R(i,{key:0,type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"浏览器模式只读",description:"纯浏览器没有 Electron AppConfig 后端,本页只能展示默认值。请使用桌面壳 (cc desktop) 写入。"})),n(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:c(()=>[n(v,{layout:"horizontal","label-col":{span:6},"wrapper-col":{span:18}},{default:c(()=>[n(g,{label:"启用通知"},{default:c(()=>[n(l,{checked:e.settings.enabled,disabled:!e.isEmbedded||e.saving,onChange:t[0]||(t[0]=r=>e.onToggle("enabled",r))},null,8,["checked","disabled"]),t[4]||(t[4]=d("span",{class:"hint"},"关闭后所有通知静默",-1))]),_:1}),e.settings.enabled?(k(),h(V,{key:0},[n(g,{label:"通知声音"},{default:c(()=>[n(l,{checked:e.settings.sound,disabled:!e.isEmbedded||e.saving,onChange:t[1]||(t[1]=r=>e.onToggle("sound",r))},null,8,["checked","disabled"]),t[5]||(t[5]=d("span",{class:"hint"},"桌面通知伴随系统提示音",-1))]),_:1}),n(g,{label:"角标提示"},{default:c(()=>[n(l,{checked:e.settings.badge,disabled:!e.isEmbedded||e.saving,onChange:t[2]||(t[2]=r=>e.onToggle("badge",r))},null,8,["checked","disabled"]),t[6]||(t[6]=d("span",{class:"hint"},"在应用图标 / 任务栏角标显示未读数",-1))]),_:1}),n(g,{label:"桌面通知"},{default:c(()=>[n(l,{checked:e.settings.desktop,disabled:!e.isEmbedded||e.saving,onChange:t[3]||(t[3]=r=>e.onToggle("desktop",r))},null,8,["checked","disabled"]),t[7]||(t[7]=d("span",{class:"hint"},"系统级 toast (Windows / macOS / Linux 原生通知)",-1))]),_:1})],64)):E("v-if",!0)]),_:1}),n(y),d("div",A,[n(w,{loading:e.loading,onClick:e.reload},{icon:c(()=>[n(e.ReloadOutlined)]),default:c(()=>[t[8]||(t[8]=O(" 重新加载 ",-1))]),_:1},8,["loading"]),e.lastSaved?(k(),h("span",I,"最近保存: "+B(e.lastSaved),1)):E("v-if",!0)])]),_:1})])}const J=D(j,[["render",M],["__scopeId","data-v-ae0392e9"],["__file","/tmp/cc-web-panel-oYLsUC/repo/packages/web-panel/src/views/NotificationSettings.vue"]]);export{J as default};
1
+ import{r as b,I as f,J as h,U as d,S as R,V as E,c as n,K as c,o as N,P as k,F as V,Q as O,R as B}from"./vendor-BvqAck49.js";import{u as j,_ as D,d as S}from"./index-DH7suqAN.js";import{u as F}from"./useShellMode-CgR0wCYM.js";import{R as L}from"./icons-DP3uiYxy.js";const p={enabled:!0,sound:!0,badge:!0,desktop:!0};function x(s){if(s&&s.ok===!1)throw new Error(s.error||"notification-settings handler failed");return s?.result??s}const u={settings:b({...p})};function T(){const s=j(),t=F().isEmbedded;async function _(){if(!t)return u.settings.value={...p},u.settings.value;const a=await s.sendRaw({type:"notification-settings.get"},1e4),o=x(a);if(o?.success===!1)throw new Error(o.error||"notification-settings.get failed");return u.settings.value={...p,...o?.settings||{}},u.settings.value}async function e(a){if(!a||typeof a!="object")throw new Error("patch is required");if(!t)throw new Error("通知设置仅在嵌入式 web-shell 中可写");const o=await s.sendRaw({type:"notification-settings.update",settings:a},1e4),i=x(o);if(i?.success===!1)throw new Error(i.error||"notification-settings.update failed");return u.settings.value={...p,...i?.settings||{}},u.settings.value}return{settings:u.settings,isEmbedded:t,load:_,update:e,DEFAULTS:p}}const A={__name:"NotificationSettings",setup(s,{expose:t}){t();const{settings:_,isEmbedded:e,load:a,update:o}=T(),i=b(!1),l=b(!1),g=b("");async function v(){i.value=!0;try{await a()}catch(m){S.error("加载失败: "+(m?.message||String(m)))}finally{i.value=!1}}async function y(m,r){if(e){l.value=!0;try{await o({[m]:r}),g.value=new Date().toLocaleTimeString(),S.success("已保存")}catch(C){S.error("保存失败: "+(C?.message||String(C))),await a().catch(()=>{})}finally{l.value=!1}}}N(v);const w={settings:_,isEmbedded:e,load:a,update:o,loading:i,saving:l,lastSaved:g,reload:v,onToggle:y,ref:b,onMounted:N,get message(){return S},get ReloadOutlined(){return L},get useNotificationSettings(){return T}};return Object.defineProperty(w,"__isScriptSetup",{enumerable:!1,value:!0}),w}},I={class:"footer-row"},M={key:0,class:"last-saved"};function P(s,t,_,e,a,o){const i=f("a-alert"),l=f("a-switch"),g=f("a-form-item"),v=f("a-form"),y=f("a-divider"),w=f("a-button"),m=f("a-card");return k(),h("div",null,[t[9]||(t[9]=d("div",{class:"page-head"},[d("div",null,[d("h2",{class:"page-title"},"通知设置"),d("p",{class:"page-sub"},"控制应用通知行为 · 与桌面 V5/V6 设置同源")])],-1)),e.isEmbedded?E("v-if",!0):(k(),R(i,{key:0,type:"info","show-icon":"",style:{"margin-bottom":"16px"},message:"浏览器模式只读",description:"纯浏览器没有 Electron AppConfig 后端,本页只能展示默认值。请使用桌面壳 (cc desktop) 写入。"})),n(m,{style:{background:"var(--bg-card)","border-color":"var(--border-color)"}},{default:c(()=>[n(v,{layout:"horizontal","label-col":{span:6},"wrapper-col":{span:18}},{default:c(()=>[n(g,{label:"启用通知"},{default:c(()=>[n(l,{checked:e.settings.enabled,disabled:!e.isEmbedded||e.saving,onChange:t[0]||(t[0]=r=>e.onToggle("enabled",r))},null,8,["checked","disabled"]),t[4]||(t[4]=d("span",{class:"hint"},"关闭后所有通知静默",-1))]),_:1}),e.settings.enabled?(k(),h(V,{key:0},[n(g,{label:"通知声音"},{default:c(()=>[n(l,{checked:e.settings.sound,disabled:!e.isEmbedded||e.saving,onChange:t[1]||(t[1]=r=>e.onToggle("sound",r))},null,8,["checked","disabled"]),t[5]||(t[5]=d("span",{class:"hint"},"桌面通知伴随系统提示音",-1))]),_:1}),n(g,{label:"角标提示"},{default:c(()=>[n(l,{checked:e.settings.badge,disabled:!e.isEmbedded||e.saving,onChange:t[2]||(t[2]=r=>e.onToggle("badge",r))},null,8,["checked","disabled"]),t[6]||(t[6]=d("span",{class:"hint"},"在应用图标 / 任务栏角标显示未读数",-1))]),_:1}),n(g,{label:"桌面通知"},{default:c(()=>[n(l,{checked:e.settings.desktop,disabled:!e.isEmbedded||e.saving,onChange:t[3]||(t[3]=r=>e.onToggle("desktop",r))},null,8,["checked","disabled"]),t[7]||(t[7]=d("span",{class:"hint"},"系统级 toast (Windows / macOS / Linux 原生通知)",-1))]),_:1})],64)):E("v-if",!0)]),_:1}),n(y),d("div",I,[n(w,{loading:e.loading,onClick:e.reload},{icon:c(()=>[n(e.ReloadOutlined)]),default:c(()=>[t[8]||(t[8]=O(" 重新加载 ",-1))]),_:1},8,["loading"]),e.lastSaved?(k(),h("span",M,"最近保存: "+B(e.lastSaved),1)):E("v-if",!0)])]),_:1})])}const z=D(A,[["render",P],["__scopeId","data-v-ae0392e9"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/views/NotificationSettings.vue"]]);export{z as default};
@@ -0,0 +1 @@
1
+ import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-BvqAck49.js";import{_ as S}from"./index-DH7suqAN.js";import"./icons-DP3uiYxy.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},R={class:"val"},j={class:"row"},B={class:"val"},D={class:"row amount-row"},I={class:"val amount"},A={key:0,class:"row"},F={class:"val mono"},M={key:1,class:"row"};function P(p,r,o,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",R,n(e.merchantText),1)]),s("div",j,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",B,n(e.itemText),1)]),s("div",D,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",I,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",F,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",M,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const G=S(k,[["render",P],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-GijCQY/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{G as default};