chainlesschain 0.165.6 → 0.165.9
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 +2 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/{AIOps-vfoDb6HZ.js → AIOps-DxwjrnEA.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-Cm5f7p93.js → ActionButton-JdbYowzn.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-yRuvgWxa.js → Analytics-C06GCahv.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-BROsC4h1.js → AppLayout-BUVEEyi1.js} +4 -4
- package/src/assets/web-panel/assets/{Artifacts-CimHApb1.js → Artifacts-D_ORzkJd.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DI8kr8zI.js → Audit-8o_Y5ejG.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-DSLzKy-n.js → BackgroundAgents-DrkHd5VU.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-DkH_n2r1.js → Backup-CKBZCX11.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CKSrUoRA.js → BaseInput-C8HkI399.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-ClwfMXUS.js → Chat-zb2H2Wux.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-CjMaqfL7.js → ChatBubbleRenderer-BDcNpU_F.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BYTehcQG.js → Checkbox-MwPtQmNz.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-B8AMcp6J.js → Codegen-3p5QCkFK.js} +1 -1
- package/src/assets/web-panel/assets/{Col-BNSogPo3.js → Col-BPLlhn52.js} +1 -1
- package/src/assets/web-panel/assets/{Community-JxPvGb8O.js → Community-C-3dBNOM.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-DF7bFAgE.js → Compact-BUcy-F_b.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-Bvhqnwrq.js → Compliance-CI8NxT8m.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-BDS0CJvM.js → Cowork-DaDEBS-Q.js} +3 -3
- package/src/assets/web-panel/assets/{Cron-DqvRfxoQ.js → Cron-BSv9HXu5.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-CDcIvnqS.js → Crosschain-yuiKlJmv.js} +1 -1
- package/src/assets/web-panel/assets/{DID-D7jaUxU3.js → DID-D6LfldB0.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-B5A18wEV.js → Dashboard-CBhLqG61.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-_6IVkGag.js → Dropdown-BG8pIl3O.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-C9PeiKCG.js → EmailListRenderer-CY92VIE6.js} +1 -1
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DXjuEHrX.js → FamilyGuardDashboard-1Q_ehauM.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-B4IAR9zv.js → Federation-D3XirJIU.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-CxQeSNx1.js → FormItemContext-DfI9UuGZ.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-B8GS-Y3N.js → GenericCardRenderer-IeCZk2m7.js} +1 -1
- package/src/assets/web-panel/assets/{Git-BS8SouUX.js → Git-DzK4IJAZ.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-Dq9aYb5Q.js → Governance-BHf5KfmQ.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-BrCEe9AJ.js → Inference-BmaxSALS.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-DybOpiY2.js → KnowledgeGraph-BgePFLA9.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-DBpzbRfx.js → Logs-nqgxpOc4.js} +2 -2
- package/src/assets/web-panel/assets/MarkdownRenderer-xkX6izBt.js +1 -0
- package/src/assets/web-panel/assets/{Marketplace-Cc7CCSCu.js → Marketplace-Bu8to-86.js} +1 -1
- package/src/assets/web-panel/assets/McpTools-BFWTzEk0.js +4 -0
- package/src/assets/web-panel/assets/{Memory-KCqlp9ol.js → Memory-B026G2GA.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-Bys84ySN.js → MobileBridge-CM2Eeg6I.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-B-6qU-je.js → MobileProjects-B79Ob3hy.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-BgY-fvCq.js → Mtc-CxevSZuV.js} +4 -4
- package/src/assets/web-panel/assets/{MtcAudit-B8pCmqQJ.js → MtcAudit-X396cPEX.js} +4 -4
- package/src/assets/web-panel/assets/{Multisig-BbOmYutA.js → Multisig-HWIB_aZ1.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-BocLQz_M.js → NLProgramming-gnYD1Xwy.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CSwbxEop.js → Notes-Dn2Gf_J1.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-CqFNSYG3.js → NotificationSettings-BRKBQ5rq.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-C6gMfAk7.js → OrderTableRenderer-Dy___Cgo.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-QrDXVdMJ.js → Organization-cqfccxnt.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-Cxntotjt.js → Overflow-CSX4FHN3.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CIdBOwNq.js → P2P-Bwa4aghp.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-CT5aP8rD.js → PdhVaultBrowser-Dhszyjig.js} +3 -3
- package/src/assets/web-panel/assets/{Permissions-DH7OM8XU.js → Permissions-CXzTyk6e.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-CnJqbWce.js → PersonalDataHub-CFCAAJbb.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-5C3HG1kH.js → Pipeline-BPJbx6xt.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-B4yIp7xK.js → Privacy-BbiXvEHz.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-BMvt-2M0.js → ProjectInit-B-s7-wSD.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-CvSTEMRG.js → ProjectSettings-Dyug206y.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-BKBJxEek.js → Projects-BtAI5Fwo.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-BdwUqFWN.js → Providers-JpIPmz6N.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-DtnCKlTm.js → QrScannerModal-CZdoN64A.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-sTbgwyNr.js → QuickAsk-BwvnoRIT.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-Bzr14gSb.js → Recommend-ASMlMQrD.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-C_TF5IaJ.js → RemoteSession-BiJzKFKi.js} +3 -3
- package/src/assets/web-panel/assets/{Reputation-GCAM4H2K.js → Reputation-C80TWLIO.js} +1 -1
- package/src/assets/web-panel/assets/{Row-Dir0r6OQ.js → Row-C1VNmjmX.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-CpGnlecX.js → RssFeed-T2MyGUlG.js} +3 -3
- package/src/assets/web-panel/assets/{Search-DMMamC6u.js → Search-DXM6O83L.js} +1 -1
- package/src/assets/web-panel/assets/{Security-yqay5yG-.js → Security-nv69kU7W.js} +3 -3
- package/src/assets/web-panel/assets/{Services-C5i2wh9G.js → Services-AyHWe7Qj.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-vUqk35yj.js → Skeleton-D6PWLxFI.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DzcSkhot.js → Skills-BqVeOmNQ.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-CB6qbYNr.js → Sla-BegIPl9M.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-BHUI7cox.js → SpeechSettings-CKJn3xk-.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-D-RrsxTJ.js → SyncSettings-Th4cnAMl.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-DFxdOJiq.js → Tasks-BuKfBroh.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-SKAob_Aq.js → Templates-CMuWN8Ac.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BPfsfHQ-.js → Tenant-C4je8E8Q.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-8iw7FpUf.js → Terminal-agJESOcO.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-C4Gjj5Su.js → TimelineRenderer-D2qDuVZ_.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-COYhN18e.js → Tokens-Cvmn99rH.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-B-JzXcf6.js → Trigger-D_QYIHH8.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-BJ5bg0nI.js → Trust-BmzvQLnX.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-BG_ByRMf.js → UkeySign-D_LopHwH.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-B3kOnSiU.js → VideoEditing-DoWl3PhQ.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-CcoGFnK7.js → Wallet-5NYcAkxe.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-DdT8vRC_.js → WebAuthn-B-_Q3ewp.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-CZu3M9N8.js → WorkflowEditor-CHET-gi2.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DxJt3Qba.js → chat-C6nvb-n6.js} +1 -1
- package/src/assets/web-panel/assets/{colors-DdYfwJaB.js → colors-CTDE9LTX.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-BG3SUzwj.js → compact-item-KnemdF8D.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-By51z2-1.js → createContext-DUJR3Uek.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-1DqLH1KX.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-B0apZ3KJ.js → hasIn-CFNTaby8.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZxtP8jG7.js → index-65HO56Bv.js} +1 -1
- package/src/assets/web-panel/assets/{index-Da_WBdLX.js → index-B8RtbSkV.js} +1 -1
- package/src/assets/web-panel/assets/{index-BBPf3TpM.js → index-BHqSqnW7.js} +1 -1
- package/src/assets/web-panel/assets/{index-BP94CrBV.js → index-BTetEUWd.js} +1 -1
- package/src/assets/web-panel/assets/{index-p1_8SbI1.js → index-BXWg1crv.js} +1 -1
- package/src/assets/web-panel/assets/{index-BWF8_mkx.js → index-BdiC4LOs.js} +1 -1
- package/src/assets/web-panel/assets/index-BhJtcPWo.js +1 -0
- package/src/assets/web-panel/assets/{index-SQqOlR3d.js → index-BuizJo2E.js} +1 -1
- package/src/assets/web-panel/assets/{index-CpjZhgNd.js → index-BwZM1rod.js} +1 -1
- package/src/assets/web-panel/assets/{index-CzmQElZy.js → index-C96N9xeL.js} +1 -1
- package/src/assets/web-panel/assets/{index-bP_VlDb4.js → index-CHfUdnJH.js} +1 -1
- package/src/assets/web-panel/assets/{index-ZFbps9po.js → index-CKvBF3Ov.js} +1 -1
- package/src/assets/web-panel/assets/{index-DaIz0NAW.js → index-CSD9_I2_.js} +1 -1
- package/src/assets/web-panel/assets/{index-BewKYrX9.js → index-Cc7dbl_p.js} +1 -1
- package/src/assets/web-panel/assets/{index-CNIxXMmN.js → index-CcF0D7UZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Q2SCX-MI.js → index-Ceu92a8D.js} +1 -1
- package/src/assets/web-panel/assets/{index-DE76D-kA.js → index-CnLpuTAU.js} +1 -1
- package/src/assets/web-panel/assets/index-Cq8MWPDT.js +1 -0
- package/src/assets/web-panel/assets/{index-BkvcEo4p.js → index-CquKnw5r.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cp6e-hGw.js → index-CyEtHvEE.js} +1 -1
- package/src/assets/web-panel/assets/{index-BLIbGOLX.js → index-DF-fcTvQ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DCn8IcxV.js → index-DF1Y0Vuw.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bissefox.js → index-DJyPeBBk.js} +3 -3
- package/src/assets/web-panel/assets/{index-BZ_0qm4g.js → index-DP-PbO11.js} +1 -1
- package/src/assets/web-panel/assets/{index-kf57LJ93.js → index-DZgCRMxk.js} +1 -1
- package/src/assets/web-panel/assets/{index-BYINoRLK.js → index-DfJzS3Qa.js} +1 -1
- package/src/assets/web-panel/assets/{index-3jWkIu5j.js → index-DqPpJkte.js} +1 -1
- package/src/assets/web-panel/assets/{index-B5rLiEo0.js → index-DzReoLyh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CW93tZDv.js → index-JGTiDeOW.js} +1 -1
- package/src/assets/web-panel/assets/{index-C1C9i79A.js → index-NUR0If7O.js} +1 -1
- package/src/assets/web-panel/assets/{index-CAhHirVH.js → index-NtAcnJYW.js} +1 -1
- package/src/assets/web-panel/assets/{index-RD6O-0C6.js → index-OmuhFYKE.js} +1 -1
- package/src/assets/web-panel/assets/{index-oxRrmFO9.js → index-Wlc7o_C8.js} +1 -1
- package/src/assets/web-panel/assets/{index-B3rWuPMW.js → index-bxTPfdri.js} +1 -1
- package/src/assets/web-panel/assets/{index-BIrJfqO4.js → index-k6uorYmf.js} +1 -1
- package/src/assets/web-panel/assets/{index-BfWYsB9t.js → index-ox6mIwE2.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bos5_aMV.js → index-rVDD7AAR.js} +1 -1
- package/src/assets/web-panel/assets/{index-CWEuZWCK.js → index-u0h6QqVV.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dz49VOyQ.js → index-v-mtxmWH.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BWJktcg8.js → initDefaultProps-qEt8dI-t.js} +1 -1
- package/src/assets/web-panel/assets/{motion-BEXBzUFV.js → motion-DetKPWy-.js} +1 -1
- package/src/assets/web-panel/assets/{move-BUKwn2sx.js → move-BeNYeDV2.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-FTI7btqQ.js → mtc-parser-C0q0MK_T.js} +1 -1
- package/src/assets/web-panel/assets/{omit-CsLtSPH3.js → omit-DLKkrKpE.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DWZxsT_S.js → pickAttrs-Bw1tWsY8.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Bcfs43CX.js → placementArrow-DeesBLbd.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-a9bcC1p-.js → responsiveObserve-bqLhxHhn.js} +1 -1
- package/src/assets/web-panel/assets/{slide-BDTzgOXN.js → slide-DGCXRoQm.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-Iq1j_HUg.js → statusUtils-H-re3Egl.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-DAZEYxeh.js → styleChecker-BXg4qGX_.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-DVkjyDrh.js → useFlexGapSupport-CKLb2KA6.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-wXTpNTHt.js → useFs-CTAhHeyw.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-CtQM_aZr.js → usePersonalDataHub-BQ4pDh5g.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-hjEoG85v.js → vnode-jrSK6j4j.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-BHVpyKg_.js → zoom-fOQE24pw.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/command-help-index.json +3 -3
- package/src/commands/agent.js +91 -60
- package/src/commands/git.js +39 -0
- package/src/commands/plugin.js +17 -2
- package/src/commands/session-group.js +131 -0
- package/src/commands/session-location.js +48 -0
- package/src/commands/session.js +11 -0
- package/src/commands/sync-providers.js +4 -1
- package/src/commands/update.js +1 -0
- package/src/data/changelog.json +40 -1
- package/src/gateways/ws/mcp-topic-handlers.js +167 -0
- package/src/gateways/ws/ws-agent-handler.js +20 -12
- package/src/harness/jsonl-session-store.js +279 -37
- package/src/harness/mcp-client.js +701 -91
- package/src/harness/session-index.js +15 -4
- package/src/lib/agent-network.js +166 -29
- package/src/lib/agent-router.js +62 -6
- package/src/lib/agent-sandbox.js +7 -1
- package/src/lib/agent-worktree.js +8 -1
- package/src/lib/auto-mode-safety-classifier.js +3 -17
- package/src/lib/background-agent-keeper-protocol.js +26 -6
- package/src/lib/background-agent-supervisor.js +17 -1
- package/src/lib/browser-evidence.js +1405 -0
- package/src/lib/chrome-connector.js +465 -79
- package/src/lib/claude-code-bridge.js +159 -54
- package/src/lib/claude-project-auto-memory.js +481 -0
- package/src/lib/claude-project-storage-layout.js +104 -0
- package/src/lib/cloud/cloud-client.js +40 -0
- package/src/lib/cowork-workflow.js +69 -6
- package/src/lib/execution-location-local-supervisor.mjs +226 -0
- package/src/lib/execution-location-runner-lifecycle.js +991 -0
- package/src/lib/execution-location-target-preflight.js +333 -0
- package/src/lib/execution-location-target.js +783 -13
- package/src/lib/external-agent-adapters.js +269 -0
- package/src/lib/file-lines.js +6 -1
- package/src/lib/gateway-client-resilience.js +571 -0
- package/src/lib/gitlab-mr-worktree.js +176 -0
- package/src/lib/hooks-v2-producers.js +119 -15
- package/src/lib/hooks-v2-workspace-context.js +44 -1
- package/src/lib/host-resource-budget.js +295 -0
- package/src/lib/ide-context.js +15 -2
- package/src/lib/ipfs-storage.js +127 -25
- package/src/lib/llm-config-defaults.js +43 -0
- package/src/lib/mcp-lifecycle-authority.js +887 -0
- package/src/lib/mcp-oauth.js +101 -20
- package/src/lib/mcp-tls.js +103 -3
- package/src/lib/orchestrator.js +47 -0
- package/src/lib/paths.js +260 -32
- package/src/lib/permission-request.js +48 -0
- package/src/lib/plugin-runtime/bin.js +3 -1
- package/src/lib/plugin-runtime/hooks.js +3 -1
- package/src/lib/plugin-runtime/install.js +117 -1
- package/src/lib/plugin-runtime/lsp.js +4 -4
- package/src/lib/plugin-runtime/marketplace-archive-source.js +40 -5
- package/src/lib/plugin-runtime/marketplace-catalog.js +13 -2
- package/src/lib/plugin-runtime/marketplace-command-descriptor.js +343 -0
- package/src/lib/plugin-runtime/marketplace-command-source.js +580 -0
- package/src/lib/plugin-runtime/marketplace-source-adapter.js +33 -8
- package/src/lib/plugin-runtime/mcp.js +3 -1
- package/src/lib/plugin-runtime/monitors.js +3 -1
- package/src/lib/plugin-runtime/remote-source.js +151 -6
- package/src/lib/plugin-runtime/settings.js +3 -1
- package/src/lib/plugin-runtime/trust.js +274 -13
- package/src/lib/process-execution-broker/credential-agent.js +210 -41
- package/src/lib/process-execution-broker/index.js +15 -1
- package/src/lib/process-execution-broker/linux-cgroup-v2.js +391 -0
- package/src/lib/process-execution-broker/platform-sandbox.js +50 -28
- package/src/lib/project-mcp-trust.js +165 -10
- package/src/lib/resume-session.js +9 -6
- package/src/lib/session-core-singletons.js +26 -11
- package/src/lib/session-host-lease.js +52 -16
- package/src/lib/session-lifecycle-scope.js +153 -0
- package/src/lib/session-message-fabric.js +168 -21
- package/src/lib/session-projection.js +244 -4
- package/src/lib/session-store-guard.js +3 -1
- package/src/lib/session-workbench-store.js +466 -0
- package/src/lib/shell-approval.js +7 -5
- package/src/lib/spellcheck.js +211 -0
- package/src/lib/sub-agent-context.js +9 -9
- package/src/lib/sync-cli-db.js +485 -129
- package/src/lib/sync-credentials.js +31 -20
- package/src/lib/web-fetch.js +112 -40
- package/src/lib/web-search.js +127 -61
- package/src/lib/workflow-engine.js +42 -11
- package/src/lib/workspace-trust.js +793 -0
- package/src/repl/agent-repl.js +124 -5
- package/src/repl/permission-prompt.js +10 -12
- package/src/runtime/agent-core.js +311 -18
- package/src/runtime/agent-runtime.js +12 -1
- package/src/runtime/bootstrap.js +37 -13
- package/src/runtime/coding-agent-contract-shared.cjs +11 -4
- package/src/runtime/headless-runner.js +234 -36
- package/src/runtime/headless-stream.js +181 -6
- package/src/runtime/mcp-config.js +298 -8
- package/src/runtime/policies/agent-policy.js +8 -0
- package/src/runtime/status-diagnostics-lite.js +9 -1
- package/src/assets/web-panel/assets/MarkdownRenderer-CFyt8iUd.js +0 -1
- package/src/assets/web-panel/assets/McpTools-DFaIhOfu.js +0 -7
- package/src/assets/web-panel/assets/devWarning-DorRZcI9.js +0 -1
- package/src/assets/web-panel/assets/index-BETiL0a3.js +0 -1
- package/src/assets/web-panel/assets/index-BhAVHuW8.js +0 -1
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional cgroup v2 resource association for one broker-launched tool.
|
|
3
|
+
*
|
|
4
|
+
* A caller must explicitly supply a delegated cgroup root. This module never
|
|
5
|
+
* enables controllers on a parent cgroup; it creates only a uniquely named
|
|
6
|
+
* child below that explicit root. If memory is not already delegated, the
|
|
7
|
+
* feature is reported unavailable.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { randomUUID } from "node:crypto";
|
|
11
|
+
import path from "node:path";
|
|
12
|
+
|
|
13
|
+
export const LINUX_CGROUP_MODES = Object.freeze(["optional", "required"]);
|
|
14
|
+
|
|
15
|
+
function isRecord(value) {
|
|
16
|
+
return (
|
|
17
|
+
value !== null &&
|
|
18
|
+
typeof value === "object" &&
|
|
19
|
+
!Array.isArray(value) &&
|
|
20
|
+
(Object.getPrototypeOf(value) === Object.prototype ||
|
|
21
|
+
Object.getPrototypeOf(value) === null)
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function normalizePositiveInteger(field, value) {
|
|
26
|
+
const normalized = Number(value);
|
|
27
|
+
if (!Number.isSafeInteger(normalized) || normalized < 1) {
|
|
28
|
+
throw new TypeError(`invalid Linux cgroup policy: ${field}`);
|
|
29
|
+
}
|
|
30
|
+
return normalized;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function normalizeRoot(value) {
|
|
34
|
+
if (
|
|
35
|
+
typeof value !== "string" ||
|
|
36
|
+
value.length < 2 ||
|
|
37
|
+
value.includes("\0") ||
|
|
38
|
+
!path.posix.isAbsolute(value) ||
|
|
39
|
+
value.split("/").includes("..")
|
|
40
|
+
) {
|
|
41
|
+
throw new TypeError("invalid Linux cgroup policy: root");
|
|
42
|
+
}
|
|
43
|
+
const normalized = path.posix.normalize(value);
|
|
44
|
+
if (normalized === "/") {
|
|
45
|
+
throw new TypeError("invalid Linux cgroup policy: root");
|
|
46
|
+
}
|
|
47
|
+
return normalized.replace(/\/+$/, "");
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Validate the only cgroup settings that can cross the broker boundary.
|
|
52
|
+
* `memoryMaxBytes` is mandatory so an enabled policy always provides the
|
|
53
|
+
* P1-6 per-tool memory ceiling, not merely an audit label.
|
|
54
|
+
*/
|
|
55
|
+
export function normalizeLinuxCgroupPolicy(value) {
|
|
56
|
+
if (value === undefined || value === null) return null;
|
|
57
|
+
if (!isRecord(value)) {
|
|
58
|
+
throw new TypeError("invalid Linux cgroup policy");
|
|
59
|
+
}
|
|
60
|
+
const allowed = new Set([
|
|
61
|
+
"mode",
|
|
62
|
+
"root",
|
|
63
|
+
"memoryMaxBytes",
|
|
64
|
+
"memoryHighBytes",
|
|
65
|
+
"pidsMax",
|
|
66
|
+
"cpuQuotaMicros",
|
|
67
|
+
"cpuPeriodMicros",
|
|
68
|
+
]);
|
|
69
|
+
if (Object.keys(value).some((key) => !allowed.has(key))) {
|
|
70
|
+
throw new TypeError("invalid Linux cgroup policy field");
|
|
71
|
+
}
|
|
72
|
+
const mode = value.mode ?? "optional";
|
|
73
|
+
if (!LINUX_CGROUP_MODES.includes(mode)) {
|
|
74
|
+
throw new TypeError("invalid Linux cgroup policy: mode");
|
|
75
|
+
}
|
|
76
|
+
const memoryMaxBytes = normalizePositiveInteger(
|
|
77
|
+
"memoryMaxBytes",
|
|
78
|
+
value.memoryMaxBytes,
|
|
79
|
+
);
|
|
80
|
+
const memoryHighBytes =
|
|
81
|
+
value.memoryHighBytes === undefined || value.memoryHighBytes === null
|
|
82
|
+
? null
|
|
83
|
+
: normalizePositiveInteger("memoryHighBytes", value.memoryHighBytes);
|
|
84
|
+
if (memoryHighBytes !== null && memoryHighBytes > memoryMaxBytes) {
|
|
85
|
+
throw new TypeError(
|
|
86
|
+
"invalid Linux cgroup policy: memoryHighBytes exceeds memoryMaxBytes",
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
const pidsMax =
|
|
90
|
+
value.pidsMax === undefined || value.pidsMax === null
|
|
91
|
+
? null
|
|
92
|
+
: normalizePositiveInteger("pidsMax", value.pidsMax);
|
|
93
|
+
const cpuQuotaMicros =
|
|
94
|
+
value.cpuQuotaMicros === undefined || value.cpuQuotaMicros === null
|
|
95
|
+
? null
|
|
96
|
+
: normalizePositiveInteger("cpuQuotaMicros", value.cpuQuotaMicros);
|
|
97
|
+
const cpuPeriodMicros =
|
|
98
|
+
cpuQuotaMicros === null
|
|
99
|
+
? null
|
|
100
|
+
: value.cpuPeriodMicros === undefined || value.cpuPeriodMicros === null
|
|
101
|
+
? 100_000
|
|
102
|
+
: normalizePositiveInteger("cpuPeriodMicros", value.cpuPeriodMicros);
|
|
103
|
+
|
|
104
|
+
return Object.freeze({
|
|
105
|
+
mode,
|
|
106
|
+
root: normalizeRoot(value.root),
|
|
107
|
+
memoryMaxBytes,
|
|
108
|
+
memoryHighBytes,
|
|
109
|
+
pidsMax,
|
|
110
|
+
cpuQuotaMicros,
|
|
111
|
+
cpuPeriodMicros,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function requestedControllers(policy) {
|
|
116
|
+
const controllers = ["memory"];
|
|
117
|
+
if (policy.pidsMax !== null) controllers.push("pids");
|
|
118
|
+
if (policy.cpuQuotaMicros !== null) controllers.push("cpu");
|
|
119
|
+
return controllers;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function readControllerSet(fs, pathname) {
|
|
123
|
+
return new Set(
|
|
124
|
+
String(fs.readFileSync(pathname, "utf8") || "")
|
|
125
|
+
.trim()
|
|
126
|
+
.split(/\s+/)
|
|
127
|
+
.filter(Boolean),
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function unavailable(reason) {
|
|
132
|
+
return Object.freeze({ ok: false, reason });
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
function cgroupEvidence(policy, state, reason = null) {
|
|
136
|
+
return Object.freeze({
|
|
137
|
+
kind: "linux-cgroup-v2-tool-memory-v1",
|
|
138
|
+
mode: policy.mode,
|
|
139
|
+
state,
|
|
140
|
+
reason,
|
|
141
|
+
memoryMaxBytes: policy.memoryMaxBytes,
|
|
142
|
+
...(policy.memoryHighBytes !== null
|
|
143
|
+
? { memoryHighBytes: policy.memoryHighBytes }
|
|
144
|
+
: {}),
|
|
145
|
+
...(policy.pidsMax !== null ? { pidsMax: policy.pidsMax } : {}),
|
|
146
|
+
...(policy.cpuQuotaMicros !== null
|
|
147
|
+
? {
|
|
148
|
+
cpuQuotaMicros: policy.cpuQuotaMicros,
|
|
149
|
+
cpuPeriodMicros: policy.cpuPeriodMicros,
|
|
150
|
+
}
|
|
151
|
+
: {}),
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function removeChildCgroup(fs, cgroupPath) {
|
|
156
|
+
try {
|
|
157
|
+
fs.rmdirSync(cgroupPath);
|
|
158
|
+
return true;
|
|
159
|
+
} catch (error) {
|
|
160
|
+
// It is safe to retry at process exit. In particular, an already-attached
|
|
161
|
+
// child makes rmdir return EBUSY until the broker's exit fence fires.
|
|
162
|
+
return error?.code === "ENOENT";
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Pre-create and configure a child cgroup. Attaching a PID is deliberately a
|
|
168
|
+
* separate synchronous post-spawn step, because only child_process.spawn()
|
|
169
|
+
* knows the real tool PID. All failures are converted to stable availability
|
|
170
|
+
* reasons so a required policy can fail closed without exposing host paths.
|
|
171
|
+
*/
|
|
172
|
+
export function prepareLinuxCgroupV2(policyInput, runtime = {}) {
|
|
173
|
+
const policy = normalizeLinuxCgroupPolicy(policyInput);
|
|
174
|
+
if (!policy) return unavailable("linux_cgroup_not_configured");
|
|
175
|
+
if (runtime.platform !== "linux") {
|
|
176
|
+
return unavailable("linux_cgroup_platform_unavailable");
|
|
177
|
+
}
|
|
178
|
+
const fs = runtime.fs;
|
|
179
|
+
if (
|
|
180
|
+
!fs ||
|
|
181
|
+
typeof fs.readFileSync !== "function" ||
|
|
182
|
+
typeof fs.mkdirSync !== "function" ||
|
|
183
|
+
typeof fs.writeFileSync !== "function" ||
|
|
184
|
+
typeof fs.rmdirSync !== "function"
|
|
185
|
+
) {
|
|
186
|
+
return unavailable("linux_cgroup_runtime_unavailable");
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
const controllers = requestedControllers(policy);
|
|
190
|
+
let supported;
|
|
191
|
+
let delegated;
|
|
192
|
+
try {
|
|
193
|
+
supported = readControllerSet(
|
|
194
|
+
fs,
|
|
195
|
+
path.posix.join(policy.root, "cgroup.controllers"),
|
|
196
|
+
);
|
|
197
|
+
delegated = readControllerSet(
|
|
198
|
+
fs,
|
|
199
|
+
path.posix.join(policy.root, "cgroup.subtree_control"),
|
|
200
|
+
);
|
|
201
|
+
} catch {
|
|
202
|
+
return unavailable("linux_cgroup_v2_unavailable");
|
|
203
|
+
}
|
|
204
|
+
if (controllers.some((controller) => !supported.has(controller))) {
|
|
205
|
+
return unavailable("linux_cgroup_controller_unavailable");
|
|
206
|
+
}
|
|
207
|
+
if (controllers.some((controller) => !delegated.has(controller))) {
|
|
208
|
+
return unavailable("linux_cgroup_controller_not_delegated");
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
const cgroupPath = path.posix.join(policy.root, `cc-tool-${randomUUID()}`);
|
|
212
|
+
try {
|
|
213
|
+
fs.mkdirSync(cgroupPath, { mode: 0o700 });
|
|
214
|
+
} catch {
|
|
215
|
+
return unavailable("linux_cgroup_create_failed");
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const limits = [
|
|
219
|
+
["memory.max", String(policy.memoryMaxBytes)],
|
|
220
|
+
...(policy.memoryHighBytes !== null
|
|
221
|
+
? [["memory.high", String(policy.memoryHighBytes)]]
|
|
222
|
+
: []),
|
|
223
|
+
...(policy.pidsMax !== null ? [["pids.max", String(policy.pidsMax)]] : []),
|
|
224
|
+
...(policy.cpuQuotaMicros !== null
|
|
225
|
+
? [["cpu.max", `${policy.cpuQuotaMicros} ${policy.cpuPeriodMicros}`]]
|
|
226
|
+
: []),
|
|
227
|
+
];
|
|
228
|
+
try {
|
|
229
|
+
for (const [file, content] of limits) {
|
|
230
|
+
fs.writeFileSync(path.posix.join(cgroupPath, file), content, "utf8");
|
|
231
|
+
}
|
|
232
|
+
} catch {
|
|
233
|
+
removeChildCgroup(fs, cgroupPath);
|
|
234
|
+
return unavailable("linux_cgroup_limit_write_failed");
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
let attached = false;
|
|
238
|
+
let cleaned = false;
|
|
239
|
+
const cleanup = () => {
|
|
240
|
+
if (cleaned) return true;
|
|
241
|
+
const removed = removeChildCgroup(fs, cgroupPath);
|
|
242
|
+
if (removed) cleaned = true;
|
|
243
|
+
return removed;
|
|
244
|
+
};
|
|
245
|
+
return Object.freeze({
|
|
246
|
+
ok: true,
|
|
247
|
+
evidence: cgroupEvidence(policy, "prepared"),
|
|
248
|
+
attach(proc) {
|
|
249
|
+
const pid = Number(proc?.pid);
|
|
250
|
+
if (!Number.isSafeInteger(pid) || pid < 1) {
|
|
251
|
+
cleanup();
|
|
252
|
+
const error = new Error("Linux cgroup post-spawn PID is unavailable");
|
|
253
|
+
error.code = "ERR_LINUX_CGROUP_ATTACH";
|
|
254
|
+
error.cgroupReason = "linux_cgroup_invalid_pid";
|
|
255
|
+
throw error;
|
|
256
|
+
}
|
|
257
|
+
try {
|
|
258
|
+
fs.writeFileSync(
|
|
259
|
+
path.posix.join(cgroupPath, "cgroup.procs"),
|
|
260
|
+
`${pid}\n`,
|
|
261
|
+
"utf8",
|
|
262
|
+
);
|
|
263
|
+
attached = true;
|
|
264
|
+
} catch {
|
|
265
|
+
cleanup();
|
|
266
|
+
const error = new Error("Linux cgroup post-spawn association failed");
|
|
267
|
+
error.code = "ERR_LINUX_CGROUP_ATTACH";
|
|
268
|
+
error.cgroupReason = "linux_cgroup_attach_failed";
|
|
269
|
+
throw error;
|
|
270
|
+
}
|
|
271
|
+
return true;
|
|
272
|
+
},
|
|
273
|
+
cleanup,
|
|
274
|
+
status() {
|
|
275
|
+
return Object.freeze({
|
|
276
|
+
...cgroupEvidence(policy, attached ? "enforced" : "prepared"),
|
|
277
|
+
attached,
|
|
278
|
+
});
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
function unavailablePlan(plan, policy, reason) {
|
|
284
|
+
return Object.freeze({
|
|
285
|
+
contractVersion: 1,
|
|
286
|
+
applied: false,
|
|
287
|
+
platform: plan.platform,
|
|
288
|
+
profile: plan.profile,
|
|
289
|
+
command: plan.command,
|
|
290
|
+
args: [...(plan.args || [])],
|
|
291
|
+
options: { ...(plan.options || {}) },
|
|
292
|
+
enforcement: null,
|
|
293
|
+
backend: null,
|
|
294
|
+
candidateBackend: "linux-cgroup-v2",
|
|
295
|
+
guarantees: [],
|
|
296
|
+
reason,
|
|
297
|
+
resourceControl: cgroupEvidence(policy, "unavailable", reason),
|
|
298
|
+
cleanup: plan.cleanup,
|
|
299
|
+
postSpawn: Object.freeze({ required: false, mode: "none" }),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* Decorate an existing platform plan. Optional policy preserves the existing
|
|
305
|
+
* plan on hosts without a delegated cgroup; required policy returns an
|
|
306
|
+
* unavailable plan so ProcessExecutionBroker's resource-limits boundary
|
|
307
|
+
* rejects before native spawn.
|
|
308
|
+
*/
|
|
309
|
+
export function applyLinuxCgroupV2ToPlan(plan, policyInput, runtime = {}) {
|
|
310
|
+
const policy = normalizeLinuxCgroupPolicy(policyInput);
|
|
311
|
+
if (!policy) return plan;
|
|
312
|
+
if (!plan?.applied) {
|
|
313
|
+
return policy.mode === "required"
|
|
314
|
+
? unavailablePlan(
|
|
315
|
+
plan,
|
|
316
|
+
policy,
|
|
317
|
+
plan?.reason || "linux_cgroup_unavailable",
|
|
318
|
+
)
|
|
319
|
+
: Object.freeze({
|
|
320
|
+
...plan,
|
|
321
|
+
resourceControl: cgroupEvidence(
|
|
322
|
+
policy,
|
|
323
|
+
"unavailable",
|
|
324
|
+
plan?.reason || "linux_cgroup_unavailable",
|
|
325
|
+
),
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
if (runtime.sync === true) {
|
|
329
|
+
const reason = "linux_cgroup_post_spawn_unavailable_for_sync";
|
|
330
|
+
return policy.mode === "required"
|
|
331
|
+
? unavailablePlan(plan, policy, reason)
|
|
332
|
+
: Object.freeze({
|
|
333
|
+
...plan,
|
|
334
|
+
resourceControl: cgroupEvidence(policy, "unavailable", reason),
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
if (plan.postSpawn?.required) {
|
|
338
|
+
return policy.mode === "required"
|
|
339
|
+
? unavailablePlan(plan, policy, "linux_cgroup_post_spawn_conflict")
|
|
340
|
+
: Object.freeze({
|
|
341
|
+
...plan,
|
|
342
|
+
resourceControl: cgroupEvidence(
|
|
343
|
+
policy,
|
|
344
|
+
"unavailable",
|
|
345
|
+
"linux_cgroup_post_spawn_conflict",
|
|
346
|
+
),
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
const prepared = prepareLinuxCgroupV2(policy, runtime);
|
|
350
|
+
if (!prepared.ok) {
|
|
351
|
+
if (policy.mode === "required") {
|
|
352
|
+
return unavailablePlan(plan, policy, prepared.reason);
|
|
353
|
+
}
|
|
354
|
+
return Object.freeze({
|
|
355
|
+
...plan,
|
|
356
|
+
resourceControl: cgroupEvidence(policy, "unavailable", prepared.reason),
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
let cleaned = false;
|
|
361
|
+
const upstreamCleanup = plan.cleanup;
|
|
362
|
+
const cleanup = () => {
|
|
363
|
+
if (cleaned) return;
|
|
364
|
+
cleaned = true;
|
|
365
|
+
try {
|
|
366
|
+
prepared.cleanup();
|
|
367
|
+
} finally {
|
|
368
|
+
upstreamCleanup?.();
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
return Object.freeze({
|
|
372
|
+
...plan,
|
|
373
|
+
guarantees: Object.freeze([
|
|
374
|
+
...new Set([...(plan.guarantees || []), "resource-limits"]),
|
|
375
|
+
]),
|
|
376
|
+
resourceControl: cgroupEvidence(policy, "prepared"),
|
|
377
|
+
cleanup,
|
|
378
|
+
postSpawn: Object.freeze({ required: true, mode: "sync" }),
|
|
379
|
+
postSpawnLinux: (proc) => {
|
|
380
|
+
const attached = prepared.attach(proc);
|
|
381
|
+
// ProcessExecutionBroker installs its generic cleanup listener before
|
|
382
|
+
// this post-spawn association. If a later broker bookkeeping step fails
|
|
383
|
+
// and invokes cleanup while the child is still alive, this second exit
|
|
384
|
+
// listener retries the cgroup rmdir after the kernel has drained it.
|
|
385
|
+
proc?.once?.("exit", () => {
|
|
386
|
+
prepared.cleanup();
|
|
387
|
+
});
|
|
388
|
+
return attached;
|
|
389
|
+
},
|
|
390
|
+
});
|
|
391
|
+
}
|
|
@@ -53,6 +53,10 @@ import {
|
|
|
53
53
|
mcpStdioCapsuleNativeCodeEvidence,
|
|
54
54
|
mcpStdioCapsuleNativeCodePolicyDigest,
|
|
55
55
|
} from "../mcp-stdio-native-code-policy.js";
|
|
56
|
+
import {
|
|
57
|
+
applyLinuxCgroupV2ToPlan,
|
|
58
|
+
normalizeLinuxCgroupPolicy,
|
|
59
|
+
} from "./linux-cgroup-v2.js";
|
|
56
60
|
|
|
57
61
|
export {
|
|
58
62
|
MCP_STDIO_FD_ENTRY_BOOTSTRAP,
|
|
@@ -782,6 +786,7 @@ function normalizeSandboxRequest(profileOrRequest, explicitRequest) {
|
|
|
782
786
|
requiredBoundaries,
|
|
783
787
|
sync: request.sync === true,
|
|
784
788
|
pty: request.pty === true,
|
|
789
|
+
linuxCgroup: normalizeLinuxCgroupPolicy(request.linuxCgroup),
|
|
785
790
|
executionContract:
|
|
786
791
|
request.executionContract &&
|
|
787
792
|
typeof request.executionContract === "object" &&
|
|
@@ -9890,6 +9895,7 @@ export function applyLinuxSandbox(
|
|
|
9890
9895
|
* requiredBoundaries?: string[],
|
|
9891
9896
|
* sync?: boolean,
|
|
9892
9897
|
* pty?: boolean,
|
|
9898
|
+
* linuxCgroup?: Object|null,
|
|
9893
9899
|
* executionContract?: Readonly<Object>|null
|
|
9894
9900
|
* }|null} explicitRequest
|
|
9895
9901
|
* @returns {ReturnType<typeof createSandboxPlan>}
|
|
@@ -9957,49 +9963,59 @@ export function applySandbox(
|
|
|
9957
9963
|
requiredBoundaries: sandboxRequest.requiredBoundaries,
|
|
9958
9964
|
sync: sandboxRequest.sync,
|
|
9959
9965
|
pty: sandboxRequest.pty,
|
|
9966
|
+
linuxCgroup: sandboxRequest.linuxCgroup,
|
|
9960
9967
|
executionContract: sandboxRequest.executionContract,
|
|
9961
9968
|
};
|
|
9962
9969
|
|
|
9970
|
+
const applyRequestedLinuxCgroup = (plan) =>
|
|
9971
|
+
applyLinuxCgroupV2ToPlan(plan, sandboxRequest.linuxCgroup, {
|
|
9972
|
+
platform: runtime.platform,
|
|
9973
|
+
fs: runtime.fs,
|
|
9974
|
+
sync: sandboxRequest.sync,
|
|
9975
|
+
});
|
|
9976
|
+
|
|
9963
9977
|
// Dispatch to platform handler
|
|
9964
9978
|
if (runtime.platform === "darwin") {
|
|
9965
|
-
return
|
|
9966
|
-
|
|
9967
|
-
|
|
9968
|
-
|
|
9969
|
-
|
|
9970
|
-
|
|
9971
|
-
|
|
9979
|
+
return applyRequestedLinuxCgroup(
|
|
9980
|
+
applyMacSandbox(
|
|
9981
|
+
command,
|
|
9982
|
+
args,
|
|
9983
|
+
spawnOpts,
|
|
9984
|
+
profile,
|
|
9985
|
+
runtimeOverrides,
|
|
9986
|
+
runtimeInjected ? null : MACOS_MCP_CODE_SNAPSHOT_ISSUER,
|
|
9987
|
+
),
|
|
9972
9988
|
);
|
|
9973
9989
|
}
|
|
9974
9990
|
if (runtime.platform === "win32") {
|
|
9975
|
-
return
|
|
9976
|
-
|
|
9977
|
-
|
|
9978
|
-
|
|
9979
|
-
|
|
9980
|
-
|
|
9981
|
-
|
|
9991
|
+
return applyRequestedLinuxCgroup(
|
|
9992
|
+
applyWindowsSandbox(
|
|
9993
|
+
command,
|
|
9994
|
+
args,
|
|
9995
|
+
spawnOpts,
|
|
9996
|
+
profile,
|
|
9997
|
+
runtimeOverrides,
|
|
9998
|
+
runtimeInjected ? null : WINDOWS_MCP_CODE_SNAPSHOT_ISSUER,
|
|
9999
|
+
),
|
|
9982
10000
|
);
|
|
9983
10001
|
}
|
|
9984
10002
|
if (runtime.platform === "linux") {
|
|
9985
|
-
return
|
|
9986
|
-
command,
|
|
9987
|
-
args,
|
|
9988
|
-
spawnOpts,
|
|
9989
|
-
profile,
|
|
9990
|
-
runtimeOverrides,
|
|
10003
|
+
return applyRequestedLinuxCgroup(
|
|
10004
|
+
applyLinuxSandbox(command, args, spawnOpts, profile, runtimeOverrides),
|
|
9991
10005
|
);
|
|
9992
10006
|
}
|
|
9993
10007
|
|
|
9994
10008
|
// Unknown platform - no sandbox applied
|
|
9995
|
-
return
|
|
9996
|
-
|
|
9997
|
-
|
|
9998
|
-
|
|
9999
|
-
|
|
10000
|
-
|
|
10001
|
-
|
|
10002
|
-
|
|
10009
|
+
return applyRequestedLinuxCgroup(
|
|
10010
|
+
createSandboxPlan({
|
|
10011
|
+
platform: runtime.platform,
|
|
10012
|
+
profile: profile.profileName,
|
|
10013
|
+
command,
|
|
10014
|
+
args,
|
|
10015
|
+
options: spawnOpts,
|
|
10016
|
+
reason: "unsupported_platform",
|
|
10017
|
+
}),
|
|
10018
|
+
);
|
|
10003
10019
|
}
|
|
10004
10020
|
|
|
10005
10021
|
/**
|
|
@@ -10014,6 +10030,12 @@ export function postSpawnSandbox(proc, sandboxResult, runtimeOverrides = {}) {
|
|
|
10014
10030
|
if (runtime.platform === "win32" && sandboxResult?.postSpawn?.required) {
|
|
10015
10031
|
return postSpawnWindowsSandbox(proc, sandboxResult, runtimeOverrides);
|
|
10016
10032
|
}
|
|
10033
|
+
if (runtime.platform === "linux" && sandboxResult?.postSpawn?.required) {
|
|
10034
|
+
if (typeof sandboxResult.postSpawnLinux !== "function") {
|
|
10035
|
+
throw new Error("Linux post-spawn sandbox adapter is unavailable");
|
|
10036
|
+
}
|
|
10037
|
+
return sandboxResult.postSpawnLinux(proc);
|
|
10038
|
+
}
|
|
10017
10039
|
}
|
|
10018
10040
|
|
|
10019
10041
|
export default {
|