chainlesschain 0.162.121 → 0.162.123
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/.build-hash +1 -1
- package/src/assets/web-panel/assets/AIOps-C5CSd8pY.js +1 -0
- package/src/assets/web-panel/assets/{ActionButton-B0guX-Pk.js → ActionButton-BugJtiJc.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-pvYAYaTD.js → Analytics-CzxpcV9E.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-_GgOKQ2t.js → AppLayout-Cb0eHetM.js} +5 -5
- package/src/assets/web-panel/assets/Audit-qjq04wh8.js +1 -0
- package/src/assets/web-panel/assets/{Backup-DzC81Yn0.js → Backup-C2Y_XNBA.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BsJKfb1P.js → BaseInput-CZ0c7QHk.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-WsUPq3Wj.js → Chat-CaKDT3wV.js} +6 -6
- package/src/assets/web-panel/assets/ChatBubbleRenderer-TeKnMwPj.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-C3yuwxvq.js → Checkbox-C6-Iu3bG.js} +1 -1
- package/src/assets/web-panel/assets/Codegen-TGLFk6P1.js +1 -0
- package/src/assets/web-panel/assets/{Col-DH6v5BCo.js → Col-DVBrO7AN.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DPm78h9b.js → Community-tg6-Rik1.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-t_O2D6_A.js → Compact-DM4ZgFSE.js} +1 -1
- package/src/assets/web-panel/assets/Compliance-DFeWryxt.js +1 -0
- package/src/assets/web-panel/assets/{Cowork-BAfAK8X3.js → Cowork-CJwiWkUY.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-BeG0RFLN.js → Cron-dsdXHvrO.js} +2 -2
- package/src/assets/web-panel/assets/Crosschain-p7_5Gq-7.js +1 -0
- package/src/assets/web-panel/assets/{DID-DnknPYMQ.js → DID-BB_LBLYT.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-CCChnAaV.js → Dashboard-Bh_HkNSD.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-DrnkbWTA.js → Dropdown-dTFtVnKk.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-yvHFL0rf.js → EmailListRenderer-yqdttzXV.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-CkGkMoL4.js → FamilyGuardDashboard-DfX3YpUU.js} +1 -1
- package/src/assets/web-panel/assets/Federation-BJApfPV4.js +1 -0
- package/src/assets/web-panel/assets/{FormItemContext-CHniFKJL.js → FormItemContext-DNMwIh7X.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DUWt7emA.js → GenericCardRenderer-C-T8UQf0.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BCkiDXHW.js → Git-SURFhkLi.js} +2 -2
- package/src/assets/web-panel/assets/Governance-B4u_KsfE.js +1 -0
- package/src/assets/web-panel/assets/Inference-2kr_rKQd.js +1 -0
- package/src/assets/web-panel/assets/{KnowledgeGraph-CcaaJRB6.js → KnowledgeGraph-h-nL7J6x.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-CgrnKQgi.js → Logs-DjuWREBJ.js} +2 -2
- package/src/assets/web-panel/assets/Marketplace-W9Iz8b2m.js +1 -0
- package/src/assets/web-panel/assets/{McpTools-_C4-YpAK.js → McpTools-D0waMomb.js} +5 -5
- package/src/assets/web-panel/assets/{Memory-XGQtG2x2.js → Memory-Ci768GQ3.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-D4tGRMBu.js → MobileBridge-4jAehfcz.js} +2 -2
- package/src/assets/web-panel/assets/{MobileProjects-CSMoOsbj.js → MobileProjects-RpFuAiNz.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BkOT98e8.js → Mtc-DJdw8btT.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-R3Bc7QS3.js → MtcAudit-Dc596XgH.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DtPhN_Vp.js → Multisig--Qs7eGsH.js} +3 -3
- package/src/assets/web-panel/assets/NLProgramming-D3y71FDX.js +1 -0
- package/src/assets/web-panel/assets/{Notes-DQAs8WXS.js → Notes-uMxjj66_.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CU5inrwZ.js → NotificationSettings-C4ikBOsm.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-CuOAigzP.js → OrderTableRenderer-BpmdunAz.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-BBYSlNS4.js → Organization-BBEmFNGM.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-D4LFJ0F8.js → Overflow-B-4_IpbB.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Cb9wWcwI.js → P2P-DdOf9BZs.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CbrWEB55.js → PdhVaultBrowser-DDU2Zc9Q.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-B6IgqOCw.js → Permissions-B1ebgevF.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-Bjr4sBQJ.js → PersonalDataHub-B3WcvKni.js} +2 -2
- package/src/assets/web-panel/assets/Pipeline-DASuPDc3.js +1 -0
- package/src/assets/web-panel/assets/Privacy-DnixwmhJ.js +1 -0
- package/src/assets/web-panel/assets/{ProjectInit-D_Ooa-_1.js → ProjectInit-BQjMDkML.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BcxJj9D5.js → ProjectSettings-dHyZ3SxW.js} +2 -2
- package/src/assets/web-panel/assets/Projects-BGWEJIVT.js +1 -0
- package/src/assets/web-panel/assets/Providers-Bl0dw6cI.js +1 -0
- package/src/assets/web-panel/assets/{QuickAsk-BwmHGadq.js → QuickAsk-BDrk7l3t.js} +1 -1
- package/src/assets/web-panel/assets/Recommend-BPKof_CA.js +1 -0
- package/src/assets/web-panel/assets/Reputation-6MNJLklK.js +1 -0
- package/src/assets/web-panel/assets/{Row-P2QvD32s.js → Row-DmGJwpfd.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-Cbhe_ZuG.js → RssFeed-9-Fxh3_w.js} +2 -2
- package/src/assets/web-panel/assets/Search-CCHjey_D.js +1 -0
- package/src/assets/web-panel/assets/{Security-BHcX3oNC.js → Security-D6CySV7r.js} +4 -4
- package/src/assets/web-panel/assets/{Services-MyS-8Lbb.js → Services-Co8Mk8qE.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-QZIW_jXl.js → Skeleton-BdON8M-1.js} +1 -1
- package/src/assets/web-panel/assets/Skills-CEJE1Go1.js +1 -0
- package/src/assets/web-panel/assets/Sla-BSxFvFX9.js +1 -0
- package/src/assets/web-panel/assets/{SpeechSettings-Bo1H5Wn6.js → SpeechSettings-C3rShYlV.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-Bsz0-gn1.js → SyncSettings-52NXsfyj.js} +2 -2
- package/src/assets/web-panel/assets/Tasks-He7CweW6.js +1 -0
- package/src/assets/web-panel/assets/{Templates-BougCISz.js → Templates-UtjBlJIO.js} +1 -1
- package/src/assets/web-panel/assets/Tenant-Dd5XNbYF.js +1 -0
- package/src/assets/web-panel/assets/Terminal-pFyh42cu.js +3 -0
- package/src/assets/web-panel/assets/{TimelineRenderer-DIvfcwcy.js → TimelineRenderer-BdfqBQmM.js} +1 -1
- package/src/assets/web-panel/assets/Tokens-CsgNsrdQ.js +1 -0
- package/src/assets/web-panel/assets/{Trigger-Di7RbOTg.js → Trigger-Dt_N_rvo.js} +1 -1
- package/src/assets/web-panel/assets/Trust-B1lJzsPn.js +1 -0
- package/src/assets/web-panel/assets/{UkeySign-D6K4VEkr.js → UkeySign-CW8YdFxg.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-DncGaI3n.js → VideoEditing-CU6o7qvp.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-C6dwNmEv.js → Wallet-DPxjEhbN.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DECzmHdt.js → WebAuthn-CuJ29YAF.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-7Oui1r4s.js → WorkflowEditor-BcCA2U8H.js} +1 -1
- package/src/assets/web-panel/assets/{chat-D7cr3pGX.js → chat-Cxl5DGsc.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DVBzBfcl.js → colors-FS_7Xggs.js} +1 -1
- package/src/assets/web-panel/assets/community-parser-Cuyslaku.js +3 -0
- package/src/assets/web-panel/assets/{compact-item-BbB5VBbN.js → compact-item-BzXjd3wJ.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-DZIhmdMW.js → createContext-DhF9bi_u.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-B1j78JeH.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-o6cAbkdF.js → hasIn-Y1a0aV9N.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDlaS-eI.js → index--fcP34eT.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9ImwlR4.js → index-1iacQgo5.js} +3 -3
- package/src/assets/web-panel/assets/{index-BjFOIfCN.js → index-1khPb4ZS.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3zE2Zb3.js → index-B48PZ-xM.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRwhnqeq.js → index-BBtULjKY.js} +1 -1
- package/src/assets/web-panel/assets/{index-yuTbNtNs.js → index-BNmWkPqm.js} +1 -1
- package/src/assets/web-panel/assets/{index-B46pBbZO.js → index-BTltEtoG.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cw4L9i5q.js → index-B_Z0PHC0.js} +1 -1
- package/src/assets/web-panel/assets/index-BaN6wKWx.js +1 -0
- package/src/assets/web-panel/assets/{index-Cv57ZM9B.js → index-BepInmSi.js} +1 -1
- package/src/assets/web-panel/assets/{index-zKIib2ju.js → index-BllceSdr.js} +1 -1
- package/src/assets/web-panel/assets/{index-Uu0xnJjT.js → index-BnvaUocg.js} +1 -1
- package/src/assets/web-panel/assets/{index-PrARM-sN.js → index-Bt_0ygjA.js} +1 -1
- package/src/assets/web-panel/assets/{index-BE27hqn2.js → index-BzQkdgQW.js} +1 -1
- package/src/assets/web-panel/assets/{index-B7wUz-Ms.js → index-C2S8McM1.js} +1 -1
- package/src/assets/web-panel/assets/{index-bVBYhd7K.js → index-CELVZPNt.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7E1YSkg.js → index-CETvk0NN.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZ3tksOn.js → index-CRSkKj9M.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cqjc-kry.js → index-Cgo1J_Kf.js} +1 -1
- package/src/assets/web-panel/assets/{index-D8x9OXYZ.js → index-Ci7PSoQn.js} +1 -1
- package/src/assets/web-panel/assets/{index-DTk9u72E.js → index-Cn9lbqaS.js} +1 -1
- package/src/assets/web-panel/assets/{index-B-ZE4Sb_.js → index-CuTKOay7.js} +1 -1
- package/src/assets/web-panel/assets/{index-CMBJfBO0.js → index-CxYHV8nb.js} +1 -1
- package/src/assets/web-panel/assets/{index-KRt3wlmg.js → index-CzlCP4jP.js} +1 -1
- package/src/assets/web-panel/assets/{index-BCmv_7S_.js → index-D3IVAG9l.js} +1 -1
- package/src/assets/web-panel/assets/{index-DClnoV1K.js → index-DLyIxnjc.js} +1 -1
- package/src/assets/web-panel/assets/{index-CBU-k7oT.js → index-DUcVF8e6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BHUQ725h.js → index-DVTex5M8.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzqSSSPT.js → index-DZJMsVI1.js} +1 -1
- package/src/assets/web-panel/assets/{index-WVuFehZH.js → index-DfaSKEVD.js} +1 -1
- package/src/assets/web-panel/assets/{index-wTvVuzRE.js → index-DgHWZVjv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BpBK2OXI.js → index-Dmjxpu0L.js} +1 -1
- package/src/assets/web-panel/assets/{index-D9kIcXZC.js → index-DxGVbuqr.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAH13RZu.js → index-GCd5hs58.js} +1 -1
- package/src/assets/web-panel/assets/{index-l0044mtE.js → index-JUukFpxi.js} +1 -1
- package/src/assets/web-panel/assets/index-N7JKRLCC.js +1 -0
- package/src/assets/web-panel/assets/{index-M33z1syq.js → index-Na733kBa.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKepNJYO.js → index-Sl-sLj3T.js} +1 -1
- package/src/assets/web-panel/assets/{index-CsMviqrA.js → index-uLoKviUT.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BserruiV.js → initDefaultProps-D6QmlnQ-.js} +1 -1
- package/src/assets/web-panel/assets/{motion-C_f04bi5.js → motion-BHrTGY1_.js} +1 -1
- package/src/assets/web-panel/assets/{move-BexrY4Hu.js → move-Bpph6B_N.js} +1 -1
- package/src/assets/web-panel/assets/mtc-parser-CEQffxds.js +1 -0
- package/src/assets/web-panel/assets/{omit-CIZJousS.js → omit-Dx0YMbWn.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-BkLOyxvO.js → pickAttrs-D-a8Fm6C.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-C3ddcrAy.js → placementArrow-DXFSVgxv.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-D7hnwzkh.js → responsiveObserve-CxhQ1EaK.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CF7E-K6h.js → slide-IlBI0XU8.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-B6OJYlGm.js → statusUtils-COoXVzje.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-bFHBq4VZ.js → styleChecker-DCuq89M_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-C4oscNMu.js → useFlexGapSupport-tfNE1ALO.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-C4qeTm22.js → useFs-DD4bzBkU.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BREWau9k.js → usePersonalDataHub-DVkH1hbT.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-D_FePgCk.js → vnode-D1ZmXyxM.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-CrTvlO1G.js → zoom-DblBUHfi.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/harness/mcp-client.js +67 -6
- package/src/lib/credential-guard.js +284 -0
- package/src/lib/ensure-utf8.js +6 -1
- package/src/lib/hook-manager.js +15 -6
- package/src/lib/llm-config-defaults.js +20 -0
- package/src/lib/mcp-client.js +1 -0
- package/src/lib/mcp-oauth.js +35 -4
- package/src/lib/repl-rewind.js +58 -0
- package/src/lib/repl-vim.js +13 -1
- package/src/lib/settings-hooks.cjs +12 -3
- package/src/repl/agent-repl.js +52 -2
- package/src/runtime/agent-core.js +76 -0
- package/src/assets/web-panel/assets/AIOps-Bv7Ucinc.js +0 -1
- package/src/assets/web-panel/assets/Audit-CFS769nz.js +0 -1
- package/src/assets/web-panel/assets/ChatBubbleRenderer-DvtzQM9S.js +0 -1
- package/src/assets/web-panel/assets/Codegen-QIFxk_hy.js +0 -1
- package/src/assets/web-panel/assets/Compliance-CLKqB8ca.js +0 -1
- package/src/assets/web-panel/assets/Crosschain-CaWGF4pH.js +0 -1
- package/src/assets/web-panel/assets/Federation-1njD_iZv.js +0 -1
- package/src/assets/web-panel/assets/Governance-CvYe_1r7.js +0 -1
- package/src/assets/web-panel/assets/Inference-DLMzzPHV.js +0 -1
- package/src/assets/web-panel/assets/Marketplace-ANMynfeO.js +0 -1
- package/src/assets/web-panel/assets/NLProgramming-BedLm2U-.js +0 -1
- package/src/assets/web-panel/assets/Pipeline-Dh5Jusv2.js +0 -1
- package/src/assets/web-panel/assets/Privacy-Dyrhjpr4.js +0 -1
- package/src/assets/web-panel/assets/Projects-D2iHs0Go.js +0 -1
- package/src/assets/web-panel/assets/Providers-D0-FNfIu.js +0 -1
- package/src/assets/web-panel/assets/Recommend-Cn6UbQuv.js +0 -1
- package/src/assets/web-panel/assets/Reputation-jSYCTpEv.js +0 -1
- package/src/assets/web-panel/assets/Search-7aQqsu6b.js +0 -1
- package/src/assets/web-panel/assets/Skills-BiGNAz9O.js +0 -1
- package/src/assets/web-panel/assets/Sla-C62HvLJq.js +0 -1
- package/src/assets/web-panel/assets/Tasks-bwGsNuzp.js +0 -1
- package/src/assets/web-panel/assets/Tenant-CuZVHTEg.js +0 -1
- package/src/assets/web-panel/assets/Terminal-Cuf5GwW1.js +0 -3
- package/src/assets/web-panel/assets/Tokens-BiS_SqlJ.js +0 -1
- package/src/assets/web-panel/assets/Trust-DJfddmdL.js +0 -1
- package/src/assets/web-panel/assets/community-parser-CO25nZFt.js +0 -3
- package/src/assets/web-panel/assets/devWarning-roRmJB_V.js +0 -1
- package/src/assets/web-panel/assets/index-C24iCbrD.js +0 -1
- package/src/assets/web-panel/assets/index-DjgW9EJK.js +0 -1
- package/src/assets/web-panel/assets/mtc-parser-BbAbUB-9.js +0 -1
package/src/assets/web-panel/assets/{placementArrow-C3ddcrAy.js → placementArrow-DXFSVgxv.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-1iacQgo5.js";const L=(e,o,t,n,p)=>{const r=e/2,a=0,s=r,m=t*1/Math.sqrt(2),h=r-t*(1-1/Math.sqrt(2)),b=r-o*(1/Math.sqrt(2)),u=t*(Math.sqrt(2)-1)+o*(1/Math.sqrt(2)),g=2*r-b,w=u,d=2*r-m,c=h,A=2*r-a,x=s,v=r*Math.sqrt(2)+t*(Math.sqrt(2)-2),$=t*(Math.sqrt(2)-1);return{pointerEvents:"none",width:e,height:e,overflow:"hidden","&::after":{content:'""',position:"absolute",width:v,height:v,bottom:0,insetInline:0,margin:"auto",borderRadius:{_skip_check_:!0,value:`0 0 ${o}px 0`},transform:"translateY(50%) rotate(-135deg)",boxShadow:p,zIndex:0,background:"transparent"},"&::before":{position:"absolute",bottom:0,insetInlineStart:0,width:e,height:e/2,background:n,clipPath:{_multi_value_:!0,value:[`polygon(${$}px 100%, 50% ${$}px, ${2*r-$}px 100%, ${$}px 100%)`,`path('M ${a} ${s} A ${t} ${t} 0 0 0 ${m} ${h} L ${b} ${u} A ${o} ${o} 0 0 1 ${g} ${w} L ${d} ${c} A ${t} ${t} 0 0 0 ${A} ${x} Z')`]},content:'""'}}},f={adjustX:1,adjustY:1},l=[0,0],j={left:{points:["cr","cl"],overflow:f,offset:[-4,0],targetOffset:l},right:{points:["cl","cr"],overflow:f,offset:[4,0],targetOffset:l},top:{points:["bc","tc"],overflow:f,offset:[0,-4],targetOffset:l},bottom:{points:["tc","bc"],overflow:f,offset:[0,4],targetOffset:l},topLeft:{points:["bl","tl"],overflow:f,offset:[0,-4],targetOffset:l},leftTop:{points:["tr","tl"],overflow:f,offset:[-4,0],targetOffset:l},topRight:{points:["br","tr"],overflow:f,offset:[0,-4],targetOffset:l},rightTop:{points:["tl","tr"],overflow:f,offset:[4,0],targetOffset:l},bottomRight:{points:["tr","br"],overflow:f,offset:[0,4],targetOffset:l},rightBottom:{points:["bl","br"],overflow:f,offset:[4,0],targetOffset:l},bottomLeft:{points:["tl","bl"],overflow:f,offset:[0,4],targetOffset:l},leftBottom:{points:["br","bl"],overflow:f,offset:[-4,0],targetOffset:l}},M={adjustX:1,adjustY:1},O={adjustX:0,adjustY:0},T=[0,0];function k(e){return typeof e=="boolean"?e?M:O:i(i({},O),e)}function Y(e){const{arrowWidth:o=4,horizontalArrowShift:t=16,verticalArrowShift:n=8,autoAdjustOverflow:p,arrowPointAtCenter:r}=e,a={left:{points:["cr","cl"],offset:[-4,0]},right:{points:["cl","cr"],offset:[4,0]},top:{points:["bc","tc"],offset:[0,-4]},bottom:{points:["tc","bc"],offset:[0,4]},topLeft:{points:["bl","tc"],offset:[-(t+o),-4]},leftTop:{points:["tr","cl"],offset:[-4,-(n+o)]},topRight:{points:["br","tc"],offset:[t+o,-4]},rightTop:{points:["tl","cr"],offset:[4,-(n+o)]},bottomRight:{points:["tr","bc"],offset:[t+o,4]},rightBottom:{points:["bl","cr"],offset:[4,n+o]},bottomLeft:{points:["tl","bc"],offset:[-(t+o),4]},leftBottom:{points:["br","cl"],offset:[-4,n+o]}};return Object.keys(a).forEach(s=>{a[s]=r?i(i({},a[s]),{overflow:k(p),targetOffset:T}):i(i({},j[s]),{overflow:k(p)}),a[s].ignoreShake=!0}),a}function _(e){let o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return e.map(t=>`${o}${t}`).join(",")}const X=8;function B(e){const o=X,{sizePopupArrow:t,contentRadius:n,borderRadiusOuter:p,limitVerticalRadius:r}=e,a=t/2-Math.ceil(p*(Math.sqrt(2)-1)),s=(n>12?n+2:12)-a,m=r?o-a:s;return{dropdownArrowOffset:s,dropdownArrowOffsetVertical:m}}function q(e,o){const{componentCls:t,sizePopupArrow:n,marginXXS:p,borderRadiusXS:r,borderRadiusOuter:a,boxShadowPopoverArrow:s}=e,{colorBg:m,showArrowCls:h,contentRadius:b=e.borderRadiusLG,limitVerticalRadius:u}=o,{dropdownArrowOffsetVertical:g,dropdownArrowOffset:w}=B({sizePopupArrow:n,contentRadius:b,borderRadiusOuter:a,limitVerticalRadius:u}),d=n/2+p;return{[t]:{[`${t}-arrow`]:[i(i({position:"absolute",zIndex:1,display:"block"},L(n,r,a,m,s)),{"&:before":{background:m}})],[[`&-placement-top ${t}-arrow`,`&-placement-topLeft ${t}-arrow`,`&-placement-topRight ${t}-arrow`].join(",")]:{bottom:0,transform:"translateY(100%) rotate(180deg)"},[`&-placement-top ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(100%) rotate(180deg)"},[`&-placement-topLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-topRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-bottom ${t}-arrow`,`&-placement-bottomLeft ${t}-arrow`,`&-placement-bottomRight ${t}-arrow`].join(",")]:{top:0,transform:"translateY(-100%)"},[`&-placement-bottom ${t}-arrow`]:{left:{_skip_check_:!0,value:"50%"},transform:"translateX(-50%) translateY(-100%)"},[`&-placement-bottomLeft ${t}-arrow`]:{left:{_skip_check_:!0,value:w}},[`&-placement-bottomRight ${t}-arrow`]:{right:{_skip_check_:!0,value:w}},[[`&-placement-left ${t}-arrow`,`&-placement-leftTop ${t}-arrow`,`&-placement-leftBottom ${t}-arrow`].join(",")]:{right:{_skip_check_:!0,value:0},transform:"translateX(100%) rotate(90deg)"},[`&-placement-left ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(100%) rotate(90deg)"},[`&-placement-leftTop ${t}-arrow`]:{top:g},[`&-placement-leftBottom ${t}-arrow`]:{bottom:g},[[`&-placement-right ${t}-arrow`,`&-placement-rightTop ${t}-arrow`,`&-placement-rightBottom ${t}-arrow`].join(",")]:{left:{_skip_check_:!0,value:0},transform:"translateX(-100%) rotate(-90deg)"},[`&-placement-right ${t}-arrow`]:{top:{_skip_check_:!0,value:"50%"},transform:"translateY(-50%) translateX(-100%) rotate(-90deg)"},[`&-placement-rightTop ${t}-arrow`]:{top:g},[`&-placement-rightBottom ${t}-arrow`]:{bottom:g},[_(["&-placement-topLeft","&-placement-top","&-placement-topRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingBottom:d},[_(["&-placement-bottomLeft","&-placement-bottom","&-placement-bottomRight"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingTop:d},[_(["&-placement-leftTop","&-placement-left","&-placement-leftBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingRight:{_skip_check_:!0,value:d}},[_(["&-placement-rightTop","&-placement-right","&-placement-rightBottom"].map(c=>c+=":not(&-arrow-hidden)"),h)]:{paddingLeft:{_skip_check_:!0,value:d}}}}}export{X as M,Y as a,B as b,q as g,j as p,L as r};
|
package/src/assets/web-panel/assets/{responsiveObserve-D7hnwzkh.js → responsiveObserve-CxhQ1EaK.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{I as o,h}from"./index-
|
|
1
|
+
import{I as o,h}from"./index-1iacQgo5.js";import{b as x}from"./vendor-BvqAck49.js";const v=["xxxl","xxl","xl","lg","md","sm","xs"],p=r=>({xs:`(max-width: ${r.screenXSMax}px)`,sm:`(min-width: ${r.screenSM}px)`,md:`(min-width: ${r.screenMD}px)`,lg:`(min-width: ${r.screenLG}px)`,xl:`(min-width: ${r.screenXL}px)`,xxl:`(min-width: ${r.screenXXL}px)`,xxxl:`{min-width: ${r.screenXXXL}px}`});function w(){const[,r]=o();return x(()=>{const n=p(r.value),i=new Map;let a=-1,c={};return{matchHandlers:{},dispatch(e){return c=e,i.forEach(t=>t(c)),i.size>=1},subscribe(e){return i.size||this.register(),a+=1,i.set(a,e),e(c),a},unsubscribe(e){i.delete(e),i.size||this.unregister()},unregister(){Object.keys(n).forEach(e=>{const t=n[e],s=this.matchHandlers[t];s?.mql.removeListener(s?.listener)}),i.clear()},register(){Object.keys(n).forEach(e=>{const t=n[e],s=l=>{let{matches:m}=l;this.dispatch(h(h({},c),{[e]:m}))},d=window.matchMedia(t);d.addListener(s),this.matchHandlers[t]={mql:d,listener:s},s(d)})},responsiveMap:n}})}export{v as r,w as u};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as n}from"./index-
|
|
1
|
+
import{K as n}from"./index-1iacQgo5.js";import{i as e}from"./motion-BHrTGY1_.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-1iacQgo5.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-1iacQgo5.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-C4oscNMu.js → useFlexGapSupport-tfNE1ALO.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-DCuq89M_.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-1iacQgo5.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-1iacQgo5.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-1iacQgo5.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-1iacQgo5.js";import{i as f}from"./motion-BHrTGY1_.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-1iacQgo5.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-BvqAck49.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="./assets/icons-DP3uiYxy.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
|
|
@@ -18,6 +18,8 @@ import { EventEmitter } from "events";
|
|
|
18
18
|
export const _deps = {
|
|
19
19
|
spawn,
|
|
20
20
|
fetch: (...args) => globalThis.fetch(...args),
|
|
21
|
+
// Backoff sleep seam (tests override with a no-op so retries don't wait).
|
|
22
|
+
sleep: (ms) => new Promise((resolve) => setTimeout(resolve, ms)),
|
|
21
23
|
};
|
|
22
24
|
|
|
23
25
|
/**
|
|
@@ -95,6 +97,26 @@ export function isLikelyConnectionError(err) {
|
|
|
95
97
|
);
|
|
96
98
|
}
|
|
97
99
|
|
|
100
|
+
/** Capability-discovery retry tuning (Claude-Code 2.1.191 "short backoff"). */
|
|
101
|
+
const MCP_DISCOVERY_RETRIES = 2; // up to 3 attempts total
|
|
102
|
+
const MCP_DISCOVERY_BACKOFF_MS = 250; // 250ms, 500ms
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Is this a TRANSIENT error worth a short retry during capability discovery?
|
|
106
|
+
* Narrower than isLikelyConnectionError: connection-level failures and 5xx
|
|
107
|
+
* server errors retry, but 4xx (auth 401/403, not-found 404 = permanent for the
|
|
108
|
+
* same request), already-waited timeouts, and a dead stdio process do not —
|
|
109
|
+
* retrying those just wastes attempts.
|
|
110
|
+
*/
|
|
111
|
+
export function isTransientMcpError(err) {
|
|
112
|
+
const msg = String((err && err.message) || err || "");
|
|
113
|
+
if (/HTTP 4\d\d\b/i.test(msg)) return false; // any 4xx is permanent here
|
|
114
|
+
if (/Request timeout/i.test(msg)) return false; // already spent the full budget
|
|
115
|
+
return /fetch failed|ECONNREFUSED|ECONNRESET|ETIMEDOUT|EAI_AGAIN|EPIPE|socket hang up|network error|HTTP 5\d\d\b/i.test(
|
|
116
|
+
msg,
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
98
120
|
/**
|
|
99
121
|
* MCP Client — manages connections to MCP servers.
|
|
100
122
|
*/
|
|
@@ -277,8 +299,8 @@ export class MCPClient extends EventEmitter {
|
|
|
277
299
|
);
|
|
278
300
|
}
|
|
279
301
|
|
|
280
|
-
// Initialize MCP protocol
|
|
281
|
-
const initResult = await this.
|
|
302
|
+
// Initialize MCP protocol (retried on transient network errors).
|
|
303
|
+
const initResult = await this._requestWithRetry(name, "initialize", {
|
|
282
304
|
protocolVersion: "2024-11-05",
|
|
283
305
|
capabilities: { tools: {}, resources: {}, prompts: {} },
|
|
284
306
|
clientInfo: { name: "chainlesschain-cli", version: "0.37.9" },
|
|
@@ -302,7 +324,11 @@ export class MCPClient extends EventEmitter {
|
|
|
302
324
|
const advertisesTools =
|
|
303
325
|
entry.capabilities && entry.capabilities.tools !== undefined;
|
|
304
326
|
try {
|
|
305
|
-
const toolsResult = await this.
|
|
327
|
+
const toolsResult = await this._requestWithRetry(
|
|
328
|
+
name,
|
|
329
|
+
"tools/list",
|
|
330
|
+
{},
|
|
331
|
+
);
|
|
306
332
|
entry.tools = toolsResult?.tools || [];
|
|
307
333
|
} catch (err) {
|
|
308
334
|
if (advertisesTools) {
|
|
@@ -590,6 +616,34 @@ export class MCPClient extends EventEmitter {
|
|
|
590
616
|
|
|
591
617
|
// ─── Internal JSON-RPC transport ──────────────────────────────
|
|
592
618
|
|
|
619
|
+
/**
|
|
620
|
+
* Capability-discovery request with a short backoff retry on TRANSIENT
|
|
621
|
+
* network errors (Claude-Code 2.1.191: "capability discovery now retries
|
|
622
|
+
* transient network errors with short backoff"). Permanent errors (4xx,
|
|
623
|
+
* JSON-RPC errors, timeouts, dead stdio process) throw on the first failure.
|
|
624
|
+
*/
|
|
625
|
+
async _requestWithRetry(
|
|
626
|
+
serverName,
|
|
627
|
+
method,
|
|
628
|
+
params,
|
|
629
|
+
attempts = MCP_DISCOVERY_RETRIES,
|
|
630
|
+
) {
|
|
631
|
+
for (let i = 0; ; i++) {
|
|
632
|
+
try {
|
|
633
|
+
return await this._sendRequest(serverName, method, params);
|
|
634
|
+
} catch (err) {
|
|
635
|
+
if (i >= attempts || !isTransientMcpError(err)) throw err;
|
|
636
|
+
this.emit("server-retry", {
|
|
637
|
+
name: serverName,
|
|
638
|
+
method,
|
|
639
|
+
attempt: i + 1,
|
|
640
|
+
error: err?.message || String(err),
|
|
641
|
+
});
|
|
642
|
+
await _deps.sleep(MCP_DISCOVERY_BACKOFF_MS * (i + 1));
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
|
|
593
647
|
_sendRequest(serverName, method, params) {
|
|
594
648
|
const entry = this.servers.get(serverName);
|
|
595
649
|
if (!entry) return Promise.reject(new Error("Server not available"));
|
|
@@ -719,9 +773,16 @@ export class MCPClient extends EventEmitter {
|
|
|
719
773
|
if (!response.ok) {
|
|
720
774
|
const text =
|
|
721
775
|
typeof response.text === "function" ? await response.text() : "";
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
776
|
+
const detail = text ? `: ${text.slice(0, 200)}` : "";
|
|
777
|
+
// 404 usually means a wrong/stale server URL — name it and point at the
|
|
778
|
+
// MCP config (Claude-Code 2.1.191: "HTTP 404 errors now show the URL and
|
|
779
|
+
// point to your MCP config") instead of a bare "HTTP 404".
|
|
780
|
+
if (response.status === 404) {
|
|
781
|
+
throw new Error(
|
|
782
|
+
`HTTP 404${detail} — ${entry.httpUrl} returned Not Found; check this server's "url" in your MCP config`,
|
|
783
|
+
);
|
|
784
|
+
}
|
|
785
|
+
throw new Error(`HTTP ${response.status}${detail}`);
|
|
725
786
|
}
|
|
726
787
|
|
|
727
788
|
const contentType = response.headers?.get
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Credential READ guard — Claude-Code 2.1.189 parity ("`sandbox.credentials`
|
|
3
|
+
* setting blocks sandboxed commands from reading credential files and secret
|
|
4
|
+
* environment variables").
|
|
5
|
+
*
|
|
6
|
+
* cc has no OS sandbox (by design), but the same intent applies one layer up:
|
|
7
|
+
* the agent must not silently slurp the user's secrets into model context,
|
|
8
|
+
* where they could be echoed back, logged, summarized into a transcript, or
|
|
9
|
+
* exfiltrated by a later tool call. This guard flags two read paths —
|
|
10
|
+
* 1. the `read_file` tool pointed at a credential file (.env, ~/.aws/credentials,
|
|
11
|
+
* private keys, …), and
|
|
12
|
+
* 2. `run_shell` commands that read a credential file (`cat .env`) or print a
|
|
13
|
+
* secret-looking environment variable (`echo $ANTHROPIC_API_KEY`, `printenv`).
|
|
14
|
+
* — so `executeTool` can confirm first (interactive) or fail closed (headless),
|
|
15
|
+
* exactly like the sensitive-file WRITE guard ([[sensitive-file-guard.js]]).
|
|
16
|
+
*
|
|
17
|
+
* An explicit settings `allow` rule pre-authorizes; `CC_CREDENTIAL_GUARD=0`
|
|
18
|
+
* disables it. Deliberately, `--safe-mode` does NOT disable this guard: like
|
|
19
|
+
* permission deny rules, it is a SAFETY surface, not a customization — "debug
|
|
20
|
+
* my customizations bare" must never widen what secrets the agent may read.
|
|
21
|
+
*
|
|
22
|
+
* Precision over recall: matches are conservative so everyday reads
|
|
23
|
+
* (.env.example, public keys, package.json) never trip a confirm — a guard that
|
|
24
|
+
* cries wolf trains users to blind-approve.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import { createRequire } from "node:module";
|
|
28
|
+
|
|
29
|
+
const require_ = createRequire(import.meta.url);
|
|
30
|
+
// Reuse the shell policy's compound-command splitter (separators + $()/backtick
|
|
31
|
+
// extraction). It is regex-based on separators and leaves backslashes intact,
|
|
32
|
+
// so Windows paths survive (unlike the escaping tokenizer, which strips `\`).
|
|
33
|
+
const { splitCommandSegments } = require_(
|
|
34
|
+
"../runtime/coding-agent-shell-policy.cjs",
|
|
35
|
+
);
|
|
36
|
+
|
|
37
|
+
// ── credential FILE patterns ────────────────────────────────────────────────
|
|
38
|
+
|
|
39
|
+
// Exact basenames that are, by convention, secret stores.
|
|
40
|
+
const CREDENTIAL_BASENAMES = new Set([
|
|
41
|
+
".npmrc",
|
|
42
|
+
".netrc",
|
|
43
|
+
"_netrc",
|
|
44
|
+
".pgpass",
|
|
45
|
+
".git-credentials",
|
|
46
|
+
".pypirc",
|
|
47
|
+
".dockercfg",
|
|
48
|
+
"credentials", // ~/.aws/credentials, gcloud, …
|
|
49
|
+
".credentials",
|
|
50
|
+
"id_rsa",
|
|
51
|
+
"id_dsa",
|
|
52
|
+
"id_ecdsa",
|
|
53
|
+
"id_ed25519", // private SSH keys (the `.pub` siblings have a different basename)
|
|
54
|
+
]);
|
|
55
|
+
|
|
56
|
+
// Extensions whose BYTES are the secret (private keys / cert bundles / keyrings).
|
|
57
|
+
// Public material (.pub/.crt/.cert/.cer) is intentionally absent.
|
|
58
|
+
const SECRET_EXT_RE = /\.(pem|key|pfx|p12|keystore|jks|ppk|asc|gpg|pgp)$/i;
|
|
59
|
+
|
|
60
|
+
// `.env` and real env files — but NOT the committed template/example forms.
|
|
61
|
+
const ENV_SAFE_SUFFIX_RE = /\.(example|sample|template|dist|defaults|tpl)$/i;
|
|
62
|
+
|
|
63
|
+
// Directory-scoped credential files (the basename alone is too generic).
|
|
64
|
+
const CREDENTIAL_PATH_RE = [
|
|
65
|
+
/[\\/]\.aws[\\/]credentials$/i,
|
|
66
|
+
/[\\/]\.kube[\\/]config$/i,
|
|
67
|
+
/[\\/]\.docker[\\/]config\.json$/i,
|
|
68
|
+
/[\\/]\.config[\\/]gh[\\/]hosts\.yml$/i, // GitHub CLI OAuth token
|
|
69
|
+
/[\\/]\.gnupg[\\/]/i, // GPG keyring directory
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
// secret(s).{json,yml,yaml,env,txt}
|
|
73
|
+
const SECRETS_FILE_RE = /(^|[\\/])secrets?\.(json|ya?ml|env|txt)$/i;
|
|
74
|
+
|
|
75
|
+
function isEnvSecret(base) {
|
|
76
|
+
if (base.toLowerCase() === ".env") return true;
|
|
77
|
+
if (/^\.env\./i.test(base)) return !ENV_SAFE_SUFFIX_RE.test(base);
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Is this path a credential / secret file the agent should not read unprompted?
|
|
83
|
+
* @param {string} targetPath path as the tool received it (rel or abs)
|
|
84
|
+
* @returns {string|null} human reason when sensitive, null otherwise
|
|
85
|
+
*/
|
|
86
|
+
export function credentialFileReason(targetPath) {
|
|
87
|
+
const p = String(targetPath || "");
|
|
88
|
+
if (!p) return null;
|
|
89
|
+
const norm = p.replace(/\\/g, "/");
|
|
90
|
+
const base = norm.split("/").pop() || "";
|
|
91
|
+
if (!base) return null;
|
|
92
|
+
if (isEnvSecret(base)) return `environment/secret file (${base})`;
|
|
93
|
+
if (CREDENTIAL_BASENAMES.has(base.toLowerCase()))
|
|
94
|
+
return `credential file (${base})`;
|
|
95
|
+
if (SECRET_EXT_RE.test(base))
|
|
96
|
+
return `private key / certificate material (${base})`;
|
|
97
|
+
if (SECRETS_FILE_RE.test(norm)) return `secrets file (${base})`;
|
|
98
|
+
for (const re of CREDENTIAL_PATH_RE) {
|
|
99
|
+
if (re.test(norm)) return `credential file (${base})`;
|
|
100
|
+
}
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// ── secret ENV-VAR + command detection ──────────────────────────────────────
|
|
105
|
+
|
|
106
|
+
// Content-reader commands: when one of these is aimed at a credential file, the
|
|
107
|
+
// file's bytes land in the agent's tool output.
|
|
108
|
+
const READ_COMMANDS = new Set([
|
|
109
|
+
"cat",
|
|
110
|
+
"tac",
|
|
111
|
+
"type",
|
|
112
|
+
"gc",
|
|
113
|
+
"get-content",
|
|
114
|
+
"less",
|
|
115
|
+
"more",
|
|
116
|
+
"head",
|
|
117
|
+
"tail",
|
|
118
|
+
"bat",
|
|
119
|
+
"nl",
|
|
120
|
+
"xxd",
|
|
121
|
+
"od",
|
|
122
|
+
"strings",
|
|
123
|
+
]);
|
|
124
|
+
|
|
125
|
+
// Commands whose job is to print a value into output — the exfil surface for a
|
|
126
|
+
// secret env var (a tool that merely CONSUMES `$API_KEY` does not echo it).
|
|
127
|
+
const PRINT_COMMANDS = new Set([
|
|
128
|
+
"echo",
|
|
129
|
+
"echo.",
|
|
130
|
+
"print",
|
|
131
|
+
"printf",
|
|
132
|
+
"printenv",
|
|
133
|
+
"write-host",
|
|
134
|
+
"write-output",
|
|
135
|
+
"write-information",
|
|
136
|
+
]);
|
|
137
|
+
|
|
138
|
+
// A var name looks secret when one of these words appears as an underscore- or
|
|
139
|
+
// boundary-delimited segment: ANTHROPIC_API_KEY, AWS_SECRET_ACCESS_KEY,
|
|
140
|
+
// GITHUB_TOKEN, DB_PASSWORD, MY_PASSPHRASE, OPENAI_APIKEY. `MONKEY`/`KEYBOARD`/
|
|
141
|
+
// `TOKENIZER` do NOT match (no boundary).
|
|
142
|
+
const SECRET_VAR_RE =
|
|
143
|
+
/(?:^|_)(KEY|KEYS|TOKEN|SECRET|SECRETS|PASSWORD|PASSWD|PASSPHRASE|CREDENTIAL|CREDENTIALS|PRIVATE|APIKEY|ACCESSKEY)(?:_|$)/i;
|
|
144
|
+
|
|
145
|
+
// Ways a secret var is referenced inside a shell segment.
|
|
146
|
+
const SECRET_REF_PATTERNS = [
|
|
147
|
+
/\$env:([A-Za-z_][A-Za-z0-9_]*)/gi, // PowerShell $env:NAME
|
|
148
|
+
/(?:^|[\s"'(=;|&])env:([A-Za-z_][A-Za-z0-9_]*)/gi, // PowerShell `env:` drive (Get-Content env:NAME)
|
|
149
|
+
/\$\{([A-Za-z_][A-Za-z0-9_]*)\}/g, // ${NAME}
|
|
150
|
+
/\$([A-Za-z_][A-Za-z0-9_]*)/g, // $NAME
|
|
151
|
+
/%([A-Za-z_][A-Za-z0-9_]*)%/g, // %NAME% (cmd.exe)
|
|
152
|
+
];
|
|
153
|
+
|
|
154
|
+
function referencedSecretVars(segment) {
|
|
155
|
+
const out = [];
|
|
156
|
+
for (const re of SECRET_REF_PATTERNS) {
|
|
157
|
+
re.lastIndex = 0;
|
|
158
|
+
let m;
|
|
159
|
+
while ((m = re.exec(segment))) {
|
|
160
|
+
if (SECRET_VAR_RE.test(m[1])) out.push(m[1]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return out;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function baseName(tok) {
|
|
167
|
+
const b =
|
|
168
|
+
String(tok || "")
|
|
169
|
+
.replace(/\\/g, "/")
|
|
170
|
+
.split("/")
|
|
171
|
+
.pop() || "";
|
|
172
|
+
return b.replace(/\.exe$/i, "");
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function firstCommandToken(segment) {
|
|
176
|
+
const m = segment
|
|
177
|
+
.trim()
|
|
178
|
+
.replace(/^["']/, "")
|
|
179
|
+
.match(/^(\S+)/);
|
|
180
|
+
return m ? baseName(m[1]).toLowerCase() : "";
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Does this (possibly compound) shell command read a credential file or print a
|
|
185
|
+
* secret environment variable?
|
|
186
|
+
* @param {string} command
|
|
187
|
+
* @returns {{reason:string, kind:string, target?:string, segment:string}|null}
|
|
188
|
+
*/
|
|
189
|
+
export function commandReadsCredentials(command) {
|
|
190
|
+
const cmd = String(command || "");
|
|
191
|
+
if (!cmd.trim()) return null;
|
|
192
|
+
let segments;
|
|
193
|
+
try {
|
|
194
|
+
segments = splitCommandSegments(cmd);
|
|
195
|
+
} catch {
|
|
196
|
+
segments = [cmd];
|
|
197
|
+
}
|
|
198
|
+
if (!segments.length) segments = [cmd];
|
|
199
|
+
|
|
200
|
+
for (const segment of segments) {
|
|
201
|
+
const seg = String(segment || "");
|
|
202
|
+
if (!seg.trim()) continue;
|
|
203
|
+
const first = firstCommandToken(seg);
|
|
204
|
+
// Backslash-preserving split (the policy's escaping tokenizer would mangle
|
|
205
|
+
// Windows paths); quotes flattened so grouping doesn't hide a token —
|
|
206
|
+
// credentialFileReason keys off the basename, which survives the split.
|
|
207
|
+
const rawTokens = seg.replace(/["']/g, " ").split(/\s+/).filter(Boolean);
|
|
208
|
+
const args = rawTokens.slice(1);
|
|
209
|
+
const nonFlagArgs = args.filter((t) => !t.startsWith("-"));
|
|
210
|
+
|
|
211
|
+
// (a) full-environment dump — printenv/env with no var, or PowerShell
|
|
212
|
+
// `Get-ChildItem env:` family. Reveals EVERY secret at once.
|
|
213
|
+
if (
|
|
214
|
+
((first === "printenv" || first === "env") && nonFlagArgs.length === 0) ||
|
|
215
|
+
(["get-childitem", "gci", "dir", "ls"].includes(first) &&
|
|
216
|
+
args.some((t) => /^env:?$/i.test(t)))
|
|
217
|
+
) {
|
|
218
|
+
return {
|
|
219
|
+
reason: "dumps all environment variables (may expose secrets)",
|
|
220
|
+
kind: "env-dump",
|
|
221
|
+
segment: seg,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// (b) reading a credential file with a content-reader command.
|
|
226
|
+
if (READ_COMMANDS.has(first)) {
|
|
227
|
+
for (const tok of args) {
|
|
228
|
+
const r = credentialFileReason(tok);
|
|
229
|
+
if (r)
|
|
230
|
+
return {
|
|
231
|
+
reason: `reads ${r}`,
|
|
232
|
+
kind: "file",
|
|
233
|
+
target: tok,
|
|
234
|
+
segment: seg,
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
// (c) printing / reading a secret-looking env var (via $VAR / %VAR% / env:).
|
|
240
|
+
if (PRINT_COMMANDS.has(first) || READ_COMMANDS.has(first)) {
|
|
241
|
+
const vars = referencedSecretVars(seg);
|
|
242
|
+
if (vars.length)
|
|
243
|
+
return {
|
|
244
|
+
reason: `reads secret environment variable ${vars[0]}`,
|
|
245
|
+
kind: "env-var",
|
|
246
|
+
target: vars[0],
|
|
247
|
+
segment: seg,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
// (d) `printenv ANTHROPIC_API_KEY` — bare var name (no $ sigil).
|
|
252
|
+
if (first === "printenv") {
|
|
253
|
+
const hit = nonFlagArgs.find((t) => SECRET_VAR_RE.test(t));
|
|
254
|
+
if (hit)
|
|
255
|
+
return {
|
|
256
|
+
reason: `reads secret environment variable ${hit}`,
|
|
257
|
+
kind: "env-var",
|
|
258
|
+
target: hit,
|
|
259
|
+
segment: seg,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
return null;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Whether the credential guard is disabled via `CC_CREDENTIAL_GUARD`
|
|
268
|
+
* (0 / false / no / off). Default ON — only an explicit opt-out turns it off.
|
|
269
|
+
* @param {object} [env=process.env]
|
|
270
|
+
* @returns {boolean}
|
|
271
|
+
*/
|
|
272
|
+
export function credentialGuardDisabled(env = process.env) {
|
|
273
|
+
const raw = env && env.CC_CREDENTIAL_GUARD;
|
|
274
|
+
return raw != null && /^(0|false|no|off)$/i.test(String(raw).trim());
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
export const _internals = {
|
|
278
|
+
CREDENTIAL_BASENAMES,
|
|
279
|
+
READ_COMMANDS,
|
|
280
|
+
PRINT_COMMANDS,
|
|
281
|
+
SECRET_VAR_RE,
|
|
282
|
+
referencedSecretVars,
|
|
283
|
+
isEnvSecret,
|
|
284
|
+
};
|
package/src/lib/ensure-utf8.js
CHANGED
|
@@ -45,8 +45,14 @@ export function ensureUtf8() {
|
|
|
45
45
|
export function getUtf8SpawnOptions(opts = {}) {
|
|
46
46
|
if (process.platform !== "win32") return { encoding: "utf-8", ...opts };
|
|
47
47
|
|
|
48
|
+
// NOTE: spread `...opts` BEFORE the `env` key so the merged UTF-8 env wins.
|
|
49
|
+
// If `...opts` came last, a caller passing `opts.env` would clobber the whole
|
|
50
|
+
// merge (losing process.env + PYTHONIOENCODING + CHCP) — silently defeating
|
|
51
|
+
// the entire point of this helper. opts.env is still merged in last *within*
|
|
52
|
+
// the env object so caller overrides for individual vars are honored.
|
|
48
53
|
return {
|
|
49
54
|
encoding: "utf-8",
|
|
55
|
+
...opts,
|
|
50
56
|
env: {
|
|
51
57
|
...process.env,
|
|
52
58
|
PYTHONIOENCODING: "utf-8",
|
|
@@ -54,6 +60,5 @@ export function getUtf8SpawnOptions(opts = {}) {
|
|
|
54
60
|
CHCP: "65001",
|
|
55
61
|
...opts.env,
|
|
56
62
|
},
|
|
57
|
-
...opts,
|
|
58
63
|
};
|
|
59
64
|
}
|
package/src/lib/hook-manager.js
CHANGED
|
@@ -208,7 +208,7 @@ export function getHook(db, hookId) {
|
|
|
208
208
|
* Compile a matcher pattern into a test function.
|
|
209
209
|
* Supports:
|
|
210
210
|
* - null/undefined → matches everything
|
|
211
|
-
* - Pipe-separated patterns: "Edit|Write"
|
|
211
|
+
* - Pipe- OR comma-separated patterns: "Edit|Write" / "Bash,PowerShell"
|
|
212
212
|
* - Wildcards: "*" matches any chars, "?" matches one char
|
|
213
213
|
* - Regex strings starting with "/": "/^Pre/" matches "PreIPCCall"
|
|
214
214
|
*/
|
|
@@ -230,11 +230,20 @@ export function compileMatcher(pattern) {
|
|
|
230
230
|
}
|
|
231
231
|
}
|
|
232
232
|
|
|
233
|
-
//
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
233
|
+
// OR-separated alternatives: pipe "Edit|Write" AND comma "Bash,PowerShell"
|
|
234
|
+
// (Claude-Code 2.1.191: comma-separated matchers silently never fired). Empty
|
|
235
|
+
// segments (trailing "Bash," / "Edit|") are dropped so they cannot collapse
|
|
236
|
+
// into a match-everything matcher. Regex "/…/" matchers are handled above, so
|
|
237
|
+
// a comma inside "{1,3}" is never split here.
|
|
238
|
+
if (pattern.includes("|") || pattern.includes(",")) {
|
|
239
|
+
const matchers = pattern
|
|
240
|
+
.split(/[|,]/)
|
|
241
|
+
.map((p) => p.trim())
|
|
242
|
+
.filter(Boolean)
|
|
243
|
+
.map((p) => compileMatcher(p));
|
|
244
|
+
return matchers.length
|
|
245
|
+
? (value) => matchers.some((m) => m(value))
|
|
246
|
+
: () => false;
|
|
238
247
|
}
|
|
239
248
|
|
|
240
249
|
// Wildcard pattern (* and ?)
|