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
|
@@ -2443,12 +2443,16 @@ function selectedHostToolPolicy(hostAuthority, tool) {
|
|
|
2443
2443
|
function snapshotPlanToolAuthority(planManager, tool, args) {
|
|
2444
2444
|
const active = planManager?.isActive?.() === true;
|
|
2445
2445
|
return {
|
|
2446
|
+
revision:
|
|
2447
|
+
Number.isSafeInteger(planManager?.revision) && planManager.revision >= 0
|
|
2448
|
+
? planManager.revision
|
|
2449
|
+
: null,
|
|
2446
2450
|
active,
|
|
2447
2451
|
executionLockActive: planManager?.executionLock != null,
|
|
2448
2452
|
toolAllowed:
|
|
2449
2453
|
!active || (tool === "git" && isReadOnlyGitCommand(args?.command))
|
|
2450
2454
|
? true
|
|
2451
|
-
: planManager?.isToolAllowed?.(tool) === true,
|
|
2455
|
+
: planManager?.isToolAllowed?.(tool, { recordBlocked: false }) === true,
|
|
2452
2456
|
};
|
|
2453
2457
|
}
|
|
2454
2458
|
|
|
@@ -2546,6 +2550,10 @@ function snapshotApprovalPolicyAuthority(approvalGate, sessionId) {
|
|
|
2546
2550
|
*/
|
|
2547
2551
|
export async function executeTool(name, args, context = {}) {
|
|
2548
2552
|
const liveExecutionContext = context;
|
|
2553
|
+
let admittedApprovalGate = null;
|
|
2554
|
+
let admittedApprovalPolicyDigest = null;
|
|
2555
|
+
let entryPlanManager = null;
|
|
2556
|
+
let entryPlanPolicyDigest = null;
|
|
2549
2557
|
// run_shell can cross several asynchronous permission/hook boundaries before
|
|
2550
2558
|
// reaching executeToolInner. Capture its declared tuple and working directory
|
|
2551
2559
|
// before any of them so an in-process caller cannot swap the approved command
|
|
@@ -2599,6 +2607,31 @@ export async function executeTool(name, args, context = {}) {
|
|
|
2599
2607
|
};
|
|
2600
2608
|
}
|
|
2601
2609
|
}
|
|
2610
|
+
if (name === "run_shell") {
|
|
2611
|
+
try {
|
|
2612
|
+
admittedApprovalGate = context.approvalGate || null;
|
|
2613
|
+
admittedApprovalPolicyDigest = digestPolicyAuthority(
|
|
2614
|
+
snapshotApprovalPolicyAuthority(
|
|
2615
|
+
admittedApprovalGate,
|
|
2616
|
+
context.sessionId || null,
|
|
2617
|
+
),
|
|
2618
|
+
);
|
|
2619
|
+
entryPlanManager = context.planManager || getPlanModeManager();
|
|
2620
|
+
entryPlanPolicyDigest = digestPolicyAuthority(
|
|
2621
|
+
snapshotPlanToolAuthority(entryPlanManager, name, args),
|
|
2622
|
+
);
|
|
2623
|
+
} catch (error) {
|
|
2624
|
+
return {
|
|
2625
|
+
error:
|
|
2626
|
+
"[Shell Dispatch] The initial shell policy authority could not be bound. No command side effect was started.",
|
|
2627
|
+
policy: {
|
|
2628
|
+
decision: "blocked",
|
|
2629
|
+
via: "shell-policy-authority",
|
|
2630
|
+
code: error?.code || "CC_SHELL_POLICY_AUTHORITY_UNAVAILABLE",
|
|
2631
|
+
},
|
|
2632
|
+
};
|
|
2633
|
+
}
|
|
2634
|
+
}
|
|
2602
2635
|
if (name === "run_code") {
|
|
2603
2636
|
try {
|
|
2604
2637
|
const entryProcessCwd = process.cwd();
|
|
@@ -3019,9 +3052,20 @@ export async function executeTool(name, args, context = {}) {
|
|
|
3019
3052
|
let admittedPlanPolicyDigest = null;
|
|
3020
3053
|
if (name === "run_shell") {
|
|
3021
3054
|
try {
|
|
3022
|
-
|
|
3055
|
+
const currentPlanPolicyDigest = digestPolicyAuthority(
|
|
3023
3056
|
snapshotPlanToolAuthority(planManager, name, args),
|
|
3024
3057
|
);
|
|
3058
|
+
if (
|
|
3059
|
+
planManager !== entryPlanManager ||
|
|
3060
|
+
currentPlanPolicyDigest !== entryPlanPolicyDigest
|
|
3061
|
+
) {
|
|
3062
|
+
const error = new Error(
|
|
3063
|
+
"Plan authority changed during initial permission resolution",
|
|
3064
|
+
);
|
|
3065
|
+
error.code = "CC_SHELL_POLICY_AUTHORITY_CHANGED";
|
|
3066
|
+
throw error;
|
|
3067
|
+
}
|
|
3068
|
+
admittedPlanPolicyDigest = currentPlanPolicyDigest;
|
|
3025
3069
|
} catch (error) {
|
|
3026
3070
|
return {
|
|
3027
3071
|
error:
|
|
@@ -3380,6 +3424,9 @@ export async function executeTool(name, args, context = {}) {
|
|
|
3380
3424
|
classifyAllShell: context.classifyAllShell === true,
|
|
3381
3425
|
};
|
|
3382
3426
|
if (
|
|
3427
|
+
approvalGate !== admittedApprovalGate ||
|
|
3428
|
+
digestPolicyAuthority(initialProjection.approval) !==
|
|
3429
|
+
admittedApprovalPolicyDigest ||
|
|
3383
3430
|
digestPolicyAuthority(initialProjection.permission) !==
|
|
3384
3431
|
admittedPermissionPolicyDigest ||
|
|
3385
3432
|
digestPolicyAuthority(initialProjection.host) !==
|
|
@@ -3398,8 +3445,23 @@ export async function executeTool(name, args, context = {}) {
|
|
|
3398
3445
|
throw error;
|
|
3399
3446
|
}
|
|
3400
3447
|
const initialDigest = digestPolicyAuthority(initialProjection);
|
|
3448
|
+
const dockerSandboxDigest =
|
|
3449
|
+
context.sandbox?.engine === "docker-egress"
|
|
3450
|
+
? digestPolicyAuthority(context.sandbox)
|
|
3451
|
+
: null;
|
|
3401
3452
|
shellDispatchPolicyAuthority = Object.freeze({
|
|
3402
3453
|
policyVersion: `cc-shell-policy-authority/v1:${initialDigest}`,
|
|
3454
|
+
revalidateDockerSandbox() {
|
|
3455
|
+
if (
|
|
3456
|
+
!dockerSandboxDigest ||
|
|
3457
|
+
digestPolicyAuthority(liveExecutionContext.sandbox || null) !==
|
|
3458
|
+
dockerSandboxDigest
|
|
3459
|
+
) {
|
|
3460
|
+
const error = new Error("Docker egress sandbox authority changed");
|
|
3461
|
+
error.code = "CC_SHELL_POLICY_AUTHORITY_CHANGED";
|
|
3462
|
+
throw error;
|
|
3463
|
+
}
|
|
3464
|
+
},
|
|
3403
3465
|
async revalidate() {
|
|
3404
3466
|
try {
|
|
3405
3467
|
if (
|
|
@@ -6643,9 +6705,8 @@ async function executeToolInner(
|
|
|
6643
6705
|
executeSandboxedShell,
|
|
6644
6706
|
sandboxSummary,
|
|
6645
6707
|
} = await import("../lib/agent-sandbox.js");
|
|
6646
|
-
// Keep the proxy on a separate event loop
|
|
6647
|
-
//
|
|
6648
|
-
// execution until a non-bypassable network backend is available.
|
|
6708
|
+
// Keep the proxy on a separate event loop for legacy synchronous
|
|
6709
|
+
// dispatch. The Docker egress route uses an asynchronous session.
|
|
6649
6710
|
const sboxPolicy = shellSandbox.policy || {};
|
|
6650
6711
|
const needsEgress =
|
|
6651
6712
|
shellSandbox.network === true &&
|
|
@@ -6658,6 +6719,9 @@ async function executeToolInner(
|
|
|
6658
6719
|
let privateSocketDir = null;
|
|
6659
6720
|
let dockerEgressSession = null;
|
|
6660
6721
|
let proxyFailed = false;
|
|
6722
|
+
let authorityMonitor = null;
|
|
6723
|
+
let removePlanAuthorityListener = null;
|
|
6724
|
+
let removeApprovalAuthorityListener = null;
|
|
6661
6725
|
if (needsEgress) {
|
|
6662
6726
|
try {
|
|
6663
6727
|
const { startEgressProxyWorker } =
|
|
@@ -6681,7 +6745,11 @@ async function executeToolInner(
|
|
|
6681
6745
|
: {}),
|
|
6682
6746
|
onFailure() {
|
|
6683
6747
|
proxyFailed = true;
|
|
6684
|
-
|
|
6748
|
+
authorityMonitor?.revoke(
|
|
6749
|
+
Object.assign(new Error("Docker egress broker failed"), {
|
|
6750
|
+
code: "CC_DOCKER_EGRESS_BROKER_FAILED",
|
|
6751
|
+
}),
|
|
6752
|
+
);
|
|
6685
6753
|
},
|
|
6686
6754
|
},
|
|
6687
6755
|
);
|
|
@@ -6696,10 +6764,74 @@ async function executeToolInner(
|
|
|
6696
6764
|
let result;
|
|
6697
6765
|
try {
|
|
6698
6766
|
// Proxy startup and dynamic imports are asynchronous. Re-read the
|
|
6699
|
-
// live authority
|
|
6700
|
-
|
|
6701
|
-
|
|
6702
|
-
|
|
6767
|
+
// live authority after they settle and before sandbox dispatch.
|
|
6768
|
+
if (dockerEgress && proxyHandle?.socketPath) {
|
|
6769
|
+
const { createDockerEgressAuthorityMonitor } =
|
|
6770
|
+
await import("../lib/sandbox-egress-authority-monitor.js");
|
|
6771
|
+
authorityMonitor = createDockerEgressAuthorityMonitor({
|
|
6772
|
+
async revalidate() {
|
|
6773
|
+
await shellDispatchPolicyAuthority?.revalidate?.();
|
|
6774
|
+
shellDispatchPolicyAuthority?.revalidateDockerSandbox?.();
|
|
6775
|
+
refreshPluginExecutionAuthority();
|
|
6776
|
+
if (pluginBinSandboxPolicy) {
|
|
6777
|
+
const error = new Error(
|
|
6778
|
+
"A plugin sandbox authority appeared while Docker egress was running",
|
|
6779
|
+
);
|
|
6780
|
+
error.code = "ERR_PLUGIN_BIN_SANDBOX_ROUTE_CONFLICT";
|
|
6781
|
+
error.pluginBinFailClosed = true;
|
|
6782
|
+
throw error;
|
|
6783
|
+
}
|
|
6784
|
+
if (proxyFailed || proxyHandle.revision !== 0) {
|
|
6785
|
+
const error = new Error(
|
|
6786
|
+
"Docker egress authority changed during execution",
|
|
6787
|
+
);
|
|
6788
|
+
error.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
|
|
6789
|
+
throw error;
|
|
6790
|
+
}
|
|
6791
|
+
},
|
|
6792
|
+
abortProxy: () => proxyHandle.abort(),
|
|
6793
|
+
});
|
|
6794
|
+
if (
|
|
6795
|
+
Number.isSafeInteger(planManager?.revision) &&
|
|
6796
|
+
planManager.revision >= 0 &&
|
|
6797
|
+
typeof planManager.on === "function" &&
|
|
6798
|
+
typeof planManager.off === "function"
|
|
6799
|
+
) {
|
|
6800
|
+
const onPlanMutation = () => {
|
|
6801
|
+
const error = new Error(
|
|
6802
|
+
"Plan authority changed during Docker egress execution",
|
|
6803
|
+
);
|
|
6804
|
+
error.code = "CC_SHELL_POLICY_AUTHORITY_CHANGED";
|
|
6805
|
+
authorityMonitor.revoke(error);
|
|
6806
|
+
};
|
|
6807
|
+
planManager.on("revision-changed", onPlanMutation);
|
|
6808
|
+
removePlanAuthorityListener = () =>
|
|
6809
|
+
planManager.off("revision-changed", onPlanMutation);
|
|
6810
|
+
}
|
|
6811
|
+
if (
|
|
6812
|
+
sessionId &&
|
|
6813
|
+
typeof approvalGate?.subscribePolicyRevision === "function"
|
|
6814
|
+
) {
|
|
6815
|
+
removeApprovalAuthorityListener =
|
|
6816
|
+
approvalGate.subscribePolicyRevision(sessionId, () => {
|
|
6817
|
+
const error = new Error(
|
|
6818
|
+
"Approval policy changed during Docker egress execution",
|
|
6819
|
+
);
|
|
6820
|
+
error.code = "CC_SHELL_POLICY_AUTHORITY_CHANGED";
|
|
6821
|
+
authorityMonitor.revoke(error);
|
|
6822
|
+
});
|
|
6823
|
+
if (typeof removeApprovalAuthorityListener !== "function") {
|
|
6824
|
+
throw new TypeError(
|
|
6825
|
+
"approval policy revision subscription must return an unsubscribe function",
|
|
6826
|
+
);
|
|
6827
|
+
}
|
|
6828
|
+
}
|
|
6829
|
+
authorityMonitor.start();
|
|
6830
|
+
await authorityMonitor.checkNow();
|
|
6831
|
+
} else {
|
|
6832
|
+
await shellDispatchPolicyAuthority?.revalidate?.();
|
|
6833
|
+
refreshPluginExecutionAuthority();
|
|
6834
|
+
}
|
|
6703
6835
|
if (pluginBinSandboxPolicy) {
|
|
6704
6836
|
const error = new Error(
|
|
6705
6837
|
"A plugin sandbox authority appeared while the legacy shell sandbox was starting",
|
|
@@ -6737,23 +6869,13 @@ async function executeToolInner(
|
|
|
6737
6869
|
auditContext: createShellProcessAuditContext(),
|
|
6738
6870
|
onSession(session) {
|
|
6739
6871
|
dockerEgressSession = session;
|
|
6740
|
-
|
|
6872
|
+
authorityMonitor.attachSession(session);
|
|
6741
6873
|
},
|
|
6742
6874
|
async beforeStart() {
|
|
6743
|
-
await
|
|
6744
|
-
|
|
6745
|
-
if (
|
|
6746
|
-
proxyFailed ||
|
|
6747
|
-
proxyHandle.revision !== 0 ||
|
|
6748
|
-
pluginBinSandboxPolicy
|
|
6749
|
-
) {
|
|
6750
|
-
const error = new Error(
|
|
6751
|
-
"Docker egress authority changed before target start",
|
|
6752
|
-
);
|
|
6753
|
-
error.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
|
|
6754
|
-
throw error;
|
|
6755
|
-
}
|
|
6875
|
+
await authorityMonitor.checkFresh();
|
|
6876
|
+
authorityMonitor.assertAuthorized();
|
|
6756
6877
|
},
|
|
6878
|
+
beforeReceipt: () => authorityMonitor.finish(),
|
|
6757
6879
|
},
|
|
6758
6880
|
);
|
|
6759
6881
|
} else {
|
|
@@ -6767,6 +6889,10 @@ async function executeToolInner(
|
|
|
6767
6889
|
});
|
|
6768
6890
|
}
|
|
6769
6891
|
} finally {
|
|
6892
|
+
removeApprovalAuthorityListener?.();
|
|
6893
|
+
removePlanAuthorityListener?.();
|
|
6894
|
+
authorityMonitor?.stop();
|
|
6895
|
+
await authorityMonitor?.awaitCleanup();
|
|
6770
6896
|
if (dockerEgressSession) {
|
|
6771
6897
|
try {
|
|
6772
6898
|
await dockerEgressSession.close();
|
|
@@ -6792,6 +6918,29 @@ async function executeToolInner(
|
|
|
6792
6918
|
}
|
|
6793
6919
|
}
|
|
6794
6920
|
}
|
|
6921
|
+
if (dockerEgress && authorityMonitor?.revocationError) {
|
|
6922
|
+
const revoked = authorityMonitor.revocationError;
|
|
6923
|
+
result.authorityFailure = {
|
|
6924
|
+
code: revoked.code || "CC_DOCKER_EGRESS_AUTHORITY_CHANGED",
|
|
6925
|
+
...(revoked.cleanupError ? { cleanupFailed: true } : {}),
|
|
6926
|
+
};
|
|
6927
|
+
if (result.exitCode === 0) {
|
|
6928
|
+
result = {
|
|
6929
|
+
...result,
|
|
6930
|
+
exitCode: 1,
|
|
6931
|
+
stderr:
|
|
6932
|
+
"Docker egress authority was revoked; execution outcome must not be retried automatically.",
|
|
6933
|
+
executionOutcome: "completed-cleanup-unknown",
|
|
6934
|
+
retrySafe: false,
|
|
6935
|
+
sandboxCapabilities: assessAgentSandboxCapabilities(
|
|
6936
|
+
shellSandbox,
|
|
6937
|
+
{
|
|
6938
|
+
execution: { attempted: true, outcomeUnknown: true },
|
|
6939
|
+
},
|
|
6940
|
+
),
|
|
6941
|
+
};
|
|
6942
|
+
}
|
|
6943
|
+
}
|
|
6795
6944
|
const common = {
|
|
6796
6945
|
sandbox: sandboxSummary(shellSandbox),
|
|
6797
6946
|
sandboxCapabilities: result.sandboxCapabilities || null,
|
|
@@ -6801,6 +6950,9 @@ async function executeToolInner(
|
|
|
6801
6950
|
retrySafe: result.retrySafe,
|
|
6802
6951
|
}
|
|
6803
6952
|
: {}),
|
|
6953
|
+
...(result.authorityFailure
|
|
6954
|
+
? { authorityFailure: result.authorityFailure }
|
|
6955
|
+
: {}),
|
|
6804
6956
|
shellCommandPolicy: shellPolicy,
|
|
6805
6957
|
approval: approvalOutcome,
|
|
6806
6958
|
policyTrace: ["shell-policy", "approval", "sandbox"],
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as v,P as m,J as S,U as n,R as a,S as y,K as C,Q as x,V as w,_ as B,b as s}from"./vendor-Bn1JzzAn.js";import{_ as k}from"./index-C7-T-u0L.js";import"./icons-DG5UD-6K.js";const N={__name:"ChatBubbleRenderer",props:{event:{type:Object,required:!0}},setup(c,{expose:d}){d();const t=c,r=s(()=>{const e=t.event.content||{};return e.text||e.body||e.message||e.title||JSON.stringify(e).slice(0,200)}),i=s(()=>{const e=t.event.content||{};return e.from||e.sender||e.senderName||t.event.actor||"(unknown)"}),l=s(()=>{const e=(t.event.actor||"").toLowerCase();return e.includes("self")||e==="me"||e.endsWith("_self")}),o=s(()=>{const e=t.event.source.adapter||"";return e.startsWith("messaging-qq")?"magenta":e==="wechat"?"green":"blue"}),u=s(()=>{if(!t.event.occurredAt)return"";try{const e=new Date(t.event.occurredAt),p=e.getFullYear(),b=String(e.getMonth()+1).padStart(2,"0"),f=String(e.getDate()).padStart(2,"0"),g=String(e.getHours()).padStart(2,"0"),h=String(e.getMinutes()).padStart(2,"0");return`${p}-${b}-${f} ${g}:${h}`}catch{return""}}),_={props:t,messageText:r,actorLabel:i,isMine:l,adapterColor:o,formattedTime:u,computed:s};return Object.defineProperty(_,"__isScriptSetup",{enumerable:!1,value:!0}),_}},R={class:"bubble"},T={class:"meta"},M={class:"actor"},O={class:"time"},V={class:"body"};function q(c,d,t,r,i,l){const o=v("a-tag");return m(),S("div",{class:B(["chat-row",{mine:r.isMine}])},[n("div",R,[n("div",T,[n("span",M,a(r.actorLabel),1),n("span",O,a(r.formattedTime),1)]),n("div",V,a(r.messageText),1),t.event.source.adapter?(m(),y(o,{key:0,class:"src",color:r.adapterColor},{default:C(()=>[x(a(t.event.source.adapter),1)]),_:1},8,["color"])):w("v-if",!0)])],2)}const A=k(N,[["render",q],["__scopeId","data-v-49238629"],["__file","/tmp/cc-web-panel-hbrRmO/repo/packages/web-panel/src/components/pdh/renderers/ChatBubbleRenderer.vue"]]);export{A as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-C7-T-u0L.js";const o=((n,a,e)=>{r(n,`[ant-design-vue: ${a}] ${e}`)});export{o as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{A as o}from"./Row-B8T2-Qv7.js";import{a0 as t}from"./index-C7-T-u0L.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-B72knbW8.js";import"./useFlexGapSupport-BSSnL3f1.js";import"./styleChecker-DXUyqoWY.js";import"./index-B5gj_uCC.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-DrNzLpF6.js";import{a0 as t}from"./index-C7-T-u0L.js";import"./vendor-Bn1JzzAn.js";import"./index-B5gj_uCC.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|