chainlesschain 0.162.106 → 0.162.108

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 (156) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-Dv4GUrHi.js → AIOps-B8T7xeuV.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-C11GYZaf.js → ActionButton-BDxBsVYw.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-CAqU4i6d.js → Analytics-5cYrjLzN.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-B6iRYx37.js → AppLayout-DkanJ7a5.js} +4 -4
  6. package/src/assets/web-panel/assets/{Audit-Da0ixyIA.js → Audit-8r3yG5R0.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-YnfhBosV.js → Backup-DmdJpAwc.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-BuIUclOL.js → BaseInput-CCTC_ROJ.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-ssBAsMhu.js → Chat-BE4xBoCH.js} +5 -5
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-C5PQbIce.js → ChatBubbleRenderer-ita18CO8.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-BbWH0SgQ.js → Checkbox-DVUDDyL5.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-Dq0LbS-8.js → Codegen-C07Q688Z.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-CZ8DawUj.js → Col-Bfmb67bb.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-C-4RVVBn.js → Community-DvUS6LOy.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-BzAr-qm-.js → Compact-B2jvuCf2.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-D8wHCcwg.js → Compliance-B4VnGZOX.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-B3QMCVBt.js → Cowork-Bf1UR9uf.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-4w6DhJyQ.js → Cron-BYU0OhXx.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-Ctlzq9uc.js → Crosschain-DhtbpJ8Y.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-FdDbrHQA.js → DID-DFtdsXjV.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-DQSb46zq.js → Dashboard-BOqMlucS.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-CT4M3kjL.js → Dropdown-DWcGi1lU.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-BtTH_9Bp.js → EmailListRenderer-smcpeq18.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-D31xtzUB.js → FamilyGuardDashboard-_qKQM8YZ.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-BNfmfO2p.js → Federation-DxaaO_Pn.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-C3kmm4nv.js → FormItemContext-Bijk4-hV.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-BW1P7ZdH.js → GenericCardRenderer-CXs5JGAs.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-DcSEl0Ah.js → Git-vopq_XAi.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-Cb8D9qqe.js → Governance-D6lEr1e2.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-DTpGkMXl.js → Inference-D716knRp.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-wQuzZA4b.js → KnowledgeGraph-Mt7L5B8p.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-C3S78_e6.js → Logs-BmY4Aozy.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-D0utQC7f.js → Marketplace-Bk7yghOV.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-CEZolkxe.js → McpTools-BdEGNK8B.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-DkBzSUv5.js → Memory-DaGxWezP.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-Dz-Bg3K9.js → MobileBridge-D2QqiIXV.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileProjects-YMh4rmVJ.js → MobileProjects-JQQ60jth.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-DQyn5PRr.js → Mtc-DHp0q17f.js} +4 -4
  39. package/src/assets/web-panel/assets/{MtcAudit-DY1t-cQ3.js → MtcAudit-RWrCriuc.js} +6 -6
  40. package/src/assets/web-panel/assets/{Multisig-DdzGB5qb.js → Multisig-BR_5j51g.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-D5Jrv_7S.js → NLProgramming-MF3ZkPYq.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-Wxg8M_jp.js → Notes-BDWwfQ-t.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-BOLm3krj.js → NotificationSettings-Xk8BtRL5.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-DXgWKvKG.js → OrderTableRenderer-DaVlfAsv.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-DpH01k8R.js → Organization-CNdU6Jxx.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-Cy2EGsg8.js → Overflow-DOf8iK6T.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-BF606jDo.js → P2P-DvOwefeB.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-DPmsKIL7.js → PdhVaultBrowser-BmrU5B5U.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-B5SjhtW_.js → Permissions-DM_Cha_-.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-CjSBOSps.js → PersonalDataHub-DGOiN1md.js} +3 -3
  51. package/src/assets/web-panel/assets/{Pipeline-CLKKF03d.js → Pipeline-BMZcrOpC.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-BD9kj_AO.js → Privacy-CcBD3ZJ_.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-1wPQe32f.js → ProjectInit-BQmkVkFp.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-ae1Zvm29.js → ProjectSettings-BL0iqE5h.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-D9mVKxrM.js → Projects-7iyoLF6T.js} +1 -1
  56. package/src/assets/web-panel/assets/Providers-IQqLZ_11.js +1 -0
  57. package/src/assets/web-panel/assets/{QuickAsk-Cd5DPpgw.js → QuickAsk-Cp0Lpic1.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-BYhtuWo3.js → Recommend-DN-26aef.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-ComyY4bA.js → Reputation-ChdhhVGu.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-Dut8pwo9.js → Row-2RBgBLEz.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-xMhor0Fn.js → RssFeed-CfogWRiS.js} +3 -3
  62. package/src/assets/web-panel/assets/Search-CrREUZpz.js +1 -0
  63. package/src/assets/web-panel/assets/{Security-KeHoIe_R.js → Security-CcDdV-6d.js} +4 -4
  64. package/src/assets/web-panel/assets/{Services-C7smnFpg.js → Services-qG5L2PHE.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-PTR3fGUI.js → Skeleton-7CVgHJwr.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-DHa51QLm.js → Skills-BEbdNS7s.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-BS6ktlUr.js → Sla-C4ENvrVM.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-bfol0gns.js → SpeechSettings-DuvM2AsQ.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-6jRuuFeW.js → SyncSettings-Bm9Np5Yt.js} +2 -2
  70. package/src/assets/web-panel/assets/{Tasks-CnC1__IG.js → Tasks-K2ZtJ47C.js} +1 -1
  71. package/src/assets/web-panel/assets/{Templates-DpCAWZlL.js → Templates-C3GJa4ya.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-D3LAKar5.js → Tenant-BLQnLb8K.js} +1 -1
  73. package/src/assets/web-panel/assets/{Terminal-DErDY8_S.js → Terminal-BGgZIwb0.js} +2 -2
  74. package/src/assets/web-panel/assets/{TimelineRenderer-DlzM7nlo.js → TimelineRenderer-BD8NwNAK.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-DNNr3xhM.js → Tokens-BIsO2iiX.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-CHcYxpwE.js → Trigger-FJv5zeym.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-3AYExgaT.js → Trust-9FRFEAhW.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-ZQ_TDiO7.js → UkeySign-aOdZVwgi.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-Czq0TJsH.js → VideoEditing-C1KyY7ZB.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-DUktui_z.js → Wallet-CH5edY0l.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-fmISWw5b.js → WebAuthn-BUPlkFe0.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-C_CaijGN.js → WorkflowEditor-BoH8bG7y.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-MEgPH75-.js → chat-DRS34SZq.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-DDL36J3G.js → colors-DxdhROQh.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-BkJXaF65.js → compact-item-C5f4y3lM.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-DlB8u_7c.js → createContext-DkyzEt2y.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-vwZx8E0a.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-Bg2nafvH.js → hasIn-CIRkRQ69.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-D7C9LYKH.js → index-1Vd3bgPH.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-BKpVxinm.js → index-2uQYIxL1.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-DI5UpGuc.js → index-5Mph6K8H.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-UPBfu9WY.js → index-B5r9kCHD.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-BF_sEVw4.js → index-BHACYX-h.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-BHSFsKwc.js → index-BLLkL7YU.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-Bu-Dg9gm.js → index-BStiYEJX.js} +1 -1
  96. package/src/assets/web-panel/assets/{index--PGD56d7.js → index-B_ytTrAE.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-Dl2INE9h.js → index-Bc59VV8o.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-Cl3aP187.js → index-BdzFfdXs.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-nBzHyZw4.js → index-BfZal2SO.js} +1 -1
  100. package/src/assets/web-panel/assets/{index-CPBU8am-.js → index-BrNCtBLG.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-BbcZ6gjd.js → index-Bskk24yp.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-3HYiKj6K.js → index-BzC5O6l6.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CroGv8Er.js → index-C0VYKzdU.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-D2N4eCU-.js → index-CLjIL9vZ.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DfTKct1S.js → index-CO4PAGWX.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-4ysKKyCt.js → index-CSHsX3UZ.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BW6WKVTN.js → index-CXE4fjlC.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-C9Nf7l-4.js → index-Cv9YEv3M.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-CCV5a_eZ.js → index-CyMVWOwq.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-E9fKdmZS.js → index-D3WhDg1s.js} +3 -3
  111. package/src/assets/web-panel/assets/{index-C5qRqnra.js → index-DR_uUG6x.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-COiErcgq.js → index-DSpV3T2E.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-BW_thoFO.js → index-DV5W06OY.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-rc1sOE1s.js → index-DdLAPzIl.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-BF8tpZiI.js → index-DgJf60U0.js} +1 -1
  116. package/src/assets/web-panel/assets/index-Dhn6EWMQ.js +1 -0
  117. package/src/assets/web-panel/assets/{index-DzslfpyE.js → index-DnAbauX-.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-DxJe_2Ra.js → index-DpHZisZn.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-K_8c8jDD.js → index-DtOM1jbe.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CHHhMoP4.js → index-Dz-Xl9WT.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-HwM0KYuJ.js → index-Kyd48UEO.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-Dm36uPhy.js → index-X7QcpsDO.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-JJaXdXuF.js → index-btOwnCpT.js} +1 -1
  124. package/src/assets/web-panel/assets/index-dGvDljur.js +1 -0
  125. package/src/assets/web-panel/assets/{index-BQcBGn2e.js → index-dtUUXiuv.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-B23ECixr.js → index-fgBegFCK.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BEhi2NON.js → index-wdXKonKr.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-DF4WRyT3.js → initDefaultProps-4uTrrqjb.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-DYt7yuUl.js → motion-gkRvxGHW.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-A2vu17_O.js → move-CIgnaWNe.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-BE4gHEDC.js → omit-DB-Ux8Gg.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-DZPGMH7O.js → pickAttrs-ree-Itb0.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-C314MZpn.js → placementArrow-EdAP6bCf.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-BnImSTAx.js → responsiveObserve-B1DqSgFh.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-lhFfg292.js → slide-D_9NP_KE.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-NMoQTkOw.js → statusUtils-CAytzvoR.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-tp7AHEoi.js → styleChecker-zb3gob1_.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-CPCXJDFA.js → useFlexGapSupport-BQWuGrL0.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-CCZ-ENkG.js → useFs-QMEsYkGX.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-SYhI2gMH.js → usePersonalDataHub-Ccrz7-au.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-CwS9FORj.js → vnode-DZVY4QM-.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-Dx1C3oM8.js → zoom-Dii_0V_X.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/__tests__/hub-query-events.test.js +134 -0
  145. package/src/commands/hub.js +33 -8
  146. package/src/commands/pdh.js +188 -1
  147. package/src/lib/pdh-egress.js +210 -0
  148. package/src/lib/repl-completer.js +48 -9
  149. package/src/repl/agent-repl.js +12 -0
  150. package/src/runtime/diagnostics.js +48 -0
  151. package/src/runtime/headless-stream.js +37 -1
  152. package/src/assets/web-panel/assets/Providers-Bz6n7iqv.js +0 -1
  153. package/src/assets/web-panel/assets/Search-D4_Od-8S.js +0 -1
  154. package/src/assets/web-panel/assets/devWarning-7FEuHryT.js +0 -1
  155. package/src/assets/web-panel/assets/index-1EaBTuZ5.js +0 -1
  156. package/src/assets/web-panel/assets/index-DkuCcuSQ.js +0 -1
@@ -1 +1 @@
1
- import{i as e}from"./index-E9fKdmZS.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
1
+ import{i as e}from"./index-D3WhDg1s.js";function r(a,s,t){return e({[`${a}-status-success`]:s==="success",[`${a}-status-warning`]:s==="warning",[`${a}-status-error`]:s==="error",[`${a}-status-validating`]:s==="validating",[`${a}-has-feedback`]:t})}const c=(a,s)=>s||a;export{c as a,r as g};
@@ -1 +1 @@
1
- import{A as d}from"./index-E9fKdmZS.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
1
+ import{A as d}from"./index-D3WhDg1s.js";const i=()=>d()&&window.document.documentElement,c=e=>{if(d()&&window.document.documentElement){const t=Array.isArray(e)?e:[e],{documentElement:n}=window.document;return t.some(r=>r in n.style)}return!1},u=(e,t)=>{if(!c(e))return!1;const n=document.createElement("div"),r=n.style[e];return n.style[e]=t,n.style[e]!==r};function s(e,t){return!Array.isArray(e)&&t!==void 0?u(e,t):c(e)}let o;const p=()=>{if(!i())return!1;if(o!==void 0)return o;const e=document.createElement("div");return e.style.display="flex",e.style.flexDirection="column",e.style.rowGap="1px",e.appendChild(document.createElement("div")),e.appendChild(document.createElement("div")),document.body.appendChild(e),o=e.scrollHeight===1,document.body.removeChild(e),o};export{i as c,p as d,s as i};
@@ -1 +1 @@
1
- import{o,s as t}from"./vendor-BvqAck49.js";import{d as s}from"./styleChecker-tp7AHEoi.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
1
+ import{o,s as t}from"./vendor-BvqAck49.js";import{d as s}from"./styleChecker-zb3gob1_.js";const r=(()=>{const e=t(!1);return o(()=>{e.value=s()}),e});export{r as u};
@@ -1 +1 @@
1
- import{u as d}from"./index-E9fKdmZS.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
1
+ import{u as d}from"./index-D3WhDg1s.js";import{u as c}from"./useShellMode-CgR0wCYM.js";function u({accept:l=""}={}){return new Promise(a=>{if(typeof document>"u"){a({canceled:!0,path:null,content:null});return}const n=document.createElement("input");n.type="file",l&&(n.accept=l),n.style.display="none",document.body.appendChild(n);let o=!1;const i=()=>{n.parentNode&&n.parentNode.removeChild(n)},r=()=>{if(o)return;o=!0;const e=n.files&&n.files[0];if(!e){i(),a({canceled:!0,path:null,content:null});return}const t=new FileReader;t.onload=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:typeof t.result=="string"?t.result:""})},t.onerror=()=>{i(),a({canceled:!1,path:e.name,size:e.size,content:null,reason:"read_failed"})},t.readAsText(e)};n.addEventListener("change",r),n.click()})}function f(l,{defaultPath:a="download.txt"}={}){if(typeof document>"u")return{canceled:!0,path:null};const n=new Blob([l],{type:"text/plain"}),o=URL.createObjectURL(n),i=document.createElement("a");return i.href=o,i.download=a,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o),{canceled:!1,path:a}}function p(l){if(!Array.isArray(l))return"";const a=[];for(const n of l)if(Array.isArray(n.extensions))for(const o of n.extensions)a.push(`.${o.replace(/^\./,"")}`);return a.join(",")}function m(){const l=d();async function a(r={}){if(c().isEmbedded){const e=await l.sendRaw({type:"fs.openDialog",title:r.title,filters:r.filters},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDialog failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,content:t.content??null,size:t.size,reason:t.reason}}return u({accept:p(r.filters)})}async function n(r,e={}){if(typeof r!="string")throw new Error("content must be a string");if(c().isEmbedded){const t=await l.sendRaw({type:"fs.saveDialog",title:e.title,defaultPath:e.defaultPath,filters:e.filters,content:r},6e4);if(t&&t.ok===!1)throw new Error(t.error||"fs.saveDialog failed");const s=t?.result??t;return{canceled:!!s.canceled,path:s.path??null}}return f(r,{defaultPath:e.defaultPath})}async function o(r,e={}){const t=JSON.stringify(r,null,2),s={...e,defaultPath:e.defaultPath||"data.json",filters:e.filters||[{name:"JSON",extensions:["json"]}]};return n(t,s)}async function i(r={}){if(!c().isEmbedded)return{canceled:!0,path:null,initialized:!1,unsupported:!0};const e=await l.sendRaw({type:"fs.openDirectory",title:r.title},6e4);if(e&&e.ok===!1)throw new Error(e.error||"fs.openDirectory failed");const t=e?.result??e;return{canceled:!!t.canceled,path:t.path??null,initialized:!!t.initialized}}return{pickFileText:a,saveText:n,saveJson:o,pickDirectory:i}}export{m as u};
@@ -1 +1 @@
1
- import{u as f}from"./index-E9fKdmZS.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D as u};
1
+ import{u as f}from"./index-D3WhDg1s.js";function d(n){if(!n)return n;if(n.error)throw new Error(n.error);return n.result!==void 0?n.result:n}function p(n,t,a,e,r){return typeof n.onMessage!="function"||typeof n.sendRaw!="function"?n.sendRaw({type:t,...a},r).then(d):new Promise((u,s)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${t}.event`,g=`${t}.end`;let c=!1,y=()=>{};const o=(i,b)=>{if(!c){c=!0,clearTimeout(m);try{y()}catch{}i(b)}},m=setTimeout(()=>{o(s,new Error(`stream timeout (${r}ms): ${t}`))},r),h=n.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof e=="function")try{e(i.event||i)}catch{}return}if(i.type===g){o(u,d(i));return}i.type==="error"&&o(s,new Error(i.message||"stream error"))}});y=typeof h=="function"?h:()=>{},Promise.resolve(n.sendRaw({id:l,type:t,...a},r)).catch(()=>{})})}function D(){const n=f(),t=(a,e={},r=3e4)=>n.sendRaw({type:a,...e},r).then(d);return{async health(){return await t("personal-data-hub.health",{},8e3)},async stats(){return await t("personal-data-hub.stats",{},8e3)},async listAdapters(){return await t("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const e=await n.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),r=e&&e.result!==void 0?e.result:e;return r&&r.ok&&typeof r.filePath=="string"?r.filePath:null}catch{return null}},async adapterReadiness(a){return await t("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,e={}){return await t("personal-data-hub.sync-adapter",{name:a,options:e},12e4)},async syncAll(a={}){return await t("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:e=20,seed:r=1}={}){return await t("personal-data-hub.register-mock",{name:a,count:e,seed:r})},async unregister(a){return await t("personal-data-hub.unregister",{name:a})},async ask(a,e={}){return await t("personal-data-hub.ask",{question:a,options:e},18e4)},async queryEvents(a={}){return await t("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await t("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await t("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await t("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await t("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,e={}){return await t("personal-data-hub.register-email",{account:a,opts:e},15e3)},async unregisterEmail(a){return await t("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await t("personal-data-hub.list-email-accounts",{},5e3)},async eventDetail(a){return await t("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,e={},r){return await p(n,"personal-data-hub.sync-adapter-stream",{name:a,options:e},r,6e5)},async syncAllStream(a={},e){return await p(n,"personal-data-hub.sync-all-stream",{options:a},e,9e5)},async registerAlipay(a,e={}){return await t("personal-data-hub.register-alipay",{account:a,opts:e},15e3)},async unregisterAlipay(a){return await t("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await t("personal-data-hub.list-alipay-accounts",{},5e3)},async importAlipayBill({zipPath:a,csvPath:e,zipPassword:r}={}){return await t("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:e,zipPassword:r},3e5)},async reviewQueueList(a=50){return await t("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,e){return await t("personal-data-hub.review-decision",{reviewId:a,decision:e},5e3)},async manualMerge(a,e){return await t("personal-data-hub.manual-merge",{aId:a,bId:e},5e3)},async manualUnmerge(a){return await t("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await t("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await t("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await t("personal-data-hub.skills-list",{},5e3)},async runSkill(a,e={}){return await t("personal-data-hub.run-skill",{name:a,options:e},12e4)},async openAichatLogin(a,e={}){return await t("personal-data-hub.aichat-open-login",{vendor:a,opts:e},1e4)},async probeAichatCookies(a,e){return await t("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:e},1e4)},async registerAichatVendor(a,e,r={}){return await t("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:e,opts:r},3e4)},async rotateAichatLogin(a){return await t("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await t("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await t("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await t("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await t("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s}={}){return await t("personal-data-hub.register-wechat",{account:a,dbPath:e,wechatDataPath:r,fridaOpts:u,keyProviderOverride:s},45e3)},async listWechatAccounts(){return await t("personal-data-hub.list-wechat-accounts",{},5e3)},async unregisterWechat(a){return await t("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await t("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await t("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await t("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await t("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await t("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await t("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await t("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await t("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{D as u};
@@ -1 +1 @@
1
- import{M as i,h as a,w as l}from"./index-E9fKdmZS.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-BvqAck49.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
1
+ import{M as i,h as a,w as l}from"./index-D3WhDg1s.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-BvqAck49.js";function c(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,s=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1,u=e;if(Array.isArray(e)&&(u=i(e)[0]),!u)return null;const n=o(u,r,s);return n.props=t?a(a({},n.props),r):n.props,l(typeof n.props.class!="object","class must be string"),n}function v(e){let r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},t=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;return e.map(s=>c(s,r,t))}function N(e,r,t){p(o(e,a({},r)),t)}const m=e=>(e||[]).some(r=>g(r)?!(r.type===d||r.type===f&&!m(r.children)):!0)?e:null;function h(e,r,t,s){var u;const n=(u=e[r])===null||u===void 0?void 0:u.call(e,t);return m(n)?n:s?.()}export{h as a,v as b,c,N as t};
@@ -1,4 +1,4 @@
1
- import{K as o}from"./index-E9fKdmZS.js";import{i as f}from"./motion-DYt7yuUl.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
1
+ import{K as o}from"./index-D3WhDg1s.js";import{i as f}from"./motion-gkRvxGHW.js";const c=new o("antZoomIn",{"0%":{transform:"scale(0.2)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),y=new o("antZoomOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.2)",opacity:0}}),a=new o("antZoomBigIn",{"0%":{transform:"scale(0.8)",opacity:0},"100%":{transform:"scale(1)",opacity:1}}),s=new o("antZoomBigOut",{"0%":{transform:"scale(1)"},"100%":{transform:"scale(0.8)",opacity:0}}),g=new o("antZoomUpIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 0%"}}),O=new o("antZoomUpOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 0%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 0%",opacity:0}}),l=new o("antZoomLeftIn",{"0%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"0% 50%"}}),u=new o("antZoomLeftOut",{"0%":{transform:"scale(1)",transformOrigin:"0% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"0% 50%",opacity:0}}),p=new o("antZoomRightIn",{"0%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"100% 50%"}}),z=new o("antZoomRightOut",{"0%":{transform:"scale(1)",transformOrigin:"100% 50%"},"100%":{transform:"scale(0.8)",transformOrigin:"100% 50%",opacity:0}}),K=new o("antZoomDownIn",{"0%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0},"100%":{transform:"scale(1)",transformOrigin:"50% 100%"}}),w=new o("antZoomDownOut",{"0%":{transform:"scale(1)",transformOrigin:"50% 100%"},"100%":{transform:"scale(0.8)",transformOrigin:"50% 100%",opacity:0}}),I={zoom:{inKeyframes:c,outKeyframes:y},"zoom-big":{inKeyframes:a,outKeyframes:s},"zoom-big-fast":{inKeyframes:a,outKeyframes:s},"zoom-left":{inKeyframes:l,outKeyframes:u},"zoom-right":{inKeyframes:p,outKeyframes:z},"zoom-up":{inKeyframes:g,outKeyframes:O},"zoom-down":{inKeyframes:K,outKeyframes:w}},h=(n,r)=>{const{antCls:m}=n,t=`${m}-${r}`,{inKeyframes:i,outKeyframes:e}=I[r];return[f(t,i,e,r==="zoom-big-fast"?n.motionDurationFast:n.motionDurationMid),{[`
2
2
  ${t}-enter,
3
3
  ${t}-appear
4
4
  `]:{transform:"scale(0)",opacity:0,animationTimingFunction:n.motionEaseOutCirc,"&-prepare":{transform:"none"}},[`${t}-leave`]:{animationTimingFunction:n.motionEaseInOutCirc}}]};export{h as i,c as z};
@@ -8,7 +8,7 @@
8
8
  // Injected by web-ui-server.js at serve time
9
9
  window.__CC_CONFIG__ = __CC_CONFIG_PLACEHOLDER__;
10
10
  </script>
11
- <script type="module" crossorigin src="./assets/index-E9fKdmZS.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-D3WhDg1s.js"></script>
12
12
  <link rel="modulepreload" crossorigin href="./assets/vendor-BvqAck49.js">
13
13
  <link rel="modulepreload" crossorigin href="./assets/icons-DP3uiYxy.js">
14
14
  <link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
@@ -0,0 +1,134 @@
1
+ /**
2
+ * `cc hub query-events` — human-output rendering regression tests.
3
+ *
4
+ * Why this exists: vault events carry `occurredAt` (epoch ms) + `content`,
5
+ * NOT `at` / `summary`. The human renderer previously read `ev.at`, so
6
+ * `new Date(ev.at).toISOString()` threw "Invalid time value" on the FIRST
7
+ * row and killed the entire listing (the --json path was unaffected, which
8
+ * is why it went unnoticed). This pins the correct field usage + the
9
+ * malformed-timestamp guard so the bug can't silently come back.
10
+ *
11
+ * Uses the `_getHub` injection seam — no real vault.
12
+ */
13
+
14
+ import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
15
+ import { _internal } from "../hub.js";
16
+
17
+ const { cmdQueryEvents, cmdEventDetail } = _internal;
18
+
19
+ let exitSpy, logSpy, lines;
20
+
21
+ beforeEach(() => {
22
+ exitSpy = vi.spyOn(process, "exit").mockImplementation(() => {});
23
+ lines = [];
24
+ logSpy = vi.spyOn(console, "log").mockImplementation((...args) => {
25
+ lines.push(args.join(" "));
26
+ });
27
+ });
28
+
29
+ afterEach(() => {
30
+ exitSpy.mockRestore();
31
+ logSpy.mockRestore();
32
+ });
33
+
34
+ function hubWith(events) {
35
+ return { _getHub: async () => ({ vault: { queryEvents: () => events } }) };
36
+ }
37
+
38
+ describe("cc hub query-events — human rendering", () => {
39
+ it("renders occurredAt as ISO + content summary (no crash on real shape)", async () => {
40
+ const events = [
41
+ {
42
+ id: "e1",
43
+ subtype: "message",
44
+ occurredAt: 1782046916000,
45
+ content: { text: "hello world" },
46
+ },
47
+ ];
48
+ await cmdQueryEvents(hubWith(events));
49
+ const text = lines.join("\n");
50
+ expect(text).toContain("1 events:");
51
+ expect(text).toContain(new Date(1782046916000).toISOString());
52
+ expect(text).toContain("message");
53
+ expect(text).toContain("hello world");
54
+ // The pre-fix bug: this would have thrown "Invalid time value".
55
+ expect(exitSpy).toHaveBeenCalledWith(0);
56
+ });
57
+
58
+ it("falls back to title/subject/id when content.text is absent", async () => {
59
+ const events = [
60
+ {
61
+ id: "e2",
62
+ subtype: "mail",
63
+ occurredAt: 1,
64
+ content: { subject: "Re: x" },
65
+ },
66
+ { id: "e3", subtype: "note", occurredAt: 2, content: {} },
67
+ ];
68
+ await cmdQueryEvents(hubWith(events));
69
+ const text = lines.join("\n");
70
+ expect(text).toContain("Re: x");
71
+ expect(text).toContain("e3"); // empty content → falls back to id
72
+ });
73
+
74
+ it("guards a malformed timestamp instead of crashing the listing", async () => {
75
+ const events = [
76
+ {
77
+ id: "bad",
78
+ subtype: "x",
79
+ occurredAt: undefined,
80
+ content: { text: "t" },
81
+ },
82
+ {
83
+ id: "ok",
84
+ subtype: "y",
85
+ occurredAt: 1782046916000,
86
+ content: { text: "u" },
87
+ },
88
+ ];
89
+ await cmdQueryEvents(hubWith(events));
90
+ const text = lines.join("\n");
91
+ expect(text).toContain("(no date)"); // bad row rendered, not thrown
92
+ expect(text).toContain("t");
93
+ expect(text).toContain("u"); // listing continued past the bad row
94
+ expect(exitSpy).toHaveBeenCalledWith(0);
95
+ });
96
+ });
97
+
98
+ describe("cc hub event-detail — human rendering", () => {
99
+ function hubWithEvent(event) {
100
+ return { _getHub: async () => ({ vault: { getEvent: () => event } }) };
101
+ }
102
+
103
+ it("renders adapter (not [object Object]) + occurred + content", async () => {
104
+ const event = {
105
+ id: "qq:1",
106
+ subtype: "message",
107
+ occurredAt: 1782046916000,
108
+ actor: "person-qq-1",
109
+ content: { text: "hello" },
110
+ source: { adapter: "qq-pc", account: "x" },
111
+ };
112
+ await cmdEventDetail("qq:1", hubWithEvent(event));
113
+ const text = lines.join("\n");
114
+ expect(text).toContain("source: qq-pc");
115
+ expect(text).not.toContain("[object Object]");
116
+ expect(text).toContain(new Date(1782046916000).toISOString());
117
+ expect(text).toContain("hello");
118
+ expect(text).toContain("person-qq-1");
119
+ });
120
+
121
+ it("tolerates a string source and a missing/invalid timestamp", async () => {
122
+ const event = {
123
+ id: "e9",
124
+ subtype: "note",
125
+ occurredAt: undefined,
126
+ source: "legacy-string",
127
+ content: {},
128
+ };
129
+ await cmdEventDetail("e9", hubWithEvent(event));
130
+ const text = lines.join("\n");
131
+ expect(text).toContain("source: legacy-string");
132
+ expect(text).not.toContain("occurred:"); // invalid ts → line omitted, no crash
133
+ });
134
+ });
@@ -528,7 +528,7 @@ async function cmdQueryEvents(options) {
528
528
  // skips the 77-adapter registry build (and is crash-resilient to a
529
529
  // partial pdh install). getHubMinimal() returns the full hub if one was
530
530
  // already built this process, so the vault instance is identical.
531
- const hub = await getHubMinimal();
531
+ const hub = await (options._getHub || getHubMinimal)();
532
532
  const q = {};
533
533
  if (options.subtype) q.subtype = options.subtype;
534
534
  if (options.since) q.since = Number(options.since);
@@ -543,10 +543,18 @@ async function cmdQueryEvents(options) {
543
543
  }
544
544
  logger.log(`${events.length} events:`);
545
545
  for (const ev of events) {
546
- const at = new Date(ev.at).toISOString();
547
- logger.log(
548
- ` ${chalk.gray(at)} ${chalk.cyan(ev.subtype)} ${ev.summary || ev.id}`,
549
- );
546
+ // Vault events carry `occurredAt` (epoch ms) + `content`, NOT `at` /
547
+ // `summary` — reading the wrong fields previously threw "Invalid time
548
+ // value" on the first row and killed the whole listing. Guard the
549
+ // timestamp so one malformed row can't crash the output.
550
+ const ts = Number(ev.occurredAt);
551
+ const at = Number.isFinite(ts) ? new Date(ts).toISOString() : "(no date)";
552
+ const summary =
553
+ (ev.content &&
554
+ (ev.content.text || ev.content.title || ev.content.subject)) ||
555
+ ev.summary ||
556
+ ev.id;
557
+ logger.log(` ${chalk.gray(at)} ${chalk.cyan(ev.subtype)} ${summary}`);
550
558
  }
551
559
  process.exit(0);
552
560
  } catch (err) {
@@ -789,7 +797,7 @@ async function cmdEventDetail(eventId, options) {
789
797
  }
790
798
  try {
791
799
  // Read-only single-event lookup — vault-only, use the minimal hub.
792
- const hub = await getHubMinimal();
800
+ const hub = await (options._getHub || getHubMinimal)();
793
801
  const event = hub.vault.getEvent(eventId);
794
802
  if (!event) {
795
803
  const result = { found: false, eventId };
@@ -802,9 +810,24 @@ async function cmdEventDetail(eventId, options) {
802
810
  } else {
803
811
  logger.log(chalk.bold(`event ${event.id}`));
804
812
  logger.log(` subtype: ${event.subtype}`);
805
- logger.log(` source: ${event.source}`);
806
- if (event.title) logger.log(` title: ${event.title}`);
813
+ // occurredAt (epoch ms) is the canonical timestamp; guard a bad value.
814
+ const ts = Number(event.occurredAt);
815
+ if (Number.isFinite(ts)) {
816
+ logger.log(` occurred: ${new Date(ts).toISOString()}`);
817
+ }
818
+ // `source` is an object ({ adapter, ... }) — print the adapter, not the
819
+ // object (which renders as "[object Object]").
820
+ const adapter =
821
+ event.source && typeof event.source === "object"
822
+ ? event.source.adapter
823
+ : event.source;
824
+ if (adapter) logger.log(` source: ${adapter}`);
807
825
  if (event.actor) logger.log(` actor: ${event.actor}`);
826
+ const summary =
827
+ event.content &&
828
+ (event.content.text || event.content.title || event.content.subject);
829
+ if (summary) logger.log(` content: ${summary}`);
830
+ if (event.title) logger.log(` title: ${event.title}`);
808
831
  if (event.amount != null) {
809
832
  logger.log(` amount: ${event.amount} ${event.currency || ""}`);
810
833
  }
@@ -3263,6 +3286,8 @@ export const _internal = {
3263
3286
  cmdRetrieveContext,
3264
3287
  cmdStats,
3265
3288
  cmdHealth,
3289
+ cmdQueryEvents,
3290
+ cmdEventDetail,
3266
3291
  parsePositiveInt,
3267
3292
  cmdAIChatList,
3268
3293
  cmdAIChatLogin,
@@ -23,11 +23,122 @@ import {
23
23
  pdhLockDir,
24
24
  diagnosePdh,
25
25
  } from "../lib/pdh-bridge.js";
26
+ import { setupMcpFromConfig } from "../runtime/mcp-config.js";
27
+ import { readFeedback, summarizeFeedback } from "../lib/pdh-feedback-ledger.js";
26
28
 
27
29
  function emit(obj) {
28
30
  console.log(JSON.stringify(obj, null, 2));
29
31
  }
30
32
 
33
+ /** Concatenate the text blocks of an MCP tool result, else null. */
34
+ function mcpResultText(r) {
35
+ if (!r) return null;
36
+ if (Array.isArray(r.content)) {
37
+ const t = r.content
38
+ .filter((b) => b && b.type === "text" && typeof b.text === "string")
39
+ .map((b) => b.text)
40
+ .join("");
41
+ if (t) return t;
42
+ }
43
+ if (typeof r.result === "string") return r.result;
44
+ return null;
45
+ }
46
+
47
+ async function safeDisconnectAll(out) {
48
+ try {
49
+ await out?.mcpClient?.disconnectAll?.();
50
+ } catch {
51
+ /* best-effort cleanup */
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Live connectivity probe for the discovered PDH bridge — the cc-side
57
+ * diagnostic the list/status/doctor inspectors lack: list/status/doctor only
58
+ * read lockfiles, this actually **connects** and verifies the server responds
59
+ * (discover → connect → `pdh_ping` round-trip → report). Best-effort; always
60
+ * disconnects. The result NEVER carries the bearer token. Injectable for tests.
61
+ *
62
+ * @returns {Promise<object>} { ok, stage, reason?, device?, port?, transport?,
63
+ * tools?, latencyMs?, pingAttempted?, pingOk?, pingText?, pingError? }
64
+ */
65
+ export async function probePdhBridge(opts = {}, deps = {}) {
66
+ const env = opts.env || process.env;
67
+ const discover = deps.discoverPdhServer || discoverPdhServer;
68
+ const connect = deps.setupMcpFromConfig || setupMcpFromConfig;
69
+ const now = deps.now || (() => Date.now());
70
+
71
+ const lock = discover({ env });
72
+ if (!lock) {
73
+ return {
74
+ ok: false,
75
+ stage: "discover",
76
+ reason: "no live PDH server discovered (run `cc pdh doctor`)",
77
+ };
78
+ }
79
+ const base = {
80
+ device: lock.device,
81
+ port: lock.port,
82
+ transport: lock.transport,
83
+ };
84
+ const cfg = pdhServerToMcpConfig(lock);
85
+ const start = now();
86
+ let out;
87
+ try {
88
+ out = await connect({ pdh: cfg }, { writeErr: () => {} });
89
+ } catch (err) {
90
+ return { ok: false, stage: "connect", reason: err.message, ...base };
91
+ }
92
+ const conn = (out.connected || []).find((c) => c.server === "pdh");
93
+ if (!conn) {
94
+ await safeDisconnectAll(out);
95
+ return {
96
+ ok: false,
97
+ stage: "connect",
98
+ reason: "server did not connect (no tools)",
99
+ ...base,
100
+ };
101
+ }
102
+ // The bare tool names the bridge exposes (mcp__pdh__collect_files →
103
+ // collect_files), so the probe shows WHICH collectors a device advertises —
104
+ // confirming the bridge version/capabilities, not just a count.
105
+ const toolNames = (out.extraToolDefinitions || [])
106
+ .map((t) => t && t.function && t.function.name)
107
+ .filter((n) => typeof n === "string")
108
+ .map((n) =>
109
+ n.startsWith("mcp__pdh__") ? n.slice("mcp__pdh__".length) : n,
110
+ );
111
+ // Round-trip via pdh_ping when the bridge exposes it; otherwise the
112
+ // tools/list that connect already performed is itself proof of liveness.
113
+ const hasPing = toolNames.includes("pdh_ping");
114
+ let pingOk = null;
115
+ let pingText = null;
116
+ let pingError = null;
117
+ if (hasPing) {
118
+ try {
119
+ const r = await out.mcpClient.callTool("pdh", "pdh_ping", {});
120
+ pingOk = !r?.isError;
121
+ pingText = mcpResultText(r);
122
+ } catch (err) {
123
+ pingOk = false;
124
+ pingError = err.message;
125
+ }
126
+ }
127
+ await safeDisconnectAll(out);
128
+ return {
129
+ ok: pingOk !== false, // connected; an attempted ping must not have failed
130
+ stage: "ping",
131
+ ...base,
132
+ tools: conn.tools,
133
+ toolNames,
134
+ latencyMs: now() - start,
135
+ pingAttempted: hasPing,
136
+ pingOk,
137
+ pingText,
138
+ pingError,
139
+ };
140
+ }
141
+
31
142
  /** Strip the raw bearer token + internal _file path from a lock for output. */
32
143
  function redactLock(lock) {
33
144
  if (!lock) return null;
@@ -35,7 +146,8 @@ function redactLock(lock) {
35
146
  return { ...rest, hasToken: !!token };
36
147
  }
37
148
 
38
- export function registerPdhCommand(program) {
149
+ export function registerPdhCommand(program, deps = {}) {
150
+ const probe = deps.probePdhBridge || probePdhBridge;
39
151
  const pdh = program
40
152
  .command("pdh")
41
153
  .description(
@@ -158,5 +270,80 @@ export function registerPdhCommand(program) {
158
270
  console.log(` reason : ${diag.reason}`);
159
271
  });
160
272
 
273
+ pdh
274
+ .command("ping")
275
+ .description(
276
+ "Connect to the discovered PDH server and verify it responds (pdh_ping round-trip)",
277
+ )
278
+ .option("--json", "Machine-readable output")
279
+ .action(async (options) => {
280
+ const res = await probe({ env: process.env });
281
+ if (options.json) {
282
+ emit(res);
283
+ } else if (res.stage === "discover") {
284
+ console.log(
285
+ chalk.yellow("No PDH server discovered.") +
286
+ chalk.gray(" Run `cc pdh doctor` for why."),
287
+ );
288
+ } else if (!res.ok) {
289
+ console.log(
290
+ chalk.red(
291
+ `PDH ${res.device}:${res.port} — ${res.stage} failed: ` +
292
+ `${res.reason || res.pingError || "unknown"}`,
293
+ ),
294
+ );
295
+ } else {
296
+ const tag = res.pingAttempted
297
+ ? res.pingOk
298
+ ? chalk.green("pong")
299
+ : chalk.red("ping failed")
300
+ : chalk.gray("connected (no pdh_ping tool)");
301
+ console.log(
302
+ `PDH ${chalk.cyan(res.device)}:${res.port} ${chalk.green("OK")} — ` +
303
+ `${tag}, ${res.tools} tools, ${res.latencyMs}ms`,
304
+ );
305
+ if (res.toolNames && res.toolNames.length) {
306
+ console.log(chalk.gray(" tools: " + res.toolNames.join(", ")));
307
+ }
308
+ if (res.pingText) console.log(chalk.gray(" " + res.pingText));
309
+ }
310
+ if (!res.ok) process.exitCode = 1;
311
+ });
312
+
313
+ pdh
314
+ .command("feedback")
315
+ .description(
316
+ "Show what cc has learned from your cross-session corrections (§3.5.13 flywheel)",
317
+ )
318
+ .option("--json", "Machine-readable output")
319
+ .action((options) => {
320
+ const read = deps.readFeedback || readFeedback;
321
+ const summarize = deps.summarizeFeedback || summarizeFeedback;
322
+ const summary = summarize(read());
323
+ if (options.json) {
324
+ emit(summary);
325
+ return;
326
+ }
327
+ // Honest empty state (§3.5.18: surface "尚无" truthfully, never hide).
328
+ if (!summary.total) {
329
+ console.log(
330
+ chalk.gray("尚无跨会话反馈记录 (no cross-session feedback yet)."),
331
+ );
332
+ return;
333
+ }
334
+ console.log(chalk.bold(`PDH 自学习反馈 (${summary.total} 条)`));
335
+ console.log(
336
+ ` ${chalk.green("👍 " + summary.positive)} ` +
337
+ `${chalk.red("👎 " + summary.negative)} ` +
338
+ `净倾向 ${summary.sentiment >= 0 ? "+" : ""}${summary.sentiment}`,
339
+ );
340
+ if (summary.corrections.length) {
341
+ console.log(chalk.bold(" 已记住的纠正 (最新优先):"));
342
+ for (const c of summary.corrections) {
343
+ console.log(chalk.gray(` • ${c}`));
344
+ }
345
+ }
346
+ });
347
+
161
348
  return pdh;
162
349
  }