chainlesschain 0.162.3 → 0.162.7

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 (143) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-BHcJlF4M.js → AIOps-BXQ92dvI.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-QNqNYP_E.js → ActionButton-DjmolmAS.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-DWrmU2MM.js → Analytics-LUUOS78B.js} +1 -1
  6. package/src/assets/web-panel/assets/{AppLayout-0BXhjvFX.js → AppLayout-DeAq-Waa.js} +2 -2
  7. package/src/assets/web-panel/assets/{Audit-Cns_OJ3y.js → Audit-De_86BpN.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-BWXKm8S2.js → Backup-CAqIbrb5.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-DMtM90I4.js → BaseInput-CwTVDavS.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-CPSQIJkd.js → Chat-BnihAKiI.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-CdoTzEcu.js → Checkbox-BDrCuC9m.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-DiMm-2CJ.js → Codegen-DWqN0jpL.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-Dw8uRsh8.js → Col-B7rIr4g3.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-DF6oPrrt.js → Community-YYEO8SY3.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-DDeBOvFc.js → Compact-DZHWn-_j.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-cpcX8foc.js → Compliance-CCYzk_rt.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-BnF4dCvO.js → Cowork-D9G6khOx.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cron-CNm5yzGt.js → Cron-IbwddEeZ.js} +1 -1
  19. package/src/assets/web-panel/assets/{Crosschain-1fdaoWnO.js → Crosschain-Bct133LN.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-CgWgrQjr.js → DID-32J0mXoS.js} +1 -1
  21. package/src/assets/web-panel/assets/{Dashboard-dGcTq_hg.js → Dashboard-TaPAK2WV.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-CMcWp2f1.js → Dropdown-Df4hUeIm.js} +1 -1
  23. package/src/assets/web-panel/assets/{Federation-BVmtVOzD.js → Federation-C0xfKoZr.js} +1 -1
  24. package/src/assets/web-panel/assets/{FormItemContext-BTuMR6zf.js → FormItemContext-CoacTa1H.js} +1 -1
  25. package/src/assets/web-panel/assets/{Git-2itzzOWU.js → Git-DZZF1lrY.js} +1 -1
  26. package/src/assets/web-panel/assets/{Governance-BD5nFtjx.js → Governance-Bo-P_BP3.js} +1 -1
  27. package/src/assets/web-panel/assets/{Inference-BqTjotuw.js → Inference-agx6qPl9.js} +1 -1
  28. package/src/assets/web-panel/assets/{KnowledgeGraph-CkJCUp_X.js → KnowledgeGraph-Dc8YZGiO.js} +1 -1
  29. package/src/assets/web-panel/assets/{Logs-BezIQuu3.js → Logs-njAOFc0W.js} +1 -1
  30. package/src/assets/web-panel/assets/{Marketplace-BQi8NC94.js → Marketplace-Yu-RUTN2.js} +1 -1
  31. package/src/assets/web-panel/assets/{McpTools-UDm4tI8g.js → McpTools-BuzdmOwR.js} +1 -1
  32. package/src/assets/web-panel/assets/{Memory-b3k3SJXP.js → Memory-DJyWxXM0.js} +1 -1
  33. package/src/assets/web-panel/assets/{MobileBridge-CHysUGzj.js → MobileBridge-CIKfLcfn.js} +1 -1
  34. package/src/assets/web-panel/assets/{MobileProjects-H5DjqNIw.js → MobileProjects-B1OZ0_b1.js} +1 -1
  35. package/src/assets/web-panel/assets/{Mtc-B-kn2cbZ.js → Mtc-CJHI9qG0.js} +1 -1
  36. package/src/assets/web-panel/assets/{MtcAudit-BSeDGJAO.js → MtcAudit-cSrqcG3H.js} +1 -1
  37. package/src/assets/web-panel/assets/{Multisig-BSwWbNCn.js → Multisig-DTVo9GFR.js} +1 -1
  38. package/src/assets/web-panel/assets/{NLProgramming-B7fTKT9-.js → NLProgramming-NqfB2jLI.js} +1 -1
  39. package/src/assets/web-panel/assets/{Notes-CE7Dxyik.js → Notes-MuMFfs67.js} +1 -1
  40. package/src/assets/web-panel/assets/{NotificationSettings-BrWPb12X.js → NotificationSettings-B5ECNQNW.js} +1 -1
  41. package/src/assets/web-panel/assets/{Organization-BvMcmpZ-.js → Organization-Dn98sbrZ.js} +1 -1
  42. package/src/assets/web-panel/assets/{Overflow-9VpUiyX3.js → Overflow-Sl5FJV2c.js} +1 -1
  43. package/src/assets/web-panel/assets/{P2P-CZiZLuH6.js → P2P-58-TvQSE.js} +1 -1
  44. package/src/assets/web-panel/assets/{Permissions-7xPYU8o3.js → Permissions-BFtHCNck.js} +1 -1
  45. package/src/assets/web-panel/assets/PersonalDataHub-CVH9NAfL.css +1 -0
  46. package/src/assets/web-panel/assets/PersonalDataHub-Cu--XeWZ.js +1 -0
  47. package/src/assets/web-panel/assets/{Pipeline-BXmWkBtJ.js → Pipeline-DWt_M98L.js} +1 -1
  48. package/src/assets/web-panel/assets/{Privacy-Bowi-wqF.js → Privacy-BUX3yRZc.js} +1 -1
  49. package/src/assets/web-panel/assets/{ProjectInit-BW1Xj7_l.js → ProjectInit-wYWMWfxy.js} +1 -1
  50. package/src/assets/web-panel/assets/{ProjectSettings-pDbBvJFG.js → ProjectSettings-CIRbqu0F.js} +1 -1
  51. package/src/assets/web-panel/assets/{Projects-D32hRs2K.js → Projects-CDFkiEL3.js} +1 -1
  52. package/src/assets/web-panel/assets/{Providers-fvnKRdFc.js → Providers-CnPu1q45.js} +1 -1
  53. package/src/assets/web-panel/assets/{QuickAsk-DBZrimTb.js → QuickAsk-mwOI7Tc-.js} +1 -1
  54. package/src/assets/web-panel/assets/{Recommend-B_leuPdE.js → Recommend-Ct6SM2HV.js} +1 -1
  55. package/src/assets/web-panel/assets/{Reputation-9YJu2Q0s.js → Reputation-D7D6rp3d.js} +1 -1
  56. package/src/assets/web-panel/assets/{Row-BwDaJw-R.js → Row-CX03nw4D.js} +1 -1
  57. package/src/assets/web-panel/assets/{RssFeed-CCwGtGbs.js → RssFeed-BRyNIOp0.js} +1 -1
  58. package/src/assets/web-panel/assets/{Search-CLdXqpfz.js → Search-Dh-jwNaq.js} +1 -1
  59. package/src/assets/web-panel/assets/{Security-_It0GsWS.js → Security-C53OqK_S.js} +1 -1
  60. package/src/assets/web-panel/assets/{Services-jBxBWGGT.js → Services-nXK7991F.js} +1 -1
  61. package/src/assets/web-panel/assets/{Skeleton-DR_EuFFW.js → Skeleton-mVGGUSnx.js} +1 -1
  62. package/src/assets/web-panel/assets/{Skills-DsHcMNEk.js → Skills-AVICQyr7.js} +1 -1
  63. package/src/assets/web-panel/assets/{Sla-Be0UaX-h.js → Sla-BO-jiswJ.js} +1 -1
  64. package/src/assets/web-panel/assets/{SpeechSettings-uUhDyyHj.js → SpeechSettings-CQ73BtGw.js} +1 -1
  65. package/src/assets/web-panel/assets/{SyncSettings-CUAwaSnj.js → SyncSettings-ozTu_ihm.js} +1 -1
  66. package/src/assets/web-panel/assets/{Tasks-CUVZww9Q.js → Tasks-CwTiFnau.js} +1 -1
  67. package/src/assets/web-panel/assets/{Templates-WLZcNzJ_.js → Templates-PJ-SYUEg.js} +1 -1
  68. package/src/assets/web-panel/assets/{Tenant-FgN0uYm6.js → Tenant-DeckYbHe.js} +1 -1
  69. package/src/assets/web-panel/assets/{Terminal-BzLHjHyj.js → Terminal-CIn4gdxj.js} +1 -1
  70. package/src/assets/web-panel/assets/{Tokens-z7lyRr40.js → Tokens-Bc40cdFh.js} +1 -1
  71. package/src/assets/web-panel/assets/{Trigger-HxLdC9ne.js → Trigger-BERtmWcc.js} +1 -1
  72. package/src/assets/web-panel/assets/{Trust-DggmMxpI.js → Trust-_ktoDZt-.js} +1 -1
  73. package/src/assets/web-panel/assets/{UkeySign-BO-pKTZ_.js → UkeySign-DecT3_Zy.js} +1 -1
  74. package/src/assets/web-panel/assets/{VideoEditing-DdLdJ9Ps.js → VideoEditing-AqPQa7a7.js} +1 -1
  75. package/src/assets/web-panel/assets/{Wallet-F8EfdQDN.js → Wallet-CL303fn9.js} +1 -1
  76. package/src/assets/web-panel/assets/{WebAuthn-Bi2Kf8Ev.js → WebAuthn-Bwy0YO-u.js} +1 -1
  77. package/src/assets/web-panel/assets/{WorkflowEditor-DUHk4Y0A.js → WorkflowEditor-Bbewn3S4.js} +1 -1
  78. package/src/assets/web-panel/assets/{chat-BMz8ik6R.js → chat-CDIxA8Km.js} +1 -1
  79. package/src/assets/web-panel/assets/{colors-DTTx1bVY.js → colors-rQIxLS12.js} +1 -1
  80. package/src/assets/web-panel/assets/{compact-item-BjZyyKpa.js → compact-item-1jZiKenx.js} +1 -1
  81. package/src/assets/web-panel/assets/{createContext-D0Ztn7R_.js → createContext-B3FjOuaT.js} +1 -1
  82. package/src/assets/web-panel/assets/{hasIn-BeXm1bJ2.js → hasIn-dZ195iTN.js} +1 -1
  83. package/src/assets/web-panel/assets/{index-DTzwBmBS.js → index--NxZmEUk.js} +1 -1
  84. package/src/assets/web-panel/assets/{index-B_juAGfN.js → index-19d37fVJ.js} +3 -3
  85. package/src/assets/web-panel/assets/{index-BDRzvi5v.js → index-AHCOz9NC.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-aBdRRXWO.js → index-BByVZ5fI.js} +1 -1
  87. package/src/assets/web-panel/assets/{index-OjH2wDtW.js → index-BC6wcYy3.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-DMvkBq2d.js → index-BDZd1181.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-DB1i3Cfr.js → index-BOiuM69x.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-D-niPBwZ.js → index-Bq8fsYQ6.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-xN0WCVmC.js → index-Br6-EXdw.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-DIoinlAY.js → index-BsUXzEb2.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-CobyvwP0.js → index-BwIwGE8Y.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BiAjZ9Iq.js → index-Bx15E0JQ.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-tUIluCPu.js → index-BxnEM3za.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DLJnAsec.js → index-C0YzTiiB.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BUFpZk0I.js → index-C3SVypM3.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BODKOjRZ.js → index-C3rYUvdl.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BWRsbH6v.js → index-C4jmdcCs.js} +1 -1
  100. package/src/assets/web-panel/assets/index-C5Ifo5EH.js +1 -0
  101. package/src/assets/web-panel/assets/{index-DRNxWV3i.js → index-C8IGQbfQ.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-CuDNPqlD.js → index-CDL_WWYl.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-D1coHqyT.js → index-CDkCJPtr.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-DLDHcuz4.js → index-D0DtKH7N.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Dx7XPVkb.js → index-D3QDmYBa.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BDmMBKM_.js → index-DP5rV4eS.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-CqkwXe3s.js → index-DQXt91YA.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BHuIMHcS.js → index-DRIQpe4j.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-By4zsU8r.js → index-DWJ5GzxU.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-nwkYgoRS.js → index-Dvg5ymRK.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-NppMuZBM.js → index-DxwYB7eB.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-Da_XUjv2.js → index-U5Y4YNZC.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-DfxUN2LB.js → index-XDvSQBl5.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-D1CV-6q1.js → index-aaHXeryL.js} +1 -1
  115. package/src/assets/web-panel/assets/index-efjrWv6y.js +1 -0
  116. package/src/assets/web-panel/assets/{index-C6Isxhje.js → index-hNSGbn-4.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BxIq_rps.js → index-kg4NgBuP.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CGudWWwE.js → index-lSnZsO_d.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-JTN4jzka.js → index-sygYO1j4.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DXSXIknb.js → index-uL0KmFyf.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DnATlZR7.js → index-xKOyC0Cx.js} +1 -1
  122. package/src/assets/web-panel/assets/{initDefaultProps-DE_gVS_i.js → initDefaultProps-GbvcoqYL.js} +1 -1
  123. package/src/assets/web-panel/assets/{motion-BiRUGscQ.js → motion-VM5YQ6Mf.js} +1 -1
  124. package/src/assets/web-panel/assets/{move-DMEzVMJZ.js → move-CJvGLYlg.js} +1 -1
  125. package/src/assets/web-panel/assets/{omit-DBh74Ui4.js → omit-3oHJWwWB.js} +1 -1
  126. package/src/assets/web-panel/assets/{pickAttrs-D6PQbWuo.js → pickAttrs-BWBtl13u.js} +1 -1
  127. package/src/assets/web-panel/assets/{placementArrow-BYkdt9jF.js → placementArrow-CVESPqrs.js} +1 -1
  128. package/src/assets/web-panel/assets/{responsiveObserve-C2ES6P0V.js → responsiveObserve-BOvUPufq.js} +1 -1
  129. package/src/assets/web-panel/assets/{slide-zGdjevxe.js → slide-W_P685Dw.js} +1 -1
  130. package/src/assets/web-panel/assets/{statusUtils-Cf6eRpR7.js → statusUtils-BnIQmxwT.js} +1 -1
  131. package/src/assets/web-panel/assets/{styleChecker-DZZx_bHs.js → styleChecker-BMXx5Ie5.js} +1 -1
  132. package/src/assets/web-panel/assets/{useFlexGapSupport-B6q6zt9X.js → useFlexGapSupport-DSJ4Pl17.js} +1 -1
  133. package/src/assets/web-panel/assets/{useFs-DjaBUk_P.js → useFs-BPbHm7Yn.js} +1 -1
  134. package/src/assets/web-panel/assets/{vnode-CDF4X084.js → vnode-HDTJKu2B.js} +1 -1
  135. package/src/assets/web-panel/assets/{zoom-C9FCvBpV.js → zoom-BqKDJys9.js} +1 -1
  136. package/src/assets/web-panel/index.html +1 -1
  137. package/src/gateways/ws/message-dispatcher.js +35 -1
  138. package/src/gateways/ws/personal-data-hub-protocol.js +134 -3
  139. package/src/lib/personal-data-hub-wiring.js +115 -0
  140. package/src/assets/web-panel/assets/PersonalDataHub-BoAsj3rP.js +0 -1
  141. package/src/assets/web-panel/assets/PersonalDataHub-C5HcGC5x.css +0 -1
  142. package/src/assets/web-panel/assets/index-DJOgV0SI.js +0 -1
  143. package/src/assets/web-panel/assets/index-FpewH8xy.js +0 -1
@@ -1 +1 @@
1
- import{i as e}from"./index-B_juAGfN.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
1
+ import{i as e}from"./index-19d37fVJ.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
@@ -1 +1 @@
1
- import{A as d}from"./index-B_juAGfN.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
1
+ import{A as d}from"./index-19d37fVJ.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
@@ -1 +1 @@
1
- import{d as o}from"./styleChecker-DZZx_bHs.js";import{o as t,s}from"./vendor-M5lGV-wr.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};
1
+ import{d as o}from"./styleChecker-BMXx5Ie5.js";import{o as t,s}from"./vendor-M5lGV-wr.js";const r=(()=>{const e=s(!1);return t(()=>{e.value=o()}),e});export{r as u};
@@ -1 +1 @@
1
- import{u as d}from"./index-B_juAGfN.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
1
+ import{u as d}from"./index-19d37fVJ.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
@@ -1 +1 @@
1
- import{M as i,h as a,w as l}from"./index-B_juAGfN.js";import{a5 as o,k as d,C as g,F as f,A as p}from"./vendor-M5lGV-wr.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>d(r)?!(r.type===g||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
1
+ import{M as i,h as a,w as l}from"./index-19d37fVJ.js";import{a5 as o,k as d,C as g,F as f,A as p}from"./vendor-M5lGV-wr.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>d(r)?!(r.type===g||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-B_juAGfN.js";import{i as f}from"./motion-BiRUGscQ.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./index-19d37fVJ.js";import{i as f}from"./motion-VM5YQ6Mf.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-B_juAGfN.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-19d37fVJ.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-M5lGV-wr.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-BFHq5fEF.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-CfX1DEtk.css">
@@ -3,7 +3,10 @@ import {
3
3
  SESSION_CORE_STREAMING_HANDLERS,
4
4
  } from "./session-core-protocol.js";
5
5
  import { VIDEO_HANDLERS, VIDEO_STREAMING_HANDLERS } from "./video-protocol.js";
6
- import { PERSONAL_DATA_HUB_HANDLERS } from "./personal-data-hub-protocol.js";
6
+ import {
7
+ PERSONAL_DATA_HUB_HANDLERS,
8
+ PERSONAL_DATA_HUB_STREAMING_HANDLERS,
9
+ } from "./personal-data-hub-protocol.js";
7
10
 
8
11
  export function createWsMessageDispatcher(server) {
9
12
  return {
@@ -228,6 +231,37 @@ export function createWsMessageDispatcher(server) {
228
231
  };
229
232
  }
230
233
 
234
+ // Phase 5.7 — streaming sync routes. Adapter progress events are
235
+ // pushed as `<topic>.event` messages tagged with the request id;
236
+ // the final report comes as `<topic>.end`.
237
+ for (const streamType of Object.keys(
238
+ PERSONAL_DATA_HUB_STREAMING_HANDLERS,
239
+ )) {
240
+ routes[streamType] = async () => {
241
+ const sender = (payload) => server._send(ws, { id, ...payload });
242
+ try {
243
+ const out = await PERSONAL_DATA_HUB_STREAMING_HANDLERS[streamType](
244
+ message,
245
+ sender,
246
+ );
247
+ server._send(ws, {
248
+ id,
249
+ type: `${streamType}.end`,
250
+ ...(out && out.result !== undefined
251
+ ? { result: out.result }
252
+ : out || {}),
253
+ });
254
+ } catch (err) {
255
+ server._send(ws, {
256
+ id,
257
+ type: "error",
258
+ code: "PERSONAL_DATA_HUB_STREAM_ERROR",
259
+ message: err?.message || String(err),
260
+ });
261
+ }
262
+ };
263
+ }
264
+
231
265
  // Phase I — Hosted Session API (session-core, memory, beta, usage)
232
266
  for (const sessionCoreType of Object.keys(SESSION_CORE_HANDLERS)) {
233
267
  routes[sessionCoreType] = async () => {
@@ -122,12 +122,143 @@ export const PERSONAL_DATA_HUB_HANDLERS = {
122
122
 
123
123
  "personal-data-hub.event-detail": async (msg) =>
124
124
  withHub((hub) => hub.eventDetail(msg.eventId)),
125
+
126
+ // ─── Phase 6 — Alipay bill import ─────────────────────────────────────
127
+
128
+ "personal-data-hub.register-alipay": async (msg) =>
129
+ withHub(
130
+ async (hub) =>
131
+ await hub.registerAlipayAdapter({
132
+ account: msg.account,
133
+ opts: msg.opts || {},
134
+ }),
135
+ ),
136
+
137
+ "personal-data-hub.unregister-alipay": async (msg) =>
138
+ withHub(async (hub) => await hub.unregisterAlipayAdapter(msg.email)),
139
+
140
+ "personal-data-hub.list-alipay-accounts": async () =>
141
+ withHub((hub) => hub.listAlipayAccounts()),
142
+
143
+ "personal-data-hub.import-alipay-bill": async (msg) =>
144
+ withHub(
145
+ async (hub) =>
146
+ await hub.importAlipayBill({
147
+ zipPath: msg.zipPath,
148
+ csvPath: msg.csvPath,
149
+ zipPassword: msg.zipPassword,
150
+ }),
151
+ ),
152
+
153
+ // ─── Phase 8 — EntityResolver review / merge / unmerge ───────────────
154
+
155
+ "personal-data-hub.review-queue-list": async (msg) =>
156
+ withHub((hub) => hub.vault.listReviewQueue({ limit: msg.limit || 50 })),
157
+
158
+ "personal-data-hub.review-decision": async (msg) =>
159
+ withHub((hub) => {
160
+ if (!hub.entityResolver) throw new Error("EntityResolver not wired");
161
+ return hub.entityResolver.applyUserDecision({
162
+ reviewId: msg.reviewId,
163
+ decision: msg.decision,
164
+ });
165
+ }),
166
+
167
+ "personal-data-hub.manual-merge": async (msg) =>
168
+ withHub((hub) => {
169
+ if (!hub.entityResolver) throw new Error("EntityResolver not wired");
170
+ return hub.entityResolver.manualMerge({ aId: msg.aId, bId: msg.bId });
171
+ }),
172
+
173
+ "personal-data-hub.manual-unmerge": async (msg) =>
174
+ withHub((hub) => {
175
+ if (!hub.entityResolver) throw new Error("EntityResolver not wired");
176
+ return hub.entityResolver.manualUnmerge(msg.personId);
177
+ }),
178
+
179
+ "personal-data-hub.resolver-drain": async (msg) =>
180
+ withHub(async (hub) => {
181
+ if (!hub.entityResolver) throw new Error("EntityResolver not wired");
182
+ return await hub.entityResolver.drain({ limit: msg.limit || 50 });
183
+ }),
184
+
185
+ "personal-data-hub.resolver-stats": async () =>
186
+ withHub((hub) => ({
187
+ queue: hub.vault.resolveQueueStats(),
188
+ mergeGroups: hub.vault.stats().mergeGroups,
189
+ reviewQueue:
190
+ hub.vault.listReviewQueue({ limit: 1 }).length > 0
191
+ ? hub.vault.listReviewQueue({ limit: 1000 }).length
192
+ : 0,
193
+ })),
194
+
195
+ "personal-data-hub.merge-group-members": async (msg) =>
196
+ withHub((hub) => hub.vault.getMergeGroupMembers(msg.personId)),
197
+ };
198
+
199
+ /**
200
+ * Phase 5.7 — streaming handlers. Same call pattern as session-core
201
+ * streaming: handler receives `sender(payload)` to push intermediate
202
+ * `{ type: "personal-data-hub.<topic>.event", ... }` messages while
203
+ * sync is in flight, then the dispatcher wraps the final return with
204
+ * `.end`. Adapter progress phases (connecting / fetching / done / error)
205
+ * surface here; UI subscribes via the composable.
206
+ */
207
+ export const PERSONAL_DATA_HUB_STREAMING_HANDLERS = {
208
+ "personal-data-hub.sync-adapter-stream": async (msg, sender) => {
209
+ const hub = await getHub();
210
+ const original = hub.registry.onSyncEvent;
211
+ hub.registry.onSyncEvent = (evt) => {
212
+ try {
213
+ sender({
214
+ type: "personal-data-hub.sync-adapter-stream.event",
215
+ event: evt,
216
+ });
217
+ } catch (_e) {}
218
+ if (typeof original === "function") {
219
+ try {
220
+ original(evt);
221
+ } catch (_e) {}
222
+ }
223
+ };
224
+ try {
225
+ const report = await hub.registry.syncAdapter(
226
+ msg.name,
227
+ msg.options || {},
228
+ );
229
+ return { result: report };
230
+ } finally {
231
+ hub.registry.onSyncEvent = original;
232
+ }
233
+ },
234
+
235
+ "personal-data-hub.sync-all-stream": async (msg, sender) => {
236
+ const hub = await getHub();
237
+ const original = hub.registry.onSyncEvent;
238
+ hub.registry.onSyncEvent = (evt) => {
239
+ try {
240
+ sender({ type: "personal-data-hub.sync-all-stream.event", event: evt });
241
+ } catch (_e) {}
242
+ if (typeof original === "function") {
243
+ try {
244
+ original(evt);
245
+ } catch (_e) {}
246
+ }
247
+ };
248
+ try {
249
+ const reports = await hub.registry.syncAll(msg.options || {});
250
+ return { result: reports };
251
+ } finally {
252
+ hub.registry.onSyncEvent = original;
253
+ }
254
+ },
125
255
  };
126
256
 
127
257
  /**
128
258
  * Topic names this protocol owns — exported so the dispatcher can list /
129
259
  * advertise them to clients via a capabilities probe.
130
260
  */
131
- export const PERSONAL_DATA_HUB_TOPICS = Object.freeze(
132
- Object.keys(PERSONAL_DATA_HUB_HANDLERS),
133
- );
261
+ export const PERSONAL_DATA_HUB_TOPICS = Object.freeze([
262
+ ...Object.keys(PERSONAL_DATA_HUB_HANDLERS),
263
+ ...Object.keys(PERSONAL_DATA_HUB_STREAMING_HANDLERS),
264
+ ]);
@@ -41,6 +41,10 @@ const {
41
41
  FileKeyProvider,
42
42
  generateKeyHex,
43
43
  EmailAdapter,
44
+ AlipayBillAdapter,
45
+ EntityResolver,
46
+ EntityResolverEmbeddingStage,
47
+ EntityResolverLLMStage,
44
48
  } = hub;
45
49
  import { readFileSync, writeFileSync, existsSync } from "node:fs";
46
50
  import { getElectronUserDataDir } from "./paths.js";
@@ -125,10 +129,31 @@ async function initHub() {
125
129
  ragSink = new CcRagSink({ bm25: _bm25 });
126
130
  }
127
131
 
132
+ // Phase 8 — EntityResolver pipeline
133
+ const entityResolver = new EntityResolver({ vault });
134
+ try {
135
+ if (llm) {
136
+ const llmStage = new EntityResolverLLMStage({
137
+ llm,
138
+ acceptNonLocal: false,
139
+ });
140
+ entityResolver._llmStage = llmStage.asStageFn();
141
+ }
142
+ const embeddingStage = new EntityResolverEmbeddingStage({
143
+ ollamaUrl: process.env.CC_HUB_OLLAMA_URL || "http://localhost:11434",
144
+ model: process.env.CC_HUB_OLLAMA_EMBED_MODEL || "nomic-embed-text",
145
+ vault,
146
+ });
147
+ entityResolver._embeddingStage = embeddingStage.asStageFn();
148
+ } catch (_err) {
149
+ // Fall back to rule-only — registry still works
150
+ }
151
+
128
152
  const registry = new AdapterRegistry({
129
153
  vault,
130
154
  kgSink: kgSink ? kgSink.write.bind(kgSink) : null,
131
155
  ragSink: ragSink ? ragSink.write.bind(ragSink) : null,
156
+ entityResolver,
132
157
  });
133
158
 
134
159
  const engine = new AnalysisEngine({
@@ -169,6 +194,21 @@ async function initHub() {
169
194
  }
170
195
  }
171
196
 
197
+ // Phase 6: auto-register persisted Alipay accounts.
198
+ const alipayAccountsPath = join(hubDir, "alipay-accounts.json");
199
+ const alipayAccounts = loadAlipayAccounts(alipayAccountsPath);
200
+ for (const cfg of alipayAccounts) {
201
+ try {
202
+ const adapter = new AlipayBillAdapter({
203
+ account: cfg.account,
204
+ ...(cfg.opts || {}),
205
+ });
206
+ if (!registry.has(adapter.name)) registry.register(adapter);
207
+ } catch (_err) {
208
+ // Continue boot even if one config is corrupt
209
+ }
210
+ }
211
+
172
212
  return {
173
213
  vault,
174
214
  registry,
@@ -179,6 +219,8 @@ async function initHub() {
179
219
  hubDir,
180
220
  keyProvider,
181
221
  emailAccountsPath,
222
+ alipayAccountsPath,
223
+ entityResolver,
182
224
  bm25: _bm25,
183
225
  registerMockAdapter(opts = {}) {
184
226
  if (registry.has(opts.name || "mock"))
@@ -257,6 +299,59 @@ async function initHub() {
257
299
  : null,
258
300
  };
259
301
  },
302
+
303
+ // ─── Phase 6 — Alipay bill import ──────────────────────────────────
304
+
305
+ async registerAlipayAdapter({ account, opts = {} } = {}) {
306
+ if (!account || typeof account !== "object")
307
+ throw new Error("account required");
308
+ const adapter = new AlipayBillAdapter({ account, ...opts });
309
+ if (registry.has(adapter.name)) registry.unregister(adapter.name);
310
+ registry.register(adapter);
311
+ const accounts = loadAlipayAccounts(alipayAccountsPath);
312
+ const next = accounts.filter((c) => c.account.email !== account.email);
313
+ next.push({ account, opts, registeredAt: Date.now() });
314
+ saveAlipayAccounts(alipayAccountsPath, next);
315
+ return {
316
+ name: adapter.name,
317
+ version: adapter.version,
318
+ capabilities: adapter.capabilities,
319
+ sensitivity: adapter.dataDisclosure.sensitivity,
320
+ };
321
+ },
322
+
323
+ async unregisterAlipayAdapter(email) {
324
+ const accounts = loadAlipayAccounts(alipayAccountsPath);
325
+ const target = accounts.find((c) => c.account.email === email);
326
+ const next = accounts.filter((c) => c.account.email !== email);
327
+ saveAlipayAccounts(alipayAccountsPath, next);
328
+ if (target) registry.unregister("alipay-bill");
329
+ return { ok: true, removed: !!target };
330
+ },
331
+
332
+ listAlipayAccounts() {
333
+ return loadAlipayAccounts(alipayAccountsPath).map((c) => ({
334
+ email: c.account.email,
335
+ hasZipPassword: !!(
336
+ c.account.zipPassword ||
337
+ (c.opts && c.opts.zipPassword)
338
+ ),
339
+ registeredAt: c.registeredAt || null,
340
+ }));
341
+ },
342
+
343
+ async importAlipayBill({ zipPath, csvPath, zipPassword } = {}) {
344
+ const adapter = registry.get("alipay-bill");
345
+ if (!adapter)
346
+ throw new Error(
347
+ "No Alipay adapter registered — call registerAlipayAdapter first",
348
+ );
349
+ return await registry.syncAdapter("alipay-bill", {
350
+ zipPath,
351
+ csvPath,
352
+ zipPassword,
353
+ });
354
+ },
260
355
  };
261
356
  }
262
357
 
@@ -280,6 +375,26 @@ function saveEmailAccounts(filePath, accounts) {
280
375
  });
281
376
  }
282
377
 
378
+ // ─── Alipay account persistence (Phase 6) ───────────────────────────────
379
+
380
+ function loadAlipayAccounts(filePath) {
381
+ try {
382
+ if (!existsSync(filePath)) return [];
383
+ const raw = readFileSync(filePath, "utf-8");
384
+ const parsed = JSON.parse(raw);
385
+ return Array.isArray(parsed) ? parsed : [];
386
+ } catch (_err) {
387
+ return [];
388
+ }
389
+ }
390
+
391
+ function saveAlipayAccounts(filePath, accounts) {
392
+ writeFileSync(filePath, JSON.stringify(accounts, null, 2), {
393
+ encoding: "utf-8",
394
+ mode: 0o600,
395
+ });
396
+ }
397
+
283
398
  export async function getHub() {
284
399
  if (_hub) return _hub;
285
400
  if (!_initPromise) {
@@ -1 +0,0 @@
1
- import{o as Oe,M as f,R as k,c as a,N as t,K as p,r as h,a as ne,L as r,O as s,u as S,P as i,S as c,a0 as ze,a1 as qe,Q as _,F as O,Y as se,Z as He,f as Ie}from"./vendor-M5lGV-wr.js";import{u as Ue,_ as Fe,d as M}from"./index-B_juAGfN.js";import{R as Ne,O as Re,ak as Ve,h as Ge,aB as Qe,m as Te,e as Be}from"./icons-BFHq5fEF.js";function Ke(P){if(!P)return P;if(P.error)throw new Error(P.error);return P.result!==void 0?P.result:P}function je(){const P=Ue(),g=(u,v={},x=3e4)=>P.sendRaw({type:u,...v},x).then(Ke);return{async health(){return await g("personal-data-hub.health",{},8e3)},async stats(){return await g("personal-data-hub.stats",{},8e3)},async listAdapters(){return await g("personal-data-hub.list-adapters",{},5e3)},async syncAdapter(u,v={}){return await g("personal-data-hub.sync-adapter",{name:u,options:v},12e4)},async syncAll(u={}){return await g("personal-data-hub.sync-all",{options:u},6e5)},async registerMock({name:u="mock",count:v=20,seed:x=1}={}){return await g("personal-data-hub.register-mock",{name:u,count:v,seed:x})},async unregister(u){return await g("personal-data-hub.unregister",{name:u})},async ask(u,v={}){return await g("personal-data-hub.ask",{question:u,options:v},18e4)},async queryEvents(u={}){return await g("personal-data-hub.query-events",u,1e4)},async recentAudit(u={}){return await g("personal-data-hub.recent-audit",u,1e4)},async testEmailAuth(u){return await g("personal-data-hub.test-email-auth",{account:u},3e4)},async registerEmail(u,v={}){return await g("personal-data-hub.register-email",{account:u,opts:v},15e3)},async unregisterEmail(u){return await g("personal-data-hub.unregister-email",{email:u},5e3)},async listEmailAccounts(){return await g("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(u){return await g("personal-data-hub.event-detail",{eventId:u},5e3)}}}const Je={class:"pdh-page"},We={class:"pdh-header"},Ye={class:"kv"},Ze={key:0,class:"kv"},Xe={key:1,class:"kv"},et={class:"kv"},tt={key:0,class:"kv hint"},at={style:{"margin-top":"12px",display:"flex","justify-content":"space-between","align-items":"center"}},lt={key:0,style:{"margin-top":"12px"}},nt={key:1,style:{"margin-top":"12px"}},st={class:"answer"},ot={style:{"margin-top":"8px","font-size":"12px",color:"var(--text-color-secondary, #888)"}},it={key:2,style:{"margin-top":"8px"}},rt={key:2,style:{"margin-top":"12px"}},ut={key:2,style:{"margin-top":"8px"}},dt={key:1},pt={style:{"margin-left":"8px"}},ct={key:3,class:"json-pre"},vt={style:{"margin-left":"6px"}},mt={key:0,style:{"margin-left":"6px"}},ft={key:0,class:"hint",style:{"margin-top":"4px"}},yt={key:1,style:{"font-size":"11px"}},kt={__name:"PersonalDataHub",setup(P,{expose:g}){const u=je(),v=h(null),x=h(null),V=h([]),I=h(""),b=h(null),G=h(""),K=h(!1),j=h(!1),Z=h([]),D=h(null),U=h(!1),o=ne({provider:"qq",email:"",authCode:"",host:"",port:993,pdfPasswordHints:{idCardLast6:"",phoneLast6:"",cardLast6:""}}),C=h(null),J=h(!1),d=h(null),m=ne({refresh:!1,ask:!1,addMock:!1,syncAll:!1,sync:{},audit:!1,testEmail:!1,saveEmail:!1,eventDetail:!1}),oe=[{title:"名称",dataIndex:"name",key:"name",width:140},{title:"版本",dataIndex:"version",key:"version",width:80},{title:"能力",key:"capabilities"},{title:"敏感度",key:"sensitivity",width:140},{title:"操作",key:"actions",width:160,align:"right"}],ie=[{title:"时间",key:"at",dataIndex:"at",width:170},{title:"动作",dataIndex:"action",key:"action",width:200},{title:"详情",key:"details"}],re=[{title:"日期",key:"occurredAt",width:100},{title:"描述",dataIndex:"description",key:"description"},{title:"金额",key:"amount",width:140,align:"right"}];function ue(n){return n==="high"?"red":n==="medium"?"orange":"default"}function de(n){if(!n)return"";const e=n.entityCounts||{};return`events=${e.events??0} persons=${e.persons??0} | raw=${n.rawCount??0} invalid=${n.invalidCount??0} | KG triples=${n.kgTripleCount??0} RAG docs=${n.ragDocCount??0} | ${n.durationMs??0}ms`}async function $(){m.refresh=!0;try{v.value=await u.health(),x.value=await u.stats(),V.value=await u.listAdapters()}catch(n){M.error("刷新失败: "+n.message)}finally{m.refresh=!1}}async function X(){if(I.value.trim()){m.ask=!0,G.value="",b.value=null;try{b.value=await u.ask(I.value.trim(),{acceptNonLocal:K.value})}catch(n){G.value=n.message}finally{m.ask=!1}}}async function pe(){m.addMock=!0;try{await u.registerMock({count:30,seed:Date.now()%1e3}),await $(),M.success("MockAdapter 已注册(30 条 mock 数据 ready 同步)")}catch(n){M.error("注册失败: "+n.message)}finally{m.addMock=!1}}async function ce(n){m.sync[n]=!0;try{D.value=await u.syncAdapter(n),await $()}catch(e){M.error(`同步 ${n} 失败: ${e.message}`)}finally{m.sync[n]=!1}}async function ve(){m.syncAll=!0;try{const n=await u.syncAll();D.value=n?.[n.length-1]||null,await $(),M.success(`已同步 ${n?.length||0} 个 adapter`)}catch(n){M.error("同步失败: "+n.message)}finally{m.syncAll=!1}}async function me(n){try{await u.unregister(n),await $()}catch(e){M.error("移除失败: "+e.message)}}async function fe(n){if(n){m.audit=!0;try{Z.value=await u.recentAudit({limit:200})}catch(e){M.error("审计日志加载失败: "+e.message)}finally{m.audit=!1}}}const Q=Ie(()=>!(!o.email||!o.email.includes("@")||!o.authCode||o.authCode.length<4||o.provider==="custom"&&!o.host));function ye(n){return{qq:"QQ: 邮箱 → 设置 → 账户 → IMAP/SMTP → 开启 → 生成授权码",163:"163: 邮箱 → 设置 → POP3/SMTP/IMAP → 开启 IMAP/SMTP 服务 → 授权密码",189:"189: 设置 → 第三方客户端授权码",outlook:"Outlook: account.microsoft.com/security → App password",gmail:"Gmail: myaccount.google.com/apppasswords (需开启 2FA)",custom:"联系你的邮箱管理员获取 IMAP 端点 + app-password"}[n]||"请输入服务商授权码(不是登录密码)"}function ee(){o.provider="qq",o.email="",o.authCode="",o.host="",o.port=993,o.pdfPasswordHints={idCardLast6:"",phoneLast6:"",cardLast6:""},C.value=null}function te(){const n={provider:o.provider,email:o.email.trim(),authCode:o.authCode};return o.provider==="custom"&&(n.host=o.host.trim(),n.port=o.port||993,n.secure=!0),n}function ke(){const n={};for(const e of Object.keys(o.pdfPasswordHints)){const w=o.pdfPasswordHints[e];typeof w=="string"&&w.trim().length>0&&(n[e]=w.trim())}return Object.keys(n).length>0?n:null}async function ge(){if(Q.value){m.testEmail=!0,C.value=null;try{C.value=await u.testEmailAuth(te())}catch(n){C.value={ok:!1,error:n.message}}finally{m.testEmail=!1}}}async function _e(){if(!(!Q.value||!C.value?.ok)){m.saveEmail=!0;try{const n={},e=ke();e&&(n.pdfPasswordHints=e),await u.registerEmail(te(),n),M.success("邮箱账号已注册"),U.value=!1,ee(),await $()}catch(n){M.error("保存失败: "+n.message)}finally{m.saveEmail=!1}}}async function ae(n){if(n){m.eventDetail=!0,J.value=!0;try{d.value=await u.eventDetail(n)}catch(e){d.value=null,M.error("事件详情加载失败: "+e.message)}finally{m.eventDetail=!1}}}return g({showEventDetail:ae}),Oe($),(n,e)=>{const w=p("a-button"),L=p("a-space"),A=p("a-tag"),z=p("a-card"),T=p("a-col"),we=p("a-row"),he=p("a-textarea"),be=p("a-checkbox"),q=p("a-alert"),xe=p("a-popconfirm"),W=p("a-table"),le=p("a-empty"),H=p("a-select-option"),Ce=p("a-select"),E=p("a-form-item"),F=p("a-input"),Ae=p("a-tooltip"),Me=p("a-input-password"),Pe=p("a-input-number"),N=p("a-divider"),Le=p("a-form"),Y=p("a-drawer"),R=p("a-descriptions-item"),Ee=p("a-descriptions"),De=p("a-list-item-meta"),$e=p("a-list-item"),Se=p("a-list");return r(),f("div",Je,[k("div",We,[e[18]||(e[18]=k("div",null,[k("h2",{class:"page-title"},"个人数据中台"),k("p",{class:"page-sub"}," 让数据回归个人 — 各 app 数据本地加密落盘,本地 LLM 跨源分析,零云端外传。 ")],-1)),a(L,null,{default:t(()=>[a(w,{loading:m.refresh,onClick:$},{icon:t(()=>[a(S(Ne))]),default:t(()=>[e[16]||(e[16]=s(" 刷新 ",-1))]),_:1},8,["loading"]),a(w,{type:"primary",ghost:"",onClick:e[0]||(e[0]=l=>j.value=!0)},{icon:t(()=>[a(S(Re))]),default:t(()=>[e[17]||(e[17]=s(" 审计日志 ",-1))]),_:1})]),_:1})]),a(we,{gutter:16,style:{"margin-bottom":"16px"}},{default:t(()=>[a(T,{xs:24,sm:12,md:6},{default:t(()=>[a(z,{size:"small",title:"Vault"},{extra:t(()=>[a(A,{color:v.value?.vault?.ok?"green":"red"},{default:t(()=>[s(i(v.value?.vault?.ok?"正常":"未就绪"),1)]),_:1},8,["color"])]),default:t(()=>[k("div",Ye,"schema v"+i(v.value?.vault?.schemaVersion??"?"),1),x.value?.vault?(r(),f("div",Ze," 事件 "+i(x.value.vault.events)+" · 联系人 "+i(x.value.vault.persons),1)):c("",!0),x.value?.vault?(r(),f("div",Xe," 地点 "+i(x.value.vault.places)+" · 商品 "+i(x.value.vault.items)+" · 主题 "+i(x.value.vault.topics),1)):c("",!0)]),_:1})]),_:1}),a(T,{xs:24,sm:12,md:6},{default:t(()=>[a(z,{size:"small",title:"本地 LLM"},{extra:t(()=>[a(A,{color:v.value?.llm?.ok?v.value.llm.isLocal?"green":"orange":"red"},{default:t(()=>[s(i(v.value?.llm?.ok?v.value.llm.isLocal?"本地":"非本地":"未就绪"),1)]),_:1},8,["color"])]),default:t(()=>[k("div",et,i(v.value?.llm?.name||"—"),1),v.value?.llm?.ok&&!v.value.llm.isLocal?(r(),f("div",tt," ⚠️ 非本地 — ask 会被隐私 gate 拒绝,除非显式 acceptNonLocal ")):c("",!0)]),_:1})]),_:1}),a(T,{xs:24,sm:12,md:6},{default:t(()=>[a(z,{size:"small",title:"KG 索引"},{extra:t(()=>[a(A,{color:v.value?.kgSink?.ok?"green":"default"},{default:t(()=>[s(i(v.value?.kgSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:t(()=>[e[19]||(e[19]=k("div",{class:"kv"},"events / persons → cc knowledge-graph 实体 + 关系",-1))]),_:1})]),_:1}),a(T,{xs:24,sm:12,md:6},{default:t(()=>[a(z,{size:"small",title:"RAG 索引"},{extra:t(()=>[a(A,{color:v.value?.ragSink?.ok?"green":"default"},{default:t(()=>[s(i(v.value?.ragSink?.ok?"已连接":"不可用"),1)]),_:1},8,["color"])]),default:t(()=>[e[20]||(e[20]=k("div",{class:"kv"},"文本 → BM25(vector 留待后续 phase)",-1))]),_:1})]),_:1})]),_:1}),a(z,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(S(Ge)),e[21]||(e[21]=k("span",null,"问我数据",-1))]),_:1})]),default:t(()=>[a(he,{value:I.value,"onUpdate:value":e[1]||(e[1]=l=>I.value=l),rows:2,placeholder:"例:上个月在淘宝总共花了多少?/我妈生日那周买了啥送哪儿?",onKeydown:ze(qe(X,["exact","prevent"]),["enter"])},null,8,["value","onKeydown"]),k("div",at,[a(be,{checked:K.value,"onUpdate:checked":e[2]||(e[2]=l=>K.value=l)},{default:t(()=>[...e[22]||(e[22]=[s("允许非本地 LLM (volcengine / anthropic 等)",-1)])]),_:1},8,["checked"]),a(w,{type:"primary",loading:m.ask,disabled:!I.value.trim(),onClick:X},{icon:t(()=>[a(S(Ve))]),default:t(()=>[e[23]||(e[23]=s(" 提问 ",-1))]),_:1},8,["loading","disabled"])]),G.value?(r(),f("div",lt,[a(q,{type:"error","show-icon":"",message:G.value},null,8,["message"])])):c("",!0),b.value?(r(),f("div",nt,[b.value.warning==="no-facts"?(r(),_(q,{key:0,type:"warning","show-icon":"",message:"vault 里没找到匹配的事件('no-facts')—— 先同步几个 adapter 让数据进 vault",style:{"margin-bottom":"12px"}})):b.value.warning==="hallucinated-citations"?(r(),_(q,{key:1,type:"warning","show-icon":"",message:`LLM 引用了 ${b.value.hallucinatedCitations?.length||0} 个不存在的 event id —— 模型在编造`,style:{"margin-bottom":"12px"}},null,8,["message"])):c("",!0),k("div",st,i(b.value.answer),1),k("div",ot," 引用 "+i(b.value.citations?.length||0)+" 条事实 · "+i(b.value.facts?.length||0)+" facts 入 prompt · "+i(b.value.durationMs)+"ms · "+i(b.value.model),1),b.value.citations?.length?(r(),f("div",it,[e[24]||(e[24]=k("span",{style:{"font-size":"12px",color:"var(--text-color-secondary, #888)"}},"事件链接(点击查看明细 / PDF 解密结果):",-1)),a(L,{style:{"margin-top":"4px"},wrap:""},{default:t(()=>[(r(!0),f(O,null,se(b.value.citations,l=>(r(),_(A,{key:l,color:"blue",style:{cursor:"pointer"},onClick:y=>ae(l)},{default:t(()=>[s(i(l),1)]),_:2},1032,["onClick"]))),128))]),_:1})])):c("",!0)])):c("",!0)]),_:1}),a(z,{style:{"margin-bottom":"16px"}},{title:t(()=>[a(L,null,{default:t(()=>[a(S(Te)),e[25]||(e[25]=k("span",null,"Adapters",-1))]),_:1})]),extra:t(()=>[a(L,null,{default:t(()=>[a(w,{onClick:e[3]||(e[3]=l=>U.value=!0)},{icon:t(()=>[a(S(Qe))]),default:t(()=>[e[26]||(e[26]=s(" 添加邮箱账号 ",-1))]),_:1}),a(w,{onClick:pe,loading:m.addMock},{default:t(()=>[...e[27]||(e[27]=[s(" 注册 MockAdapter(开发) ",-1)])]),_:1},8,["loading"]),a(w,{type:"primary",onClick:ve,loading:m.syncAll,disabled:!V.value.length},{default:t(()=>[...e[28]||(e[28]=[s(" 同步全部 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[V.value.length?(r(),_(W,{key:0,columns:oe,"data-source":V.value,pagination:!1,"row-key":l=>l.name,size:"middle"},{bodyCell:t(({column:l,record:y})=>[l.key==="sensitivity"?(r(),f(O,{key:0},[a(A,{color:ue(y.sensitivity)},{default:t(()=>[s(i(y.sensitivity),1)]),_:2},1032,["color"]),y.legalGate?(r(),_(A,{key:0,color:"red",style:{"margin-left":"4px"}},{default:t(()=>[...e[29]||(e[29]=[s("需法律确认",-1)])]),_:1})):c("",!0)],64)):l.key==="capabilities"?(r(!0),f(O,{key:1},se(y.capabilities,B=>(r(),_(A,{key:B,style:{"margin-right":"4px"}},{default:t(()=>[s(i(B),1)]),_:2},1024))),128)):l.key==="actions"?(r(),_(L,{key:2},{default:t(()=>[a(w,{size:"small",loading:m.sync[y.name],onClick:B=>ce(y.name)},{default:t(()=>[...e[30]||(e[30]=[s(" 同步 ",-1)])]),_:1},8,["loading","onClick"]),a(xe,{title:`从注册表移除 ${y.name}?(vault 数据不会删除)`,onConfirm:B=>me(y.name)},{default:t(()=>[a(w,{size:"small",danger:""},{default:t(()=>[...e[31]||(e[31]=[s("移除",-1)])]),_:1})]),_:1},8,["title","onConfirm"])]),_:2},1024)):c("",!0)]),_:1},8,["data-source","row-key"])):(r(),_(le,{key:1,description:"无已注册 adapter — 点上方按钮注册 MockAdapter 看效果"})),D.value?(r(),f("div",rt,[a(q,{type:D.value.status==="ok"?"success":"error","show-icon":"",message:`同步 ${D.value.adapter}: ${D.value.status}`,description:de(D.value)},null,8,["type","message","description"])])):c("",!0)]),_:1}),a(Y,{open:U.value,"onUpdate:open":e[13]||(e[13]=l=>U.value=l),title:"添加邮箱账号",placement:"right",width:"560","destroy-on-close":!0,onClose:ee},{footer:t(()=>[a(L,null,{default:t(()=>[a(w,{onClick:e[12]||(e[12]=l=>U.value=!1)},{default:t(()=>[...e[41]||(e[41]=[s("取消",-1)])]),_:1}),a(w,{loading:m.testEmail,disabled:!Q.value,onClick:ge},{default:t(()=>[...e[42]||(e[42]=[s(" 测试连接 ",-1)])]),_:1},8,["loading","disabled"]),a(w,{type:"primary",loading:m.saveEmail,disabled:!Q.value||!C.value?.ok,onClick:_e},{default:t(()=>[...e[43]||(e[43]=[s(" 保存并注册 ",-1)])]),_:1},8,["loading","disabled"])]),_:1})]),default:t(()=>[a(q,{message:"数据回归个人 — 凭证落本地加密文件(与 vault 主密钥同目录),同步动作 100% 本地。",type:"info","show-icon":"",style:{"margin-bottom":"16px"}}),a(Le,{layout:"vertical",model:o},{default:t(()=>[a(E,{label:"邮箱服务商",required:""},{default:t(()=>[a(Ce,{value:o.provider,"onUpdate:value":e[4]||(e[4]=l=>o.provider=l),placeholder:"选择服务商"},{default:t(()=>[a(H,{value:"qq"},{default:t(()=>[...e[32]||(e[32]=[s("QQ 邮箱 (imap.qq.com)",-1)])]),_:1}),a(H,{value:"163"},{default:t(()=>[...e[33]||(e[33]=[s("网易邮箱 163/126",-1)])]),_:1}),a(H,{value:"189"},{default:t(()=>[...e[34]||(e[34]=[s("189 邮箱",-1)])]),_:1}),a(H,{value:"outlook"},{default:t(()=>[...e[35]||(e[35]=[s("Outlook / Hotmail",-1)])]),_:1}),a(H,{value:"gmail"},{default:t(()=>[...e[36]||(e[36]=[s("Gmail",-1)])]),_:1}),a(H,{value:"custom"},{default:t(()=>[...e[37]||(e[37]=[s("自定义 IMAP",-1)])]),_:1})]),_:1},8,["value"])]),_:1}),a(E,{label:"邮箱地址",required:""},{default:t(()=>[a(F,{value:o.email,"onUpdate:value":e[5]||(e[5]=l=>o.email=l),placeholder:"you@qq.com",autocomplete:"off"},null,8,["value"])]),_:1}),a(E,{required:""},{label:t(()=>[a(L,null,{default:t(()=>[e[38]||(e[38]=k("span",null,"授权码(非登录密码)",-1)),a(Ae,{title:ye(o.provider)},{default:t(()=>[a(S(Be),{style:{color:"#888"}})]),_:1},8,["title"])]),_:1})]),default:t(()=>[a(Me,{value:o.authCode,"onUpdate:value":e[6]||(e[6]=l=>o.authCode=l),placeholder:"例:QQ 邮箱 设置 → 账户 → 开启 IMAP/SMTP → 生成的授权码",autocomplete:"off"},null,8,["value"])]),_:1}),o.provider==="custom"?(r(),_(E,{key:0,label:"IMAP host"},{default:t(()=>[a(F,{value:o.host,"onUpdate:value":e[7]||(e[7]=l=>o.host=l),placeholder:"mail.example.com"},null,8,["value"])]),_:1})):c("",!0),o.provider==="custom"?(r(),_(E,{key:1,label:"端口"},{default:t(()=>[a(Pe,{value:o.port,"onUpdate:value":e[8]||(e[8]=l=>o.port=l),min:1,max:65535,"default-value":993},null,8,["value"])]),_:1})):c("",!0),a(N,{orientation:"left",plain:""},{default:t(()=>[...e[39]||(e[39]=[s("PDF 账单解密提示(可选)",-1)])]),_:1}),e[40]||(e[40]=k("p",{class:"hint"},"银行 PDF 月结大多加密;提供几个常用候选项让 Phase 5.5 自动解锁:",-1)),a(E,{label:"身份证后 6 位"},{default:t(()=>[a(F,{value:o.pdfPasswordHints.idCardLast6,"onUpdate:value":e[9]||(e[9]=l=>o.pdfPasswordHints.idCardLast6=l),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(E,{label:"手机后 6 位"},{default:t(()=>[a(F,{value:o.pdfPasswordHints.phoneLast6,"onUpdate:value":e[10]||(e[10]=l=>o.pdfPasswordHints.phoneLast6=l),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),a(E,{label:"信用卡尾 6 位"},{default:t(()=>[a(F,{value:o.pdfPasswordHints.cardLast6,"onUpdate:value":e[11]||(e[11]=l=>o.pdfPasswordHints.cardLast6=l),placeholder:"123456",autocomplete:"off"},null,8,["value"])]),_:1}),C.value?(r(),f("div",ut,[a(q,{type:C.value.ok?"success":"error","show-icon":"",message:C.value.ok?"凭证有效 — 可以保存":`认证失败: ${C.value.reason||C.value.error}`},null,8,["type","message"])])):c("",!0)]),_:1},8,["model"])]),_:1},8,["open"]),a(Y,{open:J.value,"onUpdate:open":e[14]||(e[14]=l=>J.value=l),title:d.value?`事件 ${d.value.event.id}`:"加载中...",placement:"right",width:"640","destroy-on-close":!0},{default:t(()=>[d.value?(r(),f(O,{key:0},[a(Ee,{column:1,size:"small",bordered:""},{default:t(()=>[a(R,{label:"类型"},{default:t(()=>[s(i(d.value.event.subtype),1)]),_:1}),a(R,{label:"发生于"},{default:t(()=>[s(i(new Date(d.value.event.occurredAt).toLocaleString()),1)]),_:1}),a(R,{label:"actor"},{default:t(()=>[s(i(d.value.event.actor),1)]),_:1}),d.value.event.content?.title?(r(),_(R,{key:0,label:"标题"},{default:t(()=>[s(i(d.value.event.content.title),1)]),_:1})):c("",!0),d.value.event.source?.adapter?(r(),_(R,{key:1,label:"来源 adapter"},{default:t(()=>[s(i(d.value.event.source.adapter)+" @ v"+i(d.value.event.source.adapterVersion),1)]),_:1})):c("",!0)]),_:1}),d.value.classification?(r(),_(N,{key:0,orientation:"left",plain:""},{default:t(()=>[...e[44]||(e[44]=[s("分类",-1)])]),_:1})):c("",!0),d.value.classification?(r(),f("div",dt,[a(A,{color:"blue"},{default:t(()=>[s(i(d.value.classification.category),1)]),_:1}),a(A,null,{default:t(()=>[s(i(d.value.classification.layer),1)]),_:1}),k("span",pt,"置信 "+i(Math.round((d.value.classification.confidence||0)*100))+"%",1)])):c("",!0),d.value.extraction?(r(),_(N,{key:2,orientation:"left",plain:""},{default:t(()=>[s("结构化字段("+i(d.value.extraction.template)+")",1)]),_:1})):c("",!0),d.value.extraction?(r(),f("pre",ct,i(JSON.stringify(d.value.extraction.fields,null,2)),1)):c("",!0),d.value.extraction?.pdfExtraction?(r(),_(N,{key:4,orientation:"left",plain:""},{default:t(()=>[...e[45]||(e[45]=[s("PDF 解密 / 解析",-1)])]),_:1})):c("",!0),d.value.extraction?.pdfExtraction?(r(),_(Se,{key:5,"data-source":d.value.extraction.pdfExtraction,size:"small"},{renderItem:t(({item:l})=>[a($e,null,{default:t(()=>[a(De,{title:l.filename},{description:t(()=>[k("div",null,[a(A,{color:l.decrypted?"green":"red"},{default:t(()=>[s(i(l.decrypted?"已解密":"解密失败"),1)]),_:2},1032,["color"]),k("span",vt,"尝试 "+i(l.attempted)+" 次",1),l.transactionsExtracted!=null?(r(),f("span",mt," · 提取 "+i(l.transactionsExtracted)+" 条交易 ",1)):c("",!0)]),l.error?(r(),f("div",ft,i(l.error),1)):c("",!0)]),_:2},1032,["title"])]),_:2},1024)]),_:1},8,["data-source"])):c("",!0),d.value.extraction?.fields?.transactions?.length?(r(),f(O,{key:6},[a(N,{orientation:"left",plain:""},{default:t(()=>[...e[46]||(e[46]=[s("交易明细",-1)])]),_:1}),a(W,{columns:re,"data-source":d.value.extraction.fields.transactions,pagination:{pageSize:10,size:"small"},"row-key":(l,y)=>y,size:"small"},{bodyCell:t(({column:l,record:y})=>[l.key==="occurredAt"?(r(),f(O,{key:0},[s(i(new Date(y.occurredAtMs).toLocaleDateString()),1)],64)):l.key==="amount"?(r(),f("span",{key:1,class:He(y.amount.direction==="in"?"amount-in":"amount-out")},i(y.amount.direction==="in"?"+":"-")+i(y.amount.value.toFixed(2))+" "+i(y.amount.currency),3)):c("",!0)]),_:1},8,["data-source","row-key"])],64)):c("",!0)],64)):(r(),_(le,{key:1,description:"无事件数据"}))]),_:1},8,["open","title"]),a(Y,{open:j.value,"onUpdate:open":e[15]||(e[15]=l=>j.value=l),title:"审计日志(数据 lineage)",placement:"right",width:"600",onAfterOpenChange:fe},{default:t(()=>[a(W,{columns:ie,"data-source":Z.value,pagination:{pageSize:20,size:"small"},"row-key":l=>l.id,size:"small"},{bodyCell:t(({column:l,record:y})=>[l.key==="at"?(r(),f(O,{key:0},[s(i(new Date(y.at).toLocaleString()),1)],64)):l.key==="details"?(r(),f("code",yt,i(y.details||"—"),1)):c("",!0)]),_:1},8,["data-source","row-key"])]),_:1},8,["open"])])}}},ht=Fe(kt,[["__scopeId","data-v-d9f9adeb"]]);export{ht as default};
@@ -1 +0,0 @@
1
- .pdh-page[data-v-d9f9adeb]{padding:16px;max-width:1400px;margin:0 auto}.pdh-header[data-v-d9f9adeb]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:24px;gap:16px;flex-wrap:wrap}.page-title[data-v-d9f9adeb]{margin:0 0 4px;font-size:22px;font-weight:600}.page-sub[data-v-d9f9adeb]{margin:0;color:var(--text-color-secondary, #888);font-size:13px}.kv[data-v-d9f9adeb]{font-size:13px;color:var(--text-color, #333);line-height:1.6}.kv.hint[data-v-d9f9adeb]{color:#faad14;font-size:12px;margin-top:4px}.answer[data-v-d9f9adeb]{white-space:pre-wrap;font-size:14px;line-height:1.7;background:var(--bg-elevated, #fafafa);padding:12px;border-radius:6px;border-left:3px solid #1677ff}.hint[data-v-d9f9adeb]{color:var(--text-color-secondary, #888);font-size:12px}.json-pre[data-v-d9f9adeb]{font-size:12px;background:var(--bg-elevated, #fafafa);padding:10px;border-radius:4px;max-height:280px;overflow:auto}.amount-in[data-v-d9f9adeb]{color:#52c41a;font-weight:600}.amount-out[data-v-d9f9adeb]{color:#ff4d4f;font-weight:600}
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-BwDaJw-R.js";import{S as t}from"./index-B_juAGfN.js";import"./responsiveObserve-C2ES6P0V.js";import"./vendor-M5lGV-wr.js";import"./useFlexGapSupport-B6q6zt9X.js";import"./styleChecker-DZZx_bHs.js";import"./index-By4zsU8r.js";import"./icons-BFHq5fEF.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-Dw8uRsh8.js";import{S as t}from"./index-B_juAGfN.js";import"./index-By4zsU8r.js";import"./vendor-M5lGV-wr.js";import"./icons-BFHq5fEF.js";const s=t(o);export{s as default};