chainlesschain 0.162.178 → 0.162.180
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 +2 -2
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-DRftcSue.js → AIOps-D_TIL54O.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BFvUaMKR.js → ActionButton-eQwy9r-f.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-C0-Rru4P.js → Analytics-D2eNuDgT.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-bx-BCljj.js → AppLayout-CFhwOFsf.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-DAJ8B3Un.js → Artifacts-CJUMw6PB.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-hOk4L1lr.js → Audit-CDB9V58o.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-3pbDpM9z.js → BackgroundAgents-TBppYFjN.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BtziGDn9.js → Backup-CYEOUpzJ.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-kmshphJ3.js → BaseInput-C88fFT2u.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-d7tGSosA.js → Chat-mkr1vC3N.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-p-_PBpX_.js → ChatBubbleRenderer-C7bofJuA.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-C4Eh4Tz5.js → Checkbox-CVU4xqti.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-r7gmhZyA.js → Codegen-rrNcByz3.js} +1 -1
- package/src/assets/web-panel/assets/{Col-U7mDaGlL.js → Col-Cqu-zCvh.js} +1 -1
- package/src/assets/web-panel/assets/{Community-Bpu8aH1T.js → Community-RGRlSgXV.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-CHb2XBJe.js → Compact-DBm6epOK.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Cn_r4dey.js → Compliance-BgKw5iaW.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-CdMWfDcz.js → Cowork-BqQcNO3Z.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-BtnREHWy.js → Cron-DO5gTFNb.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BKI9TSzr.js → Crosschain-B8hbJNuN.js} +1 -1
- package/src/assets/web-panel/assets/{DID-pkNubzzJ.js → DID-B08bFJ2C.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-1rrz1snN.js → Dashboard-xNdy_ifo.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DLyFVxDc.js → Dropdown-D-KIZgWL.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-CtUWfYVq.js → EmailListRenderer-DKCvsaGo.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-B8eX2Qe4.js → FamilyGuardDashboard-D_cfqama.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-D8lsDGus.js → Federation-B-UqQD68.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CRYt_aIw.js → FormItemContext-BWWvWuJW.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-ClKzY8_N.js → GenericCardRenderer-CPchx6N7.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BXj5Dney.js → Git-Vx4co9Ff.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Cm-I8RMz.js → Governance-D4x0pp_m.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CPvbhvgt.js → Inference-T3KvwPYR.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-sYNDZaoi.js → KnowledgeGraph-Ddv3KUv3.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BZY_3CRZ.js → Logs-DfH-Dkae.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-up0BW6pv.js → MarkdownRenderer-DHW3PbCq.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-C5MEJ2Qe.js → Marketplace-tjgb0R3D.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-ihdrn43I.js → McpTools-DHAk5nYX.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-Br8bPMlh.js → Memory-A2Yx7thM.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-BNntgrYW.js → MobileBridge-BEmTVfN5.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BdV915mw.js → MobileProjects-DuFHUgE4.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-A3wDmlqL.js → Mtc-BDSll0OZ.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-CF-mBLWM.js → MtcAudit-CuBvluaS.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-Iy2k_MSo.js → Multisig-BmXAA-Sb.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-kk0W7HUb.js → NLProgramming-ci2stZAe.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-B5u5t_4S.js → Notes-D-1RpqnS.js} +4 -4
- package/src/assets/web-panel/assets/{NotificationSettings-BN0POf6_.js → NotificationSettings-C0GyitIT.js} +1 -1
- package/src/assets/web-panel/assets/OrderTableRenderer-U2bN-hj5.js +1 -0
- package/src/assets/web-panel/assets/{Organization-DwWQESuN.js → Organization-BNZgpPci.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DG6klrcC.js → Overflow-CDidKmUN.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-BwJcKkgZ.js → P2P-BnreBaXq.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DwJUxO9j.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-CGMXe4TX.js → Permissions-BQGgJPH0.js} +4 -4
- package/src/assets/web-panel/assets/PersonalDataHub-k_fSkCwL.js +9 -0
- package/src/assets/web-panel/assets/{Pipeline-BzJfeoGt.js → Pipeline-WGqKMqau.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-DLh3Bblx.js → Privacy-DtHj9Ymq.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-USVWW36c.js → ProjectInit-B3wH2SFC.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CiiOn62h.js → ProjectSettings-Cd0cgcA1.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BbgmyQnS.js +1 -0
- package/src/assets/web-panel/assets/{Providers-CBPWWzpu.js → Providers-DTpxEXur.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-QVwoRUq3.js → QrScannerModal-B2v6gR-C.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-CXnR-2Vn.js → QuickAsk-D3Nr9xXR.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-ClaNzjmF.js → Recommend-C9inoMky.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C3rGw8vJ.js → RemoteSession-Bqk3EYSu.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-Ci-OWAoP.js → Reputation-41KFG646.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DRhAwXOS.js → Row-DqAaqqCv.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-BQLJQ2_y.js → RssFeed-CMDpCDKc.js} +3 -3
- package/src/assets/web-panel/assets/{Search-QQUpkfFd.js → Search-B6mtegNL.js} +1 -1
- package/src/assets/web-panel/assets/{Security-DdXKzuKT.js → Security-BaePFVZ8.js} +4 -4
- package/src/assets/web-panel/assets/{Services-x2Zh62Qd.js → Services-DeG3Qscl.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-GdY4KwRz.js → Skeleton-D_QP7F90.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-Bv4tY1Fd.js → Skills-DLGyUgIA.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-C3QnM-11.js → Sla-BN2pxW1Q.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-Bl3ytvmI.js → SpeechSettings-BWsZPd8B.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Wp9IwTsP.js → SyncSettings-VOZRPODW.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-3bDAUz8K.js +1 -0
- package/src/assets/web-panel/assets/{Templates-CGfvVVM9.js → Templates-eJSob-q0.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-CVXmwQ3U.js → Tenant-Bdwk8Rwy.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-bvwrt03E.js → Terminal-CsMLKIoV.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-D0g74KhH.js → TimelineRenderer-D5qkbPKT.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BH4IwzlT.js → Tokens-DKgwn8hI.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DJOpM533.js → Trigger-HlEHniGM.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-B43EPRLr.js → Trust-CdPcsBpN.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BmBFG-em.js → UkeySign-vAdXd-vG.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-n9oJwB8k.js → VideoEditing-9hHBYFnH.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-D5QeivHp.js → Wallet-Dxh5d1yR.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DcNy7igO.js → WebAuthn-BsFmLHkp.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-BVjc7-5-.js → WorkflowEditor-Cn0OIwLn.js} +1 -1
- package/src/assets/web-panel/assets/{chat-Dy5Tfj3m.js → chat-CJ19O6Dh.js} +1 -1
- package/src/assets/web-panel/assets/{colors-C4c2CNZU.js → colors-Du9jzLN0.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-DPa3O5vN.js → compact-item-DhEscfzw.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-TLcfNA6_.js → createContext-CwzEfF3i.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-BBMFnsja.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-D41LVFkp.js → hasIn-DT_GSE6J.js} +1 -1
- package/src/assets/web-panel/assets/{index-MKZDje0H.js → index-1LoutPJd.js} +1 -1
- package/src/assets/web-panel/assets/{index-DljFsVGI.js → index-53z1YUxX.js} +1 -1
- package/src/assets/web-panel/assets/{index-BsQ7Ev6i.js → index-B6QDWRLk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BQiIxHBy.js → index-B8s5FxJY.js} +1 -1
- package/src/assets/web-panel/assets/{index-CQrEHoOG.js → index-BF-ZCVGE.js} +1 -1
- package/src/assets/web-panel/assets/{index-0oevYjfT.js → index-BFD0cEna.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cip7LWml.js → index-BIYTjbv_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPTGAjee.js → index-BQWENaZf.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzZ49YZL.js → index-BgSR2WMG.js} +1 -1
- package/src/assets/web-panel/assets/{index-388pLGJ1.js → index-BnHhFnwt.js} +1 -1
- package/src/assets/web-panel/assets/{index-Di4X8cfI.js → index-BrkJ7JPm.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYPr9fkz.js → index-C4SN3by5.js} +1 -1
- package/src/assets/web-panel/assets/{index-BSM1cHVK.js → index-CAVW0cWM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX0VsoP4.js → index-CGvgnfl9.js} +1 -1
- package/src/assets/web-panel/assets/{index-DBUgRs4D.js → index-CQWxDOvM.js} +1 -1
- package/src/assets/web-panel/assets/{index-OHAfRu_3.js → index-Cc9aPkv-.js} +1 -1
- package/src/assets/web-panel/assets/{index-tQ3igERQ.js → index-Cnok8mhZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CVjgm992.js → index-CyEhUJcu.js} +1 -1
- package/src/assets/web-panel/assets/{index-Yjr6cqSK.js → index-D-QkW1fp.js} +1 -1
- package/src/assets/web-panel/assets/{index-iQ6gtFih.js → index-D3llLkYM.js} +1 -1
- package/src/assets/web-panel/assets/{index-DNsBj2Ob.js → index-D4kZoXNr.js} +1 -1
- package/src/assets/web-panel/assets/{index-BPtrOBmW.js → index-D5IytTND.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSxex23J.js → index-D8gt0j7r.js} +1 -1
- package/src/assets/web-panel/assets/{index-WinCp6du.js → index-DN60VBn5.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXl0YPNG.js → index-DWL3SYN3.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7xhTVyP.js → index-DfRDyY1q.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cq_hlWNt.js → index-DhXay17G.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8nLBZbv.js → index-DnVVYKCE.js} +3 -3
- package/src/assets/web-panel/assets/{index-CNk_ZooP.js → index-Dny_ZnAO.js} +1 -1
- package/src/assets/web-panel/assets/index-Do8JMV4N.js +1 -0
- package/src/assets/web-panel/assets/{index-BvmziZSG.js → index-DtRwLhee.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvopLC_T.js → index-DzjzrOli.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWK4zOPe.js → index-Mobw3PHs.js} +1 -1
- package/src/assets/web-panel/assets/{index-Btk9qLL2.js → index-NA2oBLSB.js} +1 -1
- package/src/assets/web-panel/assets/index-UYAJ6iNM.js +1 -0
- package/src/assets/web-panel/assets/{index-WEJr8PL5.js → index-VeHs6qH0.js} +1 -1
- package/src/assets/web-panel/assets/{index-Korc3QIe.js → index-gFjYdstW.js} +1 -1
- package/src/assets/web-panel/assets/{index-D2Nkivlm.js → index-tND8-TDU.js} +1 -1
- package/src/assets/web-panel/assets/{index-pt3s7yvV.js → index-v5HLYCVa.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BFZu87WZ.js → initDefaultProps-Cvt59c10.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DJIo7qvt.js → motion-D15pPEzl.js} +1 -1
- package/src/assets/web-panel/assets/{move-Cfr5qknL.js → move-N55KeXJ7.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-Bgc-OadH.js → mtc-parser-CyFO1bYP.js} +1 -1
- package/src/assets/web-panel/assets/{omit-X3WI-TNp.js → omit-B5IXfxU2.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-pJhU9IxK.js → pickAttrs-CpVqsulV.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-BNg_Vj3T.js → placementArrow-ME36sMF3.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-TeSEGQ5-.js → responsiveObserve-BXAIR1r-.js} +1 -1
- package/src/assets/web-panel/assets/{slide-D_t_P0bv.js → slide-BkOX3-Dp.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-DrrIMwAT.js → statusUtils-Cy4Aklpt.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BjZCuFRm.js → styleChecker-gUd2T206.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-rTFdlqdQ.js → useFlexGapSupport-CaVD4o99.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-BidCpfLX.js → useFs--pFGl0KD.js} +1 -1
- package/src/assets/web-panel/assets/usePersonalDataHub-D45iP86i.js +1 -0
- package/src/assets/web-panel/assets/{vnode-BrbcRiHZ.js → vnode-BayoChH_.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-PISX7AkR.js → zoom-CpP38poi.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/hub.js +350 -39
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/personal-data-hub-protocol.js +86 -23
- package/src/lib/host-adb-bridge.js +92 -14
- package/src/lib/personal-data-hub-wiring.js +173 -13
- package/src/assets/web-panel/assets/OrderTableRenderer-CHkSUrXB.js +0 -1
- package/src/assets/web-panel/assets/PdhVaultBrowser-BwOHG0in.js +0 -7
- package/src/assets/web-panel/assets/PersonalDataHub-ziYqg7-A.js +0 -8
- package/src/assets/web-panel/assets/Projects-6V-PNmcA.js +0 -1
- package/src/assets/web-panel/assets/Tasks-CF3rIrDe.js +0 -1
- package/src/assets/web-panel/assets/devWarning-BAwdDA_5.js +0 -1
- package/src/assets/web-panel/assets/index-DEjVkdzq.js +0 -1
- package/src/assets/web-panel/assets/index-LMOc5xrS.js +0 -1
- package/src/assets/web-panel/assets/usePersonalDataHub-C5mHttA9.js +0 -1
|
@@ -86,15 +86,82 @@ async function adb(args, opts = {}) {
|
|
|
86
86
|
|
|
87
87
|
async function listDevices(opts = {}) {
|
|
88
88
|
const stdout = await adb(["devices"], opts);
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
return parseDeviceRows(stdout)
|
|
90
|
+
.filter((device) => device.state === "device")
|
|
91
|
+
.map((device) => device.serial);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function parseDeviceRows(stdout) {
|
|
95
|
+
const devices = [];
|
|
96
|
+
for (const rawLine of String(stdout || "")
|
|
97
|
+
.split("\n")
|
|
98
|
+
.slice(1)) {
|
|
92
99
|
const line = rawLine.replace(/\r+$/, "").trim();
|
|
93
100
|
if (!line) continue;
|
|
94
|
-
const [serial, state] = line.split(/\s
|
|
95
|
-
if (
|
|
101
|
+
const [serial, state] = line.split(/\s+/, 2);
|
|
102
|
+
if (serial && state) devices.push({ serial, state });
|
|
103
|
+
}
|
|
104
|
+
return devices;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async function probeDevices(opts = {}) {
|
|
108
|
+
const requestedSerial =
|
|
109
|
+
(typeof opts.serial === "string" && opts.serial.trim()) ||
|
|
110
|
+
(typeof process.env.ADB_SERIAL === "string" &&
|
|
111
|
+
process.env.ADB_SERIAL.trim()) ||
|
|
112
|
+
null;
|
|
113
|
+
const stdout = await adb(["devices"], { ...opts, serial: undefined });
|
|
114
|
+
const devices = parseDeviceRows(stdout);
|
|
115
|
+
const authorized = devices.filter((device) => device.state === "device");
|
|
116
|
+
|
|
117
|
+
if (requestedSerial) {
|
|
118
|
+
const selected = devices.find(
|
|
119
|
+
(device) => device.serial === requestedSerial,
|
|
120
|
+
);
|
|
121
|
+
if (!selected) {
|
|
122
|
+
return {
|
|
123
|
+
authorizedDeviceCount: 0,
|
|
124
|
+
deviceConnected: false,
|
|
125
|
+
requestedSerial,
|
|
126
|
+
reason: "ADB_SELECTED_DEVICE_NOT_FOUND",
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
if (selected.state !== "device") {
|
|
130
|
+
return {
|
|
131
|
+
authorizedDeviceCount: 0,
|
|
132
|
+
deviceConnected: false,
|
|
133
|
+
requestedSerial,
|
|
134
|
+
reason:
|
|
135
|
+
selected.state === "unauthorized"
|
|
136
|
+
? "ADB_DEVICE_UNAUTHORIZED"
|
|
137
|
+
: "ADB_DEVICE_OFFLINE",
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
authorizedDeviceCount: 1,
|
|
142
|
+
deviceConnected: true,
|
|
143
|
+
serial: requestedSerial,
|
|
144
|
+
requestedSerial,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (authorized.length === 0) {
|
|
149
|
+
return {
|
|
150
|
+
authorizedDeviceCount: 0,
|
|
151
|
+
deviceConnected: false,
|
|
152
|
+
reason: devices.some((device) => device.state === "unauthorized")
|
|
153
|
+
? "ADB_DEVICE_UNAUTHORIZED"
|
|
154
|
+
: devices.some((device) => device.state === "offline")
|
|
155
|
+
? "ADB_DEVICE_OFFLINE"
|
|
156
|
+
: "ADB_DEVICE_NEEDED",
|
|
157
|
+
};
|
|
96
158
|
}
|
|
97
|
-
return
|
|
159
|
+
return {
|
|
160
|
+
authorizedDeviceCount: authorized.length,
|
|
161
|
+
deviceConnected: true,
|
|
162
|
+
serial: authorized.length === 1 ? authorized[0].serial : undefined,
|
|
163
|
+
reason: authorized.length > 1 ? "ADB_MULTIPLE_DEVICES" : undefined,
|
|
164
|
+
};
|
|
98
165
|
}
|
|
99
166
|
|
|
100
167
|
async function pickDevice(opts = {}) {
|
|
@@ -533,6 +600,12 @@ const BUILTIN_METHODS = new Set([
|
|
|
533
600
|
"snapshot.read",
|
|
534
601
|
]);
|
|
535
602
|
|
|
603
|
+
function mergeInvokeOptions(baseOptions, params) {
|
|
604
|
+
const serial =
|
|
605
|
+
params && typeof params.serial === "string" ? params.serial.trim() : "";
|
|
606
|
+
return serial ? { ...baseOptions, serial } : baseOptions;
|
|
607
|
+
}
|
|
608
|
+
|
|
536
609
|
export function createHostAdbBridge(opts = {}) {
|
|
537
610
|
const extensions = opts.extensions || {};
|
|
538
611
|
// Defense: warn (but allow) when an extension tries to shadow a
|
|
@@ -541,7 +614,6 @@ export function createHostAdbBridge(opts = {}) {
|
|
|
541
614
|
// throw in Phase 1 if any extension author actually attempts it.
|
|
542
615
|
for (const k of Object.keys(extensions)) {
|
|
543
616
|
if (BUILTIN_METHODS.has(k)) {
|
|
544
|
-
// eslint-disable-next-line no-console
|
|
545
617
|
console.warn(
|
|
546
618
|
`host-adb-bridge: extension "${k}" shadows a built-in method and will be ignored at dispatch`,
|
|
547
619
|
);
|
|
@@ -568,21 +640,22 @@ export function createHostAdbBridge(opts = {}) {
|
|
|
568
640
|
return Object.keys(extensions).filter((k) => !BUILTIN_METHODS.has(k));
|
|
569
641
|
},
|
|
570
642
|
async invoke(method, params = {}) {
|
|
643
|
+
const invokeOptions = mergeInvokeOptions(opts, params);
|
|
571
644
|
switch (method) {
|
|
572
645
|
case "contacts.query":
|
|
573
|
-
return await queryContacts(params,
|
|
646
|
+
return await queryContacts(params, invokeOptions);
|
|
574
647
|
case "app.list":
|
|
575
|
-
return await listApps(params,
|
|
648
|
+
return await listApps(params, invokeOptions);
|
|
576
649
|
case "sms.query":
|
|
577
|
-
return await querySms(params,
|
|
650
|
+
return await querySms(params, invokeOptions);
|
|
578
651
|
case "call.query":
|
|
579
|
-
return await queryCallLog(params,
|
|
652
|
+
return await queryCallLog(params, invokeOptions);
|
|
580
653
|
case "media.list":
|
|
581
|
-
return await listMedia(params,
|
|
654
|
+
return await listMedia(params, invokeOptions);
|
|
582
655
|
case "snapshot.list":
|
|
583
|
-
return await listSnapshots(params,
|
|
656
|
+
return await listSnapshots(params, invokeOptions);
|
|
584
657
|
case "snapshot.read":
|
|
585
|
-
return await readSnapshot(params,
|
|
658
|
+
return await readSnapshot(params, invokeOptions);
|
|
586
659
|
default: {
|
|
587
660
|
const ext = extensions[method];
|
|
588
661
|
if (typeof ext === "function") {
|
|
@@ -597,12 +670,17 @@ export function createHostAdbBridge(opts = {}) {
|
|
|
597
670
|
};
|
|
598
671
|
}
|
|
599
672
|
|
|
673
|
+
export { listDevices, probeDevices };
|
|
674
|
+
|
|
600
675
|
// Exposed for unit testing without spawning real adb.
|
|
601
676
|
export const _internals = {
|
|
602
677
|
adb,
|
|
603
678
|
parseContentQueryRows,
|
|
679
|
+
parseDeviceRows,
|
|
604
680
|
mergeContactRows,
|
|
681
|
+
mergeInvokeOptions,
|
|
605
682
|
listDevices,
|
|
683
|
+
probeDevices,
|
|
606
684
|
pickDevice,
|
|
607
685
|
queryContacts,
|
|
608
686
|
listApps,
|
|
@@ -78,12 +78,23 @@ let LocalVault,
|
|
|
78
78
|
SystemDataAndroidAdapter,
|
|
79
79
|
BrowserHistoryChromeAdapter,
|
|
80
80
|
BrowserHistoryEdgeAdapter,
|
|
81
|
+
BrowserHistoryBraveAdapter,
|
|
82
|
+
BrowserHistoryOperaAdapter,
|
|
83
|
+
BrowserHistoryVivaldiAdapter,
|
|
84
|
+
BrowserHistorySafariAdapter,
|
|
85
|
+
BrowserHistoryFirefoxAdapter,
|
|
81
86
|
BrowserHistoryAospAdapter,
|
|
82
87
|
VSCodeAdapter,
|
|
88
|
+
VSCodiumAdapter,
|
|
89
|
+
CursorAdapter,
|
|
90
|
+
ClaudeCodeAdapter,
|
|
91
|
+
JetBrainsIdeAdapter,
|
|
83
92
|
WinRecentAdapter,
|
|
84
93
|
GitActivityAdapter,
|
|
85
94
|
ShellHistoryAdapter,
|
|
95
|
+
HBuilderXAdapter,
|
|
86
96
|
LocalFilesAdapter,
|
|
97
|
+
TencentMeetingAdapter,
|
|
87
98
|
BilibiliAdapter,
|
|
88
99
|
WeiboAdapter,
|
|
89
100
|
ZhihuAdapter,
|
|
@@ -153,6 +164,7 @@ let LocalVault,
|
|
|
153
164
|
TelegramAdapter,
|
|
154
165
|
WhatsAppAdapter,
|
|
155
166
|
createJsonSourceFetch,
|
|
167
|
+
createJsonResponseSourceFetch,
|
|
156
168
|
AIChatHistoryAdapter,
|
|
157
169
|
EntityResolver,
|
|
158
170
|
EntityResolverEmbeddingStage,
|
|
@@ -203,12 +215,23 @@ function ensurePdhLoaded() {
|
|
|
203
215
|
SystemDataAndroidAdapter,
|
|
204
216
|
BrowserHistoryChromeAdapter,
|
|
205
217
|
BrowserHistoryEdgeAdapter,
|
|
218
|
+
BrowserHistoryBraveAdapter,
|
|
219
|
+
BrowserHistoryOperaAdapter,
|
|
220
|
+
BrowserHistoryVivaldiAdapter,
|
|
221
|
+
BrowserHistorySafariAdapter,
|
|
222
|
+
BrowserHistoryFirefoxAdapter,
|
|
206
223
|
BrowserHistoryAospAdapter,
|
|
207
224
|
VSCodeAdapter,
|
|
225
|
+
VSCodiumAdapter,
|
|
226
|
+
CursorAdapter,
|
|
227
|
+
ClaudeCodeAdapter,
|
|
228
|
+
JetBrainsIdeAdapter,
|
|
208
229
|
WinRecentAdapter,
|
|
209
230
|
GitActivityAdapter,
|
|
210
231
|
ShellHistoryAdapter,
|
|
232
|
+
HBuilderXAdapter,
|
|
211
233
|
LocalFilesAdapter,
|
|
234
|
+
TencentMeetingAdapter,
|
|
212
235
|
BilibiliAdapter,
|
|
213
236
|
WeiboAdapter,
|
|
214
237
|
ZhihuAdapter,
|
|
@@ -278,6 +301,7 @@ function ensurePdhLoaded() {
|
|
|
278
301
|
TelegramAdapter,
|
|
279
302
|
WhatsAppAdapter,
|
|
280
303
|
createJsonSourceFetch,
|
|
304
|
+
createJsonResponseSourceFetch,
|
|
281
305
|
AIChatHistoryAdapter,
|
|
282
306
|
EntityResolver,
|
|
283
307
|
EntityResolverEmbeddingStage,
|
|
@@ -501,14 +525,22 @@ async function initHub() {
|
|
|
501
525
|
]);
|
|
502
526
|
const adbReadinessProbe = async () => {
|
|
503
527
|
try {
|
|
504
|
-
const {
|
|
505
|
-
|
|
528
|
+
const { probeDevices } = await import("./host-adb-bridge.js");
|
|
529
|
+
return await probeDevices({
|
|
530
|
+
serial:
|
|
531
|
+
typeof process.env.ADB_SERIAL === "string"
|
|
532
|
+
? process.env.ADB_SERIAL
|
|
533
|
+
: undefined,
|
|
534
|
+
});
|
|
535
|
+
} catch (error) {
|
|
536
|
+
const detail = error && error.message ? error.message : "";
|
|
506
537
|
return {
|
|
507
|
-
|
|
508
|
-
|
|
538
|
+
authorizedDeviceCount: 0,
|
|
539
|
+
deviceConnected: false,
|
|
540
|
+
reason: /binary not found|ENOENT/iu.test(detail)
|
|
541
|
+
? "ADB_NOT_INSTALLED"
|
|
542
|
+
: "ADB_PROBE_FAILED",
|
|
509
543
|
};
|
|
510
|
-
} catch (_e) {
|
|
511
|
-
return { deviceConnected: false };
|
|
512
544
|
}
|
|
513
545
|
};
|
|
514
546
|
|
|
@@ -650,6 +682,46 @@ async function initHub() {
|
|
|
650
682
|
// Continue boot
|
|
651
683
|
}
|
|
652
684
|
|
|
685
|
+
try {
|
|
686
|
+
const brave = new BrowserHistoryBraveAdapter();
|
|
687
|
+
if (!registry.has(brave.name)) registry.register(brave);
|
|
688
|
+
} catch (_err) {
|
|
689
|
+
// Continue boot
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
try {
|
|
693
|
+
const opera = new BrowserHistoryOperaAdapter();
|
|
694
|
+
if (!registry.has(opera.name)) registry.register(opera);
|
|
695
|
+
} catch (_err) {
|
|
696
|
+
// Continue boot
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
try {
|
|
700
|
+
const vivaldi = new BrowserHistoryVivaldiAdapter();
|
|
701
|
+
if (!registry.has(vivaldi.name)) registry.register(vivaldi);
|
|
702
|
+
} catch (_err) {
|
|
703
|
+
// Continue boot
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
// Safari keeps visits in History.db and bookmarks in XML/binary plist.
|
|
707
|
+
// Profile discovery is lazy so non-macOS hosts do no filesystem work.
|
|
708
|
+
try {
|
|
709
|
+
const safari = new BrowserHistorySafariAdapter();
|
|
710
|
+
if (!registry.has(safari.name)) registry.register(safari);
|
|
711
|
+
} catch (_err) {
|
|
712
|
+
// Continue boot
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
// Firefox stores history and bookmarks together in places.sqlite. The
|
|
716
|
+
// adapter resolves profiles.ini by default and accepts opts.profilePath
|
|
717
|
+
// for secondary/custom profiles.
|
|
718
|
+
try {
|
|
719
|
+
const firefox = new BrowserHistoryFirefoxAdapter();
|
|
720
|
+
if (!registry.has(firefox.name)) registry.register(firefox);
|
|
721
|
+
} catch (_err) {
|
|
722
|
+
// Continue boot
|
|
723
|
+
}
|
|
724
|
+
|
|
653
725
|
// AOSP / MIUI stock browser (com.android.browser → browser2.db). No host
|
|
654
726
|
// default — needs a device-pulled browser2.db via opts.dbPath at sync time
|
|
655
727
|
// (cc hub sync-adapter browser-history-aosp --db-path <pulled>), so bare
|
|
@@ -672,6 +744,40 @@ async function initHub() {
|
|
|
672
744
|
// Continue boot
|
|
673
745
|
}
|
|
674
746
|
|
|
747
|
+
// VSCodium uses the same open-source VS Code storage schema under its own
|
|
748
|
+
// user-data root. Keep the source identity separate so records and
|
|
749
|
+
// watermarks cannot collide with Microsoft VS Code.
|
|
750
|
+
try {
|
|
751
|
+
const vscodium = new VSCodiumAdapter();
|
|
752
|
+
if (!registry.has(vscodium.name)) registry.register(vscodium);
|
|
753
|
+
} catch (_err) {
|
|
754
|
+
// Continue boot
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
// Cursor editor activity + local Agent transcripts + AI code metadata.
|
|
758
|
+
try {
|
|
759
|
+
const cursor = new CursorAdapter();
|
|
760
|
+
if (!registry.has(cursor.name)) registry.register(cursor);
|
|
761
|
+
} catch (_err) {
|
|
762
|
+
// Continue boot
|
|
763
|
+
}
|
|
764
|
+
|
|
765
|
+
// Claude Code local main/subagent conversations + aggregate usage.
|
|
766
|
+
try {
|
|
767
|
+
const claudeCode = new ClaudeCodeAdapter();
|
|
768
|
+
if (!registry.has(claudeCode.name)) registry.register(claudeCode);
|
|
769
|
+
} catch (_err) {
|
|
770
|
+
// Continue boot
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
// JetBrains Platform IDE recent projects and latest open/activation times.
|
|
774
|
+
try {
|
|
775
|
+
const jetbrains = new JetBrainsIdeAdapter();
|
|
776
|
+
if (!registry.has(jetbrains.name)) registry.register(jetbrains);
|
|
777
|
+
} catch (_err) {
|
|
778
|
+
// Continue boot
|
|
779
|
+
}
|
|
780
|
+
|
|
675
781
|
// Windows Recent — cross-application "what did I open" .lnk timeline.
|
|
676
782
|
// Win-only adapter; authenticate() fails on macOS/Linux with
|
|
677
783
|
// PLATFORM_UNSUPPORTED, which surfaces nicely in the UI.
|
|
@@ -700,6 +806,13 @@ async function initHub() {
|
|
|
700
806
|
// Continue boot
|
|
701
807
|
}
|
|
702
808
|
|
|
809
|
+
try {
|
|
810
|
+
const hbuilderx = new HBuilderXAdapter();
|
|
811
|
+
if (!registry.has(hbuilderx.name)) registry.register(hbuilderx);
|
|
812
|
+
} catch (_err) {
|
|
813
|
+
// Continue boot
|
|
814
|
+
}
|
|
815
|
+
|
|
703
816
|
try {
|
|
704
817
|
const localFiles = new LocalFilesAdapter();
|
|
705
818
|
if (!registry.has(localFiles.name)) registry.register(localFiles);
|
|
@@ -707,6 +820,15 @@ async function initHub() {
|
|
|
707
820
|
// Continue boot
|
|
708
821
|
}
|
|
709
822
|
|
|
823
|
+
// Tencent Meeting desktop history. The adapter discovers the hash-named
|
|
824
|
+
// SQLite database by schema and redacts meeting/account ids before archive.
|
|
825
|
+
try {
|
|
826
|
+
const tencentMeeting = new TencentMeetingAdapter();
|
|
827
|
+
if (!registry.has(tencentMeeting.name)) registry.register(tencentMeeting);
|
|
828
|
+
} catch (_err) {
|
|
829
|
+
// Continue boot
|
|
830
|
+
}
|
|
831
|
+
|
|
710
832
|
// A8 v0.1 (2026-05-22) — social adapters in snapshot mode. Stateless: the
|
|
711
833
|
// Android UI captures a cookie via in-app WebView, runs OkHttp against the
|
|
712
834
|
// platform's HTTP API, parses the JSON response, writes a snapshot JSON to
|
|
@@ -748,7 +870,7 @@ async function initHub() {
|
|
|
748
870
|
// ctors throw without account args, so they were silently swallowed by
|
|
749
871
|
// try/catch and never actually registered. Removed to make the list
|
|
750
872
|
// accurate.
|
|
751
|
-
const
|
|
873
|
+
const runtimeSourceAdapterClasses = new Set([
|
|
752
874
|
TaobaoAdapter,
|
|
753
875
|
JdAdapter,
|
|
754
876
|
MeituanAdapter,
|
|
@@ -758,7 +880,33 @@ async function initHub() {
|
|
|
758
880
|
XianyuAdapter,
|
|
759
881
|
VipshopAdapter,
|
|
760
882
|
Train12306Adapter,
|
|
883
|
+
CtripAdapter,
|
|
884
|
+
TongchengAdapter,
|
|
885
|
+
DidiAdapter,
|
|
886
|
+
DidiConsumerAdapter,
|
|
761
887
|
ZhihuAdapter,
|
|
888
|
+
XimalayaAdapter,
|
|
889
|
+
TianyanchaAdapter,
|
|
890
|
+
KugouMusicAdapter,
|
|
891
|
+
QQMusicAdapter,
|
|
892
|
+
BossZhipinAdapter,
|
|
893
|
+
DoubanAdapter,
|
|
894
|
+
CsdnAdapter,
|
|
895
|
+
DongchediAdapter,
|
|
896
|
+
IqiyiVideoAdapter,
|
|
897
|
+
TencentVideoAdapter,
|
|
898
|
+
XiguaVideoAdapter,
|
|
899
|
+
CamScannerDocAdapter,
|
|
900
|
+
BaiduNetdiskAdapter,
|
|
901
|
+
WpsDocAdapter,
|
|
902
|
+
]);
|
|
903
|
+
const runtimeCookieHostSuffixes = new Map([
|
|
904
|
+
[GenshinAdapter, ["api-takumi.mihoyo.com", "api-takumi-record.mihoyo.com"]],
|
|
905
|
+
[ZuoyebangAdapter, ["www.zuoyebang.com"]],
|
|
906
|
+
[AlipayAdapter, ["mobilegw.alipay.com"]],
|
|
907
|
+
[HuaweiLearningAdapter, ["educenter.hicloud.com"]],
|
|
908
|
+
[NeteaseMusicAdapter, ["music.163.com"]],
|
|
909
|
+
[WeReadAdapter, ["i.weread.qq.com"]],
|
|
762
910
|
]);
|
|
763
911
|
const sourceJsonFetch = createJsonSourceFetch();
|
|
764
912
|
for (const Cls of [
|
|
@@ -834,9 +982,15 @@ async function initHub() {
|
|
|
834
982
|
const adapter =
|
|
835
983
|
Cls === WhatsAppAdapter
|
|
836
984
|
? new Cls({ bridgeProvider: () => hostAdbBridge })
|
|
837
|
-
:
|
|
838
|
-
? new Cls({
|
|
839
|
-
|
|
985
|
+
: runtimeCookieHostSuffixes.has(Cls)
|
|
986
|
+
? new Cls({
|
|
987
|
+
fetch: createJsonResponseSourceFetch({
|
|
988
|
+
allowedHostSuffixes: runtimeCookieHostSuffixes.get(Cls),
|
|
989
|
+
}),
|
|
990
|
+
})
|
|
991
|
+
: runtimeSourceAdapterClasses.has(Cls)
|
|
992
|
+
? new Cls({ fetchFn: sourceJsonFetch })
|
|
993
|
+
: new Cls();
|
|
840
994
|
if (!registry.has(adapter.name)) registry.register(adapter);
|
|
841
995
|
} catch (_err) {
|
|
842
996
|
// Continue boot even if one adapter ctor throws
|
|
@@ -2031,17 +2185,23 @@ export function close() {
|
|
|
2031
2185
|
if (_hub && _hub.aichatHealthChecker) {
|
|
2032
2186
|
try {
|
|
2033
2187
|
_hub.aichatHealthChecker.stop();
|
|
2034
|
-
} catch
|
|
2188
|
+
} catch {
|
|
2189
|
+
// Best-effort shutdown.
|
|
2190
|
+
}
|
|
2035
2191
|
}
|
|
2036
2192
|
if (_hub && _hub.vault) {
|
|
2037
2193
|
try {
|
|
2038
2194
|
_hub.vault.close();
|
|
2039
|
-
} catch
|
|
2195
|
+
} catch {
|
|
2196
|
+
// Best-effort shutdown.
|
|
2197
|
+
}
|
|
2040
2198
|
}
|
|
2041
2199
|
if (_hubMinimal && _hubMinimal.vault && _hubMinimal !== _hub) {
|
|
2042
2200
|
try {
|
|
2043
2201
|
_hubMinimal.vault.close();
|
|
2044
|
-
} catch
|
|
2202
|
+
} catch {
|
|
2203
|
+
// Best-effort shutdown.
|
|
2204
|
+
}
|
|
2045
2205
|
}
|
|
2046
2206
|
_hub = null;
|
|
2047
2207
|
_initPromise = null;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as o}from"./vendor-Bn1JzzAn.js";import{_ as S}from"./index-B8nLBZbv.js";import"./icons-DG5UD-6K.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const a=p,e=o(()=>a.event.content||{}),d=o(()=>a.event.extra||{}),m=o(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=o(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=o(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=o(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=o(()=>e.value.status||e.value.state),b=o(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=o(()=>{if(!a.event.occurredAt)return"";const t=new Date(a.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:a,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:o};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},V={class:"row"},I={class:"val"},R={class:"row"},B={class:"val"},D={class:"row amount-row"},j={class:"val amount"},q={key:0,class:"row"},A={class:"val mono"},F={key:1,class:"row"};function K(p,r,a,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(a.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(a.event.subtype),1)]),_:1})]),s("div",V,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",I,n(e.merchantText),1)]),s("div",R,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",B,n(e.itemText),1)]),s("div",D,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",q,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",A,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",F,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const H=S(k,[["render",K],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-XqKUIo/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{H as default};
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-p-_PBpX_.js","./vendor-Bn1JzzAn.js","./index-B8nLBZbv.js","./icons-DG5UD-6K.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-CHkSUrXB.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-D0g74KhH.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-CtUWfYVq.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-ClKzY8_N.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{E as ue,r as R,b as w,I as y,P as u,J as O,U as v,c,S as C,V as E,_ as M,F as V,Z as se,a0 as le,R as x,K as m,Q as b,W as L,o as U}from"./vendor-Bn1JzzAn.js";import{u as J}from"./usePersonalDataHub-C5mHttA9.js";import{_ as F,e as I,d as q}from"./index-B8nLBZbv.js";import{aa as P,ag as K,M as Q,aI as z,v as G,aH as X,aq as H,ac as W,e as de,d as fe,k as pe,ai as me,aA as _e,R as ge}from"./icons-DG5UD-6K.js";const T=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),B=50,Y=300,Z=ue("pdhBrowser",()=>{const r=R({...T}),t=R([]),n=R(null),e=R(!1),o=R(!1),l=R(null),a=R(null),s=R(!1),i=R({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const A=w(()=>t.value.length>0),j=w(()=>n.value!=null);function h(S={}){const p={},f=r.value;return f.q&&f.q.trim()&&(p.q=f.q.trim()),f.category&&(p.category=f.category),f.adapter&&(p.adapter=f.adapter),f.subtype&&(p.subtype=f.subtype),Number.isFinite(f.since)&&(p.since=f.since),Number.isFinite(f.until)&&(p.until=f.until),{...p,...S}}async function g(){const S=++d;e.value=!0,l.value=null;const p=J();try{const[f,D]=await Promise.all([p.searchEvents(h({limit:B})),p.facetCounts({...r.value.q&&r.value.q.trim()?{q:r.value.q.trim()}:{},...Number.isFinite(r.value.since)?{since:r.value.since}:{},...Number.isFinite(r.value.until)?{until:r.value.until}:{}})]);if(S!==d)return;t.value=f.rows||[],n.value=f.nextCursor||null,a.value=f.mode||"like",s.value=!!f.shortQuery,i.value={byCategory:D.byCategory||{},byAdapter:D.byAdapter||{},bySubtype:D.bySubtype||{},total:D.total||0}}catch(f){if(S!==d)return;l.value=f&&f.message?f.message:String(f),t.value=[],n.value=null}finally{S===d&&(e.value=!1)}}async function k(){if(!n.value||o.value)return;o.value=!0,l.value=null;const S=J();try{const p=await S.searchEvents(h({cursor:n.value,limit:B}));t.value=t.value.concat(p.rows||[]),n.value=p.nextCursor||null,a.value=p.mode||a.value}catch(p){l.value=p&&p.message?p.message:String(p)}finally{o.value=!1}}function ae(S,p){if(!(S in T))throw new Error(`pdhBrowser.setFilter: unknown key "${S}"`);r.value={...r.value,[S]:p},_&&clearTimeout(_),_=setTimeout(()=>{_=null,g()},Y)}function ie(S){return r.value={...T,...S},_&&(clearTimeout(_),_=null),g()}function ce(){r.value={...T},t.value=[],n.value=null,l.value=null,i.value={byCategory:{},byAdapter:{},bySubtype:{},total:0}}return{filters:r,results:t,cursor:n,isLoading:e,isAppending:o,error:l,mode:a,shortQuery:s,facets:i,hasResults:A,canLoadMore:j,search:g,loadMore:k,setFilter:ae,setFilters:ie,reset:ce,PAGE_SIZE:B,SEARCH_DEBOUNCE_MS:Y}}),ye=Object.freeze(["chat","social","email","shopping","travel","system","ai-chat","other"]),ve=Object.freeze({chat:"社交聊天",social:"内容平台",email:"邮件",shopping:"支付订单",travel:"出行",system:"系统数据","ai-chat":"AI 对话",other:"其他"});function N(r){return ve[r]||r||"未知"}const be=Object.freeze([["wechat","chat"],["messaging-","chat"],["social-","social"],["email-","email"],["shopping-","shopping"],["alipay-","shopping"],["travel-","travel"],["system-data","system"],["browser-","system"],["vscode","system"],["win-recent","system"],["git-activity","system"],["shell-history","system"],["local-files","system"],["ai-chat-","ai-chat"]]);function $(r){if(typeof r!="string"||r.length===0)return"other";for(const[t,n]of be)if(t.endsWith("-")||t==="system-data"){if(r.startsWith(t))return n}else if(r===t)return n;return"other"}const he={__name:"CategorySidebar",props:{selected:{type:String,default:null},facets:{type:Object,default:()=>({byCategory:{},total:0})}},emits:["select"],setup(r,{expose:t}){t();const n=r,e=w(()=>n.facets.total||0),o={chat:W,social:H,email:X,shopping:G,travel:z,system:Q,"ai-chat":K,other:P};function l(i){return o[i]||P}function a(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:l,badgeStyle:a,computed:w,get AppstoreOutlined(){return P},get MessageOutlined(){return W},get PlayCircleOutlined(){return H},get MailOutlined(){return X},get ShoppingOutlined(){return G},get CarOutlined(){return z},get MobileOutlined(){return Q},get RobotOutlined(){return K},get CATEGORIES(){return ye},get categoryLabel(){return N}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},Se={class:"pdh-sidebar"},Oe=["onClick"],we={class:"label"};function Ce(r,t,n,e,o,l){const a=y("a-badge");return u(),O("div",Se,[t[2]||(t[2]=v("div",{class:"sidebar-title"},"数据类型",-1)),v("div",{class:M(["cat-item",{active:n.selected===null}]),onClick:t[0]||(t[0]=s=>r.$emit("select",null))},[c(e.AppstoreOutlined,{class:"icon"}),t[1]||(t[1]=v("span",{class:"label"},"全部",-1)),e.total>0?(u(),C(a,{key:0,count:e.total,"number-style":e.badgeStyle(n.selected===null),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],2),(u(!0),O(V,null,se(e.CATEGORIES,s=>(u(),O("div",{key:s,class:M(["cat-item",{active:n.selected===s,dim:!n.facets.byCategory[s]}]),onClick:i=>r.$emit("select",s)},[(u(),C(le(e.iconFor(s)),{class:"icon"})),v("span",we,x(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),C(a,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],10,Oe))),128))])}const ke=F(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-XqKUIo/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),Ee={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,l=w(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),a=w(()=>Object.entries(e.facets.byAdapter||{}).sort((g,k)=>k[1]-g[1]).map(([g,k])=>({value:g,label:`${g} (${k})`}))),s=w(()=>!e.filters.since&&!e.filters.until?null:[e.filters.since?new Date(e.filters.since):null,e.filters.until?new Date(e.filters.until):null]),i=w(()=>!!(e.filters.q||e.filters.adapter||e.filters.subtype||e.filters.since||e.filters.until));function d(h){o("set-filter","q",h||"")}function _(h){o("set-filter","q",h||"")}function A(h){if(!h||h.length===0){o("set-filter","since",null),o("set-filter","until",null);return}const[g,k]=h;o("set-filter","since",g?+g:null),o("set-filter","until",k?+k:null)}const j={props:e,emit:o,placeholderText:l,adapterOptions:a,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:A,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},Re={class:"pdh-filter-bar"},xe={key:1,class:"hint"},Ae={key:2,class:"hint"};function je(r,t,n,e,o,l){const a=y("a-input-search"),s=y("a-select"),i=y("a-range-picker"),d=y("a-button");return u(),O("div",Re,[c(a,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),C(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),O("span",xe,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",Ae,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):E("v-if",!0)])}const Le=F(Ee,[["render",je],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-XqKUIo/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Ie={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=L(()=>I(()=>import("./ChatBubbleRenderer-p-_PBpX_.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>I(()=>import("./OrderTableRenderer-CHkSUrXB.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>I(()=>import("./TimelineRenderer-D0g74KhH.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),l=L(()=>I(()=>import("./EmailListRenderer-CtUWfYVq.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=L(()=>I(()=>import("./GenericCardRenderer-ClKzY8_N.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const _=d&&d.source&&d.source.adapter;switch($(_)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return l;default:return a}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:l,GenericCardRenderer:a,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function Fe(r,t,n,e,o,l){return u(),C(le(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const De=F(Ie,[["render",Fe],["__file","/tmp/cc-web-panel-XqKUIo/repo/packages/web-panel/src/components/pdh/renderers/RendererDispatcher.vue"]]);function ee(r){return JSON.stringify(r,null,2)}function te(r){return r.map(t=>JSON.stringify(t)).join(`
|
|
3
|
-
`)+`
|
|
4
|
-
`}function ne(r){const n=["id","subtype","occurredAt","occurredAtIso","actor","place","adapter","summary","contentJson","extraJson"].join(","),e=r.map(o=>{const l=Number.isFinite(o.occurredAt)?o.occurredAt:null,a=l?new Date(l).toISOString():"",s=o.source&&o.source.adapter||"",i=o.content&&(o.content.text||o.content.title||o.content.subject)||"";return[o.id||"",o.subtype||"",l!=null?String(l):"",a,o.actor||"",o.place||"",s,i,o.content?JSON.stringify(o.content):"",o.extra?JSON.stringify(o.extra):""].map(Te).join(",")});return[n,...e].join(`
|
|
5
|
-
`)+`
|
|
6
|
-
`}function Te(r){const t=String(r??"");return t.includes(",")||t.includes('"')||t.includes(`
|
|
7
|
-
`)||t.includes("\r")?'"'+t.replace(/"/g,'""')+'"':t}function re(r,t,n="application/octet-stream"){if(typeof window>"u"||typeof document>"u")return t;const e=new Blob([r],{type:n}),o=URL.createObjectURL(e),l=document.createElement("a");return l.href=o,l.download=t,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(o),1e3),t}function oe(r,t=null){const n=new Date,e=n.getFullYear(),o=String(n.getMonth()+1).padStart(2,"0"),l=String(n.getDate()).padStart(2,"0"),a=r==="ndjson"?"ndjson":r,s=t?`-${t}`:"";return`pdh-events-${e}-${o}-${l}${s}.${a}`}const qe={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=w(()=>n.events.length>0),o={json:"application/json;charset=utf-8",ndjson:"application/x-ndjson;charset=utf-8",csv:"text/csv;charset=utf-8"};function l(i){switch(i){case"json":return ee(n.events);case"ndjson":return te(n.events);case"csv":return ne(n.events);default:throw new Error(`unknown format: ${i}`)}}function a({key:i}){try{const d=l(i),_=oe(i,n.category);re(d,_,o[i]),q.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){q.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:l,onClick:a,computed:w,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return q},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function Pe(r,t,n,e,o,l){const a=y("a-button"),s=y("a-menu-item"),i=y("a-menu"),d=y("a-dropdown");return u(),C(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(a,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+x(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Be=F(qe,[["render",Pe],["__file","/tmp/cc-web-panel-XqKUIo/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Ve={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=Z(),e=w(()=>n.filters.q?`没有匹配 "${n.filters.q}" 的事件 — 试试更短的关键词或换个类目`:n.filters.category?`「${N(n.filters.category)}」类目下还没有数据 — 去采集页同步对应 adapter`:"Vault 里还没有数据 — 去「个人数据中台」页面同步任意 adapter");function o(s){n.filters.category=s,n.search()}function l(s,i){n.setFilter(s,i)}U(()=>{!n.hasResults&&!n.isLoading&&n.search()});const a={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:l,onMounted:U,computed:w,get ReloadOutlined(){return ge},get usePdhBrowserStore(){return Z},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:De,ExportDropdown:Be};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}},Ne={class:"pdh-browser-page"},Me={class:"page-header"},Ue={class:"main-pane"},Je={class:"results-summary"},Ke={key:0},Qe={key:0},ze={key:1},Ge={class:"loaded-of"},Xe={class:"results-list"},He={key:2,class:"load-more"};function We(r,t,n,e,o,l){const a=y("a-tag"),s=y("a-button"),i=y("a-space"),d=y("a-col"),_=y("a-spin"),A=y("a-alert"),j=y("a-empty"),h=y("a-row");return u(),O("div",Ne,[v("div",Me,[t[6]||(t[6]=v("div",null,[v("h2",{class:"page-title"},"数据浏览器"),v("p",{class:"page-sub"}," Vault 里所有已采集的数据,按类目浏览 / 全文检索 / 时间窗口筛选。 完全离线,不外传。 ")],-1)),c(i,null,{default:m(()=>[e.store.mode==="fts5"?(u(),C(a,{key:0,color:"green"},{default:m(()=>[...t[3]||(t[3]=[b("FTS5 trigram",-1)])]),_:1})):e.store.mode==="like"?(u(),C(a,{key:1,color:"orange"},{default:m(()=>[...t[4]||(t[4]=[b("LIKE 兜底",-1)])]),_:1})):E("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=g=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",Ue,[c(e.SearchFilterBar,{filters:e.store.filters,facets:e.store.facets,"is-loading":e.store.isLoading,mode:e.store.mode,"short-query":e.store.shortQuery,onSetFilter:e.onSetFilter,onReset:t[1]||(t[1]=g=>{e.store.reset(),e.store.search()})},null,8,["filters","facets","is-loading","mode","short-query"]),v("div",Je,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",Ke,[c(_,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(V,{key:1},[v("strong",null,x(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",Qe,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,x(e.categoryLabel(e.store.filters.category)),1),v("strong",null,x(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),O("span",ze,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,x(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",Ge," / 已显示 "+x(e.store.results.length),1)],64))]),e.store.error?(u(),C(A,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):E("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(j,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):E("v-if",!0),v("div",Xe,[(u(!0),O(V,null,se(e.store.results,(g,k)=>(u(),C(e.RendererDispatcher,{key:`r-${k}-${g.id}`,event:g},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",He,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=g=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):E("v-if",!0)])]),_:1})]),_:1})])}const tt=F(Ve,[["render",We],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-XqKUIo/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{tt as default};
|