chainlesschain 0.166.79 → 0.166.81
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/README.md +8 -8
- package/package.json +2 -2
- package/src/assets/linux-subreaper/linux-arm64/manifest.json +1 -1
- package/src/assets/linux-subreaper/linux-x64/manifest.json +1 -1
- package/src/assets/web-panel/assets/{AIOps-CwD6Pm_Y.js → AIOps-BZPs-bVl.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Du5Rp-O6.js → ActionButton-BP1iLSwn.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-DY9l72ma.js → Analytics-WxwtPqcd.js} +2 -2
- package/src/assets/web-panel/assets/{AppLayout-7t1WIaCJ.js → AppLayout-DvcgeNkP.js} +5 -5
- package/src/assets/web-panel/assets/{Artifacts-BLIA5yny.js → Artifacts-CtYGOtnT.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-BC_N0QTg.js → Audit-BBzFYWMk.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-CA7SxDtg.js → BackgroundAgents-Dl9wCt0Y.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-BZ4AzS1_.js → Backup-CAL13Eak.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-BhiggGaH.js → BaseInput-f_lncpU_.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-CDdBoIBI.js → Chat-DLEbkiqI.js} +5 -5
- package/src/assets/web-panel/assets/ChatBubbleRenderer-1tCmIvv1.js +1 -0
- package/src/assets/web-panel/assets/{Checkbox-asoMKSEK.js → Checkbox-SNvgd2UG.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B0gElLdm.js → Codegen-BG0D-INl.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DrNzLpF6.js → Col-DUBBZz0e.js} +1 -1
- package/src/assets/web-panel/assets/{Community-DCzB5qkI.js → Community-8LfuBDPs.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-Db-Eua_j.js → Compact-GWs7Ka6o.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-B76NByjl.js → Compliance-CXRhB-KC.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C-nK6Qpk.js → Cowork-OpW8dLKg.js} +2 -2
- package/src/assets/web-panel/assets/{Cron-C-GlQO19.js → Cron-6e47Syc_.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-Cuuz9IIh.js → Crosschain-D-vGH4nC.js} +1 -1
- package/src/assets/web-panel/assets/{DID-gwFaT973.js → DID-zEIa2jNx.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-DHDt5jEf.js → Dashboard-BfUbZxsl.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-CJ9kog-Y.js → Dropdown-BeCD8gf0.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-DOSXFRiQ.js → EmailListRenderer-apOBM2r2.js} +1 -1
- package/src/assets/web-panel/assets/{EvolutionSettings-CHYMP7rR.js → EvolutionSettings-C2dK36po.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-C1gzG5EK.js → FamilyGuardDashboard-DPMLWPTR.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-CEdNVWUw.js → Federation-CivI2pzm.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CwVOWPX8.js → FormItemContext-B3zrwBDw.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-CgNUs3kT.js → GenericCardRenderer-jGgdcPck.js} +1 -1
- package/src/assets/web-panel/assets/{Git-DM4MNnQo.js → Git-Cpfkrasd.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-DdOtjkvd.js → Governance-DG8_7YS3.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-28PidFfr.js → Inference-TQgUqPXx.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-Bpj_qNUK.js → KnowledgeGraph-By657fHZ.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-C6Ix19Ay.js → Logs-CFJ_70-E.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-Bj6mtPbf.js → MarkdownRenderer-BpRWpN1E.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DqkhRSMP.js → Marketplace-BWC3xler.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-1WQ2SjaE.js → McpTools-B0NkUzeJ.js} +3 -3
- package/src/assets/web-panel/assets/{Memory-BWTi7v6R.js → Memory-DBnXwjWD.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-DB4wu3UE.js → MobileBridge-BNWDrEJ4.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-Bh9pWx2f.js → MobileProjects-BaE94B_N.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BVF1Wrno.js → Mtc-Bp3OAEYb.js} +5 -5
- package/src/assets/web-panel/assets/{MtcAudit-DtNfslPf.js → MtcAudit-_1T24zO3.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-4qcXP0bf.js → Multisig-C2i6Yi0B.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BRJl5Ehw.js → NLProgramming-CBq3ujGE.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-BRY_bgMk.js → Notes-BxRmci_W.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-DirXMFz4.js → NotificationSettings-CqBLgOdv.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-BlrY8lwu.js → OrderTableRenderer-cODPlpK7.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-CVzQ1vO-.js → Organization-DlTnQBlp.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-A3rXTPG4.js → Overflow-Df2jS2Ep.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-Db9ABWz0.js → P2P-BwieT0aA.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CPv0H2OZ.js → PdhVaultBrowser-Btw816xR.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-COnW4sIR.js → Permissions-BhVYLcqT.js} +3 -3
- package/src/assets/web-panel/assets/{PersonalDataHub-C1hG7rp7.js → PersonalDataHub-CPbNKPCA.js} +3 -3
- package/src/assets/web-panel/assets/{Pipeline---GLRDEe.js → Pipeline-B1BuhoY3.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-aaN9R3Lu.js → Privacy-BWeikVbU.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-C-kw49hE.js → ProjectInit-BVXcimHE.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-y5tTkBTC.js → ProjectSettings-CX87x3rT.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-DZHlhyPB.js → Projects-3Qo2Mvxb.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-LqxnV72o.js → Providers-CGm0Wuer.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-D_q-Y5F0.js → QrScannerModal-DJxv7J64.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-_E_KB5o8.js → QuickAsk-DOXBReRk.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-BN8S5WJA.js → Recommend--MiLwmLM.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-BFzrY_aW.js → RemoteSession-D6LoXH94.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-C1HCLaTV.js → Reputation-G2jToiqh.js} +1 -1
- package/src/assets/web-panel/assets/{Row-B8T2-Qv7.js → Row-B79ZV_lZ.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CNQLk8v1.js → RssFeed-CHQN68w_.js} +2 -2
- package/src/assets/web-panel/assets/{Search-BOx720Kc.js → Search-j7v5S2Fa.js} +1 -1
- package/src/assets/web-panel/assets/{Security-Ds8z6PF6.js → Security-B2ykFZJH.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C0-YkRSF.js → Services-H8BK8uX0.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-DUHlSySD.js → Skeleton-XEUUrOTK.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-C8CBbbh0.js → Skills-B387UJPk.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-lQltyYfB.js → Sla-CWWBujpe.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-B5vyOma-.js → SpeechSettings-Q2AOv9DV.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-BKDPu_y-.js → SyncSettings-OSNyOUr8.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-Bgvf7LTx.js → Tasks-DfUDrno5.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BMZyYYS7.js → Templates-CSTkzDRS.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-7PYTig8f.js → Tenant-BR__gCTG.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-C2W0LMdR.js → Terminal-Bv4DM5OI.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-CqREew_l.js → TimelineRenderer-DUnZuAtn.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-BhTyxTuD.js → Tokens-Dm0sczRV.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-DxNSSZy_.js → Trigger-DsSOp0Ob.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-Dy_wfbIh.js → Trust-C0HJtFwV.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-DJC5ANqx.js → UkeySign-BbqIZiX-.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-CNFevrO4.js → VideoEditing-D7dDTt3D.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CXzuS1YK.js → Wallet-DJGu0KWq.js} +2 -2
- package/src/assets/web-panel/assets/{WebAuthn-BWS6HP8c.js → WebAuthn-x8OoogZU.js} +3 -3
- package/src/assets/web-panel/assets/{WorkflowEditor-swiN_7Vj.js → WorkflowEditor-CC3jIUqx.js} +1 -1
- package/src/assets/web-panel/assets/{chat-NwH7qlBs.js → chat-Bqgv5oe8.js} +1 -1
- package/src/assets/web-panel/assets/{colors-h6nRhBTw.js → colors-CbAMqLFr.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BQ6B6rP2.js → compact-item-B-zIDFg3.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-CQkJuRcG.js → createContext-D_s1ZLtZ.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-QMSC9xgn.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-Diwl1WyI.js → hasIn-Cj_J9Eb9.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3QgcUBV.js → index-0je3TLmx.js} +1 -1
- package/src/assets/web-panel/assets/{index-DQYZa1Ci.js → index-3o8DjHHt.js} +1 -1
- package/src/assets/web-panel/assets/{index-D_HY0nyN.js → index-B6qoyCkx.js} +1 -1
- package/src/assets/web-panel/assets/{index-pYwYBVeQ.js → index-BFNO6ycz.js} +1 -1
- package/src/assets/web-panel/assets/{index-CatBQDSQ.js → index-BGxI_Qxg.js} +1 -1
- package/src/assets/web-panel/assets/{index-BheCvudN.js → index-BLwUCYDf.js} +1 -1
- package/src/assets/web-panel/assets/{index-DjB8IC9D.js → index-BN5sO3kL.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcKDUGYf.js → index-BPdH-XTd.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRl3KUj0.js → index-Bi1E5h9V.js} +1 -1
- package/src/assets/web-panel/assets/{index-CqH-oOR3.js → index-BivQyKes.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYYb8oeV.js → index-BjfpW5s3.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bs6HyCfP.js → index-BtJzqXCQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da8frO_A.js → index-Bw88Mk2t.js} +1 -1
- package/src/assets/web-panel/assets/{index-DKaB4xTf.js → index-C-Z13SCI.js} +1 -1
- package/src/assets/web-panel/assets/{index-C7-T-u0L.js → index-C6bAvixK.js} +3 -3
- package/src/assets/web-panel/assets/{index-D5P498Rk.js → index-C6lO24YD.js} +1 -1
- package/src/assets/web-panel/assets/{index-BnQUin2K.js → index-CD_A-N7c.js} +1 -1
- package/src/assets/web-panel/assets/{index-mxxZtsHp.js → index-CSzWODfj.js} +1 -1
- package/src/assets/web-panel/assets/{index-BjcARUtr.js → index-CVPI_iIh.js} +1 -1
- package/src/assets/web-panel/assets/{index-BvPz6vZ8.js → index-Cg0oYTy5.js} +1 -1
- package/src/assets/web-panel/assets/{index-AzeSQJDK.js → index-CsHTqPTg.js} +1 -1
- package/src/assets/web-panel/assets/{index-CRWpixu2.js → index-Cu3FtpNc.js} +1 -1
- package/src/assets/web-panel/assets/{index-C3Ye1ISy.js → index-Cy3XOp7S.js} +1 -1
- package/src/assets/web-panel/assets/{index-CwsoVDi-.js → index-Cz0blpuN.js} +1 -1
- package/src/assets/web-panel/assets/{index-TYMmUsxZ.js → index-D1t2IqNU.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5gj_uCC.js → index-D9CqHOgd.js} +1 -1
- package/src/assets/web-panel/assets/{index-GTefQSbY.js → index-DVjFV2mg.js} +1 -1
- package/src/assets/web-panel/assets/index-DVq7UuW0.js +1 -0
- package/src/assets/web-panel/assets/index-DYVepsIV.js +1 -0
- package/src/assets/web-panel/assets/{index-DZ9CNcbJ.js → index-D_igPAXH.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dwpthe2b.js → index-DtplHZ5o.js} +1 -1
- package/src/assets/web-panel/assets/{index-iHNOr_wL.js → index-DuqVIsHL.js} +1 -1
- package/src/assets/web-panel/assets/{index-CyBtEVLM.js → index-J4JLWUMK.js} +1 -1
- package/src/assets/web-panel/assets/{index-DZAsByy4.js → index-JdSkHz64.js} +1 -1
- package/src/assets/web-panel/assets/{index-Fm95dO4u.js → index-KY7udrs-.js} +1 -1
- package/src/assets/web-panel/assets/{index-0ZztPzIm.js → index-ab6FUgkq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BI3ALCgN.js → index-dg0JqQDA.js} +1 -1
- package/src/assets/web-panel/assets/{index-OEWSrqit.js → index-ggeC-_dR.js} +1 -1
- package/src/assets/web-panel/assets/{index-BcjlIMP9.js → index-nEWJobH4.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BeUrpC_H.js → initDefaultProps-DDIGXQ08.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CHW5EXt1.js → motion-97SXSYE4.js} +1 -1
- package/src/assets/web-panel/assets/{move-CWaoWJvF.js → move-CfDQMFRe.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-CEC6Us1u.js → mtc-parser-qLYCGwY8.js} +1 -1
- package/src/assets/web-panel/assets/{omit-1D-kP_Qj.js → omit-xVqy1mCI.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-CsS0myLl.js → pickAttrs-DCGlFyfv.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-bMThOvkI.js → placementArrow-DYgPuMk3.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-B72knbW8.js → responsiveObserve-7zUIdAWH.js} +1 -1
- package/src/assets/web-panel/assets/{slide-C3bI_2yy.js → slide-TyaiZlSh.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-0-FmcCAS.js → statusUtils-BPd13Fae.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DXUyqoWY.js → styleChecker-A44XGgQ0.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-BSSnL3f1.js → useFlexGapSupport-ZX5EUa8B.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-B0Cvvl0S.js → useFs-Sh_fBPqz.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-6D-d4WU5.js → usePersonalDataHub-DhR6Izei.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-zjIrlxT_.js → vnode-DC8g6oRh.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Hw7NEisu.js → zoom-DRjJmOwj.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +27 -1
- package/src/gateways/ws/ws-approval-gate.js +7 -0
- package/src/lib/agent-sandbox.js +18 -1
- package/src/lib/auto-mode-config.js +5 -0
- package/src/lib/plan-mode.js +15 -4
- package/src/lib/process-execution-broker/linux-generic-bwrap-runtime.js +2 -2
- package/src/lib/process-execution-broker/linux-open-flags.js +26 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +5 -9
- package/src/lib/sandbox-egress-authority-monitor.js +137 -0
- package/src/runtime/agent-core.js +176 -24
- package/src/assets/web-panel/assets/ChatBubbleRenderer-hsBsrl31.js +0 -1
- package/src/assets/web-panel/assets/devWarning-Bz6vqBGV.js +0 -1
- package/src/assets/web-panel/assets/index-1b7DEw-w.js +0 -1
- package/src/assets/web-panel/assets/index-CfD4tMuW.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as s}from"./index-
|
|
1
|
+
import{h as s}from"./index-C6bAvixK.js";function a(n,t){const e=s({},n);for(let o=0;o<t.length;o+=1){const r=t[o];delete e[r]}return e}export{a as o};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-C6bAvixK.js";const l=`accept acceptcharset accesskey action allowfullscreen allowtransparency
|
|
2
2
|
alt async autocomplete autofocus autoplay capture cellpadding cellspacing challenge
|
|
3
3
|
charset checked classid classname colspan cols content contenteditable contextmenu
|
|
4
4
|
controls coords crossorigin data datetime default defer dir disabled download draggable
|
package/src/assets/web-panel/assets/{placementArrow-bMThOvkI.js → placementArrow-DYgPuMk3.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as i}from"./index-
|
|
1
|
+
import{h as i}from"./index-C6bAvixK.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-B72knbW8.js → responsiveObserve-7zUIdAWH.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{J as o,h}from"./index-
|
|
1
|
+
import{J as o,h}from"./index-C6bAvixK.js";import{b as x}from"./vendor-Bn1JzzAn.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-C6bAvixK.js";import{i as e}from"./motion-97SXSYE4.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-C6bAvixK.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{B as d}from"./index-
|
|
1
|
+
import{B as d}from"./index-C6bAvixK.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-BSSnL3f1.js → useFlexGapSupport-ZX5EUa8B.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-
|
|
1
|
+
import{o,s as t}from"./vendor-Bn1JzzAn.js";import{d as s}from"./styleChecker-A44XGgQ0.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-C6bAvixK.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 v}from"./index-
|
|
1
|
+
import{u as v}from"./index-C6bAvixK.js";import{u as _}from"./useShellMode-CgR0wCYM.js";function d(r){if(!r)return r;if(r.error)throw new Error(r.error);return r.result!==void 0?r.result:r}async function p(r,s={},e=!0){try{if(e!==!0||!r||typeof r.sendRaw!="function")return{status:"unavailable",path:null};const a=await r.sendRaw({type:"fs.openDirectory",title:s.title},6e4);if(a&&(a.ok===!1||a.error))return{status:"unavailable",path:null};const t=a&&a.result!==void 0?a.result:a;return t&&(t.ok===!1||t.error||t.unsupported===!0)?{status:"unavailable",path:null}:t&&t.canceled===!0?{status:"cancelled",path:null}:t&&typeof t.path=="string"&&t.path.length>0?{status:"selected",path:t.path}:{status:"unavailable",path:null}}catch{return{status:"unavailable",path:null}}}function b(r,s,e,a,t){return typeof r.onMessage!="function"||typeof r.sendRaw!="function"?r.sendRaw({type:s,...e},t).then(d):new Promise((n,u)=>{const l=typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():`${Date.now()}-${Math.random().toString(36).slice(2)}`,w=`${s}.event`,m=`${s}.end`;let c=!1,h=()=>{};const o=(i,f)=>{if(!c){c=!0,clearTimeout(g);try{h()}catch{}i(f)}},g=setTimeout(()=>{o(u,new Error(`stream timeout (${t}ms): ${s}`))},t),y=r.onMessage(i=>{if(!(c||!i)&&!(i.id!==l&&i.requestId!==l)){if(i.type===w){if(typeof a=="function")try{a(i.event||i)}catch{}return}if(i.type===m){o(n,d(i));return}i.type==="error"&&o(u,new Error(i.message||"stream error"))}});h=typeof y=="function"?y:()=>{},Promise.resolve(r.sendRaw({id:l,type:s,...e},t)).catch(()=>{})})}function k(){const r=v(),s=_(),e=(a,t={},n=3e4)=>r.sendRaw({type:a,...t},n).then(d);return{async health(){return await e("personal-data-hub.health",{},8e3)},async stats(){return await e("personal-data-hub.stats",{},8e3)},async listAdapters(){return await e("personal-data-hub.list-adapters",{},5e3)},async pickFile(a={}){try{const t=await r.sendRaw({type:"fs.openDialog",title:a.title,filters:a.filters},6e4),n=t&&t.result!==void 0?t.result:t,u=n&&typeof n.path=="string"?n.path:n&&typeof n.filePath=="string"?n.filePath:null;return n&&n.canceled!==!0&&u?u:null}catch{return null}},async pickDirectoryResult(a={}){return await p(r,a,s.isEmbedded)},async pickDirectory(a={}){const t=await p(r,a,s.isEmbedded);return t.status==="selected"?t.path:null},async adapterReadiness(a){return await e("personal-data-hub.adapter-readiness",Number.isInteger(a)?{timeoutMs:a}:{},15e3)},async syncAdapter(a,t={}){return await e("personal-data-hub.sync-adapter",{name:a,options:t},6e5)},async syncAll(a={}){return await e("personal-data-hub.sync-all",{options:a},6e5)},async registerMock({name:a="mock",count:t=20,seed:n=1}={}){return await e("personal-data-hub.register-mock",{name:a,count:t,seed:n})},async unregister(a){return await e("personal-data-hub.unregister",{name:a})},async ask(a,t={}){return await e("personal-data-hub.ask",{question:a,options:t},18e4)},async queryEvents(a={}){return await e("personal-data-hub.query-events",a,1e4)},async recentAudit(a={}){return await e("personal-data-hub.recent-audit",a,1e4)},async searchEvents(a={}){return await e("personal-data-hub.search-events",a,15e3)},async facetCounts(a={}){return await e("personal-data-hub.facet-counts",a,1e4)},async testEmailAuth(a){return await e("personal-data-hub.test-email-auth",{account:a},3e4)},async registerEmail(a,t={}){return await e("personal-data-hub.register-email",{account:a,opts:t},15e3)},async unregisterEmail(a){return await e("personal-data-hub.unregister-email",{email:a},5e3)},async listEmailAccounts(){return await e("personal-data-hub.list-email-accounts",{},5e3)},async activateEmail(a){return await e("personal-data-hub.activate-email",{email:a},5e3)},async eventDetail(a){return await e("personal-data-hub.event-detail",{eventId:a},5e3)},async syncAdapterStream(a,t={},n){return await b(r,"personal-data-hub.sync-adapter-stream",{name:a,options:t},n,6e5)},async syncAllStream(a={},t){return await b(r,"personal-data-hub.sync-all-stream",{options:a},t,9e5)},async registerAlipay(a,t={}){return await e("personal-data-hub.register-alipay",{account:a,opts:t},15e3)},async unregisterAlipay(a){return await e("personal-data-hub.unregister-alipay",{email:a},5e3)},async listAlipayAccounts(){return await e("personal-data-hub.list-alipay-accounts",{},5e3)},async activateAlipay(a){return await e("personal-data-hub.activate-alipay",{email:a},5e3)},async importAlipayBill({zipPath:a,csvPath:t,zipPassword:n}={}){return await e("personal-data-hub.import-alipay-bill",{zipPath:a,csvPath:t,zipPassword:n},3e5)},async reviewQueueList(a=50){return await e("personal-data-hub.review-queue-list",{limit:a},5e3)},async reviewDecision(a,t){return await e("personal-data-hub.review-decision",{reviewId:a,decision:t},5e3)},async manualMerge(a,t){return await e("personal-data-hub.manual-merge",{aId:a,bId:t},5e3)},async manualUnmerge(a){return await e("personal-data-hub.manual-unmerge",{personId:a},5e3)},async resolverDrain(a=50){return await e("personal-data-hub.resolver-drain",{limit:a},18e4)},async resolverStats(){return await e("personal-data-hub.resolver-stats",{},5e3)},async skillsList(){return await e("personal-data-hub.skills-list",{},5e3)},async runSkill(a,t={}){return await e("personal-data-hub.run-skill",{name:a,options:t},12e4)},async openAichatLogin(a,t={}){return await e("personal-data-hub.aichat-open-login",{vendor:a,opts:t},1e4)},async probeAichatCookies(a,t){return await e("personal-data-hub.aichat-probe-cookies",{vendor:a,cookieHeader:t},1e4)},async registerAichatVendor(a,t,n={}){return await e("personal-data-hub.aichat-register-vendor",{vendor:a,cookies:t,opts:n},3e4)},async rotateAichatLogin(a){return await e("personal-data-hub.aichat-rotate-login",{vendor:a},1e4)},async listAichatAccounts(){return await e("personal-data-hub.list-aichat-accounts",{},5e3)},async unregisterAichat(a){return await e("personal-data-hub.unregister-aichat",{vendor:a},5e3)},async aichatHealthCheckOnce(){return await e("personal-data-hub.aichat-health-check-once",{},3e4)},async probeWechatEnv(){return await e("personal-data-hub.wechat-env-probe",{},15e3)},async registerWechat({account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l}={}){return await e("personal-data-hub.register-wechat",{account:a,dbPath:t,wechatDataPath:n,fridaOpts:u,keyProviderOverride:l},45e3)},async listWechatAccounts(){return await e("personal-data-hub.list-wechat-accounts",{},5e3)},async activateWechat(a,t={}){return await e("personal-data-hub.activate-wechat",{uin:a,fridaOpts:t.fridaOpts,keyProviderOverride:t.keyProviderOverride},45e3)},async unregisterWechat(a){return await e("personal-data-hub.unregister-wechat",{uin:a},5e3)},async bilibiliAdbSync(a={}){return await e("personal-data-hub.bilibili-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bilibiliAdbDoctor(){return await e("personal-data-hub.bilibili-adb-doctor",{},15e3)},async weiboAdbSync(a={}){return await e("personal-data-hub.weibo-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async xhsAdbSync(a={}){return await e("personal-data-hub.xhs-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)},async toutiaoAdbSync(a={}){return await e("personal-data-hub.toutiao-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},9e4)},async kuaishouAdbSync(a={}){return await e("personal-data-hub.kuaishou-adb-sync",{limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},12e4)},async bridgeDoctor(){return await e("personal-data-hub.bridge-doctor",{},6e4)},async douyinAdbSync(a={}){return await e("personal-data-hub.douyin-adb-sync",{uid:a.uid,limits:a.limits,stagingDir:a.stagingDir,displayName:a.displayName},6e4)}}}export{k as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{N as i,h as a,w as l}from"./index-
|
|
1
|
+
import{N as i,h as a,w as l}from"./index-C6bAvixK.js";import{a7 as o,k as g,C as d,F as f,A as p}from"./vendor-Bn1JzzAn.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 v(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,v as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{K as o}from"./index-
|
|
1
|
+
import{K as o}from"./index-C6bAvixK.js";import{i as f}from"./motion-97SXSYE4.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-C6bAvixK.js"></script>
|
|
12
12
|
<link rel="modulepreload" crossorigin href="./assets/vendor-Bn1JzzAn.js">
|
|
13
13
|
<link rel="modulepreload" crossorigin href="./assets/icons-DG5UD-6K.js">
|
|
14
14
|
<link rel="stylesheet" crossorigin href="./assets/index-Cq93VfoF.css">
|
package/src/data/changelog.json
CHANGED
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"source": "CHANGELOG.md",
|
|
3
3
|
"releases": [
|
|
4
|
+
{
|
|
5
|
+
"productVersion": null,
|
|
6
|
+
"cliVersion": "0.166.81",
|
|
7
|
+
"cliVersions": ["0.166.81"],
|
|
8
|
+
"date": null,
|
|
9
|
+
"title": "",
|
|
10
|
+
"sections": [
|
|
11
|
+
{
|
|
12
|
+
"heading": "Fixed - cc CLI 0.166.81: latch Plan and approval revisions during Docker egress",
|
|
13
|
+
"body": "- Bind Plan and ApprovalGate snapshots before the first asynchronous shell\n permission read. During a running Docker egress command, subscribe to their\n committed revisions and revoke the broker and target when authority changes.\n- Session Core 0.3.14 supplies the monotonic per-session ApprovalGate revision.\n This covers supported in-process policy updates; settings files, mutable host\n policy, Auto Mode state, and external writes still need a unified epoch.\n- Pair VS Code 0.37.123 and JetBrains 0.4.143 after the CLI's exact-commit\n release checks and public npm readback. JetBrains creates its Windows bridge\n lockfile with owner-only permissions before writing the bearer token."
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"productVersion": null,
|
|
19
|
+
"cliVersion": "0.166.80",
|
|
20
|
+
"cliVersions": ["0.166.80"],
|
|
21
|
+
"date": null,
|
|
22
|
+
"title": "",
|
|
23
|
+
"sections": [
|
|
24
|
+
{
|
|
25
|
+
"heading": "Fixed - cc CLI 0.166.80: revoke active Docker egress shells",
|
|
26
|
+
"body": "- Revalidate live shell and sandbox authority while a Docker egress command is\n running. A failed or timed-out check locks revocation, cuts the policy broker,\n closes the target container, and prevents a successful execution receipt.\n- Check authority again immediately before target start and receipt issuance;\n reject sessions delivered after revocation. A real Linux Docker probe checks\n tunnel closure, target termination, container cleanup, and rejected outcome.\n- This bounded poll does not provide a lossless policy revision subscription;\n a policy change reverted between checks remains outside its detection scope."
|
|
27
|
+
}
|
|
28
|
+
]
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"productVersion": null,
|
|
6
32
|
"cliVersion": "0.166.79",
|
|
@@ -10,7 +36,7 @@
|
|
|
10
36
|
"sections": [
|
|
11
37
|
{
|
|
12
38
|
"heading": "Added - cc CLI 0.166.79: opt-in Docker domain egress",
|
|
13
|
-
"body": "- Add an explicit Linux Docker egress engine for `run_shell`, with pinned target\n and relay images, a Unix-socket policy broker, target isolation verification,\n and a real product-path Docker probe.\n- Report an unknown execution outcome after target start or cleanup uncertainty\n without suggesting a safe automatic retry.
|
|
39
|
+
"body": "- Add an explicit Linux Docker egress engine for `run_shell`, with pinned target\n and relay images, a Unix-socket policy broker, target isolation verification,\n and a real product-path Docker probe.\n- Report an unknown execution outcome after target start or cleanup uncertainty\n without suggesting a safe automatic retry. Lossless policy-revision\n subscription remains under development."
|
|
14
40
|
}
|
|
15
41
|
]
|
|
16
42
|
},
|
|
@@ -261,6 +261,13 @@ export async function createWsApprovalGate({
|
|
|
261
261
|
getSessionPolicy: (sid) => inner.getSessionPolicy(sid || sessionId),
|
|
262
262
|
setSessionPolicy: (sid, policy) =>
|
|
263
263
|
inner.setSessionPolicy(sid || sessionId, policy),
|
|
264
|
+
getAuthorizationPolicySnapshot: (sid) =>
|
|
265
|
+
inner.getAuthorizationPolicySnapshot?.(sid || sessionId) || null,
|
|
266
|
+
subscribePolicyRevision:
|
|
267
|
+
typeof inner.subscribePolicyRevision === "function"
|
|
268
|
+
? (sid, listener) =>
|
|
269
|
+
inner.subscribePolicyRevision(sid || sessionId, listener)
|
|
270
|
+
: undefined,
|
|
264
271
|
beginTurn: (turnId) => ledgerState.ledger.beginTurn(turnId),
|
|
265
272
|
listGrants: () => ledgerState.ledger.listGrants(),
|
|
266
273
|
revokeGrant: (grantId) => {
|
package/src/lib/agent-sandbox.js
CHANGED
|
@@ -1130,6 +1130,14 @@ export async function executeDockerEgressShell(command, sandbox, options = {}) {
|
|
|
1130
1130
|
});
|
|
1131
1131
|
observedResult = result;
|
|
1132
1132
|
await session.close();
|
|
1133
|
+
try {
|
|
1134
|
+
// The final live-authority fence must run after cleanup and immediately
|
|
1135
|
+
// before the execution receipt is issued.
|
|
1136
|
+
await options.beforeReceipt?.();
|
|
1137
|
+
} catch (error) {
|
|
1138
|
+
authorityError = error;
|
|
1139
|
+
throw error;
|
|
1140
|
+
}
|
|
1133
1141
|
if (
|
|
1134
1142
|
!startAuthorized ||
|
|
1135
1143
|
!Number.isInteger(result?.exitCode) ||
|
|
@@ -1158,7 +1166,16 @@ export async function executeDockerEgressShell(command, sandbox, options = {}) {
|
|
|
1158
1166
|
error.cleanupError = cleanupError;
|
|
1159
1167
|
}
|
|
1160
1168
|
}
|
|
1161
|
-
if (authorityError)
|
|
1169
|
+
if (authorityError) {
|
|
1170
|
+
if (startAuthorized)
|
|
1171
|
+
return {
|
|
1172
|
+
...failure(),
|
|
1173
|
+
authorityFailure: {
|
|
1174
|
+
code: authorityError.code || "CC_DOCKER_EGRESS_AUTHORITY_CHANGED",
|
|
1175
|
+
},
|
|
1176
|
+
};
|
|
1177
|
+
throw authorityError;
|
|
1178
|
+
}
|
|
1162
1179
|
return failure();
|
|
1163
1180
|
}
|
|
1164
1181
|
}
|
|
@@ -356,6 +356,11 @@ export function createAutoModeApprovalGate(inner, resolved, opts = {}) {
|
|
|
356
356
|
}),
|
|
357
357
|
});
|
|
358
358
|
},
|
|
359
|
+
subscribePolicyRevision:
|
|
360
|
+
typeof inner?.subscribePolicyRevision === "function"
|
|
361
|
+
? (sessionId, listener) =>
|
|
362
|
+
inner.subscribePolicyRevision(sessionId, listener)
|
|
363
|
+
: undefined,
|
|
359
364
|
consumeAuthorization(authorization, ctx) {
|
|
360
365
|
if (typeof inner?.consumeAuthorization !== "function") {
|
|
361
366
|
throw new Error("Approval authorization consumer is unavailable");
|
package/src/lib/plan-mode.js
CHANGED
|
@@ -893,8 +893,8 @@ export class PlanModeManager extends EventEmitter {
|
|
|
893
893
|
}
|
|
894
894
|
|
|
895
895
|
_commitMutation(transaction, eventType) {
|
|
896
|
+
const previousRevision = this.revision;
|
|
896
897
|
if (!this._persistence) {
|
|
897
|
-
const previousRevision = this.revision;
|
|
898
898
|
this.revision += 1;
|
|
899
899
|
this.updatedAt = Date.now();
|
|
900
900
|
this.lastEvent = this.sessionId
|
|
@@ -906,6 +906,11 @@ export class PlanModeManager extends EventEmitter {
|
|
|
906
906
|
timestamp: this.updatedAt,
|
|
907
907
|
})
|
|
908
908
|
: null;
|
|
909
|
+
this.emit("revision-changed", {
|
|
910
|
+
revision: this.revision,
|
|
911
|
+
previousRevision,
|
|
912
|
+
type: eventType,
|
|
913
|
+
});
|
|
909
914
|
if (this.lastEvent) this.emit("session-event", { ...this.lastEvent });
|
|
910
915
|
return null;
|
|
911
916
|
}
|
|
@@ -920,6 +925,11 @@ export class PlanModeManager extends EventEmitter {
|
|
|
920
925
|
this.revision = snapshot.revision;
|
|
921
926
|
this.updatedAt = snapshot.updatedAt;
|
|
922
927
|
this.lastEvent = snapshot.event;
|
|
928
|
+
this.emit("revision-changed", {
|
|
929
|
+
revision: this.revision,
|
|
930
|
+
previousRevision,
|
|
931
|
+
type: eventType,
|
|
932
|
+
});
|
|
923
933
|
this.emit("session-event", { ...this.lastEvent });
|
|
924
934
|
return null;
|
|
925
935
|
} catch (error) {
|
|
@@ -1369,7 +1379,7 @@ export class PlanModeManager extends EventEmitter {
|
|
|
1369
1379
|
/**
|
|
1370
1380
|
* Check if a tool is allowed in current state
|
|
1371
1381
|
*/
|
|
1372
|
-
isToolAllowed(toolName) {
|
|
1382
|
+
isToolAllowed(toolName, { recordBlocked = true } = {}) {
|
|
1373
1383
|
if (!this.isActive()) return true;
|
|
1374
1384
|
if (
|
|
1375
1385
|
this.state === PlanState.APPROVED ||
|
|
@@ -1377,7 +1387,8 @@ export class PlanModeManager extends EventEmitter {
|
|
|
1377
1387
|
) {
|
|
1378
1388
|
const allowed =
|
|
1379
1389
|
this.executionLock?.allowedTools.includes(toolName) === true;
|
|
1380
|
-
if (!allowed
|
|
1390
|
+
if (!allowed && recordBlocked)
|
|
1391
|
+
this._recordBlockedTool(toolName, "execution-lock");
|
|
1381
1392
|
return allowed;
|
|
1382
1393
|
}
|
|
1383
1394
|
|
|
@@ -1386,7 +1397,7 @@ export class PlanModeManager extends EventEmitter {
|
|
|
1386
1397
|
|
|
1387
1398
|
// Block write tools and log
|
|
1388
1399
|
if (WRITE_TOOLS.has(toolName)) {
|
|
1389
|
-
this._recordBlockedTool(toolName, "planning");
|
|
1400
|
+
if (recordBlocked) this._recordBlockedTool(toolName, "planning");
|
|
1390
1401
|
return false;
|
|
1391
1402
|
}
|
|
1392
1403
|
|
|
@@ -21,13 +21,13 @@ import {
|
|
|
21
21
|
buildLinuxBwrapDescriptorScrubbedLaunch,
|
|
22
22
|
LINUX_BWRAP_DESCRIPTOR_SCRUBBER_PATH,
|
|
23
23
|
} from "./linux-bwrap-descriptor-launch.js";
|
|
24
|
+
import { linuxTmpfileFlag } from "./linux-open-flags.js";
|
|
24
25
|
|
|
25
26
|
const BWRAP_PATH = "/usr/bin/bwrap";
|
|
26
27
|
const MAX_ATTESTED_FILE_BYTES = 256 * 1024 * 1024;
|
|
27
28
|
const MAX_MOUNTINFO_BYTES = 4 * 1024 * 1024;
|
|
28
29
|
const MOUNTINFO_PATH = "/proc/self/mountinfo";
|
|
29
30
|
const MOUNT_TOPOLOGY_VERSION = 1;
|
|
30
|
-
const O_TMPFILE = 0x410000;
|
|
31
31
|
const SYSTEM_DESTINATIONS = [
|
|
32
32
|
"/usr",
|
|
33
33
|
"/bin",
|
|
@@ -1085,7 +1085,7 @@ function createTrustedResources(
|
|
|
1085
1085
|
const flags =
|
|
1086
1086
|
Number(constants.O_RDWR) |
|
|
1087
1087
|
Number(constants.O_EXCL) |
|
|
1088
|
-
|
|
1088
|
+
linuxTmpfileFlag(constants) |
|
|
1089
1089
|
Number(constants.O_NOFOLLOW || 0) |
|
|
1090
1090
|
Number(constants.O_NONBLOCK || 0);
|
|
1091
1091
|
const fd = track(runtime.fs.openSync("/tmp", flags, 0o400), phase);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Linux defines O_TMPFILE as __O_TMPFILE | O_DIRECTORY. O_DIRECTORY is
|
|
2
|
+
// architecture-specific (0x4000 on ARM64, 0x10000 on x64), while Node does
|
|
3
|
+
// not expose O_TMPFILE on every supported build.
|
|
4
|
+
const LINUX_ANONYMOUS_TMPFILE_BIT = 0x400000;
|
|
5
|
+
|
|
6
|
+
export function linuxTmpfileFlag(constants) {
|
|
7
|
+
const directoryFlag = constants?.O_DIRECTORY;
|
|
8
|
+
if (
|
|
9
|
+
!Number.isSafeInteger(directoryFlag) ||
|
|
10
|
+
directoryFlag <= 0 ||
|
|
11
|
+
(directoryFlag & (directoryFlag - 1)) !== 0
|
|
12
|
+
) {
|
|
13
|
+
throw new Error("linux_o_directory_unavailable");
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const fallbackFlag = LINUX_ANONYMOUS_TMPFILE_BIT | directoryFlag;
|
|
17
|
+
const tmpfileFlag = constants.O_TMPFILE ?? fallbackFlag;
|
|
18
|
+
if (
|
|
19
|
+
!Number.isSafeInteger(tmpfileFlag) ||
|
|
20
|
+
(tmpfileFlag & LINUX_ANONYMOUS_TMPFILE_BIT) === 0 ||
|
|
21
|
+
(tmpfileFlag & directoryFlag) !== directoryFlag
|
|
22
|
+
) {
|
|
23
|
+
throw new Error("linux_o_tmpfile_invalid");
|
|
24
|
+
}
|
|
25
|
+
return tmpfileFlag;
|
|
26
|
+
}
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
applyLinuxGenericWorkspaceSandbox,
|
|
34
34
|
isLinuxGenericWorkspaceContract,
|
|
35
35
|
} from "./linux-generic-bwrap-runtime.js";
|
|
36
|
+
import { linuxTmpfileFlag } from "./linux-open-flags.js";
|
|
36
37
|
import {
|
|
37
38
|
buildLinuxBwrapDescriptorScrubbedLaunch,
|
|
38
39
|
LINUX_BWRAP_DESCRIPTOR_SCRUBBER_PATH,
|
|
@@ -288,10 +289,7 @@ const LINUX_ELF_MACHINES = Object.freeze({
|
|
|
288
289
|
arm64: 183,
|
|
289
290
|
riscv64: 243,
|
|
290
291
|
});
|
|
291
|
-
//
|
|
292
|
-
// x64, arm64, and riscv64 use this value; unsupported seccomp architectures
|
|
293
|
-
// already fail closed before the anonymous filter is created.
|
|
294
|
-
const LINUX_O_TMPFILE = 0x410000;
|
|
292
|
+
// Anonymous snapshots and seccomp filters require the native O_TMPFILE flag.
|
|
295
293
|
const LINUX_CLONE_NEWNS = 0x00020000;
|
|
296
294
|
const LINUX_CLONE_NEWUSER = 0x10000000;
|
|
297
295
|
const LINUX_NAMESPACE_CLONE_FLAGS = LINUX_CLONE_NEWNS | LINUX_CLONE_NEWUSER;
|
|
@@ -2728,9 +2726,7 @@ function sameWindowsFileIdentity(left, right) {
|
|
|
2728
2726
|
// the deletion authority.
|
|
2729
2727
|
function sameWindowsFileObjectIdentity(left, right) {
|
|
2730
2728
|
return (
|
|
2731
|
-
left.dev === right.dev &&
|
|
2732
|
-
left.ino === right.ino &&
|
|
2733
|
-
left.mode === right.mode
|
|
2729
|
+
left.dev === right.dev && left.ino === right.ino && left.mode === right.mode
|
|
2734
2730
|
);
|
|
2735
2731
|
}
|
|
2736
2732
|
|
|
@@ -5853,7 +5849,7 @@ function createLinuxRegularFileSnapshot(
|
|
|
5853
5849
|
const writerFlags =
|
|
5854
5850
|
Number(constants.O_RDWR) |
|
|
5855
5851
|
Number(constants.O_EXCL) |
|
|
5856
|
-
|
|
5852
|
+
linuxTmpfileFlag(constants) |
|
|
5857
5853
|
Number(constants.O_NOFOLLOW || 0) |
|
|
5858
5854
|
Number(constants.O_NONBLOCK || 0);
|
|
5859
5855
|
writerFd = runtime.fs.openSync("/tmp", writerFlags, snapshotSourceMode);
|
|
@@ -7442,7 +7438,7 @@ function pinLinuxNetworkSeccompFilter(runtime, options = {}) {
|
|
|
7442
7438
|
const flags =
|
|
7443
7439
|
Number(constants.O_RDWR) |
|
|
7444
7440
|
Number(constants.O_EXCL) |
|
|
7445
|
-
|
|
7441
|
+
linuxTmpfileFlag(constants) |
|
|
7446
7442
|
Number(constants.O_NOFOLLOW || 0) |
|
|
7447
7443
|
Number(constants.O_NONBLOCK || 0);
|
|
7448
7444
|
// An anonymous inode avoids a same-UID process opening the filter by path.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recheck the live shell authority while a Docker egress session exists. This
|
|
3
|
+
* is a bounded poll, not a lossless revision subscription: changes that are
|
|
4
|
+
* reverted between checks cannot be observed.
|
|
5
|
+
*/
|
|
6
|
+
export function createDockerEgressAuthorityMonitor({
|
|
7
|
+
revalidate,
|
|
8
|
+
abortProxy,
|
|
9
|
+
intervalMs = 500,
|
|
10
|
+
checkTimeoutMs = 5_000,
|
|
11
|
+
}) {
|
|
12
|
+
if (typeof revalidate !== "function" || typeof abortProxy !== "function")
|
|
13
|
+
throw new TypeError("Docker egress authority callbacks are required");
|
|
14
|
+
let revoked = null;
|
|
15
|
+
let session = null;
|
|
16
|
+
let timer = null;
|
|
17
|
+
let checking = null;
|
|
18
|
+
let stopped = false;
|
|
19
|
+
const cleanupTasks = new Set();
|
|
20
|
+
|
|
21
|
+
function trackCleanup(operation) {
|
|
22
|
+
try {
|
|
23
|
+
const task = Promise.resolve(operation());
|
|
24
|
+
cleanupTasks.add(task);
|
|
25
|
+
void task.catch((error) => {
|
|
26
|
+
if (revoked && !revoked.cleanupError) revoked.cleanupError = error;
|
|
27
|
+
});
|
|
28
|
+
void task.finally(() => cleanupTasks.delete(task)).catch(() => {});
|
|
29
|
+
} catch (error) {
|
|
30
|
+
if (revoked && !revoked.cleanupError) revoked.cleanupError = error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function revoke(cause) {
|
|
35
|
+
if (revoked) return revoked;
|
|
36
|
+
revoked =
|
|
37
|
+
cause instanceof Error
|
|
38
|
+
? cause
|
|
39
|
+
: new Error("Docker egress authority was revoked");
|
|
40
|
+
if (!revoked.code) revoked.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
|
|
41
|
+
clearTimeout(timer);
|
|
42
|
+
// Latch first, then cut the broker before closing the target containers.
|
|
43
|
+
trackCleanup(abortProxy);
|
|
44
|
+
if (session) trackCleanup(() => session.close());
|
|
45
|
+
return revoked;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function assertAuthorized() {
|
|
49
|
+
if (revoked) throw revoked;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function attachSession(value) {
|
|
53
|
+
session = value;
|
|
54
|
+
if (revoked) {
|
|
55
|
+
trackCleanup(() => value.close());
|
|
56
|
+
throw revoked;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function checkNow() {
|
|
61
|
+
assertAuthorized();
|
|
62
|
+
if (checking) return checking;
|
|
63
|
+
let timeout;
|
|
64
|
+
const deadline = new Promise((_, reject) => {
|
|
65
|
+
timeout = setTimeout(() => {
|
|
66
|
+
reject(
|
|
67
|
+
Object.assign(new Error("Docker egress authority check timed out"), {
|
|
68
|
+
code: "CC_DOCKER_EGRESS_AUTHORITY_TIMEOUT",
|
|
69
|
+
}),
|
|
70
|
+
);
|
|
71
|
+
}, checkTimeoutMs);
|
|
72
|
+
timeout.unref?.();
|
|
73
|
+
});
|
|
74
|
+
const current = Promise.race([Promise.resolve().then(revalidate), deadline])
|
|
75
|
+
.then((accepted) => {
|
|
76
|
+
if (accepted === false)
|
|
77
|
+
throw new Error("Docker egress authority check rejected execution");
|
|
78
|
+
assertAuthorized();
|
|
79
|
+
})
|
|
80
|
+
.catch((error) => {
|
|
81
|
+
throw revoke(error);
|
|
82
|
+
})
|
|
83
|
+
.finally(() => {
|
|
84
|
+
clearTimeout(timeout);
|
|
85
|
+
if (checking === current) checking = null;
|
|
86
|
+
});
|
|
87
|
+
checking = current;
|
|
88
|
+
return current;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async function checkFresh() {
|
|
92
|
+
// A check already in flight may have sampled authority before a dispatch
|
|
93
|
+
// or receipt boundary. Drain it, then make a new observation.
|
|
94
|
+
if (checking) await checking;
|
|
95
|
+
assertAuthorized();
|
|
96
|
+
await checkNow();
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function schedule() {
|
|
100
|
+
if (stopped || revoked) return;
|
|
101
|
+
timer = setTimeout(async () => {
|
|
102
|
+
if (stopped || revoked) return;
|
|
103
|
+
try {
|
|
104
|
+
await checkNow();
|
|
105
|
+
} catch {
|
|
106
|
+
// revoke() already latched the error and started teardown.
|
|
107
|
+
}
|
|
108
|
+
schedule();
|
|
109
|
+
}, intervalMs);
|
|
110
|
+
timer.unref?.();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return {
|
|
114
|
+
get revocationError() {
|
|
115
|
+
return revoked;
|
|
116
|
+
},
|
|
117
|
+
start: schedule,
|
|
118
|
+
checkNow,
|
|
119
|
+
checkFresh,
|
|
120
|
+
assertAuthorized,
|
|
121
|
+
attachSession,
|
|
122
|
+
revoke,
|
|
123
|
+
async finish() {
|
|
124
|
+
stopped = true;
|
|
125
|
+
clearTimeout(timer);
|
|
126
|
+
await checkFresh();
|
|
127
|
+
assertAuthorized();
|
|
128
|
+
},
|
|
129
|
+
stop() {
|
|
130
|
+
stopped = true;
|
|
131
|
+
clearTimeout(timer);
|
|
132
|
+
},
|
|
133
|
+
async awaitCleanup() {
|
|
134
|
+
await Promise.allSettled([...cleanupTasks]);
|
|
135
|
+
},
|
|
136
|
+
};
|
|
137
|
+
}
|