chainlesschain 0.162.13 → 0.162.15

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 (147) hide show
  1. package/README.md +1 -1
  2. package/package.json +2 -2
  3. package/src/assets/web-panel/assets/{AIOps-Bq_zxhCr.js → AIOps-Dr5poTWh.js} +1 -1
  4. package/src/assets/web-panel/assets/{ActionButton-CaevDm9t.js → ActionButton-DLOGPHQ-.js} +1 -1
  5. package/src/assets/web-panel/assets/{Analytics-B0gOmwPw.js → Analytics-DBlO3FPX.js} +1 -1
  6. package/src/assets/web-panel/assets/{AppLayout-DWhZiV0Q.js → AppLayout-BrMarmWx.js} +2 -2
  7. package/src/assets/web-panel/assets/{Audit-ZuZJBCxo.js → Audit-DX6omFqA.js} +1 -1
  8. package/src/assets/web-panel/assets/{Backup-CX7jhH5l.js → Backup-0QSLlQkB.js} +1 -1
  9. package/src/assets/web-panel/assets/{BaseInput-CVLx7HVq.js → BaseInput-Dn4GFfR8.js} +1 -1
  10. package/src/assets/web-panel/assets/{Chat-C6yL5tRD.js → Chat-CMTeA0Zo.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-BePhbqVq.js → Checkbox-BQQxf6iA.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-B5E4x1Lm.js → Codegen-D2vrazFC.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-CWhNU6A7.js → Col-P1hVDVKm.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-mSEAuJhp.js → Community-CPcDkABv.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-DSudHzX3.js → Compact-DvBQwE-b.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-CxJLYjyn.js → Compliance-GX2qsHkq.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-C-trppQj.js → Cowork-CEEISrBb.js} +1 -1
  18. package/src/assets/web-panel/assets/{Cron-_Ij4v5fY.js → Cron-Y3D6wB4C.js} +1 -1
  19. package/src/assets/web-panel/assets/{Crosschain-eLHXzp5T.js → Crosschain-CnCjDKKD.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-BP04AUUB.js → DID-CJ2EFB5b.js} +1 -1
  21. package/src/assets/web-panel/assets/{Dashboard-CzEeQv62.js → Dashboard-CWujrs70.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-C_SGOB22.js → Dropdown-BzKSQA5P.js} +1 -1
  23. package/src/assets/web-panel/assets/{Federation-BgaP4BOv.js → Federation-DgaAWIwd.js} +1 -1
  24. package/src/assets/web-panel/assets/{FormItemContext-BxGLLt9r.js → FormItemContext-BitgB4Gb.js} +1 -1
  25. package/src/assets/web-panel/assets/{Git-Bt_uM_Gw.js → Git-Bzj4vLLf.js} +1 -1
  26. package/src/assets/web-panel/assets/{Governance-N2-0RG_o.js → Governance-D7DEdSBD.js} +1 -1
  27. package/src/assets/web-panel/assets/{Inference-eS3g-CzP.js → Inference-CVsGLfcX.js} +1 -1
  28. package/src/assets/web-panel/assets/{KnowledgeGraph-CUuvNVah.js → KnowledgeGraph-CF6C6ZNo.js} +1 -1
  29. package/src/assets/web-panel/assets/{Logs-wPbwEt2r.js → Logs-C0Er-tt8.js} +1 -1
  30. package/src/assets/web-panel/assets/{Marketplace-DH91kTwo.js → Marketplace-_E7uwUUU.js} +1 -1
  31. package/src/assets/web-panel/assets/{McpTools-D-GyyBrI.js → McpTools-dHbktLMV.js} +1 -1
  32. package/src/assets/web-panel/assets/{Memory-BOtUy-tw.js → Memory-CaQ4UY7b.js} +1 -1
  33. package/src/assets/web-panel/assets/{MobileBridge-DIP__XQd.js → MobileBridge-BbOh0uJt.js} +1 -1
  34. package/src/assets/web-panel/assets/{MobileProjects-1nqr1UsU.js → MobileProjects-CfdNEimZ.js} +1 -1
  35. package/src/assets/web-panel/assets/{Mtc-CCE0x7h2.js → Mtc-HLvyepRP.js} +1 -1
  36. package/src/assets/web-panel/assets/{MtcAudit-BBkz0XUO.js → MtcAudit-DMaHGoIr.js} +1 -1
  37. package/src/assets/web-panel/assets/{Multisig-CIKSJvTY.js → Multisig-DFNZf0AB.js} +1 -1
  38. package/src/assets/web-panel/assets/{NLProgramming-BDkgeFcq.js → NLProgramming-cZwXhWy2.js} +1 -1
  39. package/src/assets/web-panel/assets/{Notes-ONiUxfN1.js → Notes-U_3n8Zid.js} +1 -1
  40. package/src/assets/web-panel/assets/{NotificationSettings-CGcyKEIe.js → NotificationSettings-B4VvhkKf.js} +1 -1
  41. package/src/assets/web-panel/assets/{Organization-BZtMYBJt.js → Organization-BIwBFrdX.js} +1 -1
  42. package/src/assets/web-panel/assets/{Overflow-C4LfFZAI.js → Overflow-_zxR8gF2.js} +1 -1
  43. package/src/assets/web-panel/assets/{P2P-D71Cpk-m.js → P2P-DJXmWhLC.js} +1 -1
  44. package/src/assets/web-panel/assets/{Permissions-DRGYF29v.js → Permissions-DwJ35K8Z.js} +1 -1
  45. package/src/assets/web-panel/assets/{PersonalDataHub-CfRYoIua.js → PersonalDataHub-CzZXLXGN.js} +1 -1
  46. package/src/assets/web-panel/assets/{Pipeline-BOyp0_Qo.js → Pipeline-DjtRGM8X.js} +1 -1
  47. package/src/assets/web-panel/assets/{Privacy-a_AcphvF.js → Privacy-BJhsIhGf.js} +1 -1
  48. package/src/assets/web-panel/assets/{ProjectInit-CFu1grYt.js → ProjectInit-DEx5SDLh.js} +1 -1
  49. package/src/assets/web-panel/assets/{ProjectSettings-p54Eivhh.js → ProjectSettings-B6qDg7nn.js} +1 -1
  50. package/src/assets/web-panel/assets/{Projects-DkB88XAu.js → Projects-CKkTgrBf.js} +1 -1
  51. package/src/assets/web-panel/assets/{Providers-EK7f8DEd.js → Providers-3GEshcW_.js} +1 -1
  52. package/src/assets/web-panel/assets/{QuickAsk-CpO0w3iP.js → QuickAsk-BfUXbKxa.js} +1 -1
  53. package/src/assets/web-panel/assets/{Recommend-BUJVQdv9.js → Recommend-DgxYasSJ.js} +1 -1
  54. package/src/assets/web-panel/assets/{Reputation-kU2fOuZt.js → Reputation-CWvVg_V1.js} +1 -1
  55. package/src/assets/web-panel/assets/{Row-oGWRbk6g.js → Row-42M5ot1v.js} +1 -1
  56. package/src/assets/web-panel/assets/{RssFeed-saC_46Yo.js → RssFeed-Do3isL1x.js} +1 -1
  57. package/src/assets/web-panel/assets/{Search-CjtRqFUu.js → Search-_7wgwjaR.js} +1 -1
  58. package/src/assets/web-panel/assets/{Security-BX0NBVfQ.js → Security-DKB6pe8t.js} +1 -1
  59. package/src/assets/web-panel/assets/{Services-Bgxsnei_.js → Services-BHrBJAcB.js} +1 -1
  60. package/src/assets/web-panel/assets/{Skeleton-CwBb3k2a.js → Skeleton-C8L-EfGp.js} +1 -1
  61. package/src/assets/web-panel/assets/{Skills-CZCMYH6Z.js → Skills-CU66huTh.js} +1 -1
  62. package/src/assets/web-panel/assets/{Sla-Djy1uHnZ.js → Sla-DA8AKNmI.js} +1 -1
  63. package/src/assets/web-panel/assets/{SpeechSettings-CGUI_Uyh.js → SpeechSettings-CufjYTzV.js} +1 -1
  64. package/src/assets/web-panel/assets/{SyncSettings-DK2CKHRD.js → SyncSettings-D_VAYHIg.js} +1 -1
  65. package/src/assets/web-panel/assets/{Tasks-BKiOzeIO.js → Tasks-BE6nYh9k.js} +1 -1
  66. package/src/assets/web-panel/assets/{Templates-CnQpleXj.js → Templates-BfRbttd6.js} +1 -1
  67. package/src/assets/web-panel/assets/{Tenant-DwKz0cjm.js → Tenant-YO71CL80.js} +1 -1
  68. package/src/assets/web-panel/assets/{Terminal-A7t_wsR8.js → Terminal-D1mQaE_Z.js} +1 -1
  69. package/src/assets/web-panel/assets/{Tokens-BqYY9l44.js → Tokens-CvnNQtX4.js} +1 -1
  70. package/src/assets/web-panel/assets/{Trigger-BI4bXFmi.js → Trigger-BnN19FJt.js} +1 -1
  71. package/src/assets/web-panel/assets/{Trust-yMynKTRG.js → Trust-C6oZLHqp.js} +1 -1
  72. package/src/assets/web-panel/assets/{UkeySign-Br4IScM6.js → UkeySign-BOhFYuWu.js} +1 -1
  73. package/src/assets/web-panel/assets/{VideoEditing-CWcThGsP.js → VideoEditing-NMc6-qc-.js} +1 -1
  74. package/src/assets/web-panel/assets/{Wallet-CZcAtjxj.js → Wallet-BALmcKtd.js} +1 -1
  75. package/src/assets/web-panel/assets/{WebAuthn-BnTZFMA0.js → WebAuthn-6IVe-W6O.js} +1 -1
  76. package/src/assets/web-panel/assets/{WorkflowEditor-N7gGz3_n.js → WorkflowEditor-BIv20DXb.js} +1 -1
  77. package/src/assets/web-panel/assets/{chat-D175ZIO0.js → chat-CiceyA69.js} +1 -1
  78. package/src/assets/web-panel/assets/{colors-LKhZyttv.js → colors-CxwvpRW0.js} +1 -1
  79. package/src/assets/web-panel/assets/{compact-item-CsJSebxT.js → compact-item-N6ASDseQ.js} +1 -1
  80. package/src/assets/web-panel/assets/{createContext-BJ_CPYFC.js → createContext-CQ8PEhyP.js} +1 -1
  81. package/src/assets/web-panel/assets/{hasIn-CzD3IqH8.js → hasIn-DDiIuryC.js} +1 -1
  82. package/src/assets/web-panel/assets/{index-BhiZDGg7.js → index-1jBrqw2R.js} +1 -1
  83. package/src/assets/web-panel/assets/index-1losWCP0.js +1 -0
  84. package/src/assets/web-panel/assets/{index-CRGNuUIM.js → index-92sMXPmR.js} +1 -1
  85. package/src/assets/web-panel/assets/{index-Dm-3kvtD.js → index-BCgZTQf8.js} +1 -1
  86. package/src/assets/web-panel/assets/{index-BZluCuTH.js → index-BKLatStI.js} +1 -1
  87. package/src/assets/web-panel/assets/{index-CTIkCKav.js → index-BKmY57ry.js} +1 -1
  88. package/src/assets/web-panel/assets/{index-E7t1hAnk.js → index-BZ4O1Vp7.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-D7ZcBI5s.js → index-BdmcwwMp.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-BNVLVzN5.js → index-Bj-mAQFK.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-R1cFADfk.js → index-BjvirvV4.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-BvF2tC6C.js → index-Bw6UqIkJ.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-6qPbrYF7.js → index-BzdEj9_B.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BMvdoiFr.js → index-C43WIe_p.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-BjOrt4vw.js → index-CHsNn-Qv.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-BsirlkJ0.js → index-COIxnEwP.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-D401L3yx.js → index-C_dbCu-F.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BDSZDDb2.js → index-Cb0QVAZL.js} +3 -3
  99. package/src/assets/web-panel/assets/{index-BV-__mlC.js → index-CcUK2M7W.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-DXp1jVsK.js → index-ClASVywF.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-D8kltMTW.js → index-CnArbjXg.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-Kn-Of5ew.js → index-Cur_KKpV.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-RIO4JKMP.js → index-Cwk0olXV.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-CKjBAdm0.js → index-D0yG93O4.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-BSNibAqz.js → index-D58a5SL3.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-uTEVWPYA.js → index-DEjAgx2R.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-DJVkBmSc.js → index-DUKjS4kF.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-BmJdof_c.js → index-DWKigrAM.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-C2HBKw07.js → index-DcMESTJs.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-DnPt5OdD.js → index-DgwpVvQq.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-DOO73rHE.js → index-Dj2wgF3A.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-D5IZCkZG.js → index-DobYLmfZ.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-JTX9A7w0.js → index-Dp3r80qO.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CyHdYUeZ.js → index-DtpWqJ-2.js} +1 -1
  115. package/src/assets/web-panel/assets/index-EoP_WtDt.js +1 -0
  116. package/src/assets/web-panel/assets/{index-BEDFHKO3.js → index-_BHtKVC_.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-BXH9ujMW.js → index-bYorCa3r.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-Dd7dICwB.js → index-hn9LVkIY.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-B7UYymse.js → index-mmpauJ3E.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-DM3uBEWD.js → index-xQlQRo2j.js} +1 -1
  121. package/src/assets/web-panel/assets/{initDefaultProps-CBW0okek.js → initDefaultProps-1MKZtqXZ.js} +1 -1
  122. package/src/assets/web-panel/assets/{motion-DGAffQ0Z.js → motion-DFBQpRS8.js} +1 -1
  123. package/src/assets/web-panel/assets/{move-DFJ0-5IW.js → move-CiI8Ada0.js} +1 -1
  124. package/src/assets/web-panel/assets/{omit-AvrDghg1.js → omit-CjeFoPcC.js} +1 -1
  125. package/src/assets/web-panel/assets/{pickAttrs-D7csw9i1.js → pickAttrs-Be3kefJq.js} +1 -1
  126. package/src/assets/web-panel/assets/{placementArrow-hZ6Lg6kG.js → placementArrow-Be5Ra1_B.js} +1 -1
  127. package/src/assets/web-panel/assets/{responsiveObserve-DLLx5VvS.js → responsiveObserve-NCu3YHiX.js} +1 -1
  128. package/src/assets/web-panel/assets/{slide-BaRIT3ev.js → slide-f23lSB4X.js} +1 -1
  129. package/src/assets/web-panel/assets/{statusUtils-Cdjyuhrz.js → statusUtils-Dq99US_U.js} +1 -1
  130. package/src/assets/web-panel/assets/{styleChecker-CbrNybTt.js → styleChecker-B-UUq5Ww.js} +1 -1
  131. package/src/assets/web-panel/assets/{useFlexGapSupport-B8gAhiRC.js → useFlexGapSupport-D6aUzeVO.js} +1 -1
  132. package/src/assets/web-panel/assets/{useFs-BZPy4ICP.js → useFs-DU-R5a4I.js} +1 -1
  133. package/src/assets/web-panel/assets/{vnode-6Y0NDMVv.js → vnode-N7r8LSGe.js} +1 -1
  134. package/src/assets/web-panel/assets/{zoom-DTbMGsSH.js → zoom-07xoxB1t.js} +1 -1
  135. package/src/assets/web-panel/index.html +1 -1
  136. package/src/commands/__tests__/android.test.js +260 -0
  137. package/src/commands/__tests__/hub-wechat.test.js +186 -15
  138. package/src/commands/android.js +284 -0
  139. package/src/commands/hub.js +263 -19
  140. package/src/gateways/ws/personal-data-hub-protocol.js +28 -8
  141. package/src/index.js +2 -0
  142. package/src/lib/__tests__/cc-android-bridge.test.js +245 -0
  143. package/src/lib/cc-android-bridge.js +206 -0
  144. package/src/lib/personal-data-hub-wiring.js +98 -20
  145. package/src/lib/web-ui-server.js +2 -1
  146. package/src/assets/web-panel/assets/index-CY1mQA2I.js +0 -1
  147. package/src/assets/web-panel/assets/index-D9nXHfUB.js +0 -1
@@ -44,6 +44,8 @@ const {
44
44
  generateKeyHex,
45
45
  EmailAdapter,
46
46
  AlipayBillAdapter,
47
+ SystemDataAndroidAdapter,
48
+ BilibiliAdapter,
47
49
  EntityResolver,
48
50
  EntityResolverEmbeddingStage,
49
51
  EntityResolverLLMStage,
@@ -60,8 +62,13 @@ import {
60
62
  } from "./personal-data-hub-aichat-wizard.js";
61
63
 
62
64
  async function loadAIChatHealthChecker() {
63
- const mod =
64
- await import("@chainlesschain/personal-data-hub/adapters/ai-chat-history/health-checker");
65
+ // Composed-at-runtime specifier so vite import-analysis (which fails
66
+ // to resolve subpath exports for dynamic imports in vitest SSR mode)
67
+ // skips this — the static scanner only descends into string literals.
68
+ const spec =
69
+ "@chainlesschain/personal-data-hub" +
70
+ "/adapters/ai-chat-history/health-checker";
71
+ const mod = await import(spec);
65
72
  return (mod.default || mod).createAIChatHealthChecker;
66
73
  }
67
74
 
@@ -95,6 +102,28 @@ let _hub = null;
95
102
  let _initPromise = null;
96
103
  let _bm25 = null;
97
104
 
105
+ // LLM override — see file header. Default cli-side hub uses a direct
106
+ // OllamaClient; when the desktop main process embeds this wiring via
107
+ // ws-cli-loader it can inject a CcLLMAdapter (wrapping LLMManager) so the
108
+ // SAME wiring honors the user's active provider (volcengine / anthropic /
109
+ // etc.) instead of hard-binding Ollama. Must be set BEFORE the first
110
+ // getHub() call — initHub() reads it synchronously at the LLM-wiring step.
111
+ let _llmOverride = null;
112
+
113
+ /**
114
+ * Override the default cli-side OllamaClient with a caller-supplied LLM
115
+ * client conforming to the hub's LLMClient contract ({ chat, name, isLocal }).
116
+ *
117
+ * Used by desktop-app-vue web-shell's ws-cli-loader bootstrap: see
118
+ * desktop-app-vue/src/main/web-shell/ws-cli-loader.js. Calling this on
119
+ * an already-initialized hub does NOT swap the live LLM — the override only
120
+ * applies on the next fresh initHub(). Restart the process if you need to
121
+ * change provider mid-session.
122
+ */
123
+ export function setHubLLMOverride(llm) {
124
+ _llmOverride = llm || null;
125
+ }
126
+
98
127
  export function resolveHubDir() {
99
128
  return join(getElectronUserDataDir(), ".chainlesschain", "hub");
100
129
  }
@@ -115,12 +144,16 @@ async function initHub() {
115
144
  const vault = new LocalVault({ path: join(hubDir, "vault.db"), key });
116
145
  vault.open();
117
146
 
118
- // LLM: standalone OllamaClient connects to localhost:11434.
119
- // Override via env CC_HUB_OLLAMA_URL / CC_HUB_OLLAMA_MODEL.
120
- const llm = new OllamaClient({
121
- baseUrl: process.env.CC_HUB_OLLAMA_URL || "http://localhost:11434",
122
- model: process.env.CC_HUB_OLLAMA_MODEL || "qwen2.5:7b-instruct",
123
- });
147
+ // LLM: prefer caller-injected override (desktop web-shell wires CcLLMAdapter
148
+ // wrapping LLMManager so PDH honors the user's saved active provider).
149
+ // Fallback to standalone OllamaClient — connects to localhost:11434.
150
+ // Override the fallback via env CC_HUB_OLLAMA_URL / CC_HUB_OLLAMA_MODEL.
151
+ const llm =
152
+ _llmOverride ||
153
+ new OllamaClient({
154
+ baseUrl: process.env.CC_HUB_OLLAMA_URL || "http://localhost:11434",
155
+ model: process.env.CC_HUB_OLLAMA_MODEL || "qwen2.5:7b-instruct",
156
+ });
124
157
 
125
158
  // KG sink — direct ESM import works here.
126
159
  let kgSink = null;
@@ -147,20 +180,33 @@ async function initHub() {
147
180
 
148
181
  // Phase 8 — EntityResolver pipeline
149
182
  const entityResolver = new EntityResolver({ vault });
183
+ // Plan A v0.1 — in-APK Android cc has no Ollama on localhost:11434.
184
+ // Every embedding call would TCP-timeout (measured: ~60s extra per sync
185
+ // on Xiaomi 24115RA8EC 2026-05-21). Detect Termux $PREFIX for our APK
186
+ // and skip embedding+LLM stages entirely. Rule-stage still runs; the
187
+ // resolve_queue picks up enqueued pairs later if a host with Ollama is
188
+ // ever attached (e.g. desktop-side replay).
189
+ const isInAppAndroidCc =
190
+ typeof process.env.PREFIX === "string" &&
191
+ process.env.PREFIX.startsWith("/data/data/com.chainlesschain.android");
192
+ const skipEmbeddings =
193
+ isInAppAndroidCc || process.env.CC_HUB_DISABLE_EMBEDDINGS === "1";
150
194
  try {
151
- if (llm) {
195
+ if (llm && !skipEmbeddings) {
152
196
  const llmStage = new EntityResolverLLMStage({
153
197
  llm,
154
198
  acceptNonLocal: false,
155
199
  });
156
200
  entityResolver._llmStage = llmStage.asStageFn();
157
201
  }
158
- const embeddingStage = new EntityResolverEmbeddingStage({
159
- ollamaUrl: process.env.CC_HUB_OLLAMA_URL || "http://localhost:11434",
160
- model: process.env.CC_HUB_OLLAMA_EMBED_MODEL || "nomic-embed-text",
161
- vault,
162
- });
163
- entityResolver._embeddingStage = embeddingStage.asStageFn();
202
+ if (!skipEmbeddings) {
203
+ const embeddingStage = new EntityResolverEmbeddingStage({
204
+ ollamaUrl: process.env.CC_HUB_OLLAMA_URL || "http://localhost:11434",
205
+ model: process.env.CC_HUB_OLLAMA_EMBED_MODEL || "nomic-embed-text",
206
+ vault,
207
+ });
208
+ entityResolver._embeddingStage = embeddingStage.asStageFn();
209
+ }
164
210
  } catch (_err) {
165
211
  // Fall back to rule-only — registry still works
166
212
  }
@@ -210,6 +256,35 @@ async function initHub() {
210
256
  }
211
257
  }
212
258
 
259
+ // Plan A v0.1 — Android on-device system-data adapter. Stateless: the UI
260
+ // produces a snapshot JSON via ContentResolver/PackageManager and passes
261
+ // its path through opts.inputPath at sync-time, so registration is a
262
+ // one-shot wire here. Safe to register on every host (no-op until a sync
263
+ // call provides inputPath); future hosts may filter by platform if useful.
264
+ try {
265
+ const sda = new SystemDataAndroidAdapter();
266
+ if (!registry.has(sda.name)) registry.register(sda);
267
+ } catch (_err) {
268
+ // Boot must continue even if the adapter fails to register; cc hub will
269
+ // surface the absence via list-adapters.
270
+ }
271
+
272
+ // A8 v0.1 (2026-05-22) — social adapters in snapshot mode. Stateless: the
273
+ // Android UI captures a cookie via in-app WebView, runs OkHttp against the
274
+ // platform's HTTP API, parses the JSON response, writes a snapshot JSON to
275
+ // filesDir/.chainlesschain/staging/, then calls `cc hub sync-adapter <name>
276
+ // --input <path> --json` via LocalCcRunner. The adapter reads the file and
277
+ // yields events; the same registry handles KG + RAG + vault writes — no
278
+ // desktop connection required (this is the desktop-independent path the
279
+ // user repeatedly asked about). Each adapter no-ops at boot when no
280
+ // snapshot has been produced yet.
281
+ try {
282
+ const bilibili = new BilibiliAdapter();
283
+ if (!registry.has(bilibili.name)) registry.register(bilibili);
284
+ } catch (_err) {
285
+ // Continue boot
286
+ }
287
+
213
288
  // Phase 6: auto-register persisted Alipay accounts.
214
289
  const alipayAccountsPath = join(hubDir, "alipay-accounts.json");
215
290
  const alipayAccounts = loadAlipayAccounts(alipayAccountsPath);
@@ -442,7 +517,11 @@ async function initHub() {
442
517
 
443
518
  async registerWechatAdapter(opts = {}) {
444
519
  if (!opts || !opts.account || !opts.account.uin) {
445
- return { ok: false, reason: "UIN_REQUIRED", message: "opts.account.uin required" };
520
+ return {
521
+ ok: false,
522
+ reason: "UIN_REQUIRED",
523
+ message: "opts.account.uin required",
524
+ };
446
525
  }
447
526
  let r;
448
527
  try {
@@ -476,7 +555,8 @@ async function initHub() {
476
555
  account: { uin: opts.account.uin },
477
556
  dbPath: opts.dbPath || null,
478
557
  wechatDataPath: opts.wechatDataPath || null,
479
- chosenKeyProvider: r.keyProvider && r.keyProvider.name ? r.keyProvider.name : null,
558
+ chosenKeyProvider:
559
+ r.keyProvider && r.keyProvider.name ? r.keyProvider.name : null,
480
560
  registeredAt: Date.now(),
481
561
  lastSyncAt: null,
482
562
  });
@@ -500,9 +580,7 @@ async function initHub() {
500
580
  }
501
581
  const wechatAccountsPath = join(hubDir, "wechat-accounts.json");
502
582
  const accounts = loadWechatAccounts(wechatAccountsPath);
503
- const target = accounts.find(
504
- (c) => c.account && c.account.uin === uin,
505
- );
583
+ const target = accounts.find((c) => c.account && c.account.uin === uin);
506
584
  const next = accounts.filter(
507
585
  (c) => !(c.account && c.account.uin === uin),
508
586
  );
@@ -1211,7 +1211,8 @@ function findWebPanelDist(staticDir) {
1211
1211
  return fs.existsSync(path.join(staticDir, "index.html")) ? staticDir : null;
1212
1212
  }
1213
1213
  // 1. Source tree: packages/web-panel/dist/
1214
- const sourceDist = path.resolve(__dirname, "../../web-panel/dist");
1214
+ // __dirname = packages/cli/src/lib/ so we need three "../" to reach packages/.
1215
+ const sourceDist = path.resolve(__dirname, "../../../web-panel/dist");
1215
1216
  if (fs.existsSync(path.join(sourceDist, "index.html"))) {
1216
1217
  return sourceDist;
1217
1218
  }
@@ -1 +0,0 @@
1
- import{A as o}from"./Row-oGWRbk6g.js";import{S as t}from"./index-BDSZDDb2.js";import"./responsiveObserve-DLLx5VvS.js";import"./vendor-DhFY8mDK.js";import"./useFlexGapSupport-B8gAhiRC.js";import"./styleChecker-CbrNybTt.js";import"./index-BZluCuTH.js";import"./icons-BOPtEWK4.js";const l=t(o);export{l as default};
@@ -1 +0,0 @@
1
- import{C as o}from"./Col-CWhNU6A7.js";import{S as t}from"./index-BDSZDDb2.js";import"./index-BZluCuTH.js";import"./vendor-DhFY8mDK.js";import"./icons-BOPtEWK4.js";const s=t(o);export{s as default};