chainlesschain 0.162.102 → 0.162.104
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/README.md +1 -1
- package/package.json +2 -2
- package/scripts/postinstall.mjs +33 -3
- package/src/assets/web-panel/assets/{AIOps-C1k00Gsz.js → AIOps-7wopfJEc.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BinI6ZDq.js → ActionButton-D6EncMBP.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-Cg0jo_cd.js → Analytics-BLkJWETZ.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CClMs_AA.js → AppLayout-y4u_FcxD.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-BtQgvFdM.js → Audit-hlo8J9H_.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-43FRi7ZI.js → Backup-DqzEt7Xc.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-Cfza-FZU.js → BaseInput-DSjI2QZ0.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-7AjHSiSC.js → Chat-CgQ_Bgeg.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-Bh1YNdtx.js → ChatBubbleRenderer-DJL3sUhO.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DgjfqlWW.js → Checkbox-DBZsek3m.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-CkwOBThj.js → Codegen-DI31IpGL.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Cohk5WYM.js → Col-S4VUKCBd.js} +1 -1
- package/src/assets/web-panel/assets/{Community-D3LMGh3F.js → Community-CxgAmvQv.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DqoMJmh0.js → Compact-CQGXVWYd.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BVjWZlEj.js → Compliance-CGr19kIb.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C0lqQPqu.js → Cowork-rH5D-DX-.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-DHd_PJZS.js → Cron-C-nzaMqo.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-BphK2Q9u.js → Crosschain-BhF204Dq.js} +1 -1
- package/src/assets/web-panel/assets/{DID-CWIw0aG4.js → DID-CjG7LevM.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CKgDU9U6.js → Dashboard-4KQLCTgc.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DkIlDUXF.js → Dropdown-Ci6FL0LF.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-5sXA9hwZ.js → EmailListRenderer-CccC9rY4.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CgcdJLH7.js → FamilyGuardDashboard-cohPI6FO.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DPOcJISA.js → Federation-DgxfOhS7.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DxOutBMJ.js → FormItemContext-DECvusFi.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-BYVNtkcd.js → GenericCardRenderer-CLTKtVEy.js} +1 -1
- package/src/assets/web-panel/assets/{Git-B37LKxOu.js → Git-DzuwhoVf.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CnKcx5un.js → Governance-C3SuwAQZ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-CbRAWN3_.js → Inference-CW8SeIAb.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-D0w6RfE_.js → KnowledgeGraph-B4wJIJ-0.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DxBDKpzq.js → Logs-CbjpWALx.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-DNLi6O_3.js → Marketplace-DCUW-nnI.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-s0sBCPXw.js → McpTools-DagPQpHC.js} +4 -4
- package/src/assets/web-panel/assets/{Memory-BdSEgpmP.js → Memory-DrzxLek2.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Dz7nz4K9.js → MobileBridge-Xz4D9zEc.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-DakdA2PC.js → MobileProjects-BYw4mHvO.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-Be9OBypk.js → Mtc-30fdfUjX.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-KI2ih4Tl.js → MtcAudit-CLzGDzjM.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-Cg3jHFjL.js → Multisig-Taa7sLmO.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BepHx8fU.js → NLProgramming-BmxE8pja.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-2f05HyqN.js → Notes-CWsIiNXy.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-Blwio_G5.js → NotificationSettings-DphQdsow.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-D7HJfvo_.js → OrderTableRenderer-BoWoi08m.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-Uihlz1cI.js → Organization-Crgm-1TX.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-gZx8kADL.js → Overflow-5lZ6XU8p.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DqEEGqba.js → P2P-CS-HiHCu.js} +2 -2
- package/src/assets/web-panel/assets/PdhVaultBrowser-DaxnZdvZ.js +7 -0
- package/src/assets/web-panel/assets/{Permissions-ERF2ZQ3G.js → Permissions-BDyk_RXH.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CzDy9CFB.js → PersonalDataHub-D_7W0q0f.js} +2 -2
- package/src/assets/web-panel/assets/{Pipeline-Dy4x9Ejw.js → Pipeline-BBh5N_nJ.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-C6UJys52.js → Privacy-D3nQr2CR.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-Bmi027fa.js → ProjectInit-DB2awvBj.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-NinSZmGA.js → ProjectSettings-Ca_tlgU9.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DeW-p-hT.js → Projects-Dc0F9486.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-4hxrBTLo.js → Providers-D3NaA6yG.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-B5inZlW8.js → QuickAsk-CdSYgl7s.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-7lpBm00-.js → Recommend-nolWD-R0.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-QfdGZxYO.js → Reputation-5stJBPxY.js} +1 -1
- package/src/assets/web-panel/assets/{Row-DqHC7BCT.js → Row-CB4Ns1zc.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-B3F1aGP6.js → RssFeed-CYNnqrO3.js} +3 -3
- package/src/assets/web-panel/assets/{Search-BXtjuoYO.js → Search-C01IKJzD.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Iy0MOV-A.js → Security-v6rOHkAt.js} +4 -4
- package/src/assets/web-panel/assets/{Services-C_puMp_6.js → Services-C5p6LeFa.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-Bg6mTVZU.js → Skeleton-B-a0YWJk.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-D4wXhanR.js → Skills-CoWWWNM3.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Cgr2B9R6.js → Sla-BW4sMMYV.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-ctYqZEY5.js → SpeechSettings-vR2XbHTs.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-C3qWh9y4.js → SyncSettings-ByVjlC-k.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-D3AAgUx1.js → Tasks-CnWlikMD.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-Bm_Dyz8T.js → Templates-DMak8sf4.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-DOSrOw9X.js → Tenant-8nNeIn3c.js} +1 -1
- package/src/assets/web-panel/assets/Terminal-DNhoYCsQ.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-BB8Qq6Cx.js → TimelineRenderer-BCfyEbsG.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-DqyF_Flh.js → Tokens-Dx6zQD-k.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-ClwQC2hP.js → Trigger-8IxN6NeY.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-DGQSLPQ0.js → Trust-B3ALLmzY.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BAkeYsUO.js → UkeySign-QP52j-1F.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-WyUxS65Y.js → VideoEditing-DugXO1Jj.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-Br7GdjEg.js → Wallet-DST9EbXV.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-bKs1dahj.js → WebAuthn-tAY0CGIn.js} +5 -5
- package/src/assets/web-panel/assets/{WorkflowEditor-CVqAALYe.js → WorkflowEditor-CFQ6BAuy.js} +1 -1
- package/src/assets/web-panel/assets/{chat-BDGDRbab.js → chat-Dx_Vki33.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DIUxZwT8.js → colors-CDu_PgKe.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C2iM4GmN.js → compact-item-DAmmY6Pd.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-D27NeHwO.js → createContext-BNfI5YlY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-DVHcIug4.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-D1lXdsFj.js → hasIn-DnQf32YV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bi8u5GsP.js → index--dugfJRR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEO9vhv7.js → index-5-fynKGl.js} +3 -3
- package/src/assets/web-panel/assets/{index-BE9bNvdn.js → index-B2E223yV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cb9u9MMo.js → index-BAuM_u-a.js} +1 -1
- package/src/assets/web-panel/assets/{index-DkOu8er7.js → index-BD42XJvr.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8POWlbO.js → index-BXoV0bGH.js} +1 -1
- package/src/assets/web-panel/assets/{index-BqbjsJcS.js → index-B_33ohRv.js} +1 -1
- package/src/assets/web-panel/assets/{index-DK0jgmJg.js → index-Bk7SsC3G.js} +1 -1
- package/src/assets/web-panel/assets/{index-B6kc4-nD.js → index-Bp9dZbVc.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnCVI295.js → index-BpCwmJYd.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFEwtE3q.js → index-Bq3-M0HD.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAnMUhHO.js → index-BvOZ4bMA.js} +1 -1
- package/src/assets/web-panel/assets/index-C7BeWaBy.js +1 -0
- package/src/assets/web-panel/assets/{index-CsIw-YQF.js → index-CAVRxcro.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dc4k4V1u.js → index-CHKaGc76.js} +1 -1
- package/src/assets/web-panel/assets/{index-yIM-KxVm.js → index-CMQaA1eY.js} +1 -1
- package/src/assets/web-panel/assets/{index-DFhdJm7M.js → index-CN1Frc6z.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIVYPlpl.js → index-CZGselS2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Do13fQ5W.js → index-CjgCRQPR.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bil9t91t.js → index-CokbOERQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CiA-L5ld.js → index-D-1Y7Klr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cbqr8kW6.js → index-D3j2PYB3.js} +1 -1
- package/src/assets/web-panel/assets/{index-DfSav-yQ.js → index-D8JSX4W7.js} +1 -1
- package/src/assets/web-panel/assets/{index-HZGu1woY.js → index-DJ9fqGMi.js} +1 -1
- package/src/assets/web-panel/assets/{index-BTedVe_v.js → index-DQf4uzBI.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cgf3zMwq.js → index-DVuEZdlE.js} +1 -1
- package/src/assets/web-panel/assets/index-Dd1aUrrl.js +1 -0
- package/src/assets/web-panel/assets/{index-BTUFhfHs.js → index-DefG2WdL.js} +1 -1
- package/src/assets/web-panel/assets/{index-DrS-Mrm-.js → index-DnciHih8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CoygRreE.js → index-Do9QgRwv.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFY1KjB1.js → index-DrRdylF0.js} +1 -1
- package/src/assets/web-panel/assets/{index-CKMDgjfh.js → index-DwLMCuFo.js} +1 -1
- package/src/assets/web-panel/assets/{index-Ca8n97h9.js → index-HR5cV6TS.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5ZB5lsV.js → index-Mbq7juVQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-CfR3Pvsu.js → index-O-6dvZFC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNk98bb1.js → index-ThxGxLMM.js} +1 -1
- package/src/assets/web-panel/assets/{index-Y1rkRas5.js → index-XgiYAJGU.js} +1 -1
- package/src/assets/web-panel/assets/{index-CDzSUTpa.js → index-yn1CVu0v.js} +1 -1
- package/src/assets/web-panel/assets/{index-ET5LYk9B.js → index-yzrUI8Lj.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-C0Yrc6yY.js → initDefaultProps-CgFmFSzg.js} +1 -1
- package/src/assets/web-panel/assets/{motion-DnOI85ek.js → motion-6cQjBgS8.js} +1 -1
- package/src/assets/web-panel/assets/{move-DT9zQPZp.js → move-BANmUuW-.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DFtDi5Wd.js → omit-BNXz07Cb.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-Cobkb_rd.js → pickAttrs-CCuPnfHK.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-DWQDu4i-.js → placementArrow-BoM9dzEu.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-daoQcWcX.js → responsiveObserve-BX4PJmtw.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BLkzd2OV.js → slide-Cp0GX__V.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Uyxi81M0.js → statusUtils-DB45lYg-.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-Dtw5lUcs.js → styleChecker-BK22ABVM.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-_JpMgpdt.js → useFlexGapSupport-C4dr4HyL.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-huwAlPD-.js → useFs-G4VQ7ftf.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-7cafj8_f.js → usePersonalDataHub-BbVsrc-b.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DYUSfRt7.js → vnode-2W6kp99p.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-B-tjvmer.js → zoom-Bheyn_9H.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/__tests__/hub-health.test.js +105 -0
- package/src/commands/__tests__/hub-stats.test.js +106 -0
- package/src/commands/hub.js +111 -32
- package/src/gateways/ws/personal-data-hub-protocol.js +16 -3
- package/src/lib/__tests__/pdh-wiring-load-error.test.js +59 -0
- package/src/lib/personal-data-hub-wiring.js +182 -7
- package/src/assets/web-panel/assets/PdhVaultBrowser-BHUi1nb5.js +0 -7
- package/src/assets/web-panel/assets/Terminal-DrG0bEOS.js +0 -3
- package/src/assets/web-panel/assets/devWarning-Daz0PHhS.js +0 -1
- package/src/assets/web-panel/assets/index-Cbe_eJAR.js +0 -1
- package/src/assets/web-panel/assets/index-DgcPjW1c.js +0 -1
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* personal-data-hub-wiring — rewritePdhLoadError unit tests.
|
|
3
|
+
*
|
|
4
|
+
* Why this exists: after the lazy-load refactor, a partial/corrupt pdh
|
|
5
|
+
* install (e.g. an interrupted `npm i -g` that left adapter files unwritten)
|
|
6
|
+
* surfaces as a raw ESM `ERR_MODULE_NOT_FOUND` the first time a `cc hub …`
|
|
7
|
+
* command touches the hub. That default error reads like a bug in the
|
|
8
|
+
* package, not a local-install problem, so users can't self-fix. This rewrite
|
|
9
|
+
* turns it into an actionable repair message. We must NOT swallow real bugs
|
|
10
|
+
* inside pdh (a TypeError, or a missing module that isn't pdh) — those pass
|
|
11
|
+
* through untouched. This suite pins both behaviors.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { describe, it, expect } from "vitest";
|
|
15
|
+
import { _rewritePdhLoadError } from "../personal-data-hub-wiring.js";
|
|
16
|
+
|
|
17
|
+
describe("rewritePdhLoadError", () => {
|
|
18
|
+
it("rewrites ERR_MODULE_NOT_FOUND for a missing pdh adapter file", () => {
|
|
19
|
+
const err = new Error(
|
|
20
|
+
"Cannot find module '.../@chainlesschain/personal-data-hub/lib/adapters/wechat/index.js'",
|
|
21
|
+
);
|
|
22
|
+
err.code = "ERR_MODULE_NOT_FOUND";
|
|
23
|
+
err.url =
|
|
24
|
+
"file:///.../@chainlesschain/personal-data-hub/lib/adapters/wechat/index.js";
|
|
25
|
+
const out = _rewritePdhLoadError(err);
|
|
26
|
+
expect(out).not.toBe(err);
|
|
27
|
+
expect(out.code).toBe("PDH_INSTALL_INCOMPLETE");
|
|
28
|
+
expect(out.cause).toBe(err);
|
|
29
|
+
expect(out.message).toMatch(/incomplete/i);
|
|
30
|
+
expect(out.message).toMatch(/npm i -g chainlesschain/);
|
|
31
|
+
// Keep the original error text for debugging.
|
|
32
|
+
expect(out.message).toMatch(/adapters\/wechat\/index\.js/);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
it("rewrites when the package root itself is missing (message-based, no url)", () => {
|
|
36
|
+
const err = new Error(
|
|
37
|
+
"Cannot find package '@chainlesschain/personal-data-hub' imported from x",
|
|
38
|
+
);
|
|
39
|
+
err.code = "ERR_MODULE_NOT_FOUND";
|
|
40
|
+
const out = _rewritePdhLoadError(err);
|
|
41
|
+
expect(out.code).toBe("PDH_INSTALL_INCOMPLETE");
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("passes through a missing module that is NOT pdh (unrelated dep)", () => {
|
|
45
|
+
const err = new Error("Cannot find module './some-other-thing.js'");
|
|
46
|
+
err.code = "ERR_MODULE_NOT_FOUND";
|
|
47
|
+
expect(_rewritePdhLoadError(err)).toBe(err);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("passes through a real pdh runtime bug (not a resolution failure)", () => {
|
|
51
|
+
const err = new TypeError("foo is not a function in personal-data-hub");
|
|
52
|
+
expect(_rewritePdhLoadError(err)).toBe(err);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
it("is null/undefined safe", () => {
|
|
56
|
+
expect(_rewritePdhLoadError(null)).toBe(null);
|
|
57
|
+
expect(_rewritePdhLoadError(undefined)).toBe(undefined);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
@@ -29,11 +29,20 @@ import { mkdirSync } from "node:fs";
|
|
|
29
29
|
// Hub package is CJS; in ESM we default-import then destructure (Node 22
|
|
30
30
|
// won't let us name-import a CJS module unless it ships a separate ESM
|
|
31
31
|
// shim, which we don't).
|
|
32
|
-
import
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
// PDH is loaded LAZILY (not a top-level static import) so that merely
|
|
33
|
+
// importing this wiring module — which happens on EVERY `cc` invocation,
|
|
34
|
+
// because index.js statically pulls in commands/hub.js (getHub) AND the
|
|
35
|
+
// agent/chat/serve/ui runtime chain (ws pdh-protocol → this wiring) — does
|
|
36
|
+
// NOT eagerly evaluate the entire personal-data-hub adapter graph. Wins:
|
|
37
|
+
// • Robustness: a partial/corrupt pdh install (e.g. an interrupted
|
|
38
|
+
// `npm i -g` that left adapter files unwritten) no longer bricks
|
|
39
|
+
// unrelated commands like `cc -v` with a cryptic ERR_MODULE_NOT_FOUND.
|
|
40
|
+
// pdh only loads when a `cc hub …` / web-shell hub topic actually runs.
|
|
41
|
+
// • Startup cost: non-hub commands skip loading 50+ adapter modules.
|
|
42
|
+
// The bindings below are populated by ensurePdhLoaded(), which initHub() and
|
|
43
|
+
// initHubMinimal() await before touching any of them.
|
|
44
|
+
let bootstrapWechatAdapter, probeWeChatEnv;
|
|
45
|
+
let LocalVault,
|
|
37
46
|
AdapterRegistry,
|
|
38
47
|
AnalysisEngine,
|
|
39
48
|
MockAdapter,
|
|
@@ -124,8 +133,172 @@ const {
|
|
|
124
133
|
EntityResolverEmbeddingStage,
|
|
125
134
|
EntityResolverLLMStage,
|
|
126
135
|
runAnalysisSkill,
|
|
127
|
-
ANALYSIS_SKILL_NAMES
|
|
128
|
-
|
|
136
|
+
ANALYSIS_SKILL_NAMES;
|
|
137
|
+
|
|
138
|
+
let _pdhLoadPromise = null;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Turn a raw ESM module-resolution failure for the personal-data-hub package
|
|
142
|
+
* into an actionable "your install is incomplete — repair it" error.
|
|
143
|
+
*
|
|
144
|
+
* Today this happens when a global `npm i -g chainlesschain` is interrupted
|
|
145
|
+
* mid-extraction (commonly a running `cc` / node process holding a lock on a
|
|
146
|
+
* native .node file → EBUSY/EPERM), leaving the pdh package partially
|
|
147
|
+
* written. The default Node error ("Cannot find module
|
|
148
|
+
* .../personal-data-hub/lib/adapters/wechat/index.js") reads like a bug in
|
|
149
|
+
* the package rather than a local-install problem, so users can't self-fix.
|
|
150
|
+
* Non-resolution errors (a real bug inside pdh) pass through unchanged.
|
|
151
|
+
*/
|
|
152
|
+
function rewritePdhLoadError(err) {
|
|
153
|
+
const isMissingModule =
|
|
154
|
+
err &&
|
|
155
|
+
(err.code === "ERR_MODULE_NOT_FOUND" ||
|
|
156
|
+
/Cannot find (module|package)/.test(err.message || ""));
|
|
157
|
+
const mentionsPdh = /personal-data-hub/.test(
|
|
158
|
+
(err && (err.url || err.message)) || "",
|
|
159
|
+
);
|
|
160
|
+
if (!isMissingModule || !mentionsPdh) return err;
|
|
161
|
+
const wrapped = new Error(
|
|
162
|
+
"Personal Data Hub package is missing files — your install looks " +
|
|
163
|
+
"incomplete.\n" +
|
|
164
|
+
"This usually means a global install was interrupted (often a running " +
|
|
165
|
+
"`cc`/node process locking a native file).\n" +
|
|
166
|
+
"Repair it with: npm i -g chainlesschain@latest\n" +
|
|
167
|
+
"(close any running `cc` sessions first so the install isn't blocked).\n" +
|
|
168
|
+
`Original error: ${err.message}`,
|
|
169
|
+
);
|
|
170
|
+
wrapped.code = "PDH_INSTALL_INCOMPLETE";
|
|
171
|
+
wrapped.cause = err;
|
|
172
|
+
return wrapped;
|
|
173
|
+
}
|
|
174
|
+
// Test seam (mirrors _atomicWriteJson600): unit-test the error rewrite
|
|
175
|
+
// without provoking a real partial-install.
|
|
176
|
+
export { rewritePdhLoadError as _rewritePdhLoadError };
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Lazily import the personal-data-hub package + wechat adapter and populate
|
|
180
|
+
* the module-level binding holders above. Memoized so concurrent
|
|
181
|
+
* getHub()/getHubMinimal() callers share one load. Must be awaited by any
|
|
182
|
+
* code path that uses a pdh binding (initHub / initHubMinimal).
|
|
183
|
+
*/
|
|
184
|
+
function ensurePdhLoaded() {
|
|
185
|
+
if (!_pdhLoadPromise) {
|
|
186
|
+
_pdhLoadPromise = (async () => {
|
|
187
|
+
let hubMod, waMod;
|
|
188
|
+
try {
|
|
189
|
+
hubMod = await import("@chainlesschain/personal-data-hub");
|
|
190
|
+
// Composed specifier dodges vite/vitest static import-analysis of
|
|
191
|
+
// subpath exports (same trick as loadAIChatHealthChecker below).
|
|
192
|
+
const wechatSpec =
|
|
193
|
+
"@chainlesschain/personal-data-hub" + "/adapters/wechat";
|
|
194
|
+
waMod = await import(wechatSpec);
|
|
195
|
+
} catch (err) {
|
|
196
|
+
// Don't poison the memoized promise — a repaired install (or a retry
|
|
197
|
+
// in a long-lived process) should be able to load.
|
|
198
|
+
_pdhLoadPromise = null;
|
|
199
|
+
throw rewritePdhLoadError(err);
|
|
200
|
+
}
|
|
201
|
+
const hub = hubMod.default || hubMod;
|
|
202
|
+
const wechatAdapterModule = waMod.default || waMod;
|
|
203
|
+
({ bootstrapWechatAdapter, probeWeChatEnv } = wechatAdapterModule);
|
|
204
|
+
({
|
|
205
|
+
LocalVault,
|
|
206
|
+
AdapterRegistry,
|
|
207
|
+
AnalysisEngine,
|
|
208
|
+
MockAdapter,
|
|
209
|
+
OllamaClient,
|
|
210
|
+
CcKgSink,
|
|
211
|
+
CcRagSink,
|
|
212
|
+
FileKeyProvider,
|
|
213
|
+
generateKeyHex,
|
|
214
|
+
EmailAdapter,
|
|
215
|
+
AlipayBillAdapter,
|
|
216
|
+
SystemDataAndroidAdapter,
|
|
217
|
+
BrowserHistoryChromeAdapter,
|
|
218
|
+
BrowserHistoryEdgeAdapter,
|
|
219
|
+
VSCodeAdapter,
|
|
220
|
+
WinRecentAdapter,
|
|
221
|
+
GitActivityAdapter,
|
|
222
|
+
ShellHistoryAdapter,
|
|
223
|
+
LocalFilesAdapter,
|
|
224
|
+
BilibiliAdapter,
|
|
225
|
+
WeiboAdapter,
|
|
226
|
+
ZhihuAdapter,
|
|
227
|
+
DoubanAdapter,
|
|
228
|
+
BossZhipinAdapter,
|
|
229
|
+
CsdnAdapter,
|
|
230
|
+
DongchediAdapter,
|
|
231
|
+
TianyanchaAdapter,
|
|
232
|
+
DouyinAdapter,
|
|
233
|
+
XiaohongshuAdapter,
|
|
234
|
+
ToutiaoAdapter,
|
|
235
|
+
KuaishouAdapter,
|
|
236
|
+
GenshinAdapter,
|
|
237
|
+
HonorOfKingsAdapter,
|
|
238
|
+
ZuoyebangAdapter,
|
|
239
|
+
AlipayAdapter,
|
|
240
|
+
HuaweiLearningAdapter,
|
|
241
|
+
QQAdapter,
|
|
242
|
+
WeChatPcAdapter,
|
|
243
|
+
QQPcAdapter,
|
|
244
|
+
AppleHealthAdapter,
|
|
245
|
+
NeteaseMusicAdapter,
|
|
246
|
+
KugouMusicAdapter,
|
|
247
|
+
QQMusicAdapter,
|
|
248
|
+
XimalayaAdapter,
|
|
249
|
+
FanqieReadingAdapter,
|
|
250
|
+
QimaoReadingAdapter,
|
|
251
|
+
JoyrunAdapter,
|
|
252
|
+
KeepAdapter,
|
|
253
|
+
DidiConsumerAdapter,
|
|
254
|
+
MercedesMeAdapter,
|
|
255
|
+
IqiyiVideoAdapter,
|
|
256
|
+
TencentVideoAdapter,
|
|
257
|
+
XiguaVideoAdapter,
|
|
258
|
+
WeReadAdapter,
|
|
259
|
+
WpsDocAdapter,
|
|
260
|
+
TencentDocsAdapter,
|
|
261
|
+
BaiduNetdiskAdapter,
|
|
262
|
+
CamScannerDocAdapter,
|
|
263
|
+
IXiamenAdapter,
|
|
264
|
+
MeiyouAdapter,
|
|
265
|
+
TaxAdapter,
|
|
266
|
+
CmbcBankAdapter,
|
|
267
|
+
BocBankAdapter,
|
|
268
|
+
BankcommBankAdapter,
|
|
269
|
+
IcbcBankAdapter,
|
|
270
|
+
DcepAdapter,
|
|
271
|
+
Tmri12123Adapter,
|
|
272
|
+
DingTalkPcAdapter,
|
|
273
|
+
FeishuPcAdapter,
|
|
274
|
+
WeWorkPcAdapter,
|
|
275
|
+
BaiduMapAdapter,
|
|
276
|
+
TencentMapAdapter,
|
|
277
|
+
JdAdapter,
|
|
278
|
+
MeituanAdapter,
|
|
279
|
+
ElemeAdapter,
|
|
280
|
+
PinduoduoAdapter,
|
|
281
|
+
DianpingAdapter,
|
|
282
|
+
XianyuAdapter,
|
|
283
|
+
VipshopAdapter,
|
|
284
|
+
Train12306Adapter,
|
|
285
|
+
TaobaoAdapter,
|
|
286
|
+
CtripAdapter,
|
|
287
|
+
TongchengAdapter,
|
|
288
|
+
DidiAdapter,
|
|
289
|
+
AmapAdapter,
|
|
290
|
+
TelegramAdapter,
|
|
291
|
+
WhatsAppAdapter,
|
|
292
|
+
EntityResolver,
|
|
293
|
+
EntityResolverEmbeddingStage,
|
|
294
|
+
EntityResolverLLMStage,
|
|
295
|
+
runAnalysisSkill,
|
|
296
|
+
ANALYSIS_SKILL_NAMES,
|
|
297
|
+
} = hub);
|
|
298
|
+
})();
|
|
299
|
+
}
|
|
300
|
+
return _pdhLoadPromise;
|
|
301
|
+
}
|
|
129
302
|
import {
|
|
130
303
|
readFileSync,
|
|
131
304
|
writeFileSync,
|
|
@@ -209,6 +382,7 @@ export function resolveHubDir() {
|
|
|
209
382
|
}
|
|
210
383
|
|
|
211
384
|
async function initHub() {
|
|
385
|
+
await ensurePdhLoaded();
|
|
212
386
|
// Phase 1c: hoisted so the hub-level `bilibiliAdbSync` method can reuse
|
|
213
387
|
// the same bridge instance the system-data-android adapter wires below.
|
|
214
388
|
// Single bridge per hub keeps `bilibili.cookies` extension state /
|
|
@@ -1490,6 +1664,7 @@ let _hubMinimal = null;
|
|
|
1490
1664
|
let _hubMinimalInitPromise = null;
|
|
1491
1665
|
|
|
1492
1666
|
async function initHubMinimal() {
|
|
1667
|
+
await ensurePdhLoaded();
|
|
1493
1668
|
const hubDir = resolveHubDir();
|
|
1494
1669
|
mkdirSync(hubDir, { recursive: true });
|
|
1495
1670
|
mkdirSync(join(hubDir, "keys"), { recursive: true });
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-Bh1YNdtx.js","./vendor-BvqAck49.js","./index-CEO9vhv7.js","./icons-DP3uiYxy.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-D7HJfvo_.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-BB8Qq6Cx.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-5sXA9hwZ.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-BYVNtkcd.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{E as ue,r as E,b as w,I as y,P as u,J as O,U as v,c,S as C,V as x,_ as M,F as V,Z as se,a0 as le,R,K as m,Q as b,W as j,o as J}from"./vendor-BvqAck49.js";import{u as U}from"./usePersonalDataHub-7cafj8_f.js";import{_ as L,e as A,d as P}from"./index-CEO9vhv7.js";import{a9 as q,af as z,M as Q,aH as G,u as Z,aG as H,ap as K,ab as W,e as de,d as fe,k as pe,ah as me,az as _e,R as ge}from"./icons-DP3uiYxy.js";const I=Object.freeze({q:"",category:null,adapter:null,subtype:null,since:null,until:null}),B=50,Y=300,X=ue("pdhBrowser",()=>{const r=E({...I}),t=E([]),n=E(null),e=E(!1),o=E(!1),l=E(null),a=E(null),s=E(!1),i=E({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const D=w(()=>t.value.length>0),T=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=U();try{const[f,F]=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:F.byCategory||{},byAdapter:F.byAdapter||{},bySubtype:F.bySubtype||{},total:F.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=U();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 I))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={...I,...S},_&&(clearTimeout(_),_=null),g()}function ce(){r.value={...I},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:D,canLoadMore:T,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:K,email:H,shopping:Z,travel:G,system:Q,"ai-chat":z,other:q};function l(i){return o[i]||q}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 q},get MessageOutlined(){return W},get PlayCircleOutlined(){return K},get MailOutlined(){return H},get ShoppingOutlined(){return Z},get CarOutlined(){return G},get MobileOutlined(){return Q},get RobotOutlined(){return z},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"])):x("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,R(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"])):x("v-if",!0)],10,Oe))),128))])}const ke=L(he,[["render",Ce],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-ZT5Dbx/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),xe={__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 D(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 T={props:e,emit:o,placeholderText:l,adapterOptions:a,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:D,computed:w,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(T,"__isScriptSetup",{enumerable:!1,value:!0}),T}},Ee={class:"pdh-filter-bar"},Re={key:1,class:"hint"},De={key:2,class:"hint"};function Te(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",Ee,[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})):x("v-if",!0),n.shortQuery?(u(),O("span",Re,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",De,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):x("v-if",!0)])}const je=L(xe,[["render",Te],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-ZT5Dbx/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Ae={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=j(()=>A(()=>import("./ChatBubbleRenderer-Bh1YNdtx.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=j(()=>A(()=>import("./OrderTableRenderer-D7HJfvo_.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=j(()=>A(()=>import("./TimelineRenderer-BB8Qq6Cx.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),l=j(()=>A(()=>import("./EmailListRenderer-5sXA9hwZ.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=j(()=>A(()=>import("./GenericCardRenderer-BYVNtkcd.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:j,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function Le(r,t,n,e,o,l){return u(),C(le(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Fe=L(Ae,[["render",Le],["__file","/tmp/cc-web-panel-ZT5Dbx/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(Ie).join(",")});return[n,...e].join(`
|
|
5
|
-
`)+`
|
|
6
|
-
`}function Ie(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 Pe={__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]),P.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){P.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 P},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 qe(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(" 导出 ("+R(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const Be=L(Pe,[["render",qe],["__file","/tmp/cc-web-panel-ZT5Dbx/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Ve={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),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)}J(()=>{!n.hasResults&&!n.isLoading&&n.search()});const a={store:n,emptyHint:e,onCategorySelect:o,onSetFilter:l,onMounted:J,computed:w,get ReloadOutlined(){return ge},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:je,RendererDispatcher:Fe,ExportDropdown:Be};return Object.defineProperty(a,"__isScriptSetup",{enumerable:!1,value:!0}),a}},Ne={class:"pdh-browser-page"},Me={class:"page-header"},Je={class:"main-pane"},Ue={class:"results-summary"},ze={key:0},Qe={key:0},Ge={key:1},Ze={class:"loaded-of"},He={class:"results-list"},Ke={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"),D=y("a-alert"),T=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})):x("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",Je,[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",Ue,[e.store.isLoading&&e.store.results.length===0?(u(),O("span",ze,[c(_,{size:"small"}),t[7]||(t[7]=b(" 载入中… ",-1))])):(u(),O(V,{key:1},[v("strong",null,R(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,R(e.categoryLabel(e.store.filters.category)),1),v("strong",null,R(e.store.facets.byCategory[e.store.filters.category]||0),1)])):x("v-if",!0),e.store.filters.q?(u(),O("span",Ge,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,R(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):x("v-if",!0),v("span",Ze," / 已显示 "+R(e.store.results.length),1)],64))]),e.store.error?(u(),C(D,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):x("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),C(T,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):x("v-if",!0),v("div",He,[(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",Ke,[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"])])):x("v-if",!0)])]),_:1})]),_:1})])}const tt=L(Ve,[["render",We],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-ZT5Dbx/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{tt as default};
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./xterm-BZcWGsqw.js","./markdown-CsiA8-E5.js","./markdown-Dfs9RUU9.css","./addon-fit-CK6X9sAG.js","./xterm-DFuMZ0ql.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{u as fe,_ as me,d as V,e as U}from"./index-CEO9vhv7.js";import{I as z,J as x,U as _,Q as P,S as K,K as T,V as R,c as A,F as Q,Z as Y,R as E,o as G,f as H,w as $,n as q,b as ee,r as S,P as y,_ as ve,a2 as we,a3 as he,a4 as _e}from"./vendor-BvqAck49.js";import{R as ye,b as pe,as as ge}from"./icons-DP3uiYxy.js";const k=new Map,C=new Map,N=new Set,F=new Set;let te=!1;function xe(c){te||(te=!0,c.onMessage(o=>{if(!(!o||typeof o.type!="string")){if(o.type==="terminal.stdout"){const{sessionId:s,data:e,seq:i}=o.payload||{};if(!s)return;let w;try{const d=atob(e||""),f=new Uint8Array(d.length);for(let n=0;n<d.length;n++)f[n]=d.charCodeAt(n);w=new TextDecoder("utf-8").decode(f)}catch{w=""}const u={sessionId:s,data:w,seq:i};k.get(s)?.forEach(d=>d(u)),N.forEach(d=>d(u))}else if(o.type==="terminal.exit"){const{sessionId:s,exitCode:e,signal:i}=o.payload||{};if(!s)return;const w={sessionId:s,exitCode:e,signal:i};C.get(s)?.forEach(u=>u(w)),F.forEach(u=>u(w))}}}))}function ne(c){const o=new TextEncoder().encode(c);let s="";for(let e=0;e<o.length;e++)s+=String.fromCharCode(o[e]);return btoa(s)}function ae(c){const o=atob(c||""),s=new Uint8Array(o.length);for(let e=0;e<o.length;e++)s[e]=o.charCodeAt(e);return new TextDecoder("utf-8").decode(s)}function oe(){const c=fe();xe(c);async function o(n={}){const a=await c.sendRaw({type:"terminal.create",payload:{shell:n.shell,cwd:n.cwd,env:n.env,cols:n.cols,rows:n.rows}});if(a.ok===!1)throw new Error(a.error||"terminal_create_failed");return a.result??a}async function s(){const n=await c.sendRaw({type:"terminal.list",payload:{}});if(n.ok===!1)throw new Error(n.error||"terminal_list_failed");const a=n.result??n;return Array.isArray(a.sessions)?a.sessions:[]}async function e(n,a){const r=await c.sendRaw({type:"terminal.stdin",payload:{sessionId:n,data:ne(String(a))}});if(r.ok===!1)throw new Error(r.error||"terminal_stdin_failed");return r.result??r}async function i(n,a,r){const h=await c.sendRaw({type:"terminal.resize",payload:{sessionId:n,cols:a,rows:r}});if(h.ok===!1)throw new Error(h.error||"terminal_resize_failed");return h.result??h}async function w(n){const a=await c.sendRaw({type:"terminal.close",payload:{sessionId:n}});if(a.ok===!1)throw new Error(a.error||"terminal_close_failed");return a.result??a}async function u(n,a=0){const r=await c.sendRaw({type:"terminal.history",payload:{sessionId:n,fromSeq:a}});if(r.ok===!1)throw new Error(r.error||"terminal_history_failed");const h=r.result??r;return{truncated:!!h.truncated,chunks:(h.chunks||[]).map(D=>({seq:D.seq,data:ae(D.data)}))}}function d(n,a){return n?(k.has(n)||k.set(n,new Set),k.get(n).add(a),()=>{k.get(n)?.delete(a),k.get(n)?.size===0&&k.delete(n)}):(N.add(a),()=>N.delete(a))}function f(n,a){return n?(C.has(n)||C.set(n,new Set),C.get(n).add(a),()=>{C.get(n)?.delete(a),C.get(n)?.size===0&&C.delete(n)}):(F.add(a),()=>F.delete(a))}return{create:o,list:s,stdin:e,resize:i,close:w,history:u,onStdout:d,onExit:f,_internal:{stdoutSubs:k,exitSubs:C,toBase64Utf8:ne,fromBase64Utf8:ae}}}const Se={__name:"Terminal",setup(c,{expose:o}){o();const s=oe(),e=S([]),i=S(null),w=S("pwsh"),u=S(!1),d=S(!1),f=S(""),n=S(""),a=S([]),r=[{value:"pwsh",label:"PowerShell"},{value:"cmd",label:"CMD"},{value:"bash",label:"Bash"},{value:"wsl",label:"WSL"}],h=ee(()=>e.value.find(t=>t.id===i.value));function D(t){return t?t.slice(0,8):""}let O=null,M=null;async function I(){if(O)return{xtermMod:O,fitAddonMod:M};try{O=await U(()=>import("./xterm-BZcWGsqw.js").then(t=>t.x),__vite__mapDeps([0,1,2]),import.meta.url),M=await U(()=>import("./addon-fit-CK6X9sAG.js").then(t=>t.a),__vite__mapDeps([3,1,2]),import.meta.url),await U(()=>Promise.resolve({}),__vite__mapDeps([4]),import.meta.url)}catch(t){throw n.value="xterm 资源加载失败:"+(t?.message||"未知错误"),t}return{xtermMod:O,fitAddonMod:M}}async function B(t){await q();const{xtermMod:l,fitAddonMod:p}=await I(),b=a.value.find(v=>v?.dataset?.sessionId===t.id);if(!b)return;const m=new l.Terminal({cursorBlink:!0,fontFamily:'Consolas, "Courier New", monospace',fontSize:13,theme:{background:"#1e1e1e",foreground:"#d4d4d4"},convertEol:!1}),L=new p.FitAddon;m.loadAddon(L),m.open(b);try{L.fit()}catch{}t.xterm=m,t.fitAddon=L;const ie=m.onData(v=>{s.stdin(t.id,v).catch(g=>{String(g?.message||"").includes("dangerous_keyword_blocked")?V.warning("该命令被桌面端拦截(高危关键字)"):V.error("stdin 失败: "+(g?.message||g))})}),ce=s.onStdout(t.id,({data:v,seq:g})=>{t.lastSeq=g,m.write(v)}),de=s.onExit(t.id,({exitCode:v,signal:g})=>{t.alive=!1,t.exitCode=v,t.signal=g,m.writeln(`\r
|
|
3
|
-
\x1B[33m[session exited, code=${v}, signal=${g??"-"}]\x1B[0m`)});t.offs=()=>{try{ie.dispose?.()}catch{}ce(),de()};try{const{chunks:v,truncated:g}=await s.history(t.id,0);g&&m.writeln("\x1B[2m[history truncated — earlier output was evicted]\x1B[0m");for(const J of v)m.write(J.data),t.lastSeq=J.seq}catch(v){m.writeln(`\x1B[31m[history fetch failed: ${v?.message||v}]\x1B[0m`)}const j=new ResizeObserver(()=>{try{L.fit(),s.resize(t.id,m.cols,m.rows).catch(()=>{})}catch{}});j.observe(b);const ue=t.offs;t.offs=()=>{try{j.disconnect()}catch{}ue()}}async function re(){u.value=!0,f.value="";try{const t=await s.create({shell:w.value,cols:80,rows:24}),l={id:t.sessionId,shell:t.shell,cwd:"",alive:!0,lastSeq:0,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(l),i.value=l.id,await B(l)}catch(t){f.value=t?.message||String(t)}finally{u.value=!1}}async function se(t){try{await s.close(t)}catch(l){f.value=l?.message||String(l)}setTimeout(()=>W(t),500)}function W(t){const l=e.value.findIndex(b=>b.id===t);if(l===-1)return;const p=e.value[l];try{p.offs?.()}catch{}try{p.xterm?.dispose?.()}catch{}e.value.splice(l,1),i.value===t&&(i.value=e.value[0]?.id||null)}function le(t){i.value=t,q(()=>{const l=e.value.find(p=>p.id===t);try{l?.fitAddon?.fit()}catch{}})}async function X(){d.value=!0,f.value="";try{const t=await s.list();for(const l of t){const p=e.value.find(m=>m.id===l.id);if(p){p.alive=l.alive,p.lastSeq=l.lastSeq;continue}const b={id:l.id,shell:l.shell,cwd:l.cwd,alive:l.alive,lastSeq:l.lastSeq,exitCode:null,xterm:null,fitAddon:null,offs:()=>{}};e.value.push(b),await B(b)}!i.value&&e.value.length>0&&(i.value=e.value[0].id)}catch(t){f.value=t?.message||String(t)}finally{d.value=!1}}G(async()=>{await X()}),H(()=>{for(const t of e.value){try{t.offs?.()}catch{}try{t.xterm?.dispose?.()}catch{}}}),$(i,()=>{q(()=>{const t=h.value;try{t?.fitAddon?.fit()}catch{}})});const Z={term:s,sessions:e,activeId:i,newShell:w,creating:u,loadingList:d,error:f,warning:n,xtermContainers:a,shellOptions:r,active:h,shortId:D,get xtermMod(){return O},set xtermMod(t){O=t},get fitAddonMod(){return M},set fitAddonMod(t){M=t},loadXterm:I,mountXterm:B,onCreate:re,onClose:se,removeSession:W,activate:le,refreshList:X,ref:S,computed:ee,onMounted:G,onBeforeUnmount:H,nextTick:q,watch:$,get message(){return V},get PlusOutlined(){return ge},get CloseOutlined(){return pe},get ReloadOutlined(){return ye},get useTerminal(){return oe}};return Object.defineProperty(Z,"__isScriptSetup",{enumerable:!1,value:!0}),Z}},be={class:"terminal-page"},ke={class:"terminal-header"},Ce={class:"page-sub"},Ae={class:"terminal-body"},Ee={class:"session-tabs"},Oe=["onClick"],Te={class:"session-shell"},Re={class:"session-id"},Me={key:0,class:"session-empty"},ze={class:"xterm-host"},De=["data-session-id"],Le={key:0,class:"xterm-placeholder"},Pe={key:1,class:"terminal-footer"},qe={key:0,class:"footer-exit"};function Be(c,o,s,e,i,w){const u=z("a-tag"),d=z("a-select"),f=z("a-button"),n=z("a-space"),a=z("a-alert");return y(),x("div",be,[_("div",ke,[_("div",null,[o[3]||(o[3]=_("h2",{class:"page-title"},"远程终端",-1)),_("p",Ce,[o[2]||(o[2]=P(" 桌面端托管的 PTY 会话;Android 端可远程操控同一通道 ",-1)),e.warning?(y(),K(u,{key:0,color:"orange",style:{"margin-left":"8px"}},{default:T(()=>[P(E(e.warning),1)]),_:1})):R("v-if",!0)])]),A(n,null,{default:T(()=>[A(d,{value:e.newShell,"onUpdate:value":o[0]||(o[0]=r=>e.newShell=r),style:{width:"130px"},size:"small",options:e.shellOptions},null,8,["value"]),A(f,{type:"primary",size:"small",loading:e.creating,onClick:e.onCreate},{icon:T(()=>[A(e.PlusOutlined)]),default:T(()=>[o[4]||(o[4]=P(" 新会话 ",-1))]),_:1},8,["loading"]),A(f,{size:"small",loading:e.loadingList,onClick:e.refreshList},{icon:T(()=>[A(e.ReloadOutlined)]),default:T(()=>[o[5]||(o[5]=P(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),e.error?(y(),K(a,{key:0,message:e.error,type:"error","show-icon":"",closable:"",style:{"margin-bottom":"12px"},onClose:o[1]||(o[1]=r=>e.error="")},null,8,["message"])):R("v-if",!0),_("div",Ae,[_("div",Ee,[(y(!0),x(Q,null,Y(e.sessions,r=>(y(),x("div",{key:r.id,class:ve(["session-tab",{active:r.id===e.activeId,dead:!r.alive}]),onClick:h=>e.activate(r.id)},[_("span",Te,E(r.shell),1),_("span",Re,E(e.shortId(r.id)),1),A(e.CloseOutlined,{class:"session-close",onClick:we(h=>e.onClose(r.id),["stop"])},null,8,["onClick"])],10,Oe))),128)),e.sessions.length===0?(y(),x("div",Me,' 点击 "新会话" 创建第一个终端 ')):R("v-if",!0)]),_("div",ze,[(y(!0),x(Q,null,Y(e.sessions,r=>he((y(),x("div",{key:r.id,ref_for:!0,ref:"xtermContainers","data-session-id":r.id,class:"xterm-container"},null,8,De)),[[_e,r.id===e.activeId]])),128)),e.sessions.length===0?(y(),x("div",Le,[...o[6]||(o[6]=[_("span",null,"无活跃会话",-1)])])):R("v-if",!0)])]),e.active?(y(),x("div",Pe,[_("span",null,E(e.active.shell)+" · "+E(e.active.cwd||"(默认 cwd)")+" · seq "+E(e.active.lastSeq),1),e.active.alive?R("v-if",!0):(y(),x("span",qe,"已退出 (code="+E(e.active.exitCode??"-")+")",1))])):R("v-if",!0)])}const Fe=me(Se,[["render",Be],["__scopeId","data-v-65366a29"],["__file","/tmp/cc-web-panel-ZT5Dbx/repo/packages/web-panel/src/views/Terminal.vue"]]);export{Fe as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{O as r}from"./index-CEO9vhv7.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-DqHC7BCT.js";import{U as t}from"./index-CEO9vhv7.js";import"./vendor-BvqAck49.js";import"./responsiveObserve-daoQcWcX.js";import"./useFlexGapSupport-_JpMgpdt.js";import"./styleChecker-Dtw5lUcs.js";import"./index-Cbqr8kW6.js";import"./icons-DP3uiYxy.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-Cohk5WYM.js";import{U as t}from"./index-CEO9vhv7.js";import"./vendor-BvqAck49.js";import"./index-Cbqr8kW6.js";import"./icons-DP3uiYxy.js";const s=t(o);export{s as default};
|