chainlesschain 0.162.108 → 0.162.110

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 (177) hide show
  1. package/package.json +1 -1
  2. package/src/assets/web-panel/assets/{AIOps-B8T7xeuV.js → AIOps-BxhyZq9J.js} +1 -1
  3. package/src/assets/web-panel/assets/{ActionButton-BDxBsVYw.js → ActionButton-BNUhIcPN.js} +1 -1
  4. package/src/assets/web-panel/assets/{Analytics-5cYrjLzN.js → Analytics-DpE1LQXz.js} +3 -3
  5. package/src/assets/web-panel/assets/{AppLayout-DkanJ7a5.js → AppLayout-D-vd98us.js} +5 -5
  6. package/src/assets/web-panel/assets/{Audit-8r3yG5R0.js → Audit-Bnfg0nUP.js} +1 -1
  7. package/src/assets/web-panel/assets/{Backup-DmdJpAwc.js → Backup-84Ryr92i.js} +1 -1
  8. package/src/assets/web-panel/assets/{BaseInput-CCTC_ROJ.js → BaseInput-BHl2VN49.js} +1 -1
  9. package/src/assets/web-panel/assets/{Chat-BE4xBoCH.js → Chat-C-XyRbZ_.js} +4 -4
  10. package/src/assets/web-panel/assets/{ChatBubbleRenderer-ita18CO8.js → ChatBubbleRenderer-BQuS_MfK.js} +1 -1
  11. package/src/assets/web-panel/assets/{Checkbox-DVUDDyL5.js → Checkbox-gJpyQ5hV.js} +1 -1
  12. package/src/assets/web-panel/assets/{Codegen-C07Q688Z.js → Codegen-NIwk76Jx.js} +1 -1
  13. package/src/assets/web-panel/assets/{Col-Bfmb67bb.js → Col-Dy7-G7ei.js} +1 -1
  14. package/src/assets/web-panel/assets/{Community-DvUS6LOy.js → Community-DGPF1QLB.js} +1 -1
  15. package/src/assets/web-panel/assets/{Compact-B2jvuCf2.js → Compact-Dg2jm5mx.js} +1 -1
  16. package/src/assets/web-panel/assets/{Compliance-B4VnGZOX.js → Compliance-BGaJDYow.js} +1 -1
  17. package/src/assets/web-panel/assets/{Cowork-Bf1UR9uf.js → Cowork-CZiec6-_.js} +4 -4
  18. package/src/assets/web-panel/assets/{Cron-BYU0OhXx.js → Cron-C5plyjhD.js} +2 -2
  19. package/src/assets/web-panel/assets/{Crosschain-DhtbpJ8Y.js → Crosschain-CGMz-rIE.js} +1 -1
  20. package/src/assets/web-panel/assets/{DID-DFtdsXjV.js → DID-BLMcsumG.js} +2 -2
  21. package/src/assets/web-panel/assets/{Dashboard-BOqMlucS.js → Dashboard-DEntKWjF.js} +2 -2
  22. package/src/assets/web-panel/assets/{Dropdown-DWcGi1lU.js → Dropdown-DyRaZqrS.js} +1 -1
  23. package/src/assets/web-panel/assets/{EmailListRenderer-smcpeq18.js → EmailListRenderer-DX_Wu_uV.js} +1 -1
  24. package/src/assets/web-panel/assets/{FamilyGuardDashboard-_qKQM8YZ.js → FamilyGuardDashboard-PX0U_pH5.js} +1 -1
  25. package/src/assets/web-panel/assets/{Federation-DxaaO_Pn.js → Federation-DVgF8ZdM.js} +1 -1
  26. package/src/assets/web-panel/assets/{FormItemContext-Bijk4-hV.js → FormItemContext-BRaX9vyC.js} +1 -1
  27. package/src/assets/web-panel/assets/{GenericCardRenderer-CXs5JGAs.js → GenericCardRenderer-Dy_c9ccI.js} +1 -1
  28. package/src/assets/web-panel/assets/{Git-vopq_XAi.js → Git-Dv8Fh1_w.js} +2 -2
  29. package/src/assets/web-panel/assets/{Governance-D6lEr1e2.js → Governance-D5vw7D8q.js} +1 -1
  30. package/src/assets/web-panel/assets/{Inference-D716knRp.js → Inference-Dbt861U-.js} +1 -1
  31. package/src/assets/web-panel/assets/{KnowledgeGraph-Mt7L5B8p.js → KnowledgeGraph-DgkYyYYk.js} +1 -1
  32. package/src/assets/web-panel/assets/{Logs-BmY4Aozy.js → Logs-Bi7BMh2S.js} +2 -2
  33. package/src/assets/web-panel/assets/{Marketplace-Bk7yghOV.js → Marketplace-Cu4tyI-N.js} +1 -1
  34. package/src/assets/web-panel/assets/{McpTools-BdEGNK8B.js → McpTools-DhOo6KRf.js} +5 -5
  35. package/src/assets/web-panel/assets/{Memory-DaGxWezP.js → Memory-M6jr41rl.js} +2 -2
  36. package/src/assets/web-panel/assets/{MobileBridge-D2QqiIXV.js → MobileBridge-mB45yYre.js} +2 -2
  37. package/src/assets/web-panel/assets/{MobileProjects-JQQ60jth.js → MobileProjects-pQO0ZS_8.js} +1 -1
  38. package/src/assets/web-panel/assets/{Mtc-DHp0q17f.js → Mtc-DIT60RG6.js} +4 -4
  39. package/src/assets/web-panel/assets/{MtcAudit-RWrCriuc.js → MtcAudit-DV16w59B.js} +2 -2
  40. package/src/assets/web-panel/assets/{Multisig-BR_5j51g.js → Multisig-DzXEXej1.js} +3 -3
  41. package/src/assets/web-panel/assets/{NLProgramming-MF3ZkPYq.js → NLProgramming-ClR96m-f.js} +1 -1
  42. package/src/assets/web-panel/assets/{Notes-BDWwfQ-t.js → Notes-Cqd3TQ9N.js} +3 -3
  43. package/src/assets/web-panel/assets/{NotificationSettings-Xk8BtRL5.js → NotificationSettings-Ctzz5cx5.js} +1 -1
  44. package/src/assets/web-panel/assets/{OrderTableRenderer-DaVlfAsv.js → OrderTableRenderer-DlEZYyLt.js} +1 -1
  45. package/src/assets/web-panel/assets/{Organization-CNdU6Jxx.js → Organization-0HyOJovw.js} +4 -4
  46. package/src/assets/web-panel/assets/{Overflow-DOf8iK6T.js → Overflow-BInoQKwn.js} +1 -1
  47. package/src/assets/web-panel/assets/{P2P-DvOwefeB.js → P2P-DSMX8d_q.js} +2 -2
  48. package/src/assets/web-panel/assets/{PdhVaultBrowser-BmrU5B5U.js → PdhVaultBrowser-Dn8Utbaw.js} +3 -3
  49. package/src/assets/web-panel/assets/{Permissions-DM_Cha_-.js → Permissions-Dd_GAUT-.js} +4 -4
  50. package/src/assets/web-panel/assets/{PersonalDataHub-DGOiN1md.js → PersonalDataHub-CgZ2qfLH.js} +4 -4
  51. package/src/assets/web-panel/assets/{Pipeline-BMZcrOpC.js → Pipeline-Bh4OTBfH.js} +1 -1
  52. package/src/assets/web-panel/assets/{Privacy-CcBD3ZJ_.js → Privacy-DRdhoeaJ.js} +1 -1
  53. package/src/assets/web-panel/assets/{ProjectInit-BQmkVkFp.js → ProjectInit-bifrkI6i.js} +2 -2
  54. package/src/assets/web-panel/assets/{ProjectSettings-BL0iqE5h.js → ProjectSettings-RJ2xbAx3.js} +2 -2
  55. package/src/assets/web-panel/assets/{Projects-7iyoLF6T.js → Projects-DPMre_Vt.js} +1 -1
  56. package/src/assets/web-panel/assets/Providers-DXR9-uVd.js +1 -0
  57. package/src/assets/web-panel/assets/{QuickAsk-Cp0Lpic1.js → QuickAsk-VkUau5yj.js} +1 -1
  58. package/src/assets/web-panel/assets/{Recommend-DN-26aef.js → Recommend-D9NMPNb6.js} +1 -1
  59. package/src/assets/web-panel/assets/{Reputation-ChdhhVGu.js → Reputation-D7-6naYX.js} +1 -1
  60. package/src/assets/web-panel/assets/{Row-2RBgBLEz.js → Row-BX2i0Cmv.js} +1 -1
  61. package/src/assets/web-panel/assets/{RssFeed-CfogWRiS.js → RssFeed-Byb5WDNx.js} +3 -3
  62. package/src/assets/web-panel/assets/Search-CZyeEQAc.js +1 -0
  63. package/src/assets/web-panel/assets/{Security-CcDdV-6d.js → Security-BWR_hUCv.js} +4 -4
  64. package/src/assets/web-panel/assets/{Services-qG5L2PHE.js → Services-NSc_9EF_.js} +2 -2
  65. package/src/assets/web-panel/assets/{Skeleton-7CVgHJwr.js → Skeleton-BlAIlPnB.js} +1 -1
  66. package/src/assets/web-panel/assets/{Skills-BEbdNS7s.js → Skills-CaU0R1CL.js} +1 -1
  67. package/src/assets/web-panel/assets/{Sla-C4ENvrVM.js → Sla-BnV-Fro4.js} +1 -1
  68. package/src/assets/web-panel/assets/{SpeechSettings-DuvM2AsQ.js → SpeechSettings-CBHGfr4p.js} +1 -1
  69. package/src/assets/web-panel/assets/{SyncSettings-Bm9Np5Yt.js → SyncSettings-BwthnPiP.js} +2 -2
  70. package/src/assets/web-panel/assets/Tasks-KdXnN3nt.js +1 -0
  71. package/src/assets/web-panel/assets/{Templates-C3GJa4ya.js → Templates-BN4WwLUS.js} +1 -1
  72. package/src/assets/web-panel/assets/{Tenant-BLQnLb8K.js → Tenant-CZ24n54K.js} +1 -1
  73. package/src/assets/web-panel/assets/{Terminal-BGgZIwb0.js → Terminal-BelzaRsd.js} +2 -2
  74. package/src/assets/web-panel/assets/{TimelineRenderer-BD8NwNAK.js → TimelineRenderer-DhkqTGFa.js} +1 -1
  75. package/src/assets/web-panel/assets/{Tokens-BIsO2iiX.js → Tokens-46_v1nkV.js} +1 -1
  76. package/src/assets/web-panel/assets/{Trigger-FJv5zeym.js → Trigger-DogUmIqL.js} +1 -1
  77. package/src/assets/web-panel/assets/{Trust-9FRFEAhW.js → Trust-BRByKmic.js} +1 -1
  78. package/src/assets/web-panel/assets/{UkeySign-aOdZVwgi.js → UkeySign-BZmDgBR1.js} +1 -1
  79. package/src/assets/web-panel/assets/{VideoEditing-C1KyY7ZB.js → VideoEditing-DVvG6VSG.js} +1 -1
  80. package/src/assets/web-panel/assets/{Wallet-CH5edY0l.js → Wallet-ChxdrDjz.js} +4 -4
  81. package/src/assets/web-panel/assets/{WebAuthn-BUPlkFe0.js → WebAuthn-BkX-jd9_.js} +4 -4
  82. package/src/assets/web-panel/assets/{WorkflowEditor-BoH8bG7y.js → WorkflowEditor-DtWPAhrj.js} +1 -1
  83. package/src/assets/web-panel/assets/{chat-DRS34SZq.js → chat-FLdS_X89.js} +1 -1
  84. package/src/assets/web-panel/assets/{colors-DxdhROQh.js → colors-CdqVIbAc.js} +1 -1
  85. package/src/assets/web-panel/assets/{compact-item-C5f4y3lM.js → compact-item-B1em0FOh.js} +1 -1
  86. package/src/assets/web-panel/assets/{createContext-DkyzEt2y.js → createContext-xqQveKVc.js} +1 -1
  87. package/src/assets/web-panel/assets/devWarning-FuXjMk0L.js +1 -0
  88. package/src/assets/web-panel/assets/{hasIn-CIRkRQ69.js → hasIn-C2Ooy3F5.js} +1 -1
  89. package/src/assets/web-panel/assets/{index-BfZal2SO.js → index-2N63y-3V.js} +1 -1
  90. package/src/assets/web-panel/assets/{index-1Vd3bgPH.js → index-6x_TEnAx.js} +1 -1
  91. package/src/assets/web-panel/assets/{index-B_ytTrAE.js → index-7hThnUln.js} +1 -1
  92. package/src/assets/web-panel/assets/{index-Kyd48UEO.js → index-B4vllS2j.js} +1 -1
  93. package/src/assets/web-panel/assets/{index-BrNCtBLG.js → index-B7MunZX_.js} +1 -1
  94. package/src/assets/web-panel/assets/{index-DgJf60U0.js → index-BENOufkM.js} +1 -1
  95. package/src/assets/web-panel/assets/{index-Cv9YEv3M.js → index-BI7hFUhB.js} +1 -1
  96. package/src/assets/web-panel/assets/{index-Dz-Xl9WT.js → index-BIDq5ivM.js} +1 -1
  97. package/src/assets/web-panel/assets/{index-B5r9kCHD.js → index-BINmnZLO.js} +1 -1
  98. package/src/assets/web-panel/assets/{index-CXE4fjlC.js → index-BP7jquLi.js} +1 -1
  99. package/src/assets/web-panel/assets/index-B_D6g2oc.js +1 -0
  100. package/src/assets/web-panel/assets/{index-DSpV3T2E.js → index-BcWe6vyc.js} +1 -1
  101. package/src/assets/web-panel/assets/{index-wdXKonKr.js → index-BfcxX38y.js} +1 -1
  102. package/src/assets/web-panel/assets/{index-fgBegFCK.js → index-BhuXJoB0.js} +1 -1
  103. package/src/assets/web-panel/assets/{index-DtOM1jbe.js → index-Bkyb8UQL.js} +1 -1
  104. package/src/assets/web-panel/assets/{index-Bc59VV8o.js → index-BqXBDJNB.js} +1 -1
  105. package/src/assets/web-panel/assets/{index-DpHZisZn.js → index-Br134Y_p.js} +1 -1
  106. package/src/assets/web-panel/assets/index-C-2_nxKI.js +1 -0
  107. package/src/assets/web-panel/assets/{index-D3WhDg1s.js → index-C0YSl1cy.js} +3 -3
  108. package/src/assets/web-panel/assets/{index-DV5W06OY.js → index-CDK13Wi9.js} +1 -1
  109. package/src/assets/web-panel/assets/{index-BStiYEJX.js → index-CPsgpARa.js} +1 -1
  110. package/src/assets/web-panel/assets/{index-BLLkL7YU.js → index-C_4O2sqg.js} +1 -1
  111. package/src/assets/web-panel/assets/{index-5Mph6K8H.js → index-CevlY-ti.js} +1 -1
  112. package/src/assets/web-panel/assets/{index-dtUUXiuv.js → index-CtJcdcSi.js} +1 -1
  113. package/src/assets/web-panel/assets/{index-CyMVWOwq.js → index-Cw90dIiq.js} +1 -1
  114. package/src/assets/web-panel/assets/{index-CLjIL9vZ.js → index-D1Y0w9Bp.js} +1 -1
  115. package/src/assets/web-panel/assets/{index-btOwnCpT.js → index-D62oOPYQ.js} +1 -1
  116. package/src/assets/web-panel/assets/{index-C0VYKzdU.js → index-DBcAYh1Z.js} +1 -1
  117. package/src/assets/web-panel/assets/{index-Bskk24yp.js → index-DBemh8BC.js} +1 -1
  118. package/src/assets/web-panel/assets/{index-CSHsX3UZ.js → index-DC2j3ZH1.js} +1 -1
  119. package/src/assets/web-panel/assets/{index-BHACYX-h.js → index-DDoQxg20.js} +1 -1
  120. package/src/assets/web-panel/assets/{index-CO4PAGWX.js → index-DJsz-ISP.js} +1 -1
  121. package/src/assets/web-panel/assets/{index-X7QcpsDO.js → index-DaiNFrXW.js} +1 -1
  122. package/src/assets/web-panel/assets/{index-BzC5O6l6.js → index-I3PgXyCp.js} +1 -1
  123. package/src/assets/web-panel/assets/{index-2uQYIxL1.js → index-XI6xtz_p.js} +1 -1
  124. package/src/assets/web-panel/assets/{index-DnAbauX-.js → index-dZPaczgC.js} +1 -1
  125. package/src/assets/web-panel/assets/{index-BdzFfdXs.js → index-vPuKHNG_.js} +1 -1
  126. package/src/assets/web-panel/assets/{index-DdLAPzIl.js → index-wAA_52rV.js} +1 -1
  127. package/src/assets/web-panel/assets/{index-DR_uUG6x.js → index-yjlraVSz.js} +1 -1
  128. package/src/assets/web-panel/assets/{initDefaultProps-4uTrrqjb.js → initDefaultProps-DAa9deN1.js} +1 -1
  129. package/src/assets/web-panel/assets/{motion-gkRvxGHW.js → motion-DrpdeaZb.js} +1 -1
  130. package/src/assets/web-panel/assets/{move-CIgnaWNe.js → move-Tqv8fQ0W.js} +1 -1
  131. package/src/assets/web-panel/assets/{omit-DB-Ux8Gg.js → omit-DHA5fID2.js} +1 -1
  132. package/src/assets/web-panel/assets/{pickAttrs-ree-Itb0.js → pickAttrs-bsvBPVv5.js} +1 -1
  133. package/src/assets/web-panel/assets/{placementArrow-EdAP6bCf.js → placementArrow-Cl6kkCqO.js} +1 -1
  134. package/src/assets/web-panel/assets/{responsiveObserve-B1DqSgFh.js → responsiveObserve-BEFo1aZl.js} +1 -1
  135. package/src/assets/web-panel/assets/{slide-D_9NP_KE.js → slide-J59l_i_x.js} +1 -1
  136. package/src/assets/web-panel/assets/{statusUtils-CAytzvoR.js → statusUtils-CgXZ-Y0K.js} +1 -1
  137. package/src/assets/web-panel/assets/{styleChecker-zb3gob1_.js → styleChecker-CGQqxIef.js} +1 -1
  138. package/src/assets/web-panel/assets/{useFlexGapSupport-BQWuGrL0.js → useFlexGapSupport-CgO0iWFX.js} +1 -1
  139. package/src/assets/web-panel/assets/{useFs-QMEsYkGX.js → useFs-DzTO2udE.js} +1 -1
  140. package/src/assets/web-panel/assets/{usePersonalDataHub-Ccrz7-au.js → usePersonalDataHub-Brihie_5.js} +1 -1
  141. package/src/assets/web-panel/assets/{vnode-DZVY4QM-.js → vnode-BSsmn1zK.js} +1 -1
  142. package/src/assets/web-panel/assets/{zoom-Dii_0V_X.js → zoom-Dofbccho.js} +1 -1
  143. package/src/assets/web-panel/index.html +1 -1
  144. package/src/commands/agent.js +6 -0
  145. package/src/commands/hub.js +6 -2
  146. package/src/commands/mcp.js +42 -10
  147. package/src/commands/pdh.js +4 -1
  148. package/src/constants.js +2 -2
  149. package/src/gateways/ws/video-protocol.js +7 -0
  150. package/src/harness/feature-flags.js +19 -6
  151. package/src/harness/prompt-compressor.js +1 -0
  152. package/src/lib/agent-core.js +2 -0
  153. package/src/lib/config-manager.js +42 -1
  154. package/src/lib/git-integration.js +1 -2
  155. package/src/lib/learning/learning-hooks.js +6 -0
  156. package/src/lib/llm-providers.js +2 -0
  157. package/src/lib/mcp-auth-target.js +53 -0
  158. package/src/lib/repl-bang-memorize.js +27 -1
  159. package/src/lib/runnable-provider.js +12 -0
  160. package/src/lib/settings-loader.cjs +29 -1
  161. package/src/lib/shell-approval.js +7 -12
  162. package/src/lib/skill-loader.js +6 -2
  163. package/src/lib/suggest-name.js +91 -0
  164. package/src/lib/task-model-selector.js +5 -5
  165. package/src/repl/agent-repl.js +31 -3
  166. package/src/repl/slash-macro.js +7 -1
  167. package/src/runtime/agent-core.js +62 -3
  168. package/src/runtime/coding-agent-contract-shared.cjs +11 -1
  169. package/src/runtime/headless-runner.js +57 -4
  170. package/src/runtime/headless-stream.js +50 -2
  171. package/src/session/index.js +6 -2
  172. package/src/assets/web-panel/assets/Providers-IQqLZ_11.js +0 -1
  173. package/src/assets/web-panel/assets/Search-CrREUZpz.js +0 -1
  174. package/src/assets/web-panel/assets/Tasks-K2ZtJ47C.js +0 -1
  175. package/src/assets/web-panel/assets/devWarning-vwZx8E0a.js +0 -1
  176. package/src/assets/web-panel/assets/index-Dhn6EWMQ.js +0 -1
  177. package/src/assets/web-panel/assets/index-dGvDljur.js +0 -1
@@ -1,4 +1,4 @@
1
- import{K as n}from"./index-D3WhDg1s.js";import{i as e}from"./motion-gkRvxGHW.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-C0YSl1cy.js";import{i as e}from"./motion-DrpdeaZb.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-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
+ import{i as e}from"./index-C0YSl1cy.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-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
+ import{A as d}from"./index-C0YSl1cy.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-zb3gob1_.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-CGQqxIef.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-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
+ import{u as d}from"./index-C0YSl1cy.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-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
+ import{u as f}from"./index-C0YSl1cy.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-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
+ import{M as i,h as a,w as l}from"./index-C0YSl1cy.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-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),{[`
1
+ import{K as o}from"./index-C0YSl1cy.js";import{i as f}from"./motion-DrpdeaZb.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-D3WhDg1s.js"></script>
11
+ <script type="module" crossorigin src="./assets/index-C0YSl1cy.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">
@@ -219,6 +219,10 @@ export function registerAgentCommand(program) {
219
219
  "--no-file-refs",
220
220
  "Disable @path file-reference expansion in the prompt (headless)",
221
221
  )
222
+ .option(
223
+ "--no-slash-macros",
224
+ "Disable /name custom-command (.claude/commands) expansion in the prompt (headless)",
225
+ )
222
226
  .option(
223
227
  "--system-prompt <text>",
224
228
  "Replace the built-in system prompt (literal text or @file)",
@@ -627,6 +631,7 @@ export function registerAgentCommand(program) {
627
631
  ? parseInt(options.maxTurns, 10)
628
632
  : undefined,
629
633
  expandFileRefs: options.fileRefs !== false,
634
+ slashMacros: options.slashMacros !== false,
630
635
  systemPrompt: resolvePromptText(options.systemPrompt, { cwd }),
631
636
  appendSystemPrompt: resolvePromptText(options.appendSystemPrompt, {
632
637
  cwd,
@@ -729,6 +734,7 @@ export function registerAgentCommand(program) {
729
734
  maxTurns,
730
735
  // commander maps --no-file-refs 鈫?options.fileRefs === false
731
736
  expandFileRefs: options.fileRefs !== false,
737
+ slashMacros: options.slashMacros !== false,
732
738
  // --system-prompt / --append-system-prompt (literal or @file)
733
739
  systemPrompt: resolvePromptText(options.systemPrompt, {
734
740
  cwd: process.cwd(),
@@ -15,6 +15,7 @@
15
15
  * All output supports --json for scripting. Default is human-readable.
16
16
  */
17
17
 
18
+ import { readFileSync, writeFileSync } from "node:fs";
18
19
  import chalk from "chalk";
19
20
  import ora from "ora";
20
21
  import { logger } from "../lib/logger.js";
@@ -609,7 +610,9 @@ async function cmdExportEvents(options) {
609
610
  const hub = await (options._getHub || getHubMinimal)();
610
611
  const all = exportAllEvents(hub.vault);
611
612
  if (options.output) {
612
- require("fs").writeFileSync(options.output, JSON.stringify(all), "utf-8");
613
+ // ESM module — must NOT use require("fs") (ReferenceError: require is
614
+ // not defined). Use the static node:fs import.
615
+ writeFileSync(options.output, JSON.stringify(all), "utf-8");
613
616
  if (options.json) {
614
617
  jsonAndExit({ ok: true, count: all.length, output: options.output });
615
618
  return;
@@ -631,7 +634,8 @@ async function cmdImportEvents(options) {
631
634
  "import-events: --input <file> is required (a JSON array of events)",
632
635
  );
633
636
  }
634
- const raw = require("fs").readFileSync(options.input, "utf-8");
637
+ // ESM module — use the static node:fs import, not require("fs").
638
+ const raw = readFileSync(options.input, "utf-8");
635
639
  const events = JSON.parse(raw);
636
640
  if (!Array.isArray(events)) {
637
641
  throw new Error("import-events: expected a JSON array of events");
@@ -23,6 +23,8 @@ import {
23
23
  SUPPORTED_TRANSPORTS,
24
24
  } from "../lib/mcp-scaffold.js";
25
25
  import { parseJsonOption } from "../lib/parse-json-option.js";
26
+ import { resolveMcpAuthTarget, isUrlLike } from "../lib/mcp-auth-target.js";
27
+ import { notFoundWithSuggestion } from "../lib/suggest-name.js";
26
28
  import {
27
29
  CATALOG as REGISTRY_CATALOG,
28
30
  CATEGORIES as REGISTRY_CATEGORIES,
@@ -39,6 +41,27 @@ function getClient() {
39
41
  return mcpClient;
40
42
  }
41
43
 
44
+ /**
45
+ * Resolve a `mcp login|logout <target>` argument (a URL or a configured server
46
+ * NAME — Claude-Code 2.1.186 parity) to a concrete server URL. The DB is only
47
+ * bootstrapped when a name lookup is actually needed, so a raw-URL login stays
48
+ * dependency-free.
49
+ */
50
+ async function resolveAuthTargetUrl(program, target) {
51
+ if (isUrlLike(target)) return resolveMcpAuthTarget(target).url;
52
+ const ctx = await bootstrap({ verbose: program.opts().verbose });
53
+ const lookup = (name) => {
54
+ try {
55
+ return ctx.db
56
+ ? new MCPServerConfig(ctx.db.getDatabase()).get(name)
57
+ : null;
58
+ } catch {
59
+ return null; // a lookup failure surfaces as "unknown server" below
60
+ }
61
+ };
62
+ return resolveMcpAuthTarget(target, lookup).url;
63
+ }
64
+
42
65
  /**
43
66
  * Connect MCP server(s) for a one-shot query (resources / prompts). Connects
44
67
  * the named server, or every registered server when `serverName` is omitted.
@@ -56,8 +79,9 @@ async function connectForQuery(program, serverName) {
56
79
  if (serverName) {
57
80
  const row = config.get(serverName);
58
81
  if (!row) {
82
+ const names = config.list().map((s) => s.name);
59
83
  logger.error(
60
- `Server "${serverName}" not configured. Use 'mcp add' first.`,
84
+ `${notFoundWithSuggestion(serverName, names, { noun: "Server" })}. Use 'mcp add' first.`,
61
85
  );
62
86
  await shutdown();
63
87
  process.exit(1);
@@ -111,9 +135,9 @@ export function registerMcpCommand(program) {
111
135
 
112
136
  // mcp login — OAuth 2.0 (Auth Code + PKCE) for a remote MCP server.
113
137
  mcp
114
- .command("login <url>")
138
+ .command("login <target>")
115
139
  .description(
116
- "Authorize a remote MCP server via OAuth (opens a browser); stores the token",
140
+ "Authorize a remote MCP server via OAuth (opens a browser); stores the token. <target> is a URL or a configured server name.",
117
141
  )
118
142
  .option("--scope <scope>", "OAuth scope(s) to request")
119
143
  .option(
@@ -127,8 +151,9 @@ export function registerMcpCommand(program) {
127
151
  53682,
128
152
  )
129
153
  .option("--no-open", "Print the authorize URL instead of opening a browser")
130
- .action(async (url, options) => {
154
+ .action(async (target, options) => {
131
155
  try {
156
+ const url = await resolveAuthTargetUrl(program, target);
132
157
  const oauth = await import("../lib/mcp-oauth.js");
133
158
  if (options.open === false) {
134
159
  oauth._deps.openBrowser = () => false; // commander maps --no-open → open:false
@@ -159,10 +184,13 @@ export function registerMcpCommand(program) {
159
184
 
160
185
  // mcp logout — forget a stored OAuth token.
161
186
  mcp
162
- .command("logout <url>")
163
- .description("Delete the stored OAuth token for a remote MCP server")
164
- .action(async (url) => {
187
+ .command("logout <target>")
188
+ .description(
189
+ "Delete the stored OAuth token for a remote MCP server (<target> is a URL or a configured server name)",
190
+ )
191
+ .action(async (target) => {
165
192
  try {
193
+ const url = await resolveAuthTargetUrl(program, target);
166
194
  const { deleteStoredToken, serverKey } =
167
195
  await import("../lib/mcp-oauth.js");
168
196
  const ok = deleteStoredToken(url);
@@ -199,7 +227,7 @@ export function registerMcpCommand(program) {
199
227
  }
200
228
  if (rows.length === 0) {
201
229
  logger.log(
202
- chalk.gray("No MCP OAuth tokens. Run: cc mcp login <url>"),
230
+ chalk.gray("No MCP OAuth tokens. Run: cc mcp login <name|url>"),
203
231
  );
204
232
  return;
205
233
  }
@@ -497,12 +525,13 @@ export function registerMcpCommand(program) {
497
525
 
498
526
  const db = ctx.db.getDatabase();
499
527
  const config = new MCPServerConfig(db);
528
+ const names = config.list().map((s) => s.name);
500
529
  const removed = config.remove(name);
501
530
 
502
531
  if (removed) {
503
532
  logger.success(`MCP server "${name}" removed`);
504
533
  } else {
505
- logger.error(`Server "${name}" not found`);
534
+ logger.error(notFoundWithSuggestion(name, names, { noun: "Server" }));
506
535
  }
507
536
 
508
537
  await shutdown();
@@ -533,7 +562,10 @@ export function registerMcpCommand(program) {
533
562
  const serverConfig = config.get(name);
534
563
 
535
564
  if (!serverConfig) {
536
- logger.error(`Server "${name}" not configured. Use 'mcp add' first.`);
565
+ const names = config.list().map((s) => s.name);
566
+ logger.error(
567
+ `${notFoundWithSuggestion(name, names, { noun: "Server" })}. Use 'mcp add' first.`,
568
+ );
537
569
  process.exit(1);
538
570
  }
539
571
 
@@ -24,7 +24,10 @@ import {
24
24
  diagnosePdh,
25
25
  } from "../lib/pdh-bridge.js";
26
26
  import { setupMcpFromConfig } from "../runtime/mcp-config.js";
27
- import { readFeedback, summarizeFeedback } from "../lib/pdh-feedback-ledger.js";
27
+ import {
28
+ readFeedback,
29
+ summarizeFeedback,
30
+ } from "../lib/pdh-feedback-ledger.js";
28
31
 
29
32
  function emit(obj) {
30
33
  console.log(JSON.stringify(obj, null, 2));
package/src/constants.js CHANGED
@@ -30,7 +30,7 @@ export const LLM_PROVIDERS = {
30
30
  volcengine: {
31
31
  name: "Volcengine (火山引擎/豆包)",
32
32
  defaultBaseUrl: "https://ark.cn-beijing.volces.com/api/v3",
33
- defaultModel: "doubao-seed-1-6-251015",
33
+ defaultModel: "doubao-seed-2-1-pro-260628",
34
34
  requiresApiKey: true,
35
35
  },
36
36
  openai: {
@@ -144,7 +144,7 @@ export const DEFAULT_CONFIG = {
144
144
  provider: "volcengine",
145
145
  apiKey: null,
146
146
  baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
147
- model: "doubao-seed-1-6-251015",
147
+ model: "doubao-seed-2-1-pro-260628",
148
148
  // When true, `cc ask` (provider=ollama only) overrides baseUrl to point at
149
149
  // the Android LocalLlmServer (127.0.0.1:18484). User opt-in toggle:
150
150
  // cc config set llm.preferAndroidLocal true
@@ -8,6 +8,13 @@
8
8
  * Route keys use dot-case: video.assets.list, video.deconstruct, etc.
9
9
  */
10
10
 
11
+ import { createRequire } from "node:module";
12
+ // ESM module — `require` is not a global here. createRequire gives a working
13
+ // require() for the lazy loads below (VideoPipeline + node core modules, kept
14
+ // lazy so importing this protocol module doesn't pull the video stack on
15
+ // every `cc` startup). Node >=22.12 (our engines floor) supports require(esm).
16
+ const require = createRequire(import.meta.url);
17
+
11
18
  function ok(data = {}) {
12
19
  return { ok: true, ...data };
13
20
  }
@@ -8,7 +8,13 @@
8
8
  * - object { enabled, variant, description }
9
9
  */
10
10
 
11
- import { loadConfig, getConfigValue, saveConfig } from "../lib/config-manager.js";
11
+ import {
12
+ loadConfig,
13
+ getConfigValue,
14
+ saveConfig,
15
+ } from "../lib/config-manager.js";
16
+ import { withFileLock } from "../lib/with-file-lock.js";
17
+ import { getConfigPath } from "../lib/paths.js";
12
18
  import { createHash } from "node:crypto";
13
19
  import { hostname } from "node:os";
14
20
 
@@ -51,7 +57,8 @@ export function feature(name) {
51
57
  if (value && typeof value === "object") return Boolean(value.enabled);
52
58
  const defaultValue = _getDefault(name);
53
59
  if (typeof defaultValue === "boolean") return defaultValue;
54
- if (typeof defaultValue === "number") return _percentageCheck(name, defaultValue);
60
+ if (typeof defaultValue === "number")
61
+ return _percentageCheck(name, defaultValue);
55
62
  if (defaultValue && typeof defaultValue === "object") {
56
63
  return Boolean(defaultValue.enabled);
57
64
  }
@@ -106,10 +113,16 @@ export function listFeatures() {
106
113
  }
107
114
 
108
115
  export function setFeature(name, value) {
109
- const config = loadConfig();
110
- if (!config.features) config.features = {};
111
- config.features[name] = value;
112
- saveConfig(config);
116
+ // Serialize the read-modify-write across processes so two concurrent
117
+ // `cc config features enable/disable` invocations don't clobber each other
118
+ // (and to space out writes so the atomic rename doesn't collide). Mirrors
119
+ // setConfigValue; the lock is best-effort and never hangs the CLI.
120
+ withFileLock(getConfigPath(), () => {
121
+ const config = loadConfig();
122
+ if (!config.features) config.features = {};
123
+ config.features[name] = value;
124
+ saveConfig(config);
125
+ });
113
126
  }
114
127
 
115
128
  export function getFlagInfo(name) {
@@ -77,6 +77,7 @@ export const CONTEXT_WINDOWS = {
77
77
  "moonshot-v1-32k": 32768,
78
78
  "moonshot-v1-128k": 131072,
79
79
  "doubao-seed-1-6-251015": 32768,
80
+ "doubao-seed-2-1-pro-260628": 32768,
80
81
  _provider_defaults: {
81
82
  ollama: 32768,
82
83
  openai: 128000,
@@ -3,6 +3,8 @@ export {
3
3
  AGENT_TOOLS,
4
4
  AGENT_TOOL_REGISTRY,
5
5
  MAX_SUB_AGENT_DEPTH,
6
+ MAX_TOOL_RESULT_CHARS,
7
+ capToolResultString,
6
8
  reloadSkills,
7
9
  getAgentToolDefinitions,
8
10
  getAgentToolDescriptors,
@@ -37,7 +37,7 @@ export function saveConfig(config) {
37
37
  const tmp = `${configPath}.${process.pid}.${Math.random().toString(36).slice(2, 8)}.tmp`;
38
38
  try {
39
39
  writeFileSync(tmp, JSON.stringify(config, null, 2) + "\n", "utf-8");
40
- renameSync(tmp, configPath);
40
+ renameWithRetry(tmp, configPath);
41
41
  } catch (err) {
42
42
  try {
43
43
  if (existsSync(tmp)) unlinkSync(tmp);
@@ -48,6 +48,47 @@ export function saveConfig(config) {
48
48
  }
49
49
  }
50
50
 
51
+ // On Windows, `rename` over a target that another process currently has open
52
+ // (e.g. a concurrent `loadConfig` reader) fails with EPERM/EACCES/EBUSY instead
53
+ // of POSIX's silent atomic replace. Under bursts of concurrent `cc config`/`cc
54
+ // config features` invocations this surfaced as a flaky exit-1. Retry the rename
55
+ // a few times with a short synchronous backoff so the transient lock clears;
56
+ // the temp file is already fully written, so this stays crash-safe.
57
+ export function renameWithRetry(tmp, target, opts = {}) {
58
+ const {
59
+ attempts = 8,
60
+ baseDelayMs = 15,
61
+ _rename = renameSync,
62
+ _sleep = sleepSync,
63
+ } = opts;
64
+ for (let i = 0; ; i++) {
65
+ try {
66
+ _rename(tmp, target);
67
+ return;
68
+ } catch (err) {
69
+ const transient =
70
+ err &&
71
+ (err.code === "EPERM" ||
72
+ err.code === "EACCES" ||
73
+ err.code === "EBUSY" ||
74
+ err.code === "EEXIST");
75
+ if (!transient || i >= attempts - 1) throw err;
76
+ _sleep(baseDelayMs * (i + 1));
77
+ }
78
+ }
79
+ }
80
+
81
+ function sleepSync(ms) {
82
+ try {
83
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
84
+ } catch {
85
+ const end = Date.now() + ms; // SharedArrayBuffer unavailable — bounded spin
86
+ while (Date.now() < end) {
87
+ /* spin */
88
+ }
89
+ }
90
+ }
91
+
51
92
  export function getConfigValue(key) {
52
93
  const config = loadConfig();
53
94
  return getNestedValue(config, key);
@@ -3,7 +3,7 @@
3
3
  */
4
4
 
5
5
  import { execSync } from "child_process";
6
- import { existsSync } from "fs";
6
+ import { existsSync, writeFileSync, chmodSync } from "fs";
7
7
  import { join } from "path";
8
8
 
9
9
  /**
@@ -236,7 +236,6 @@ export function installHooks(dir) {
236
236
  echo "ChainlessChain: pre-commit hook running"
237
237
  `;
238
238
 
239
- const { writeFileSync, chmodSync } = require("fs");
240
239
  writeFileSync(hookPath, hookContent, "utf-8");
241
240
  try {
242
241
  chmodSync(hookPath, 0o755);
@@ -16,6 +16,12 @@
16
16
  * - Stateless — the trajectory ID is tracked on learningCtx
17
17
  */
18
18
 
19
+ import { createRequire } from "node:module";
20
+ // ESM module — `require` is not a global here. createRequire gives a working
21
+ // require() for the lazy TrajectoryStore load below (kept lazy to avoid a
22
+ // circular import). Node >=22.12 (our engines floor) supports require(esm).
23
+ const require = createRequire(import.meta.url);
24
+
19
25
  /**
20
26
  * @typedef {object} LearningContext
21
27
  * @property {import("./trajectory-store.js").TrajectoryStore} trajectoryStore
@@ -84,6 +84,8 @@ export const BUILT_IN_PROVIDERS = {
84
84
  baseUrl: "https://ark.cn-beijing.volces.com/api/v3",
85
85
  apiKeyEnv: "VOLCENGINE_API_KEY",
86
86
  models: [
87
+ "doubao-seed-2-1-pro-260628",
88
+ "doubao-seed-2-0-lite-260215",
87
89
  "doubao-seed-1-6-251015",
88
90
  "doubao-seed-1-6-flash-250828",
89
91
  "doubao-seed-1-6-lite-251015",
@@ -0,0 +1,53 @@
1
+ /**
2
+ * mcp-auth-target — resolve a `cc mcp login|logout <target>` argument.
3
+ *
4
+ * Claude-Code 2.1.186 parity: `mcp login <name>` / `mcp logout <name>` accept
5
+ * the NAME of a configured MCP server, not only a raw URL. A `target` that
6
+ * already looks like a `scheme://…` URL is used verbatim (fast path — no DB
7
+ * needed); otherwise it is treated as a configured-server name and resolved to
8
+ * its stored url via the injected `lookupServer(name)` callback.
9
+ *
10
+ * Pure (no DB / IO of its own) so it is unit-testable; the caller supplies the
11
+ * `lookupServer` resolver (DB-backed in the command, a stub in tests).
12
+ */
13
+
14
+ /** A `scheme://` URL (http, https, …) — not a bare host or a server name. */
15
+ export function isUrlLike(s) {
16
+ return /^[a-z][a-z0-9+.-]*:\/\//i.test(String(s || "").trim());
17
+ }
18
+
19
+ /**
20
+ * Resolve a login/logout target to a concrete server URL.
21
+ *
22
+ * @param {string} target a URL or a configured MCP server name
23
+ * @param {(name: string) => ({ name?: string, url?: string|null,
24
+ * transport?: string }|null)} [lookupServer] name → server config (or null)
25
+ * @returns {{ url: string, name: string|null, source: "url"|"config" }}
26
+ * @throws {Error} when target is empty, names an unknown server, or names a
27
+ * server that has no http(s) url (stdio servers cannot do OAuth login)
28
+ */
29
+ export function resolveMcpAuthTarget(target, lookupServer) {
30
+ const t = typeof target === "string" ? target.trim() : "";
31
+ if (!t) {
32
+ throw new Error("a server URL or configured server name is required");
33
+ }
34
+ if (isUrlLike(t)) {
35
+ return { url: t, name: null, source: "url" };
36
+ }
37
+ const server = typeof lookupServer === "function" ? lookupServer(t) : null;
38
+ if (!server) {
39
+ throw new Error(
40
+ `no configured MCP server named "${t}" (and it is not a URL) — ` +
41
+ `run "cc mcp servers" to list, or pass the full https:// URL`,
42
+ );
43
+ }
44
+ const url = server.url || null;
45
+ if (!url || !isUrlLike(url)) {
46
+ throw new Error(
47
+ `configured server "${t}" has no http(s) URL (transport: ` +
48
+ `${server.transport || "stdio"}); OAuth login only applies to remote ` +
49
+ `http/sse MCP servers`,
50
+ );
51
+ }
52
+ return { url, name: server.name || t, source: "config" };
53
+ }
@@ -67,7 +67,9 @@ export function runBangCommand(line, opts = {}) {
67
67
  const spawnSync = opts.deps?.spawnSync || _deps.spawnSync;
68
68
  const cwd = opts.cwd || process.cwd();
69
69
  const isWin =
70
- opts.platform != null ? opts.platform === "win32" : process.platform === "win32";
70
+ opts.platform != null
71
+ ? opts.platform === "win32"
72
+ : process.platform === "win32";
71
73
  const cmd = String(line).replace(/^!/, "").trim();
72
74
 
73
75
  const res = isWin
@@ -101,6 +103,30 @@ export function runBangCommand(line, opts = {}) {
101
103
  };
102
104
  }
103
105
 
106
+ /**
107
+ * Whether a `!command` in the REPL should auto-trigger an assistant response to
108
+ * its output (Claude-Code 2.1.186 `respondToBashCommands`). Opt-IN — default
109
+ * OFF: by default the command output is folded into context but no LLM turn
110
+ * fires, so a quick `!ls` / `!git status` never spends a turn. (cc intentionally
111
+ * diverges from upstream's default-on here.)
112
+ *
113
+ * Precedence: `CC_RESPOND_TO_BASH` env (1/true/yes/on → on, else off) overrides
114
+ * the settings.json `respondToBashCommands` boolean, which overrides the default
115
+ * (false). Pure — the caller passes the resolved settings value + env.
116
+ *
117
+ * @param {{ settingValue?: boolean, env?: object }} [opts]
118
+ * @returns {boolean}
119
+ */
120
+ export function shouldRespondToBashCommands(opts = {}) {
121
+ const env = opts.env || process.env;
122
+ const raw = env.CC_RESPOND_TO_BASH;
123
+ if (raw != null && String(raw).trim() !== "") {
124
+ return /^(1|true|yes|on)$/i.test(String(raw).trim());
125
+ }
126
+ if (typeof opts.settingValue === "boolean") return opts.settingValue;
127
+ return false;
128
+ }
129
+
104
130
  /**
105
131
  * Append a `#` note to the project cc.md (created at the git root — falls
106
132
  * back to cwd outside a repo). Inserts under a `## Notes` heading, creating
@@ -124,6 +124,18 @@ export function makeRunnableProviderFallback(
124
124
  },
125
125
  };
126
126
  }
127
+ // Cross-provider env-keyed fallback fires ONLY when the configured provider
128
+ // is itself unrunnable (no key present). If the user EXPLICITLY configured a
129
+ // provider WITH a key and it returned an auth error, that key is bad/expired
130
+ // — surface it instead of silently switching VENDORS and spending on a
131
+ // different account's key. This is the recurring "configured volcengine but
132
+ // it ran Claude/haiku" trap: a volcengine 401 must never hijack the turn
133
+ // onto anthropic just because ANTHROPIC_API_KEY happens to be in the env.
134
+ // (The baseUrl-mismatch path above still relabels a mislabeled config using
135
+ // the SAME key, which is always safe.)
136
+ if (hasUsableKey(failed, { apiKey: options.apiKey, isActive: true, env })) {
137
+ return null;
138
+ }
127
139
  for (const [name, def] of Object.entries(BUILT_IN_PROVIDERS)) {
128
140
  if (name === failed) continue;
129
141
  if (def.apiKeyEnv && nonEmpty(env[def.apiKeyEnv])) {