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.
- package/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-BHcJlF4M.js → AIOps-BXQ92dvI.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-QNqNYP_E.js → ActionButton-DjmolmAS.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DWrmU2MM.js → Analytics-LUUOS78B.js} +1 -1
- package/src/assets/web-panel/assets/{AppLayout-0BXhjvFX.js → AppLayout-DeAq-Waa.js} +2 -2
- package/src/assets/web-panel/assets/{Audit-Cns_OJ3y.js → Audit-De_86BpN.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BWXKm8S2.js → Backup-CAqIbrb5.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-DMtM90I4.js → BaseInput-CwTVDavS.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CPSQIJkd.js → Chat-BnihAKiI.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-CdoTzEcu.js → Checkbox-BDrCuC9m.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-DiMm-2CJ.js → Codegen-DWqN0jpL.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Dw8uRsh8.js → Col-B7rIr4g3.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DF6oPrrt.js → Community-YYEO8SY3.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DDeBOvFc.js → Compact-DZHWn-_j.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-cpcX8foc.js → Compliance-CCYzk_rt.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BnF4dCvO.js → Cowork-D9G6khOx.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-CNm5yzGt.js → Cron-IbwddEeZ.js} +1 -1
- package/src/assets/web-panel/assets/{Crosschain-1fdaoWnO.js → Crosschain-Bct133LN.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CgWgrQjr.js → DID-32J0mXoS.js} +1 -1
- package/src/assets/web-panel/assets/{Dashboard-dGcTq_hg.js → Dashboard-TaPAK2WV.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CMcWp2f1.js → Dropdown-Df4hUeIm.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-BVmtVOzD.js → Federation-C0xfKoZr.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-BTuMR6zf.js → FormItemContext-CoacTa1H.js} +1 -1
- package/src/assets/web-panel/assets/{Git-2itzzOWU.js → Git-DZZF1lrY.js} +1 -1
- package/src/assets/web-panel/assets/{Governance-BD5nFtjx.js → Governance-Bo-P_BP3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BqTjotuw.js → Inference-agx6qPl9.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-CkJCUp_X.js → KnowledgeGraph-Dc8YZGiO.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BezIQuu3.js → Logs-njAOFc0W.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-BQi8NC94.js → Marketplace-Yu-RUTN2.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-UDm4tI8g.js → McpTools-BuzdmOwR.js} +1 -1
- package/src/assets/web-panel/assets/{Memory-b3k3SJXP.js → Memory-DJyWxXM0.js} +1 -1
- package/src/assets/web-panel/assets/{MobileBridge-CHysUGzj.js → MobileBridge-CIKfLcfn.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-H5DjqNIw.js → MobileProjects-B1OZ0_b1.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-B-kn2cbZ.js → Mtc-CJHI9qG0.js} +1 -1
- package/src/assets/web-panel/assets/{MtcAudit-BSeDGJAO.js → MtcAudit-cSrqcG3H.js} +1 -1
- package/src/assets/web-panel/assets/{Multisig-BSwWbNCn.js → Multisig-DTVo9GFR.js} +1 -1
- package/src/assets/web-panel/assets/{NLProgramming-B7fTKT9-.js → NLProgramming-NqfB2jLI.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CE7Dxyik.js → Notes-MuMFfs67.js} +1 -1
- package/src/assets/web-panel/assets/{NotificationSettings-BrWPb12X.js → NotificationSettings-B5ECNQNW.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BvMcmpZ-.js → Organization-Dn98sbrZ.js} +1 -1
- package/src/assets/web-panel/assets/{Overflow-9VpUiyX3.js → Overflow-Sl5FJV2c.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CZiZLuH6.js → P2P-58-TvQSE.js} +1 -1
- package/src/assets/web-panel/assets/{Permissions-7xPYU8o3.js → Permissions-BFtHCNck.js} +1 -1
- package/src/assets/web-panel/assets/PersonalDataHub-CVH9NAfL.css +1 -0
- package/src/assets/web-panel/assets/PersonalDataHub-Cu--XeWZ.js +1 -0
- package/src/assets/web-panel/assets/{Pipeline-BXmWkBtJ.js → Pipeline-DWt_M98L.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-Bowi-wqF.js → Privacy-BUX3yRZc.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BW1Xj7_l.js → ProjectInit-wYWMWfxy.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectSettings-pDbBvJFG.js → ProjectSettings-CIRbqu0F.js} +1 -1
- package/src/assets/web-panel/assets/{Projects-D32hRs2K.js → Projects-CDFkiEL3.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-fvnKRdFc.js → Providers-CnPu1q45.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-DBZrimTb.js → QuickAsk-mwOI7Tc-.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-B_leuPdE.js → Recommend-Ct6SM2HV.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-9YJu2Q0s.js → Reputation-D7D6rp3d.js} +1 -1
- package/src/assets/web-panel/assets/{Row-BwDaJw-R.js → Row-CX03nw4D.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CCwGtGbs.js → RssFeed-BRyNIOp0.js} +1 -1
- package/src/assets/web-panel/assets/{Search-CLdXqpfz.js → Search-Dh-jwNaq.js} +1 -1
- package/src/assets/web-panel/assets/{Security-_It0GsWS.js → Security-C53OqK_S.js} +1 -1
- package/src/assets/web-panel/assets/{Services-jBxBWGGT.js → Services-nXK7991F.js} +1 -1
- package/src/assets/web-panel/assets/{Skeleton-DR_EuFFW.js → Skeleton-mVGGUSnx.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DsHcMNEk.js → Skills-AVICQyr7.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Be0UaX-h.js → Sla-BO-jiswJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-uUhDyyHj.js → SpeechSettings-CQ73BtGw.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-CUAwaSnj.js → SyncSettings-ozTu_ihm.js} +1 -1
- package/src/assets/web-panel/assets/{Tasks-CUVZww9Q.js → Tasks-CwTiFnau.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-WLZcNzJ_.js → Templates-PJ-SYUEg.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-FgN0uYm6.js → Tenant-DeckYbHe.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BzLHjHyj.js → Terminal-CIn4gdxj.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-z7lyRr40.js → Tokens-Bc40cdFh.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-HxLdC9ne.js → Trigger-BERtmWcc.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DggmMxpI.js → Trust-_ktoDZt-.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BO-pKTZ_.js → UkeySign-DecT3_Zy.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DdLdJ9Ps.js → VideoEditing-AqPQa7a7.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-F8EfdQDN.js → Wallet-CL303fn9.js} +1 -1
- package/src/assets/web-panel/assets/{WebAuthn-Bi2Kf8Ev.js → WebAuthn-Bwy0YO-u.js} +1 -1
- package/src/assets/web-panel/assets/{WorkflowEditor-DUHk4Y0A.js → WorkflowEditor-Bbewn3S4.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BMz8ik6R.js → chat-CDIxA8Km.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DTTx1bVY.js → colors-rQIxLS12.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BjZyyKpa.js → compact-item-1jZiKenx.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D0Ztn7R_.js → createContext-B3FjOuaT.js} +1 -1
- package/src/assets/web-panel/assets/{hasIn-BeXm1bJ2.js → hasIn-dZ195iTN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTzwBmBS.js → index--NxZmEUk.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_juAGfN.js → index-19d37fVJ.js} +3 -3
- package/src/assets/web-panel/assets/{index-BDRzvi5v.js → index-AHCOz9NC.js} +1 -1
- package/src/assets/web-panel/assets/{index-aBdRRXWO.js → index-BByVZ5fI.js} +1 -1
- package/src/assets/web-panel/assets/{index-OjH2wDtW.js → index-BC6wcYy3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DMvkBq2d.js → index-BDZd1181.js} +1 -1
- package/src/assets/web-panel/assets/{index-DB1i3Cfr.js → index-BOiuM69x.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-niPBwZ.js → index-Bq8fsYQ6.js} +1 -1
- package/src/assets/web-panel/assets/{index-xN0WCVmC.js → index-Br6-EXdw.js} +1 -1
- package/src/assets/web-panel/assets/{index-DIoinlAY.js → index-BsUXzEb2.js} +1 -1
- package/src/assets/web-panel/assets/{index-CobyvwP0.js → index-BwIwGE8Y.js} +1 -1
- package/src/assets/web-panel/assets/{index-BiAjZ9Iq.js → index-Bx15E0JQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-tUIluCPu.js → index-BxnEM3za.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLJnAsec.js → index-C0YzTiiB.js} +1 -1
- package/src/assets/web-panel/assets/{index-BUFpZk0I.js → index-C3SVypM3.js} +1 -1
- package/src/assets/web-panel/assets/{index-BODKOjRZ.js → index-C3rYUvdl.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWRsbH6v.js → index-C4jmdcCs.js} +1 -1
- package/src/assets/web-panel/assets/index-C5Ifo5EH.js +1 -0
- package/src/assets/web-panel/assets/{index-DRNxWV3i.js → index-C8IGQbfQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CuDNPqlD.js → index-CDL_WWYl.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1coHqyT.js → index-CDkCJPtr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DLDHcuz4.js → index-D0DtKH7N.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dx7XPVkb.js → index-D3QDmYBa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BDmMBKM_.js → index-DP5rV4eS.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqkwXe3s.js → index-DQXt91YA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHuIMHcS.js → index-DRIQpe4j.js} +1 -1
- package/src/assets/web-panel/assets/{index-By4zsU8r.js → index-DWJ5GzxU.js} +1 -1
- package/src/assets/web-panel/assets/{index-nwkYgoRS.js → index-Dvg5ymRK.js} +1 -1
- package/src/assets/web-panel/assets/{index-NppMuZBM.js → index-DxwYB7eB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da_XUjv2.js → index-U5Y4YNZC.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfxUN2LB.js → index-XDvSQBl5.js} +1 -1
- package/src/assets/web-panel/assets/{index-D1CV-6q1.js → index-aaHXeryL.js} +1 -1
- package/src/assets/web-panel/assets/index-efjrWv6y.js +1 -0
- package/src/assets/web-panel/assets/{index-C6Isxhje.js → index-hNSGbn-4.js} +1 -1
- package/src/assets/web-panel/assets/{index-BxIq_rps.js → index-kg4NgBuP.js} +1 -1
- package/src/assets/web-panel/assets/{index-CGudWWwE.js → index-lSnZsO_d.js} +1 -1
- package/src/assets/web-panel/assets/{index-JTN4jzka.js → index-sygYO1j4.js} +1 -1
- package/src/assets/web-panel/assets/{index-DXSXIknb.js → index-uL0KmFyf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnATlZR7.js → index-xKOyC0Cx.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-DE_gVS_i.js → initDefaultProps-GbvcoqYL.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BiRUGscQ.js → motion-VM5YQ6Mf.js} +1 -1
- package/src/assets/web-panel/assets/{move-DMEzVMJZ.js → move-CJvGLYlg.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DBh74Ui4.js → omit-3oHJWwWB.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-D6PQbWuo.js → pickAttrs-BWBtl13u.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BYkdt9jF.js → placementArrow-CVESPqrs.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-C2ES6P0V.js → responsiveObserve-BOvUPufq.js} +1 -1
- package/src/assets/web-panel/assets/{slide-zGdjevxe.js → slide-W_P685Dw.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Cf6eRpR7.js → statusUtils-BnIQmxwT.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DZZx_bHs.js → styleChecker-BMXx5Ie5.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-B6q6zt9X.js → useFlexGapSupport-DSJ4Pl17.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-DjaBUk_P.js → useFs-BPbHm7Yn.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-CDF4X084.js → vnode-HDTJKu2B.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-C9FCvBpV.js → zoom-BqKDJys9.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/gateways/ws/message-dispatcher.js +35 -1
- package/src/gateways/ws/personal-data-hub-protocol.js +134 -3
- package/src/lib/personal-data-hub-wiring.js +115 -0
- package/src/assets/web-panel/assets/PersonalDataHub-BoAsj3rP.js +0 -1
- package/src/assets/web-panel/assets/PersonalDataHub-C5HcGC5x.css +0 -1
- package/src/assets/web-panel/assets/index-DJOgV0SI.js +0 -1
- package/src/assets/web-panel/assets/index-FpewH8xy.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{i as e}from"./index-
|
|
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-
|
|
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};
|
package/src/assets/web-panel/assets/{useFlexGapSupport-B6q6zt9X.js → useFlexGapSupport-DSJ4Pl17.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{d as o}from"./styleChecker-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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 {
|
|
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};
|