chainlesschain 0.162.120 → 0.162.122

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 (160) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-MUE7jVfi.js → AIOps-BmS46GrQ.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-DKkJNgJW.js → ActionButton-Bqvaz1Yj.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-DcHt5MVA.js → Analytics-BhCnMbKz.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-BjF0MsBB.js → AppLayout-cs0TRZya.js} +5 -5
  6. package/src/assets/web-panel/assets/{Audit-CybGKBUd.js → Audit-AwLNQzvX.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-CzZoTRnY.js → Backup-BOglo5g6.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-CG8BgY54.js → BaseInput-4qhQiJfI.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-S6AcW4T2.js → Chat-DUFX3Mv4.js} +6 -6
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-XpONY6wA.js → ChatBubbleRenderer-LWgyWUF_.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-DZ_LDoVZ.js → Checkbox-C4eyD_nB.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-DN2ZYd_4.js → Codegen-B9SRqAqh.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-Cidm2Ykv.js → Col-3eHStfvJ.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-ByNGbzcY.js → Community-DFbKjEgh.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-Dj9vY8yk.js → Compact-D5str1h-.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-_0ipnnBf.js → Compliance-DDYPQDiG.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-BNdunLG9.js → Cowork-Cdliboj6.js} +2 -2
  18. package/src/assets/web-panel/assets/{Cron-BvzsO_i-.js → Cron-Bfmwl6iZ.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-BSR_odwN.js → Crosschain-Bfo6RvSg.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-AsJk_1HF.js → DID-xqi72kjo.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-tYbIuKgu.js → Dashboard-4l68QdSQ.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-CVuLEkIH.js → Dropdown-C2wsZOdn.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-C4DBbxZ8.js → EmailListRenderer-CWh_fKmI.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-DNX_oWxL.js → FamilyGuardDashboard-CHK5rapA.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-Cl5fg-2b.js → Federation-JpiE2iKR.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-sMFqQO5g.js → FormItemContext-lLOEHvAb.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-qZpi2wH1.js → GenericCardRenderer-CaDh2XiY.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-uO96e0En.js → Git-B9SmGPMU.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-CAkQyU1W.js → Governance-B3ODoSO2.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-kQgYGwuX.js → Inference-C_jP_nlz.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-B3r3qbm6.js → KnowledgeGraph-zYwypnwu.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-BhnUcQP2.js → Logs-D6owai5o.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-cSrDXJRg.js → Marketplace-umRB80w4.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-D7tn-iuQ.js → McpTools-Dxlypa0R.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-YfMrETfK.js → Memory-BxBHR7eW.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-QYTJAlGR.js → MobileBridge-Car9kLtE.js} +3 -3
  37. package/src/assets/web-panel/assets/MobileProjects-59gyfK6T.js +1 -0
  38. package/src/assets/web-panel/assets/{Mtc-C6a2fTit.js → Mtc-2YBBawFi.js} +5 -5
  39. package/src/assets/web-panel/assets/{MtcAudit-tPoY6xsu.js → MtcAudit-DczAeHfM.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-VVdmiLTB.js → Multisig-CPxyt7a-.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-BuI8pzz1.js → NLProgramming-DvKJ8imu.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-f_coT28Z.js → Notes-tHRMLOQ3.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-D8Beg8OP.js → NotificationSettings-DxIYUWPW.js} +1 -1
  44. package/src/assets/web-panel/assets/OrderTableRenderer-BMpVfQkg.js +1 -0
  45. package/src/assets/web-panel/assets/{Organization-fUX97U1w.js → Organization-BBsie-kN.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-vVjV0pGU.js → Overflow-DrdVw_fC.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-DGM6VCzC.js → P2P-CMBYxejX.js} +2 -2
  48. package/src/assets/web-panel/assets/PdhVaultBrowser-BBHzSaeq.js +7 -0
  49. package/src/assets/web-panel/assets/{Permissions-Q7NYy0Wv.js → Permissions-W4kD06Cj.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-Bdp3MI1-.js → PersonalDataHub-nuqNTK2w.js} +4 -4
  51. package/src/assets/web-panel/assets/{Pipeline-CB1xH835.js → Pipeline-DzCX3yHy.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-DIbp3aJd.js → Privacy-9ENAJQOC.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-DzEtaFH9.js → ProjectInit-hCWXNnGJ.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-CiciM4K4.js → ProjectSettings--BzvEaxE.js} +2 -2
  55. package/src/assets/web-panel/assets/Projects-C6l6z4Mo.js +1 -0
  56. package/src/assets/web-panel/assets/{Providers-CXgLwW2L.js → Providers-kEifEWLb.js} +1 -1
  57. package/src/assets/web-panel/assets/{QuickAsk-nzHdN2F2.js → QuickAsk-B6oLUYKR.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-BicIztEZ.js → Recommend-BIEMGN0q.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-C_Y8oRqf.js → Reputation-D-9AEaRr.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-CkNhTYCZ.js → Row-W6LSmdzh.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-D_fjy-vQ.js → RssFeed-DJi97lWh.js} +3 -3
  62. package/src/assets/web-panel/assets/{Search-CCsIRDKU.js → Search-DOEB2utf.js} +1 -1
  63. package/src/assets/web-panel/assets/{Security-CHJPSsH6.js → Security-BtawKhmm.js} +3 -3
  64. package/src/assets/web-panel/assets/{Services-BQr5Adu-.js → Services-BdCe11of.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-BQtvUIf2.js → Skeleton-C_wcDxpN.js} +1 -1
  66. package/src/assets/web-panel/assets/Skills-n2GgEfQ1.js +1 -0
  67. package/src/assets/web-panel/assets/{Sla-BO5j3PAQ.js → Sla-D5WfrvLP.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-BmPQTYAi.js → SpeechSettings-D6qCWpan.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-BnobmeAo.js → SyncSettings-BBbldyeR.js} +2 -2
  70. package/src/assets/web-panel/assets/Tasks-DMkBOCW-.js +1 -0
  71. package/src/assets/web-panel/assets/{Templates-RZh0Oh_Q.js → Templates-DbLImR1I.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-BD6D6Ak7.js → Tenant-B0qM4w6Z.js} +1 -1
  73. package/src/assets/web-panel/assets/Terminal-BjKUkiR1.js +3 -0
  74. package/src/assets/web-panel/assets/{TimelineRenderer-DmwdA_BU.js → TimelineRenderer-Drf_B0al.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-CMgdZ-HW.js → Tokens-DgCx2Bfa.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-Ckz3UHfh.js → Trigger-CNUB_qRQ.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-AKEeF68u.js → Trust-JQUTjXXI.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-y_PA8Ugs.js → UkeySign-7o1O51qV.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-BDCHMoYT.js → VideoEditing-Ccb1cTxo.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-BUPNjLDa.js → Wallet-EMf9MlLK.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-BSkgJ_ej.js → WebAuthn-DOYoaCmi.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-Cly_vJCn.js → WorkflowEditor-BcFvWc2d.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-B2upy0kk.js → chat-CPvCSHY4.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-DRymaRcw.js → colors-Ca7MoLtb.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-BjlECmvE.js → compact-item-B9AUAVCQ.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-NByPo135.js → createContext-CnMJHqHw.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-vFgm_Ssk.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-CnapAb4N.js → hasIn-Bevd8pXd.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-B0IxW10q.js → index-0DtNS6oi.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-DSNzuCKY.js → index-2KMpdEzs.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-sX1MbnSU.js → index-B3zlqc60.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-BdsQCfwD.js → index-B619_m_T.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-C5QIx6d1.js → index-BFkrnvs_.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DfV7ozPn.js → index-BGBbFzIJ.js} +1 -1
  95. package/src/assets/web-panel/assets/index-BGUjPh7h.js +1 -0
  96. package/src/assets/web-panel/assets/{index-DpVmeNyO.js → index-BM1tI3g5.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B1l9stj4.js → index-BUlsrbu2.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-BC3lHdGe.js → index-BV1U7tR6.js} +1 -1
  99. package/src/assets/web-panel/assets/{index-BCIn3-zn.js → index-BcRDjaEi.js} +3 -3
  100. package/src/assets/web-panel/assets/{index-iFODT6oN.js → index-BwDJvHfR.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-qVEh-o74.js → index-BzmhHe0m.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-DdWH7Nnq.js → index-C3biz3RB.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-CoZgzgDg.js → index-C5i4gKvN.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-o8nqsumS.js → index-CAKYScOz.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-MtPi9EHn.js → index-CGEc6vlv.js} +1 -1
  106. package/src/assets/web-panel/assets/{index-DrJVa6Gk.js → index-CQKVKyjf.js} +1 -1
  107. package/src/assets/web-panel/assets/{index-BlVSeRLX.js → index-CVxhWXMd.js} +1 -1
  108. package/src/assets/web-panel/assets/{index-Bl67igbC.js → index-Cd62bwRd.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-C8mpo9w0.js → index-Ct3wP67S.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-C4Je7eKb.js → index-CtIv89mI.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-69yznrDs.js → index-CvhLkwFR.js} +1 -1
  112. package/src/assets/web-panel/assets/index-Cx-wP5XE.js +1 -0
  113. package/src/assets/web-panel/assets/{index-B8mHLG8W.js → index-D9VR1tES.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-DUZ5OBUP.js → index-DAjYLhik.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-CQ6Td4oP.js → index-DPk2HXTA.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-BnYbOEQ5.js → index-DTxmgfz2.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-3N2bkUYM.js → index-DW3rTBy_.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-aV-LQt0K.js → index-Dnk8TOm3.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-DDOEPs_e.js → index-HdGuA1pS.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CBqC10Mz.js → index-PidVLx0u.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-DaQVzr6e.js → index-aB7GLimB.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-DQRbttWF.js → index-ecThTNhE.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-C35ewkvS.js → index-gR1xGRvy.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-B7EkRJNQ.js → index-ienIjr7_.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-KbNiEQkd.js → index-kUeSjyHt.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-CmdbB6n1.js → index-p1rI3d66.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-BuMhmoLi.js → index-tUD_CWx-.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-o1fFt3V7.js → initDefaultProps-dsKHYCPH.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-Bwj9ZiqO.js → motion-DdPCK2zh.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-DoTSIAxU.js → move-Bi0bmOjg.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-DkO-otLG.js → omit-DCrBiySU.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-7dqbsVWT.js → pickAttrs-CcJuqfya.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-WPFcCNIM.js → placementArrow-DFGuzth-.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-DqQxE3aN.js → responsiveObserve-B_WDlgvI.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-CyzizbNB.js → slide-BSFabVgO.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-C71vV6Kb.js → statusUtils-CebvsGH8.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-DVrLfHrc.js → styleChecker-CMuE7NWy.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-DVNyuXrQ.js → useFlexGapSupport-RWGVgZNu.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-BpBz_yQJ.js → useFs-srxzzfG_.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-CYHp2Bn2.js → usePersonalDataHub-B5OwxZuK.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-CXAL4PQ0.js → vnode-CXOEebAH.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-mrlkZmnn.js → zoom-DKNwqG2v.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/lib/llm-config-defaults.js +20 -0
  145. package/src/lib/runnable-provider.js +64 -0
  146. package/src/repl/agent-repl.js +35 -0
  147. package/src/runtime/__tests__/message-roles.test.js +75 -0
  148. package/src/runtime/agent-core.js +5 -3
  149. package/src/runtime/headless-stream.js +15 -8
  150. package/src/runtime/message-roles.js +34 -7
  151. package/src/assets/web-panel/assets/MobileProjects-hulCHsOG.js +0 -1
  152. package/src/assets/web-panel/assets/OrderTableRenderer-C9PxKWwg.js +0 -1
  153. package/src/assets/web-panel/assets/PdhVaultBrowser-j01q6J9e.js +0 -7
  154. package/src/assets/web-panel/assets/Projects-C7KoEuf4.js +0 -1
  155. package/src/assets/web-panel/assets/Skills-Dc0LU3LK.js +0 -1
  156. package/src/assets/web-panel/assets/Tasks-DFFcr6Zm.js +0 -1
  157. package/src/assets/web-panel/assets/Terminal-BSuShSOU.js +0 -3
  158. package/src/assets/web-panel/assets/devWarning-BQpi8pDO.js +0 -1
  159. package/src/assets/web-panel/assets/index-BvYGiwBG.js +0 -1
  160. package/src/assets/web-panel/assets/index-CC_4NPrV.js +0 -1
@@ -1,4 +1,4 @@
1
- import{K as n}from"./index-BCIn3-zn.js";import{i as e}from"./motion-Bwj9ZiqO.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
1
+ import{K as n}from"./index-BcRDjaEi.js";import{i as e}from"./motion-DdPCK2zh.js";const m=new n("antSlideUpIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1}}),f=new n("antSlideUpOut",{"0%":{transform:"scaleY(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"0% 0%",opacity:0}}),c=new n("antSlideDownIn",{"0%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0},"100%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1}}),l=new n("antSlideDownOut",{"0%":{transform:"scaleY(1)",transformOrigin:"100% 100%",opacity:1},"100%":{transform:"scaleY(0.8)",transformOrigin:"100% 100%",opacity:0}}),y=new n("antSlideLeftIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1}}),p=new n("antSlideLeftOut",{"0%":{transform:"scaleX(1)",transformOrigin:"0% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"0% 0%",opacity:0}}),O=new n("antSlideRightIn",{"0%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0},"100%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1}}),d=new n("antSlideRightOut",{"0%":{transform:"scaleX(1)",transformOrigin:"100% 0%",opacity:1},"100%":{transform:"scaleX(0.8)",transformOrigin:"100% 0%",opacity:0}}),g={"slide-up":{inKeyframes:m,outKeyframes:f},"slide-down":{inKeyframes:c,outKeyframes:l},"slide-left":{inKeyframes:y,outKeyframes:p},"slide-right":{inKeyframes:O,outKeyframes:d}},K=(t,r)=>{const{antCls:a}=t,i=`${a}-${r}`,{inKeyframes:s,outKeyframes:o}=g[r];return[e(i,s,o,t.motionDurationMid),{[`
2
2
  ${i}-enter,
3
3
  ${i}-appear
4
4
  `]:{transform:"scale(0)",transformOrigin:"0% 0%",opacity:0,animationTimingFunction:t.motionEaseOutQuint},[`${i}-leave`]:{animationTimingFunction:t.motionEaseInQuint}}]};export{f as a,c as b,m as c,K as i,l as s};
@@ -1 +1 @@
1
- import{i as e}from"./index-BCIn3-zn.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-BcRDjaEi.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-BCIn3-zn.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-BcRDjaEi.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-DVrLfHrc.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-CMuE7NWy.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-BCIn3-zn.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-BcRDjaEi.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-BCIn3-zn.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-BcRDjaEi.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-BCIn3-zn.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-BcRDjaEi.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-BCIn3-zn.js";import{i as f}from"./motion-Bwj9ZiqO.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-BcRDjaEi.js";import{i as f}from"./motion-DdPCK2zh.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-BCIn3-zn.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-BcRDjaEi.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">
@@ -18,6 +18,26 @@
18
18
  * - No configured provider → unchanged (runner defaults apply: ollama).
19
19
  */
20
20
  export function applyConfigLlmDefaults(options = {}, cfgLlm = {}, opts = {}) {
21
+ // The IDE chat panel pins --provider/--model (read from config) but DROPS
22
+ // --base-url/--api-key. With an explicit --provider the block below bails, so
23
+ // a cloud provider would lose its endpoint + key → a 401, or a silent
24
+ // fall-through to ollama ("配置了火山却 fetch failed / 切到 ollama"). When the
25
+ // explicit provider MATCHES the configured one, backfill the omitted
26
+ // baseUrl/apiKey (and model) from config — it's the SAME provider, so its
27
+ // credentials are exactly right. Mixing config into a DIFFERENT explicit
28
+ // provider is still avoided (handled by the early return below).
29
+ if (
30
+ options.provider &&
31
+ cfgLlm.provider &&
32
+ options.provider === cfgLlm.provider
33
+ ) {
34
+ if (!options.baseUrl && cfgLlm.baseUrl) options.baseUrl = cfgLlm.baseUrl;
35
+ if (!options.apiKey && cfgLlm.apiKey) options.apiKey = cfgLlm.apiKey;
36
+ if (!options.model && !opts.explicitModel && cfgLlm.model) {
37
+ options.model = cfgLlm.model;
38
+ }
39
+ return options;
40
+ }
21
41
  if (options.provider || !cfgLlm.provider) return options;
22
42
  options.provider = cfgLlm.provider;
23
43
  if (opts.explicitModel) {
@@ -73,6 +73,32 @@ function defaultModelFor(provider) {
73
73
  return selectModelForTask(provider, TaskType.CHAT) || undefined;
74
74
  }
75
75
 
76
+ // Model families that unambiguously belong to ONE provider. Used to catch a
77
+ // corrupted config that paired a foreign model with a provider (e.g.
78
+ // provider:"volcengine" + model:"haiku" → the ark API 404s "model not found").
79
+ // Conservative on purpose — only well-known prefixes — so a custom/unknown
80
+ // model name never misfires into a swap.
81
+ const FOREIGN_MODEL_FAMILY = {
82
+ anthropic: /\b(claude|haiku|sonnet|opus)\b/i,
83
+ openai: /\b(gpt-?\d|o[134]-|chatgpt)\b/i,
84
+ gemini: /\bgemini\b/i,
85
+ };
86
+
87
+ /**
88
+ * Does `model` clearly belong to a DIFFERENT provider than `provider`? True only
89
+ * when the model matches another provider's well-known family signature (and not
90
+ * the configured provider's own family). Lets us swap a foreign model to the
91
+ * provider's default instead of 404-ing on the endpoint.
92
+ */
93
+ export function modelForeignToProvider(provider, model) {
94
+ if (!nonEmpty(model)) return false;
95
+ for (const [family, re] of Object.entries(FOREIGN_MODEL_FAMILY)) {
96
+ if (family === provider) continue;
97
+ if (re.test(model)) return true;
98
+ }
99
+ return false;
100
+ }
101
+
76
102
  /**
77
103
  * Wrap a chatFn so an AUTH failure (no / wrong / expired key for the resolved
78
104
  * provider) self-heals to a provider we can actually run instead of failing the
@@ -159,6 +185,44 @@ export function makeRunnableProviderFallback(
159
185
  const stickyFrom = new Set();
160
186
 
161
187
  return async function runnableProviderFallback(messages, options = {}) {
188
+ // PROACTIVE heal #1 — a FOREIGN MODEL on an otherwise-correct provider: a
189
+ // corrupted config left e.g. model:"haiku" on provider:"volcengine", which
190
+ // the ark API 404s ("model not found"). Keep the provider + key + baseUrl;
191
+ // swap ONLY the model to the provider's own default so the call succeeds.
192
+ if (
193
+ nonEmpty(options.provider) &&
194
+ modelForeignToProvider(options.provider, options.model)
195
+ ) {
196
+ const def = defaultModelFor(options.provider);
197
+ if (def && def !== options.model) {
198
+ notify({
199
+ from: options.provider,
200
+ to: options.provider,
201
+ reason: "model-mismatch",
202
+ fromModel: options.model,
203
+ toModel: def,
204
+ });
205
+ options = { ...options, model: def };
206
+ }
207
+ }
208
+ // PROACTIVE heal #2 — a MISLABELED config (provider disagrees with the
209
+ // endpoint its baseUrl belongs to — e.g. a corrupted config left
210
+ // provider:"anthropic" but baseUrl still points at volces.com). The labeled
211
+ // provider's first attempt is doomed AND can fail with a NON-auth error
212
+ // ("fetch failed" / wrong-endpoint 404) that the reactive catch below would
213
+ // rethrow without recovering — the exact "配置了火山却 fetch failed / 切到
214
+ // ollama" trap. The relabel is always safe (SAME baseUrl + key; only the
215
+ // provider name + paired model change), so pre-empt the bad attempt
216
+ // entirely. Env-key fallback stays REACTIVE (it must fire only when the
217
+ // configured provider genuinely cannot run, never to hijack a keyed one).
218
+ {
219
+ const pre = computeFallback(options);
220
+ if (pre && pre.reason === "baseurl-mismatch") {
221
+ stickyFrom.add(options.provider);
222
+ notify({ from: options.provider, to: pre.to, reason: pre.reason });
223
+ return await chatFn(messages, { ...options, ...pre.override });
224
+ }
225
+ }
162
226
  // Known-bad provider: skip the wasted failed attempt and route directly.
163
227
  if (stickyFrom.has(options.provider)) {
164
228
  const fb = computeFallback(options);
@@ -69,6 +69,7 @@ import {
69
69
  import { HookEvents } from "../lib/hook-manager.js";
70
70
  import { IterationBudget } from "../lib/iteration-budget.js";
71
71
  import { resolveAgentMcp } from "../runtime/mcp-config.js";
72
+ import { collapseConsecutiveMessagesInPlace } from "../runtime/message-roles.js";
72
73
  import {
73
74
  AGENT_TOOLS,
74
75
  buildSystemPrompt,
@@ -185,6 +186,18 @@ async function executeTool(name, args) {
185
186
  * Agentic loop — wraps agent-core's async generator with REPL display output.
186
187
  */
187
188
  async function agentLoop(messages, options) {
189
+ // Resume-degenerate role merge (Claude Code 2.1.187 parity), gated by the
190
+ // one-shot `mergeRoles` flag so it fires only on the first model call after
191
+ // resuming a session whose prior run produced no assistant response. Collapse
192
+ // IN PLACE: `coreAgentLoop` mutates this same array (appending assistant/tool
193
+ // turns), and the REPL reuses it across turns, so folding a copy would leave
194
+ // the degenerate `[user, user]` pair in the persistent history and re-break
195
+ // the next turn. Safe in place because the gated turn is still tool-free (a
196
+ // resumed transcript holds only user/assistant/system) and the helper never
197
+ // folds `tool` turns regardless.
198
+ if (options.mergeRoles) {
199
+ collapseConsecutiveMessagesInPlace(messages);
200
+ }
188
201
  const usageEvents = [];
189
202
  // Visible cross-vendor fallback notice: a silent switch from the configured
190
203
  // provider onto another vendor (or a baseUrl relabel) is surfaced as a yellow
@@ -603,6 +616,14 @@ export async function startAgentRepl(options = {}) {
603
616
  );
604
617
  let _activeOutputStyle = null; // { name, body }
605
618
  const messages = [{ role: "system", content: _replBaseSystem }];
619
+ // Resume-degenerate role sanitation (Claude Code 2.1.187 parity): a one-shot
620
+ // flag armed when a resumed transcript ends with a bare `user` turn (the prior
621
+ // run produced no assistant response). Consumed by the first model call so the
622
+ // first live prompt — which would otherwise stack a second `user` and trip
623
+ // "roles must alternate" on Anthropic/Bedrock — is folded exactly once. Gated
624
+ // (not every turn) so the live loop's intentional consecutive-`user` states
625
+ // are never folded.
626
+ let _sanitizeRolesNextTurn = false;
606
627
  // Checkpoint marks ({ atMessageCount, id, tool }) recorded as the agent loop
607
628
  // emits `checkpoint` events, so `/rewind <n>` can also restore files to the
608
629
  // snapshot taken before that turn (Claude-Code rewind = code + conversation).
@@ -824,6 +845,9 @@ export async function startAgentRepl(options = {}) {
824
845
  const rebuilt = rebuildMessages(sessionId);
825
846
  if (rebuilt.length > 0) {
826
847
  messages.push(...rebuilt.filter((m) => m.role !== "system"));
848
+ // Arm the resume role-merge if the prior run left a dangling user turn.
849
+ _sanitizeRolesNextTurn =
850
+ messages[messages.length - 1]?.role === "user";
827
851
  logger.info(
828
852
  `Resumed JSONL session ${sessionId} (${rebuilt.length} messages)`,
829
853
  );
@@ -836,6 +860,8 @@ export async function startAgentRepl(options = {}) {
836
860
  ? JSON.parse(existing.messages)
837
861
  : existing.messages;
838
862
  messages.push(...parsed.filter((m) => m.role !== "system"));
863
+ _sanitizeRolesNextTurn =
864
+ messages[messages.length - 1]?.role === "user";
839
865
  logger.info(
840
866
  `Resumed session ${sessionId} (${parsed.length} messages)`,
841
867
  );
@@ -2047,6 +2073,8 @@ export async function startAgentRepl(options = {}) {
2047
2073
  const rebuilt = rebuildMessages(resumeId);
2048
2074
  messages.length = 1; // keep system prompt
2049
2075
  messages.push(...rebuilt.filter((m) => m.role !== "system"));
2076
+ _sanitizeRolesNextTurn =
2077
+ messages[messages.length - 1]?.role === "user";
2050
2078
  sessionId = resumeId;
2051
2079
  // The prior session's checkpoint marks (turn-index → checkpoint id)
2052
2080
  // no longer map to this swapped-in history; keeping them would make
@@ -2065,6 +2093,8 @@ export async function startAgentRepl(options = {}) {
2065
2093
  : existing.messages;
2066
2094
  messages.length = 1; // keep system prompt
2067
2095
  messages.push(...parsed.filter((m) => m.role !== "system"));
2096
+ _sanitizeRolesNextTurn =
2097
+ messages[messages.length - 1]?.role === "user";
2068
2098
  sessionId = existing.id;
2069
2099
  // Drop the prior session's checkpoint marks (see JSONL branch).
2070
2100
  _checkpointMarks.length = 0;
@@ -3342,12 +3372,17 @@ export async function startAgentRepl(options = {}) {
3342
3372
  }
3343
3373
  : {};
3344
3374
  if (_streamLive) process.stdout.write("\n");
3375
+ // Consume the one-shot resume-degeneracy flag for THIS turn so the role
3376
+ // merge fires exactly once (2.1.187 parity; see _sanitizeRolesNextTurn).
3377
+ const _mergeRolesThisTurn = _sanitizeRolesNextTurn;
3378
+ _sanitizeRolesNextTurn = false;
3345
3379
  const {
3346
3380
  content: response,
3347
3381
  usageEvents,
3348
3382
  thinking: reasoning,
3349
3383
  } = await agentLoop(messages, {
3350
3384
  ...liveOpts,
3385
+ mergeRoles: _mergeRolesThisTurn,
3351
3386
  // Visible auto-retry feedback (Claude-Code 2.1.181): when the model's
3352
3387
  // streaming call hits a transient connection drop and retries, tell the
3353
3388
  // user instead of leaving them staring at a silent pause. To stderr so
@@ -1,6 +1,7 @@
1
1
  import { describe, it, expect } from "vitest";
2
2
  import {
3
3
  mergeConsecutiveMessages,
4
+ collapseConsecutiveMessagesInPlace,
4
5
  _internal,
5
6
  } from "../message-roles.js";
6
7
 
@@ -46,6 +47,17 @@ describe("mergeConsecutiveMessages", () => {
46
47
  expect(out).toEqual([{ role: "assistant", content: "x\n\ny" }]);
47
48
  });
48
49
 
50
+ it("never merges consecutive tool messages (preserves each tool_call_id)", () => {
51
+ // A multi-tool turn produces back-to-back `tool` results — folding them
52
+ // would drop tool_call_ids and corrupt the tool-call pairing.
53
+ const msgs = [
54
+ { role: "assistant", content: "", tool_calls: [{ id: "a" }, { id: "b" }] },
55
+ { role: "tool", content: "r1", tool_call_id: "a" },
56
+ { role: "tool", content: "r2", tool_call_id: "b" },
57
+ ];
58
+ expect(mergeConsecutiveMessages(msgs)).toEqual(msgs);
59
+ });
60
+
49
61
  it("never merges system messages (leading base + context pair kept distinct)", () => {
50
62
  const msgs = [
51
63
  { role: "system", content: "base" },
@@ -140,3 +152,66 @@ describe("mergeConsecutiveMessages", () => {
140
152
  });
141
153
  });
142
154
  });
155
+
156
+ describe("collapseConsecutiveMessagesInPlace", () => {
157
+ it("collapses a degenerate user pair in place and returns true", () => {
158
+ const messages = [
159
+ { role: "system", content: "sys" },
160
+ { role: "user", content: "original task" },
161
+ { role: "user", content: "continue please" },
162
+ ];
163
+ const changed = collapseConsecutiveMessagesInPlace(messages);
164
+ expect(changed).toBe(true);
165
+ expect(messages).toEqual([
166
+ { role: "system", content: "sys" },
167
+ { role: "user", content: "original task\n\ncontinue please" },
168
+ ]);
169
+ });
170
+
171
+ it("is a no-op (returns false) on a healthy alternating transcript", () => {
172
+ const messages = [
173
+ { role: "system", content: "sys" },
174
+ { role: "user", content: "a" },
175
+ { role: "assistant", content: "b" },
176
+ { role: "user", content: "c" },
177
+ ];
178
+ const before = JSON.parse(JSON.stringify(messages));
179
+ expect(collapseConsecutiveMessagesInPlace(messages)).toBe(false);
180
+ expect(messages).toEqual(before);
181
+ });
182
+
183
+ it("keeps the SAME array reference (closures over it stay valid)", () => {
184
+ const messages = [
185
+ { role: "user", content: "a" },
186
+ { role: "user", content: "b" },
187
+ ];
188
+ const ref = messages;
189
+ collapseConsecutiveMessagesInPlace(messages);
190
+ expect(messages).toBe(ref);
191
+ expect(messages).toHaveLength(1);
192
+ });
193
+
194
+ it("returns false for a non-array argument", () => {
195
+ expect(collapseConsecutiveMessagesInPlace(null)).toBe(false);
196
+ expect(collapseConsecutiveMessagesInPlace(undefined)).toBe(false);
197
+ });
198
+
199
+ it("does not corrupt tool results adjacent in a resumed transcript", () => {
200
+ // Defensive: a DB-resumed transcript could carry tool turns; they must
201
+ // survive an in-place collapse untouched while a user pair still folds.
202
+ const messages = [
203
+ { role: "user", content: "u1" },
204
+ { role: "user", content: "u2" },
205
+ { role: "assistant", content: "", tool_calls: [{ id: "a" }, { id: "b" }] },
206
+ { role: "tool", content: "r1", tool_call_id: "a" },
207
+ { role: "tool", content: "r2", tool_call_id: "b" },
208
+ ];
209
+ expect(collapseConsecutiveMessagesInPlace(messages)).toBe(true);
210
+ expect(messages).toEqual([
211
+ { role: "user", content: "u1\n\nu2" },
212
+ { role: "assistant", content: "", tool_calls: [{ id: "a" }, { id: "b" }] },
213
+ { role: "tool", content: "r1", tool_call_id: "a" },
214
+ { role: "tool", content: "r2", tool_call_id: "b" },
215
+ ]);
216
+ });
217
+ });
@@ -4293,7 +4293,7 @@ export async function* agentLoop(messages, options) {
4293
4293
  const { makeRunnableProviderFallback } =
4294
4294
  await import("../lib/runnable-provider.js");
4295
4295
  llmCall = makeRunnableProviderFallback(llmCall, {
4296
- onFallback: ({ from, to, reason }) => {
4296
+ onFallback: ({ from, to, reason, fromModel, toModel }) => {
4297
4297
  // Switching VENDORS (or relabelling via baseUrl) must NEVER be silent —
4298
4298
  // a user who configured volcengine deserves to know it ran on another
4299
4299
  // provider/model. Build a human message and hand it to the driver's
@@ -4302,8 +4302,10 @@ export async function* agentLoop(messages, options) {
4302
4302
  const message =
4303
4303
  reason === "env-key"
4304
4304
  ? `"${from}" 鉴权失败,已临时切换到不同厂商 "${to}"(请检查 ${from} 的 API key:cc config set llm.apiKey …)。`
4305
- : `provider 配置与 baseUrl 不一致,已按 baseUrl 切换到 "${to}"。`;
4306
- const info = { from, to, reason, message };
4305
+ : reason === "model-mismatch"
4306
+ ? `模型 "${fromModel}" 不属于 ${from},已改用其默认模型 "${toModel}"(用 cc config set llm.model 设置正确的 ${from} 模型)。`
4307
+ : `provider 配置与 baseUrl 不一致,已按 baseUrl 切换到 "${to}"。`;
4308
+ const info = { from, to, reason, fromModel, toModel, message };
4307
4309
  if (typeof options.onProviderFallback === "function") {
4308
4310
  try {
4309
4311
  options.onProviderFallback(info);
@@ -19,7 +19,7 @@
19
19
  import { bootstrap } from "./bootstrap.js";
20
20
  import { buildSystemPrompt, agentLoop as coreAgentLoop } from "./agent-core.js";
21
21
  import { composeSystemPrompt } from "./system-prompt.js";
22
- import { mergeConsecutiveMessages } from "./message-roles.js";
22
+ import { collapseConsecutiveMessagesInPlace } from "./message-roles.js";
23
23
  import { expandFileRefsAsync } from "./file-ref-expander.js";
24
24
  import { detectImagePaths } from "../lib/image-input.js";
25
25
  import { detectVersionSkew, versionSkewMessage } from "../lib/version-skew.js";
@@ -260,7 +260,7 @@ async function runTurn(messages, loopOptions, { runLoop, emit, costBudget }) {
260
260
  let endReason = "complete";
261
261
  let stopForCost = false;
262
262
 
263
- // Merge consecutive same-role turns before the model call ONLY when the
263
+ // Collapse consecutive same-role turns before the model call ONLY when the
264
264
  // caller flags a resume-degenerate transcript (`mergeRoles`): a resumed
265
265
  // session whose previous run produced NO assistant response leaves a trailing
266
266
  // bare `user` turn, so splicing the first live prompt after it sends two
@@ -270,12 +270,19 @@ async function runTurn(messages, loopOptions, { runLoop, emit, costBudget }) {
270
270
  // `user` messages — an interrupted turn's dangling prompt, a PDH feedback
271
271
  // note (§3.5.13) — that must reach the model distinctly and must not be
272
272
  // folded (folding the interrupt-dangling turn even resurrects the abandoned
273
- // request). Non-mutating: the persistent `messages` array is untouched; only
274
- // the provider payload is sanitized.
275
- const modelMessages = loopOptions.mergeRoles
276
- ? mergeConsecutiveMessages(messages)
277
- : messages;
278
- for await (const event of runLoop(modelMessages, loopOptions)) {
273
+ // request).
274
+ //
275
+ // Collapse IN PLACE (not a folded copy): the persistent `messages` array is
276
+ // reused for every later turn, so leaving the `[user, user]` pair in it would
277
+ // re-break the SECOND live turn (which re-sends the lingering pair). The gated
278
+ // turn is the first after resume, still tool-free (resumed history is
279
+ // user/assistant/system only), so an in-place fold is safe and the helper
280
+ // never folds `tool` turns regardless. Un-gated later turns are untouched, so
281
+ // the intentional interrupt/feedback consecutive-`user` states are preserved.
282
+ if (loopOptions.mergeRoles) {
283
+ collapseConsecutiveMessagesInPlace(messages);
284
+ }
285
+ for await (const event of runLoop(messages, loopOptions)) {
279
286
  switch (event.type) {
280
287
  case "tool-executing":
281
288
  toolCalls.push({ tool: event.tool, args: event.args });
@@ -57,11 +57,18 @@ function joinContent(a, b) {
57
57
  }
58
58
 
59
59
  /**
60
- * Merge consecutive same-role, non-system messages so the conversation
61
- * alternates roles for the provider. System messages are passed through
62
- * untouched and never participate in a merge (a leading base + session-context
63
- * system pair stays distinct). Falsy / role-less entries are passed through
64
- * verbatim rather than dropped.
60
+ * Roles that may be folded together. ONLY `user` and `assistant` — a `tool`
61
+ * message carries a `tool_call_id` that must stay paired with its originating
62
+ * `assistant` tool-call, so consecutive tool results (a multi-tool turn) must
63
+ * NEVER merge; `system` turns (base prompt + injected context) stay distinct.
64
+ */
65
+ const MERGEABLE_ROLES = new Set(["user", "assistant"]);
66
+
67
+ /**
68
+ * Merge consecutive same-role messages so the conversation alternates roles for
69
+ * the provider. Only `user`/`assistant` turns fold; `tool` and `system` turns
70
+ * are passed through untouched and never participate in a merge. Falsy /
71
+ * role-less entries are passed through verbatim rather than dropped.
65
72
  *
66
73
  * Returns a NEW array; the input is not mutated.
67
74
  *
@@ -77,7 +84,7 @@ export function mergeConsecutiveMessages(messages) {
77
84
  prev &&
78
85
  msg &&
79
86
  typeof msg.role === "string" &&
80
- msg.role !== "system" &&
87
+ MERGEABLE_ROLES.has(msg.role) &&
81
88
  prev.role === msg.role
82
89
  ) {
83
90
  out[out.length - 1] = {
@@ -91,4 +98,24 @@ export function mergeConsecutiveMessages(messages) {
91
98
  return out;
92
99
  }
93
100
 
94
- export const _internal = { toBlocks, joinContent };
101
+ /**
102
+ * In-place variant: collapse consecutive mergeable-role turns by mutating the
103
+ * given array (same reference is kept, so closures over it stay valid). Used by
104
+ * the interactive REPL, whose `messages` array is the persistent conversation
105
+ * and is handed straight to a mutating `coreAgentLoop` — collapsing a copy would
106
+ * leave the degenerate pair in the persistent history and re-break later turns.
107
+ * Only fire it on a still tool-free transcript (the first turn after a
108
+ * degenerate resume); see callers.
109
+ *
110
+ * @param {Array<object>} messages
111
+ * @returns {boolean} whether anything was collapsed
112
+ */
113
+ export function collapseConsecutiveMessagesInPlace(messages) {
114
+ if (!Array.isArray(messages)) return false;
115
+ const merged = mergeConsecutiveMessages(messages);
116
+ if (merged.length === messages.length) return false;
117
+ messages.splice(0, messages.length, ...merged);
118
+ return true;
119
+ }
120
+
121
+ export const _internal = { toBlocks, joinContent, MERGEABLE_ROLES };
@@ -1 +0,0 @@
1
- import{I as n,J as g,c as l,K as r,N as u,P as h,U as o,R as t,Q as b}from"./vendor-BvqAck49.js";import{_ as v,b as m}from"./index-BCIn3-zn.js";import{a7 as y,M as B}from"./icons-DP3uiYxy.js";const M={__name:"MobileProjects",setup(p,{expose:i}){i();const c=u(),{t:e}=m();function a(){c.push("/projects")}function _(){c.push("/mobile-bridge")}const s={router:c,t:e,goToProjects:a,goToMobileBridge:_,get useRouter(){return u},get useI18n(){return m},get MobileOutlined(){return B},get FolderOutlined(){return y}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}},x={class:"mobile-projects-placeholder"},O={class:"title"},k={class:"subtitle"},w={class:"explainer"};function T(p,i,c,e,a,_){const s=n("a-alert"),d=n("a-button"),f=n("a-space"),P=n("a-empty"),j=n("a-card");return h(),g("div",x,[l(j,null,{default:r(()=>[l(P,{description:!1},{image:r(()=>[l(e.MobileOutlined,{style:{fontSize:"64px",color:"#bfbfbf"}})]),default:r(()=>[o("h2",O,t(e.t("mobileProjects.title")),1),o("p",k,t(e.t("mobileProjects.subtitle")),1),l(s,{message:e.t("mobileProjects.v02Banner"),type:"info","show-icon":"",class:"banner"},null,8,["message"]),o("div",w,[o("h3",null,t(e.t("mobileProjects.currentDirection")),1),o("p",null,t(e.t("mobileProjects.currentDirectionBody")),1),o("ul",null,[o("li",null,t(e.t("mobileProjects.stepPhone")),1),o("li",null,t(e.t("mobileProjects.stepTap")),1),o("li",null,t(e.t("mobileProjects.stepPull")),1)]),o("h3",null,t(e.t("mobileProjects.reverseDirection")),1),o("p",null,t(e.t("mobileProjects.reverseDirectionBody")),1)]),l(f,{class:"actions"},{default:r(()=>[l(d,{type:"primary",onClick:e.goToProjects},{default:r(()=>[l(e.FolderOutlined),b(" "+t(e.t("mobileProjects.viewLocalProjects")),1)]),_:1}),l(d,{onClick:e.goToMobileBridge},{default:r(()=>[l(e.MobileOutlined),b(" "+t(e.t("mobileProjects.checkBridge")),1)]),_:1})]),_:1})]),_:1})]),_:1})])}const N=v(M,[["render",T],["__scopeId","data-v-9262cc45"],["__file","/tmp/cc-web-panel-2CBvRE/repo/packages/web-panel/src/views/MobileProjects.vue"]]);export{N as default};
@@ -1 +0,0 @@
1
- import{I as w,P as l,J as u,U as s,R as n,c as i,K as v,Q as _,V as g,b as a}from"./vendor-BvqAck49.js";import{_ as S}from"./index-BCIn3-zn.js";import"./icons-DP3uiYxy.js";const k={__name:"OrderTableRenderer",props:{event:{type:Object,required:!0}},setup(p,{expose:r}){r();const o=p,e=a(()=>o.event.content||{}),d=a(()=>o.event.extra||{}),m=a(()=>d.value.merchant||e.value.merchant||e.value.counterparty||"—"),c=a(()=>e.value.title||e.value.name||e.value.itemName||e.value.text||"—"),y=a(()=>{const t=e.value.amount??e.value.price??e.value.total;return t==null?"—":`${e.value.currency||"¥"} ${typeof t=="number"?t.toFixed(2):t}`}),T=a(()=>d.value.orderNo||e.value.orderNo||e.value.orderId),f=a(()=>e.value.status||e.value.state),b=a(()=>{const t=(f.value||"").toLowerCase();return t.includes("成功")||t.includes("succe")||t.includes("paid")?"green":t.includes("退")||t.includes("refund")?"orange":t.includes("失败")||t.includes("fail")?"red":"default"}),h=a(()=>{if(!o.event.occurredAt)return"";const t=new Date(o.event.occurredAt);return`${t.getFullYear()}-${String(t.getMonth()+1).padStart(2,"0")}-${String(t.getDate()).padStart(2,"0")} ${String(t.getHours()).padStart(2,"0")}:${String(t.getMinutes()).padStart(2,"0")}`}),x={props:o,c:e,e:d,merchantText:m,itemText:c,amountText:y,orderNo:T,statusText:f,statusColor:b,formattedTime:h,computed:a};return Object.defineProperty(x,"__isScriptSetup",{enumerable:!1,value:!0}),x}},N={class:"order-card"},C={class:"head"},O={class:"time"},R={class:"row"},V={class:"val"},B={class:"row"},D={class:"val"},I={class:"row amount-row"},j={class:"val amount"},A={key:0,class:"row"},E={class:"val mono"},F={key:1,class:"row"};function M(p,r,o,e,d,m){const c=w("a-tag");return l(),u("div",N,[s("div",C,[s("span",O,n(e.formattedTime),1),i(c,{color:"gold"},{default:v(()=>[_(n(o.event.source.adapter),1)]),_:1}),i(c,null,{default:v(()=>[_(n(o.event.subtype),1)]),_:1})]),s("div",R,[r[0]||(r[0]=s("span",{class:"key"},"商户",-1)),s("span",V,n(e.merchantText),1)]),s("div",B,[r[1]||(r[1]=s("span",{class:"key"},"商品/项目",-1)),s("span",D,n(e.itemText),1)]),s("div",I,[r[2]||(r[2]=s("span",{class:"key"},"金额",-1)),s("span",j,n(e.amountText),1)]),e.orderNo?(l(),u("div",A,[r[3]||(r[3]=s("span",{class:"key"},"单号",-1)),s("span",E,n(e.orderNo),1)])):g("v-if",!0),e.statusText?(l(),u("div",F,[r[4]||(r[4]=s("span",{class:"key"},"状态",-1)),i(c,{color:e.statusColor},{default:v(()=>[_(n(e.statusText),1)]),_:1},8,["color"])])):g("v-if",!0)])}const K=S(k,[["render",M],["__scopeId","data-v-5ed5524d"],["__file","/tmp/cc-web-panel-2CBvRE/repo/packages/web-panel/src/components/pdh/renderers/OrderTableRenderer.vue"]]);export{K as default};
@@ -1,7 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ChatBubbleRenderer-XpONY6wA.js","./vendor-BvqAck49.js","./index-BCIn3-zn.js","./icons-DP3uiYxy.js","./index-Cq93VfoF.css","./ChatBubbleRenderer-gy5SDGw2.css","./OrderTableRenderer-C9PxKWwg.js","./OrderTableRenderer-CfrDjSHT.css","./TimelineRenderer-DmwdA_BU.js","./TimelineRenderer-BlTAtkOc.css","./EmailListRenderer-C4DBbxZ8.js","./EmailListRenderer-DTPZPx_S.css","./GenericCardRenderer-qZpi2wH1.js","./GenericCardRenderer-o85VDYQS.css"])))=>i.map(i=>d[i]);
2
- import{E as ue,r as R,b as C,I as y,P as u,J as O,U as v,c,S as w,V as E,_ as M,F as V,Z as se,a0 as le,R as x,K as m,Q as b,W as L,o as J}from"./vendor-BvqAck49.js";import{u as U}from"./usePersonalDataHub-CYHp2Bn2.js";import{_ as D,e as F,d as B}from"./index-BCIn3-zn.js";import{a9 as P,af as z,M as Q,aH as G,u as H,aG as K,ap as W,ab as Y,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}),q=50,Z=300,X=ue("pdhBrowser",()=>{const r=R({...I}),t=R([]),n=R(null),e=R(!1),o=R(!1),l=R(null),a=R(null),s=R(!1),i=R({byCategory:{},byAdapter:{},bySubtype:{},total:0});let d=0,_=null;const j=C(()=>t.value.length>0),A=C(()=>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,T]=await Promise.all([p.searchEvents(h({limit:q})),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:T.byCategory||{},byAdapter:T.byAdapter||{},bySubtype:T.bySubtype||{},total:T.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:q}));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()},Z)}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:j,canLoadMore:A,search:g,loadMore:k,setFilter:ae,setFilters:ie,reset:ce,PAGE_SIZE:q,SEARCH_DEBOUNCE_MS:Z}}),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=C(()=>n.facets.total||0),o={chat:Y,social:W,email:K,shopping:H,travel:G,system:Q,"ai-chat":z,other:P};function l(i){return o[i]||P}function a(i){return i?{backgroundColor:"#fff",color:"#1677ff"}:{backgroundColor:"#f0f0f0",color:"#666"}}const s={props:n,total:e,ICONS:o,iconFor:l,badgeStyle:a,computed:C,get AppstoreOutlined(){return P},get MessageOutlined(){return Y},get PlayCircleOutlined(){return W},get MailOutlined(){return K},get ShoppingOutlined(){return H},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"],Ce={class:"label"};function we(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(),w(a,{key:0,count:e.total,"number-style":e.badgeStyle(n.selected===null),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],2),(u(!0),O(V,null,se(e.CATEGORIES,s=>(u(),O("div",{key:s,class:M(["cat-item",{active:n.selected===s,dim:!n.facets.byCategory[s]}]),onClick:i=>r.$emit("select",s)},[(u(),w(le(e.iconFor(s)),{class:"icon"})),v("span",Ce,x(e.categoryLabel(s)),1),n.facets.byCategory[s]?(u(),w(a,{key:0,count:n.facets.byCategory[s],"number-style":e.badgeStyle(n.selected===s),"overflow-count":9999},null,8,["count","number-style"])):E("v-if",!0)],10,Oe))),128))])}const ke=D(he,[["render",we],["__scopeId","data-v-6b62a22e"],["__file","/tmp/cc-web-panel-2CBvRE/repo/packages/web-panel/src/components/pdh/CategorySidebar.vue"]]),Ee={__name:"SearchFilterBar",props:{filters:{type:Object,required:!0},facets:{type:Object,default:()=>({byAdapter:{}})},isLoading:{type:Boolean,default:!1},mode:{type:String,default:null},shortQuery:{type:Boolean,default:!1}},emits:["set-filter","reset"],setup(r,{expose:t,emit:n}){t();const e=r,o=n,l=C(()=>e.filters.category?`在「${e.filters.category}」类目内搜索…`:"搜索关键词(如:支付宝、罗技、Kotlin)…"),a=C(()=>Object.entries(e.facets.byAdapter||{}).sort((g,k)=>k[1]-g[1]).map(([g,k])=>({value:g,label:`${g} (${k})`}))),s=C(()=>!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=C(()=>!!(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 j(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 A={props:e,emit:o,placeholderText:l,adapterOptions:a,dateRangeValue:s,hasActiveFilters:i,onQInput:d,onSearch:_,onDateChange:j,computed:C,get SearchOutlined(){return pe},get CloseCircleOutlined(){return fe},get InfoCircleOutlined(){return de}};return Object.defineProperty(A,"__isScriptSetup",{enumerable:!1,value:!0}),A}},Re={class:"pdh-filter-bar"},xe={key:1,class:"hint"},je={key:2,class:"hint"};function Ae(r,t,n,e,o,l){const a=y("a-input-search"),s=y("a-select"),i=y("a-range-picker"),d=y("a-button");return u(),O("div",Re,[c(a,{value:n.filters.q,placeholder:e.placeholderText,"enter-button":"搜索","allow-clear":"",loading:n.isLoading,style:{flex:"1","max-width":"480px"},"onUpdate:value":e.onQInput,onSearch:e.onSearch},{prefix:m(()=>[c(e.SearchOutlined)]),_:1},8,["value","placeholder","loading"]),c(s,{value:n.filters.adapter,placeholder:"所有 adapter","allow-clear":"",options:e.adapterOptions,style:{width:"200px"},"onUpdate:value":t[0]||(t[0]=_=>r.$emit("set-filter","adapter",_||null))},null,8,["value","options"]),c(i,{value:e.dateRangeValue,placeholder:["开始日期","结束日期"],style:{width:"280px"},"onUpdate:value":e.onDateChange},null,8,["value"]),e.hasActiveFilters?(u(),w(d,{key:0,type:"link",danger:"",onClick:t[1]||(t[1]=_=>r.$emit("reset"))},{icon:m(()=>[c(e.CloseCircleOutlined)]),default:m(()=>[t[2]||(t[2]=b(" 清空筛选 ",-1))]),_:1})):E("v-if",!0),n.shortQuery?(u(),O("span",xe,[c(e.InfoCircleOutlined),t[3]||(t[3]=b(" 关键词需至少 3 字 (FTS5 trigram 限制) ",-1))])):n.mode==="like"?(u(),O("span",je,[c(e.InfoCircleOutlined),t[4]||(t[4]=b(" 当前为 LIKE 兜底模式 ",-1))])):E("v-if",!0)])}const Le=D(Ee,[["render",Ae],["__scopeId","data-v-d7cce6e9"],["__file","/tmp/cc-web-panel-2CBvRE/repo/packages/web-panel/src/components/pdh/SearchFilterBar.vue"]]),Fe={__name:"RendererDispatcher",props:{event:{type:Object,required:!0}},setup(r,{expose:t}){t();const n=L(()=>F(()=>import("./ChatBubbleRenderer-XpONY6wA.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),e=L(()=>F(()=>import("./OrderTableRenderer-C9PxKWwg.js"),__vite__mapDeps([6,1,2,3,4,7]),import.meta.url)),o=L(()=>F(()=>import("./TimelineRenderer-DmwdA_BU.js"),__vite__mapDeps([8,1,2,3,4,9]),import.meta.url)),l=L(()=>F(()=>import("./EmailListRenderer-C4DBbxZ8.js"),__vite__mapDeps([10,1,2,3,4,11]),import.meta.url)),a=L(()=>F(()=>import("./GenericCardRenderer-qZpi2wH1.js"),__vite__mapDeps([12,1,2,3,4,13]),import.meta.url));function s(d){const _=d&&d.source&&d.source.adapter;switch($(_)){case"chat":case"ai-chat":return n;case"shopping":return e;case"travel":return o;case"email":return l;default:return a}}const i={ChatBubbleRenderer:n,OrderTableRenderer:e,TimelineRenderer:o,EmailListRenderer:l,GenericCardRenderer:a,rendererFor:s,defineAsyncComponent:L,get getCategory(){return $}};return Object.defineProperty(i,"__isScriptSetup",{enumerable:!1,value:!0}),i}};function De(r,t,n,e,o,l){return u(),w(le(e.rendererFor(n.event)),{event:n.event},null,8,["event"])}const Te=D(Fe,[["render",De],["__file","/tmp/cc-web-panel-2CBvRE/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 Be={__name:"ExportDropdown",props:{events:{type:Array,required:!0},category:{type:String,default:null}},setup(r,{expose:t}){t();const n=r,e=C(()=>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]),B.success(`已导出 ${n.events.length} 条到 ${_}`)}catch(d){B.error(`导出失败: ${d.message||d}`)}}const s={props:n,hasResults:e,MIME:o,serialize:l,onClick:a,computed:C,get DownloadOutlined(){return _e},get DownOutlined(){return me},get message(){return B},get eventsToJson(){return ee},get eventsToNdjson(){return te},get eventsToCsv(){return ne},get downloadAs(){return re},get suggestFilename(){return oe}};return Object.defineProperty(s,"__isScriptSetup",{enumerable:!1,value:!0}),s}};function Pe(r,t,n,e,o,l){const a=y("a-button"),s=y("a-menu-item"),i=y("a-menu"),d=y("a-dropdown");return u(),w(d,{disabled:!e.hasResults},{overlay:m(()=>[c(i,{onClick:e.onClick},{default:m(()=>[c(s,{key:"json"},{default:m(()=>[...t[0]||(t[0]=[b("JSON (.json)",-1)])]),_:1}),c(s,{key:"ndjson"},{default:m(()=>[...t[1]||(t[1]=[b("NDJSON (.ndjson)",-1)])]),_:1}),c(s,{key:"csv"},{default:m(()=>[...t[2]||(t[2]=[b("CSV (.csv)",-1)])]),_:1})]),_:1})]),default:m(()=>[c(a,{disabled:!e.hasResults},{icon:m(()=>[c(e.DownloadOutlined)]),default:m(()=>[b(" 导出 ("+x(n.events.length)+") ",1),c(e.DownOutlined)]),_:1},8,["disabled"])]),_:1},8,["disabled"])}const qe=D(Be,[["render",Pe],["__file","/tmp/cc-web-panel-2CBvRE/repo/packages/web-panel/src/components/pdh/ExportDropdown.vue"]]),Ve={__name:"PdhVaultBrowser",setup(r,{expose:t}){t();const n=X(),e=C(()=>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:C,get ReloadOutlined(){return ge},get usePdhBrowserStore(){return X},get categoryLabel(){return N},CategorySidebar:ke,SearchFilterBar:Le,RendererDispatcher:Te,ExportDropdown:qe};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},He={class:"loaded-of"},Ke={class:"results-list"},We={key:2,class:"load-more"};function Ye(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"),j=y("a-alert"),A=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(),w(a,{key:0,color:"green"},{default:m(()=>[...t[3]||(t[3]=[b("FTS5 trigram",-1)])]),_:1})):e.store.mode==="like"?(u(),w(a,{key:1,color:"orange"},{default:m(()=>[...t[4]||(t[4]=[b("LIKE 兜底",-1)])]),_:1})):E("v-if",!0),c(e.ExportDropdown,{events:e.store.results,category:e.store.filters.category},null,8,["events","category"]),c(s,{onClick:t[0]||(t[0]=g=>e.store.search()),loading:e.store.isLoading},{icon:m(()=>[c(e.ReloadOutlined)]),default:m(()=>[t[5]||(t[5]=b(" 刷新 ",-1))]),_:1},8,["loading"])]),_:1})]),c(h,{gutter:16,class:"browser-layout"},{default:m(()=>[c(d,{xs:24,sm:24,md:6,lg:5,xl:4},{default:m(()=>[c(e.CategorySidebar,{selected:e.store.filters.category,facets:e.store.facets,onSelect:e.onCategorySelect},null,8,["selected","facets"])]),_:1}),c(d,{xs:24,sm:24,md:18,lg:19,xl:20},{default:m(()=>[v("div",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,x(e.store.facets.total),1),t[11]||(t[11]=b(" 条事件 ",-1)),e.store.filters.category?(u(),O("span",Qe,[t[8]||(t[8]=b(" / 当前类目 ",-1)),v("strong",null,x(e.categoryLabel(e.store.filters.category)),1),v("strong",null,x(e.store.facets.byCategory[e.store.filters.category]||0),1)])):E("v-if",!0),e.store.filters.q?(u(),O("span",Ge,[t[9]||(t[9]=b(' / 关键词 "',-1)),v("em",null,x(e.store.filters.q),1),t[10]||(t[10]=b('"',-1))])):E("v-if",!0),v("span",He," / 已显示 "+x(e.store.results.length),1)],64))]),e.store.error?(u(),w(j,{key:0,type:"error","show-icon":"",message:e.store.error,closable:"",style:{margin:"12px 0"}},null,8,["message"])):E("v-if",!0),!e.store.isLoading&&e.store.results.length===0&&!e.store.error?(u(),w(A,{key:1,description:e.emptyHint,style:{"margin-top":"40px"}},null,8,["description"])):E("v-if",!0),v("div",Ke,[(u(!0),O(V,null,se(e.store.results,(g,k)=>(u(),w(e.RendererDispatcher,{key:`r-${k}-${g.id}`,event:g},null,8,["event"]))),128))]),e.store.canLoadMore?(u(),O("div",We,[c(s,{loading:e.store.isAppending,onClick:t[2]||(t[2]=g=>e.store.loadMore()),block:""},{default:m(()=>[...t[12]||(t[12]=[b(" 加载下一页 (50 条) ",-1)])]),_:1},8,["loading"])])):E("v-if",!0)])]),_:1})]),_:1})])}const tt=D(Ve,[["render",Ye],["__scopeId","data-v-0f7c02cd"],["__file","/tmp/cc-web-panel-2CBvRE/repo/packages/web-panel/src/views/PdhVaultBrowser.vue"]]);export{tt as default};