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.
- package/package.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-B8T7xeuV.js → AIOps-BxhyZq9J.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-BDxBsVYw.js → ActionButton-BNUhIcPN.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-5cYrjLzN.js → Analytics-DpE1LQXz.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-DkanJ7a5.js → AppLayout-D-vd98us.js} +5 -5
- package/src/assets/web-panel/assets/{Audit-8r3yG5R0.js → Audit-Bnfg0nUP.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DmdJpAwc.js → Backup-84Ryr92i.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CCTC_ROJ.js → BaseInput-BHl2VN49.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-BE4xBoCH.js → Chat-C-XyRbZ_.js} +4 -4
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-ita18CO8.js → ChatBubbleRenderer-BQuS_MfK.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-DVUDDyL5.js → Checkbox-gJpyQ5hV.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-C07Q688Z.js → Codegen-NIwk76Jx.js} +1 -1
- package/src/assets/web-panel/assets/{Col-Bfmb67bb.js → Col-Dy7-G7ei.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DvUS6LOy.js → Community-DGPF1QLB.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B2jvuCf2.js → Compact-Dg2jm5mx.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-B4VnGZOX.js → Compliance-BGaJDYow.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-Bf1UR9uf.js → Cowork-CZiec6-_.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-BYU0OhXx.js → Cron-C5plyjhD.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DhtbpJ8Y.js → Crosschain-CGMz-rIE.js} +1 -1
- package/src/assets/web-panel/assets/{DID-DFtdsXjV.js → DID-BLMcsumG.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BOqMlucS.js → Dashboard-DEntKWjF.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DWcGi1lU.js → Dropdown-DyRaZqrS.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-smcpeq18.js → EmailListRenderer-DX_Wu_uV.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-_qKQM8YZ.js → FamilyGuardDashboard-PX0U_pH5.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DxaaO_Pn.js → Federation-DVgF8ZdM.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-Bijk4-hV.js → FormItemContext-BRaX9vyC.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CXs5JGAs.js → GenericCardRenderer-Dy_c9ccI.js} +1 -1
- package/src/assets/web-panel/assets/{Git-vopq_XAi.js → Git-Dv8Fh1_w.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-D6lEr1e2.js → Governance-D5vw7D8q.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-D716knRp.js → Inference-Dbt861U-.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Mt7L5B8p.js → KnowledgeGraph-DgkYyYYk.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-BmY4Aozy.js → Logs-Bi7BMh2S.js} +2 -2
- package/src/assets/web-panel/assets/{Marketplace-Bk7yghOV.js → Marketplace-Cu4tyI-N.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BdEGNK8B.js → McpTools-DhOo6KRf.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-DaGxWezP.js → Memory-M6jr41rl.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D2QqiIXV.js → MobileBridge-mB45yYre.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-JQQ60jth.js → MobileProjects-pQO0ZS_8.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-DHp0q17f.js → Mtc-DIT60RG6.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-RWrCriuc.js → MtcAudit-DV16w59B.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-BR_5j51g.js → Multisig-DzXEXej1.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-MF3ZkPYq.js → NLProgramming-ClR96m-f.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BDWwfQ-t.js → Notes-Cqd3TQ9N.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-Xk8BtRL5.js → NotificationSettings-Ctzz5cx5.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-DaVlfAsv.js → OrderTableRenderer-DlEZYyLt.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CNdU6Jxx.js → Organization-0HyOJovw.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-DOf8iK6T.js → Overflow-BInoQKwn.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-DvOwefeB.js → P2P-DSMX8d_q.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-BmrU5B5U.js → PdhVaultBrowser-Dn8Utbaw.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DM_Cha_-.js → Permissions-Dd_GAUT-.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-DGOiN1md.js → PersonalDataHub-CgZ2qfLH.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-BMZcrOpC.js → Pipeline-Bh4OTBfH.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-CcBD3ZJ_.js → Privacy-DRdhoeaJ.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BQmkVkFp.js → ProjectInit-bifrkI6i.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BL0iqE5h.js → ProjectSettings-RJ2xbAx3.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-7iyoLF6T.js → Projects-DPMre_Vt.js} +1 -1
- package/src/assets/web-panel/assets/Providers-DXR9-uVd.js +1 -0
- package/src/assets/web-panel/assets/{QuickAsk-Cp0Lpic1.js → QuickAsk-VkUau5yj.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-DN-26aef.js → Recommend-D9NMPNb6.js} +1 -1
- package/src/assets/web-panel/assets/{Reputation-ChdhhVGu.js → Reputation-D7-6naYX.js} +1 -1
- package/src/assets/web-panel/assets/{Row-2RBgBLEz.js → Row-BX2i0Cmv.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CfogWRiS.js → RssFeed-Byb5WDNx.js} +3 -3
- package/src/assets/web-panel/assets/Search-CZyeEQAc.js +1 -0
- package/src/assets/web-panel/assets/{Security-CcDdV-6d.js → Security-BWR_hUCv.js} +4 -4
- package/src/assets/web-panel/assets/{Services-qG5L2PHE.js → Services-NSc_9EF_.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-7CVgHJwr.js → Skeleton-BlAIlPnB.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-BEbdNS7s.js → Skills-CaU0R1CL.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-C4ENvrVM.js → Sla-BnV-Fro4.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-DuvM2AsQ.js → SpeechSettings-CBHGfr4p.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bm9Np5Yt.js → SyncSettings-BwthnPiP.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-KdXnN3nt.js +1 -0
- package/src/assets/web-panel/assets/{Templates-C3GJa4ya.js → Templates-BN4WwLUS.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BLQnLb8K.js → Tenant-CZ24n54K.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-BGgZIwb0.js → Terminal-BelzaRsd.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-BD8NwNAK.js → TimelineRenderer-DhkqTGFa.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BIsO2iiX.js → Tokens-46_v1nkV.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-FJv5zeym.js → Trigger-DogUmIqL.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-9FRFEAhW.js → Trust-BRByKmic.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-aOdZVwgi.js → UkeySign-BZmDgBR1.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-C1KyY7ZB.js → VideoEditing-DVvG6VSG.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CH5edY0l.js → Wallet-ChxdrDjz.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BUPlkFe0.js → WebAuthn-BkX-jd9_.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-BoH8bG7y.js → WorkflowEditor-DtWPAhrj.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DRS34SZq.js → chat-FLdS_X89.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DxdhROQh.js → colors-CdqVIbAc.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-C5f4y3lM.js → compact-item-B1em0FOh.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DkyzEt2y.js → createContext-xqQveKVc.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-FuXjMk0L.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CIRkRQ69.js → hasIn-C2Ooy3F5.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfZal2SO.js → index-2N63y-3V.js} +1 -1
- package/src/assets/web-panel/assets/{index-1Vd3bgPH.js → index-6x_TEnAx.js} +1 -1
- package/src/assets/web-panel/assets/{index-B_ytTrAE.js → index-7hThnUln.js} +1 -1
- package/src/assets/web-panel/assets/{index-Kyd48UEO.js → index-B4vllS2j.js} +1 -1
- package/src/assets/web-panel/assets/{index-BrNCtBLG.js → index-B7MunZX_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DgJf60U0.js → index-BENOufkM.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cv9YEv3M.js → index-BI7hFUhB.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dz-Xl9WT.js → index-BIDq5ivM.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5r9kCHD.js → index-BINmnZLO.js} +1 -1
- package/src/assets/web-panel/assets/{index-CXE4fjlC.js → index-BP7jquLi.js} +1 -1
- package/src/assets/web-panel/assets/index-B_D6g2oc.js +1 -0
- package/src/assets/web-panel/assets/{index-DSpV3T2E.js → index-BcWe6vyc.js} +1 -1
- package/src/assets/web-panel/assets/{index-wdXKonKr.js → index-BfcxX38y.js} +1 -1
- package/src/assets/web-panel/assets/{index-fgBegFCK.js → index-BhuXJoB0.js} +1 -1
- package/src/assets/web-panel/assets/{index-DtOM1jbe.js → index-Bkyb8UQL.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bc59VV8o.js → index-BqXBDJNB.js} +1 -1
- package/src/assets/web-panel/assets/{index-DpHZisZn.js → index-Br134Y_p.js} +1 -1
- package/src/assets/web-panel/assets/index-C-2_nxKI.js +1 -0
- package/src/assets/web-panel/assets/{index-D3WhDg1s.js → index-C0YSl1cy.js} +3 -3
- package/src/assets/web-panel/assets/{index-DV5W06OY.js → index-CDK13Wi9.js} +1 -1
- package/src/assets/web-panel/assets/{index-BStiYEJX.js → index-CPsgpARa.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLLkL7YU.js → index-C_4O2sqg.js} +1 -1
- package/src/assets/web-panel/assets/{index-5Mph6K8H.js → index-CevlY-ti.js} +1 -1
- package/src/assets/web-panel/assets/{index-dtUUXiuv.js → index-CtJcdcSi.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyMVWOwq.js → index-Cw90dIiq.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLjIL9vZ.js → index-D1Y0w9Bp.js} +1 -1
- package/src/assets/web-panel/assets/{index-btOwnCpT.js → index-D62oOPYQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-C0VYKzdU.js → index-DBcAYh1Z.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bskk24yp.js → index-DBemh8BC.js} +1 -1
- package/src/assets/web-panel/assets/{index-CSHsX3UZ.js → index-DC2j3ZH1.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHACYX-h.js → index-DDoQxg20.js} +1 -1
- package/src/assets/web-panel/assets/{index-CO4PAGWX.js → index-DJsz-ISP.js} +1 -1
- package/src/assets/web-panel/assets/{index-X7QcpsDO.js → index-DaiNFrXW.js} +1 -1
- package/src/assets/web-panel/assets/{index-BzC5O6l6.js → index-I3PgXyCp.js} +1 -1
- package/src/assets/web-panel/assets/{index-2uQYIxL1.js → index-XI6xtz_p.js} +1 -1
- package/src/assets/web-panel/assets/{index-DnAbauX-.js → index-dZPaczgC.js} +1 -1
- package/src/assets/web-panel/assets/{index-BdzFfdXs.js → index-vPuKHNG_.js} +1 -1
- package/src/assets/web-panel/assets/{index-DdLAPzIl.js → index-wAA_52rV.js} +1 -1
- package/src/assets/web-panel/assets/{index-DR_uUG6x.js → index-yjlraVSz.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-4uTrrqjb.js → initDefaultProps-DAa9deN1.js} +1 -1
- package/src/assets/web-panel/assets/{motion-gkRvxGHW.js → motion-DrpdeaZb.js} +1 -1
- package/src/assets/web-panel/assets/{move-CIgnaWNe.js → move-Tqv8fQ0W.js} +1 -1
- package/src/assets/web-panel/assets/{omit-DB-Ux8Gg.js → omit-DHA5fID2.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-ree-Itb0.js → pickAttrs-bsvBPVv5.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-EdAP6bCf.js → placementArrow-Cl6kkCqO.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-B1DqSgFh.js → responsiveObserve-BEFo1aZl.js} +1 -1
- package/src/assets/web-panel/assets/{slide-D_9NP_KE.js → slide-J59l_i_x.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CAytzvoR.js → statusUtils-CgXZ-Y0K.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-zb3gob1_.js → styleChecker-CGQqxIef.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BQWuGrL0.js → useFlexGapSupport-CgO0iWFX.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-QMEsYkGX.js → useFs-DzTO2udE.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-Ccrz7-au.js → usePersonalDataHub-Brihie_5.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-DZVY4QM-.js → vnode-BSsmn1zK.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Dii_0V_X.js → zoom-Dofbccho.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/commands/agent.js +6 -0
- package/src/commands/hub.js +6 -2
- package/src/commands/mcp.js +42 -10
- package/src/commands/pdh.js +4 -1
- package/src/constants.js +2 -2
- package/src/gateways/ws/video-protocol.js +7 -0
- package/src/harness/feature-flags.js +19 -6
- package/src/harness/prompt-compressor.js +1 -0
- package/src/lib/agent-core.js +2 -0
- package/src/lib/config-manager.js +42 -1
- package/src/lib/git-integration.js +1 -2
- package/src/lib/learning/learning-hooks.js +6 -0
- package/src/lib/llm-providers.js +2 -0
- package/src/lib/mcp-auth-target.js +53 -0
- package/src/lib/repl-bang-memorize.js +27 -1
- package/src/lib/runnable-provider.js +12 -0
- package/src/lib/settings-loader.cjs +29 -1
- package/src/lib/shell-approval.js +7 -12
- package/src/lib/skill-loader.js +6 -2
- package/src/lib/suggest-name.js +91 -0
- package/src/lib/task-model-selector.js +5 -5
- package/src/repl/agent-repl.js +31 -3
- package/src/repl/slash-macro.js +7 -1
- package/src/runtime/agent-core.js +62 -3
- package/src/runtime/coding-agent-contract-shared.cjs +11 -1
- package/src/runtime/headless-runner.js +57 -4
- package/src/runtime/headless-stream.js +50 -2
- package/src/session/index.js +6 -2
- package/src/assets/web-panel/assets/Providers-IQqLZ_11.js +0 -1
- package/src/assets/web-panel/assets/Search-CrREUZpz.js +0 -1
- package/src/assets/web-panel/assets/Tasks-K2ZtJ47C.js +0 -1
- package/src/assets/web-panel/assets/devWarning-vwZx8E0a.js +0 -1
- package/src/assets/web-panel/assets/index-Dhn6EWMQ.js +0 -1
- package/src/assets/web-panel/assets/index-dGvDljur.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as n}from"./index-
|
|
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-
|
|
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-
|
|
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};
|
package/src/assets/web-panel/assets/{useFlexGapSupport-BQWuGrL0.js → useFlexGapSupport-CgO0iWFX.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o,s as t}from"./vendor-BvqAck49.js";import{d as s}from"./styleChecker-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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">
|
package/src/commands/agent.js
CHANGED
|
@@ -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(),
|
package/src/commands/hub.js
CHANGED
|
@@ -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")
|
|
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
|
-
|
|
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");
|
package/src/commands/mcp.js
CHANGED
|
@@ -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
|
-
|
|
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 <
|
|
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 (
|
|
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 <
|
|
163
|
-
.description(
|
|
164
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
|
package/src/commands/pdh.js
CHANGED
|
@@ -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 {
|
|
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-
|
|
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-
|
|
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 {
|
|
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")
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
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) {
|
package/src/lib/agent-core.js
CHANGED
|
@@ -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
|
-
|
|
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
|
package/src/lib/llm-providers.js
CHANGED
|
@@ -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
|
|
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])) {
|