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.
Files changed (164) hide show
  1. package/package.json +2 -2
  2. package/src/assets/web-panel/.build-hash +1 -1
  3. package/src/assets/web-panel/assets/{AIOps-DRftcSue.js → AIOps-D_TIL54O.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-BFvUaMKR.js → ActionButton-eQwy9r-f.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-C0-Rru4P.js → Analytics-D2eNuDgT.js} +3 -3
  6. package/src/assets/web-panel/assets/{AppLayout-bx-BCljj.js → AppLayout-CFhwOFsf.js} +5 -5
  7. package/src/assets/web-panel/assets/{Artifacts-DAJ8B3Un.js → Artifacts-CJUMw6PB.js} +1 -1
  8. package/src/assets/web-panel/assets/{Audit-hOk4L1lr.js → Audit-CDB9V58o.js} +1 -1
  9. package/src/assets/web-panel/assets/{BackgroundAgents-3pbDpM9z.js → BackgroundAgents-TBppYFjN.js} +1 -1
  10. package/src/assets/web-panel/assets/{Backup-BtziGDn9.js → Backup-CYEOUpzJ.js} +1 -1
  11. package/src/assets/web-panel/assets/{BaseInput-kmshphJ3.js → BaseInput-C88fFT2u.js} +1 -1
  12. package/src/assets/web-panel/assets/{Chat-d7tGSosA.js → Chat-mkr1vC3N.js} +6 -6
  13. package/src/assets/web-panel/assets/{ChatBubbleRenderer-p-_PBpX_.js → ChatBubbleRenderer-C7bofJuA.js} +1 -1
  14. package/src/assets/web-panel/assets/{Checkbox-C4Eh4Tz5.js → Checkbox-CVU4xqti.js} +1 -1
  15. package/src/assets/web-panel/assets/{Codegen-r7gmhZyA.js → Codegen-rrNcByz3.js} +1 -1
  16. package/src/assets/web-panel/assets/{Col-U7mDaGlL.js → Col-Cqu-zCvh.js} +1 -1
  17. package/src/assets/web-panel/assets/{Community-Bpu8aH1T.js → Community-RGRlSgXV.js} +1 -1
  18. package/src/assets/web-panel/assets/{Compact-CHb2XBJe.js → Compact-DBm6epOK.js} +1 -1
  19. package/src/assets/web-panel/assets/{Compliance-Cn_r4dey.js → Compliance-BgKw5iaW.js} +1 -1
  20. package/src/assets/web-panel/assets/{Cowork-CdMWfDcz.js → Cowork-BqQcNO3Z.js} +3 -3
  21. package/src/assets/web-panel/assets/{Cron-BtnREHWy.js → Cron-DO5gTFNb.js} +2 -2
  22. package/src/assets/web-panel/assets/{Crosschain-BKI9TSzr.js → Crosschain-B8hbJNuN.js} +1 -1
  23. package/src/assets/web-panel/assets/{DID-pkNubzzJ.js → DID-B08bFJ2C.js} +2 -2
  24. package/src/assets/web-panel/assets/{Dashboard-1rrz1snN.js → Dashboard-xNdy_ifo.js} +2 -2
  25. package/src/assets/web-panel/assets/{Dropdown-DLyFVxDc.js → Dropdown-D-KIZgWL.js} +1 -1
  26. package/src/assets/web-panel/assets/{EmailListRenderer-CtUWfYVq.js → EmailListRenderer-DKCvsaGo.js} +1 -1
  27. package/src/assets/web-panel/assets/{FamilyGuardDashboard-B8eX2Qe4.js → FamilyGuardDashboard-D_cfqama.js} +1 -1
  28. package/src/assets/web-panel/assets/{Federation-D8lsDGus.js → Federation-B-UqQD68.js} +1 -1
  29. package/src/assets/web-panel/assets/{FormItemContext-CRYt_aIw.js → FormItemContext-BWWvWuJW.js} +1 -1
  30. package/src/assets/web-panel/assets/{GenericCardRenderer-ClKzY8_N.js → GenericCardRenderer-CPchx6N7.js} +1 -1
  31. package/src/assets/web-panel/assets/{Git-BXj5Dney.js → Git-Vx4co9Ff.js} +2 -2
  32. package/src/assets/web-panel/assets/{Governance-Cm-I8RMz.js → Governance-D4x0pp_m.js} +1 -1
  33. package/src/assets/web-panel/assets/{Inference-CPvbhvgt.js → Inference-T3KvwPYR.js} +1 -1
  34. package/src/assets/web-panel/assets/{KnowledgeGraph-sYNDZaoi.js → KnowledgeGraph-Ddv3KUv3.js} +1 -1
  35. package/src/assets/web-panel/assets/{Logs-BZY_3CRZ.js → Logs-DfH-Dkae.js} +2 -2
  36. package/src/assets/web-panel/assets/{MarkdownRenderer-up0BW6pv.js → MarkdownRenderer-DHW3PbCq.js} +1 -1
  37. package/src/assets/web-panel/assets/{Marketplace-C5MEJ2Qe.js → Marketplace-tjgb0R3D.js} +1 -1
  38. package/src/assets/web-panel/assets/{McpTools-ihdrn43I.js → McpTools-DHAk5nYX.js} +5 -5
  39. package/src/assets/web-panel/assets/{Memory-Br8bPMlh.js → Memory-A2Yx7thM.js} +2 -2
  40. package/src/assets/web-panel/assets/{MobileBridge-BNntgrYW.js → MobileBridge-BEmTVfN5.js} +1 -1
  41. package/src/assets/web-panel/assets/{MobileProjects-BdV915mw.js → MobileProjects-DuFHUgE4.js} +1 -1
  42. package/src/assets/web-panel/assets/{Mtc-A3wDmlqL.js → Mtc-BDSll0OZ.js} +2 -2
  43. package/src/assets/web-panel/assets/{MtcAudit-CF-mBLWM.js → MtcAudit-CuBvluaS.js} +2 -2
  44. package/src/assets/web-panel/assets/{Multisig-Iy2k_MSo.js → Multisig-BmXAA-Sb.js} +3 -3
  45. package/src/assets/web-panel/assets/{NLProgramming-kk0W7HUb.js → NLProgramming-ci2stZAe.js} +1 -1
  46. package/src/assets/web-panel/assets/{Notes-B5u5t_4S.js → Notes-D-1RpqnS.js} +4 -4
  47. package/src/assets/web-panel/assets/{NotificationSettings-BN0POf6_.js → NotificationSettings-C0GyitIT.js} +1 -1
  48. package/src/assets/web-panel/assets/OrderTableRenderer-U2bN-hj5.js +1 -0
  49. package/src/assets/web-panel/assets/{Organization-DwWQESuN.js → Organization-BNZgpPci.js} +4 -4
  50. package/src/assets/web-panel/assets/{Overflow-DG6klrcC.js → Overflow-CDidKmUN.js} +1 -1
  51. package/src/assets/web-panel/assets/{P2P-BwJcKkgZ.js → P2P-BnreBaXq.js} +2 -2
  52. package/src/assets/web-panel/assets/PdhVaultBrowser-DwJUxO9j.js +7 -0
  53. package/src/assets/web-panel/assets/{Permissions-CGMXe4TX.js → Permissions-BQGgJPH0.js} +4 -4
  54. package/src/assets/web-panel/assets/PersonalDataHub-k_fSkCwL.js +9 -0
  55. package/src/assets/web-panel/assets/{Pipeline-BzJfeoGt.js → Pipeline-WGqKMqau.js} +1 -1
  56. package/src/assets/web-panel/assets/{Privacy-DLh3Bblx.js → Privacy-DtHj9Ymq.js} +1 -1
  57. package/src/assets/web-panel/assets/{ProjectInit-USVWW36c.js → ProjectInit-B3wH2SFC.js} +2 -2
  58. package/src/assets/web-panel/assets/{ProjectSettings-CiiOn62h.js → ProjectSettings-Cd0cgcA1.js} +2 -2
  59. package/src/assets/web-panel/assets/Projects-BbgmyQnS.js +1 -0
  60. package/src/assets/web-panel/assets/{Providers-CBPWWzpu.js → Providers-DTpxEXur.js} +1 -1
  61. package/src/assets/web-panel/assets/{QrScannerModal-QVwoRUq3.js → QrScannerModal-B2v6gR-C.js} +1 -1
  62. package/src/assets/web-panel/assets/{QuickAsk-CXnR-2Vn.js → QuickAsk-D3Nr9xXR.js} +1 -1
  63. package/src/assets/web-panel/assets/{Recommend-ClaNzjmF.js → Recommend-C9inoMky.js} +1 -1
  64. package/src/assets/web-panel/assets/{RemoteSession-C3rGw8vJ.js → RemoteSession-Bqk3EYSu.js} +2 -2
  65. package/src/assets/web-panel/assets/{Reputation-Ci-OWAoP.js → Reputation-41KFG646.js} +1 -1
  66. package/src/assets/web-panel/assets/{Row-DRhAwXOS.js → Row-DqAaqqCv.js} +1 -1
  67. package/src/assets/web-panel/assets/{RssFeed-BQLJQ2_y.js → RssFeed-CMDpCDKc.js} +3 -3
  68. package/src/assets/web-panel/assets/{Search-QQUpkfFd.js → Search-B6mtegNL.js} +1 -1
  69. package/src/assets/web-panel/assets/{Security-DdXKzuKT.js → Security-BaePFVZ8.js} +4 -4
  70. package/src/assets/web-panel/assets/{Services-x2Zh62Qd.js → Services-DeG3Qscl.js} +2 -2
  71. package/src/assets/web-panel/assets/{Skeleton-GdY4KwRz.js → Skeleton-D_QP7F90.js} +1 -1
  72. package/src/assets/web-panel/assets/{Skills-Bv4tY1Fd.js → Skills-DLGyUgIA.js} +1 -1
  73. package/src/assets/web-panel/assets/{Sla-C3QnM-11.js → Sla-BN2pxW1Q.js} +1 -1
  74. package/src/assets/web-panel/assets/{SpeechSettings-Bl3ytvmI.js → SpeechSettings-BWsZPd8B.js} +1 -1
  75. package/src/assets/web-panel/assets/{SyncSettings-Wp9IwTsP.js → SyncSettings-VOZRPODW.js} +2 -2
  76. package/src/assets/web-panel/assets/Tasks-3bDAUz8K.js +1 -0
  77. package/src/assets/web-panel/assets/{Templates-CGfvVVM9.js → Templates-eJSob-q0.js} +1 -1
  78. package/src/assets/web-panel/assets/{Tenant-CVXmwQ3U.js → Tenant-Bdwk8Rwy.js} +1 -1
  79. package/src/assets/web-panel/assets/{Terminal-bvwrt03E.js → Terminal-CsMLKIoV.js} +2 -2
  80. package/src/assets/web-panel/assets/{TimelineRenderer-D0g74KhH.js → TimelineRenderer-D5qkbPKT.js} +1 -1
  81. package/src/assets/web-panel/assets/{Tokens-BH4IwzlT.js → Tokens-DKgwn8hI.js} +1 -1
  82. package/src/assets/web-panel/assets/{Trigger-DJOpM533.js → Trigger-HlEHniGM.js} +1 -1
  83. package/src/assets/web-panel/assets/{Trust-B43EPRLr.js → Trust-CdPcsBpN.js} +1 -1
  84. package/src/assets/web-panel/assets/{UkeySign-BmBFG-em.js → UkeySign-vAdXd-vG.js} +1 -1
  85. package/src/assets/web-panel/assets/{VideoEditing-n9oJwB8k.js → VideoEditing-9hHBYFnH.js} +1 -1
  86. package/src/assets/web-panel/assets/{Wallet-D5QeivHp.js → Wallet-Dxh5d1yR.js} +4 -4
  87. package/src/assets/web-panel/assets/{WebAuthn-DcNy7igO.js → WebAuthn-BsFmLHkp.js} +3 -3
  88. package/src/assets/web-panel/assets/{WorkflowEditor-BVjc7-5-.js → WorkflowEditor-Cn0OIwLn.js} +1 -1
  89. package/src/assets/web-panel/assets/{chat-Dy5Tfj3m.js → chat-CJ19O6Dh.js} +1 -1
  90. package/src/assets/web-panel/assets/{colors-C4c2CNZU.js → colors-Du9jzLN0.js} +1 -1
  91. package/src/assets/web-panel/assets/{compact-item-DPa3O5vN.js → compact-item-DhEscfzw.js} +1 -1
  92. package/src/assets/web-panel/assets/{createContext-TLcfNA6_.js → createContext-CwzEfF3i.js} +1 -1
  93. package/src/assets/web-panel/assets/devWarning-BBMFnsja.js +1 -0
  94. package/src/assets/web-panel/assets/{hasIn-D41LVFkp.js → hasIn-DT_GSE6J.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-MKZDje0H.js → index-1LoutPJd.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-DljFsVGI.js → index-53z1YUxX.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-BsQ7Ev6i.js → index-B6QDWRLk.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BQiIxHBy.js → index-B8s5FxJY.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-CQrEHoOG.js → index-BF-ZCVGE.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-0oevYjfT.js → index-BFD0cEna.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-Cip7LWml.js → index-BIYTjbv_.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-BPTGAjee.js → index-BQWENaZf.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CzZ49YZL.js → index-BgSR2WMG.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-388pLGJ1.js → index-BnHhFnwt.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-Di4X8cfI.js → index-BrkJ7JPm.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-BYPr9fkz.js → index-C4SN3by5.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BSM1cHVK.js → index-CAVW0cWM.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-CX0VsoP4.js → index-CGvgnfl9.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-DBUgRs4D.js → index-CQWxDOvM.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-OHAfRu_3.js → index-Cc9aPkv-.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-tQ3igERQ.js → index-Cnok8mhZ.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-CVjgm992.js → index-CyEhUJcu.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-Yjr6cqSK.js → index-D-QkW1fp.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-iQ6gtFih.js → index-D3llLkYM.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-DNsBj2Ob.js → index-D4kZoXNr.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BPtrOBmW.js → index-D5IytTND.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-CSxex23J.js → index-D8gt0j7r.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-WinCp6du.js → index-DN60VBn5.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-CXl0YPNG.js → index-DWL3SYN3.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-C7xhTVyP.js → index-DfRDyY1q.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-Cq_hlWNt.js → index-DhXay17G.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-B8nLBZbv.js → index-DnVVYKCE.js} +3 -3
  123. package/src/assets/web-panel/assets/{index-CNk_ZooP.js → index-Dny_ZnAO.js} +1 -1
  124. package/src/assets/web-panel/assets/index-Do8JMV4N.js +1 -0
  125. package/src/assets/web-panel/assets/{index-BvmziZSG.js → index-DtRwLhee.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-BvopLC_T.js → index-DzjzrOli.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-CWK4zOPe.js → index-Mobw3PHs.js} +1 -1
  128. package/src/assets/web-panel/assets/{index-Btk9qLL2.js → index-NA2oBLSB.js} +1 -1
  129. package/src/assets/web-panel/assets/index-UYAJ6iNM.js +1 -0
  130. package/src/assets/web-panel/assets/{index-WEJr8PL5.js → index-VeHs6qH0.js} +1 -1
  131. package/src/assets/web-panel/assets/{index-Korc3QIe.js → index-gFjYdstW.js} +1 -1
  132. package/src/assets/web-panel/assets/{index-D2Nkivlm.js → index-tND8-TDU.js} +1 -1
  133. package/src/assets/web-panel/assets/{index-pt3s7yvV.js → index-v5HLYCVa.js} +1 -1
  134. package/src/assets/web-panel/assets/{initDefaultProps-BFZu87WZ.js → initDefaultProps-Cvt59c10.js} +1 -1
  135. package/src/assets/web-panel/assets/{motion-DJIo7qvt.js → motion-D15pPEzl.js} +1 -1
  136. package/src/assets/web-panel/assets/{move-Cfr5qknL.js → move-N55KeXJ7.js} +1 -1
  137. package/src/assets/web-panel/assets/{mtc-parser-Bgc-OadH.js → mtc-parser-CyFO1bYP.js} +1 -1
  138. package/src/assets/web-panel/assets/{omit-X3WI-TNp.js → omit-B5IXfxU2.js} +1 -1
  139. package/src/assets/web-panel/assets/{pickAttrs-pJhU9IxK.js → pickAttrs-CpVqsulV.js} +1 -1
  140. package/src/assets/web-panel/assets/{placementArrow-BNg_Vj3T.js → placementArrow-ME36sMF3.js} +1 -1
  141. package/src/assets/web-panel/assets/{responsiveObserve-TeSEGQ5-.js → responsiveObserve-BXAIR1r-.js} +1 -1
  142. package/src/assets/web-panel/assets/{slide-D_t_P0bv.js → slide-BkOX3-Dp.js} +1 -1
  143. package/src/assets/web-panel/assets/{statusUtils-DrrIMwAT.js → statusUtils-Cy4Aklpt.js} +1 -1
  144. package/src/assets/web-panel/assets/{styleChecker-BjZCuFRm.js → styleChecker-gUd2T206.js} +1 -1
  145. package/src/assets/web-panel/assets/{useFlexGapSupport-rTFdlqdQ.js → useFlexGapSupport-CaVD4o99.js} +1 -1
  146. package/src/assets/web-panel/assets/{useFs-BidCpfLX.js → useFs--pFGl0KD.js} +1 -1
  147. package/src/assets/web-panel/assets/usePersonalDataHub-D45iP86i.js +1 -0
  148. package/src/assets/web-panel/assets/{vnode-BrbcRiHZ.js → vnode-BayoChH_.js} +1 -1
  149. package/src/assets/web-panel/assets/{zoom-PISX7AkR.js → zoom-CpP38poi.js} +1 -1
  150. package/src/assets/web-panel/index.html +1 -1
  151. package/src/commands/hub.js +350 -39
  152. package/src/data/changelog.json +27 -1
  153. package/src/gateways/ws/personal-data-hub-protocol.js +86 -23
  154. package/src/lib/host-adb-bridge.js +92 -14
  155. package/src/lib/personal-data-hub-wiring.js +173 -13
  156. package/src/assets/web-panel/assets/OrderTableRenderer-CHkSUrXB.js +0 -1
  157. package/src/assets/web-panel/assets/PdhVaultBrowser-BwOHG0in.js +0 -7
  158. package/src/assets/web-panel/assets/PersonalDataHub-ziYqg7-A.js +0 -8
  159. package/src/assets/web-panel/assets/Projects-6V-PNmcA.js +0 -1
  160. package/src/assets/web-panel/assets/Tasks-CF3rIrDe.js +0 -1
  161. package/src/assets/web-panel/assets/devWarning-BAwdDA_5.js +0 -1
  162. package/src/assets/web-panel/assets/index-DEjVkdzq.js +0 -1
  163. package/src/assets/web-panel/assets/index-LMOc5xrS.js +0 -1
  164. 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
- const lines = stdout.split("\n").slice(1);
90
- const serials = [];
91
- for (const rawLine of lines) {
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 (state === "device") serials.push(serial);
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 serials;
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, opts);
646
+ return await queryContacts(params, invokeOptions);
574
647
  case "app.list":
575
- return await listApps(params, opts);
648
+ return await listApps(params, invokeOptions);
576
649
  case "sms.query":
577
- return await querySms(params, opts);
650
+ return await querySms(params, invokeOptions);
578
651
  case "call.query":
579
- return await queryCallLog(params, opts);
652
+ return await queryCallLog(params, invokeOptions);
580
653
  case "media.list":
581
- return await listMedia(params, opts);
654
+ return await listMedia(params, invokeOptions);
582
655
  case "snapshot.list":
583
- return await listSnapshots(params, opts);
656
+ return await listSnapshots(params, invokeOptions);
584
657
  case "snapshot.read":
585
- return await readSnapshot(params, opts);
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 { listDevices } = await import("./host-adb-bridge.js");
505
- const serials = await listDevices();
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
- deviceConnected: Array.isArray(serials) && serials.length > 0,
508
- serial: serials && serials[0],
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 runtimeCookieAdapterClasses = new Set([
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
- : runtimeCookieAdapterClasses.has(Cls)
838
- ? new Cls({ fetchFn: sourceJsonFetch })
839
- : new Cls();
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 (_e) {}
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 (_e) {}
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 (_e) {}
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};