chainlesschain 0.166.78 → 0.166.80
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 -16
- package/package.json +1 -1
- 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-DSyZEY2G.js → AIOps-C5NtVVBN.js} +1 -1
- package/src/assets/web-panel/assets/{ActionButton-DhNyZ577.js → ActionButton-CE9-HsoR.js} +1 -1
- package/src/assets/web-panel/assets/{Analytics-HMMpxmyi.js → Analytics-DRO6sI0Z.js} +3 -3
- package/src/assets/web-panel/assets/{AppLayout-CwKMM5Ie.js → AppLayout-CuVJiyC_.js} +3 -3
- package/src/assets/web-panel/assets/{Artifacts-CNzDmph7.js → Artifacts-GNahHsyZ.js} +1 -1
- package/src/assets/web-panel/assets/{Audit-DxWpUW3V.js → Audit-DWvTomfm.js} +1 -1
- package/src/assets/web-panel/assets/{BackgroundAgents-C1R2ST-P.js → BackgroundAgents-k4TuA3ec.js} +1 -1
- package/src/assets/web-panel/assets/{Backup-B6biTaEV.js → Backup-BxqN-65D.js} +1 -1
- package/src/assets/web-panel/assets/{BaseInput-CVnkD2Z5.js → BaseInput-CYYLvwwD.js} +1 -1
- package/src/assets/web-panel/assets/{Chat-Dbewl4Je.js → Chat-CoDmZ9yb.js} +6 -6
- package/src/assets/web-panel/assets/{ChatBubbleRenderer-DVZ6SwC5.js → ChatBubbleRenderer-ChTIMWch.js} +1 -1
- package/src/assets/web-panel/assets/{Checkbox-BqqiF1JE.js → Checkbox-CRVlfbkN.js} +1 -1
- package/src/assets/web-panel/assets/{Codegen-BVMkGumc.js → Codegen-BttMy7rW.js} +1 -1
- package/src/assets/web-panel/assets/{Col-DmiRHy96.js → Col-DsdlE4QC.js} +1 -1
- package/src/assets/web-panel/assets/{Community-BDlpygqA.js → Community-BulheyO-.js} +1 -1
- package/src/assets/web-panel/assets/{Compact-B2NME_m-.js → Compact-BC_7wMxW.js} +1 -1
- package/src/assets/web-panel/assets/{Compliance-BlzDLE-R.js → Compliance-BA3PDNLK.js} +1 -1
- package/src/assets/web-panel/assets/{Cowork-C8raPybB.js → Cowork-B6Y3L-GP.js} +4 -4
- package/src/assets/web-panel/assets/{Cron-DA8Py0zP.js → Cron-DLk_CG77.js} +2 -2
- package/src/assets/web-panel/assets/{Crosschain-DU2XyHqB.js → Crosschain-CvsKV-90.js} +1 -1
- package/src/assets/web-panel/assets/{DID-Df098fT_.js → DID-CD8K9G3F.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-D1rT702x.js → Dashboard-CXNE434f.js} +2 -2
- package/src/assets/web-panel/assets/{Dropdown-BweXGo1O.js → Dropdown-C_P5mttB.js} +1 -1
- package/src/assets/web-panel/assets/{EmailListRenderer-B9ShbgJH.js → EmailListRenderer-MxZvItNA.js} +1 -1
- package/src/assets/web-panel/assets/EvolutionSettings-DRoJQrDb.js +1 -0
- package/src/assets/web-panel/assets/{FamilyGuardDashboard-DrznZFVs.js → FamilyGuardDashboard-CBrz9T6T.js} +1 -1
- package/src/assets/web-panel/assets/{Federation-DQZ2adIA.js → Federation-DKlGgjNs.js} +1 -1
- package/src/assets/web-panel/assets/{FormItemContext-DN30Dowh.js → FormItemContext-CteicPS5.js} +1 -1
- package/src/assets/web-panel/assets/{GenericCardRenderer-DRdt0j1e.js → GenericCardRenderer-Bs10mDna.js} +1 -1
- package/src/assets/web-panel/assets/{Git-wwRgStzk.js → Git-CXwzFBIh.js} +2 -2
- package/src/assets/web-panel/assets/{Governance-CI4Uw0Nh.js → Governance-CYzcwfwf.js} +1 -1
- package/src/assets/web-panel/assets/{Inference-5TuE2AJI.js → Inference-pYpCF1ws.js} +1 -1
- package/src/assets/web-panel/assets/{KnowledgeGraph-oXyvmFSR.js → KnowledgeGraph-B0YJnOpj.js} +1 -1
- package/src/assets/web-panel/assets/{Logs-ewudSWuv.js → Logs-D-hJWfq-.js} +2 -2
- package/src/assets/web-panel/assets/{MarkdownRenderer-Cz5nyufm.js → MarkdownRenderer-BPQlDtB7.js} +1 -1
- package/src/assets/web-panel/assets/{Marketplace-DcZeWFrs.js → Marketplace-D5ZmI-si.js} +1 -1
- package/src/assets/web-panel/assets/{McpTools-BcV9p1RS.js → McpTools-DByD6jY1.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-CMhYvugt.js → Memory--lsjJd7Y.js} +2 -2
- package/src/assets/web-panel/assets/{MobileBridge-5RP2uwvT.js → MobileBridge-GQ3vGZO9.js} +1 -1
- package/src/assets/web-panel/assets/{MobileProjects-BIuM9Ze4.js → MobileProjects-Dh2wq-NU.js} +1 -1
- package/src/assets/web-panel/assets/{Mtc-DmBszTDe.js → Mtc-uQFoRe_Z.js} +2 -2
- package/src/assets/web-panel/assets/{MtcAudit-Czdp5ZGt.js → MtcAudit-BUBYbvuz.js} +2 -2
- package/src/assets/web-panel/assets/{Multisig-DRWUuNr-.js → Multisig-D790SLqM.js} +3 -3
- package/src/assets/web-panel/assets/{NLProgramming-IRQQN0-c.js → NLProgramming-DcV9gSqn.js} +1 -1
- package/src/assets/web-panel/assets/{Notes-CGhD1lW9.js → Notes-sVl7Y_vt.js} +3 -3
- package/src/assets/web-panel/assets/{NotificationSettings-BtyPgQAh.js → NotificationSettings-BHRPqBZ3.js} +1 -1
- package/src/assets/web-panel/assets/{OrderTableRenderer-yUaqwCty.js → OrderTableRenderer-B029pIMF.js} +1 -1
- package/src/assets/web-panel/assets/{Organization-C3kTVn5i.js → Organization-BKrF-dtp.js} +4 -4
- package/src/assets/web-panel/assets/{Overflow-C2-0iZhq.js → Overflow-DOAGxhhi.js} +1 -1
- package/src/assets/web-panel/assets/{P2P-CISoEUxA.js → P2P-7uQ4F7lh.js} +2 -2
- package/src/assets/web-panel/assets/{PdhVaultBrowser-NfTVtvKQ.js → PdhVaultBrowser-BegpATva.js} +5 -5
- package/src/assets/web-panel/assets/{Permissions-CfK0jJhm.js → Permissions-C0qK0tAi.js} +4 -4
- package/src/assets/web-panel/assets/{PersonalDataHub-OsVxxh_j.js → PersonalDataHub-DCnfXKyb.js} +4 -4
- package/src/assets/web-panel/assets/{Pipeline-DEmK_Ch2.js → Pipeline-D8wdVvao.js} +1 -1
- package/src/assets/web-panel/assets/{Privacy-D61s73b0.js → Privacy-C-dGmb9y.js} +1 -1
- package/src/assets/web-panel/assets/{ProjectInit-DkLF5gHb.js → ProjectInit-ChKvrsfc.js} +2 -2
- package/src/assets/web-panel/assets/{ProjectSettings-BA7odTrI.js → ProjectSettings-CaWnzNBi.js} +2 -2
- package/src/assets/web-panel/assets/{Projects-CdI1GcAG.js → Projects-2uNBqS05.js} +1 -1
- package/src/assets/web-panel/assets/{Providers-D9BYyP1r.js → Providers-DTufbN-S.js} +1 -1
- package/src/assets/web-panel/assets/{QrScannerModal-CXMItUDD.js → QrScannerModal-CGv6QJMC.js} +1 -1
- package/src/assets/web-panel/assets/{QuickAsk-8-tF9ffZ.js → QuickAsk-BfNcUCfG.js} +1 -1
- package/src/assets/web-panel/assets/{Recommend-C2QGWOSi.js → Recommend-B0s5YT2K.js} +1 -1
- package/src/assets/web-panel/assets/{RemoteSession-B1M_v1lx.js → RemoteSession-YCs5wa8P.js} +2 -2
- package/src/assets/web-panel/assets/{Reputation-D0WZHgv1.js → Reputation-DBC__Ylq.js} +1 -1
- package/src/assets/web-panel/assets/{Row-D6nf9-c-.js → Row-D_NT1ROe.js} +1 -1
- package/src/assets/web-panel/assets/{RssFeed-ClZ6M-mN.js → RssFeed-Dd9ktNRw.js} +3 -3
- package/src/assets/web-panel/assets/{Search-ZWkt8vuO.js → Search-BsmlT4PY.js} +1 -1
- package/src/assets/web-panel/assets/{Security-BUlQut2m.js → Security-DN-_e3oM.js} +3 -3
- package/src/assets/web-panel/assets/{Services-Cd_3xJOc.js → Services-Bm_KqSDz.js} +2 -2
- package/src/assets/web-panel/assets/{Skeleton-C8e2-cHW.js → Skeleton-BYldeYI0.js} +1 -1
- package/src/assets/web-panel/assets/{Skills-DucVRJp1.js → Skills-h7XAXSls.js} +1 -1
- package/src/assets/web-panel/assets/{Sla-Csr5pUwI.js → Sla-4ArxAaMJ.js} +1 -1
- package/src/assets/web-panel/assets/{SpeechSettings-CXvyaRAT.js → SpeechSettings-B639ejZr.js} +1 -1
- package/src/assets/web-panel/assets/{SyncSettings-KdsIcV5h.js → SyncSettings-DR6RRo1O.js} +2 -2
- package/src/assets/web-panel/assets/{Tasks-B-eHmJm9.js → Tasks-DysrrJVE.js} +1 -1
- package/src/assets/web-panel/assets/{Templates-BglVeaLK.js → Templates-DyyB9L9f.js} +1 -1
- package/src/assets/web-panel/assets/{Tenant-BBbQ8qan.js → Tenant-XbmWbUl1.js} +1 -1
- package/src/assets/web-panel/assets/{Terminal-Ca_pCVBi.js → Terminal-C5GeciJG.js} +2 -2
- package/src/assets/web-panel/assets/{TimelineRenderer-YD6XG_vZ.js → TimelineRenderer-Db-NjeVy.js} +1 -1
- package/src/assets/web-panel/assets/{Tokens-2lRoeVli.js → Tokens-Btm9pYvJ.js} +1 -1
- package/src/assets/web-panel/assets/{Trigger-C-3XNAU9.js → Trigger-BhJ35b0V.js} +1 -1
- package/src/assets/web-panel/assets/{Trust-k-1PxdLG.js → Trust-C5T4GJky.js} +1 -1
- package/src/assets/web-panel/assets/{UkeySign-FG-qW646.js → UkeySign-CqWxh5U0.js} +1 -1
- package/src/assets/web-panel/assets/{VideoEditing-BNOe1cmd.js → VideoEditing-DKyI9zg1.js} +1 -1
- package/src/assets/web-panel/assets/{Wallet-D5C3i2Kw.js → Wallet-kgvyQOtT.js} +4 -4
- package/src/assets/web-panel/assets/{WebAuthn-BOpztqd3.js → WebAuthn-1wWucdJt.js} +4 -4
- package/src/assets/web-panel/assets/{WorkflowEditor-BpVrpUEv.js → WorkflowEditor-rHVIbLME.js} +1 -1
- package/src/assets/web-panel/assets/{chat-DIuMHb38.js → chat-DV8ZtfWQ.js} +1 -1
- package/src/assets/web-panel/assets/{colors-CTFJPyzQ.js → colors-zznFfEpj.js} +1 -1
- package/src/assets/web-panel/assets/{compact-item-CONfmJcW.js → compact-item-CWk10Qsu.js} +1 -1
- package/src/assets/web-panel/assets/{createContext-RkW5CRrz.js → createContext-CtoMW-kY.js} +1 -1
- package/src/assets/web-panel/assets/devWarning-_Wlo1cZJ.js +1 -0
- package/src/assets/web-panel/assets/{hasIn-CW4XOjDC.js → hasIn-ieyHKAZZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-Akmg1WdH.js → index--6zQrvYc.js} +1 -1
- package/src/assets/web-panel/assets/{index-BMg2JFmW.js → index-0GSB8LOT.js} +1 -1
- package/src/assets/web-panel/assets/{index-YaeGscSw.js → index-14ADEHo7.js} +1 -1
- package/src/assets/web-panel/assets/{index-7wMSBCU7.js → index-2TTLREp7.js} +1 -1
- package/src/assets/web-panel/assets/{index-asWsB34i.js → index-9fgmdiB_.js} +1 -1
- package/src/assets/web-panel/assets/{index-Bf19fKef.js → index-B2WI4Jse.js} +1 -1
- package/src/assets/web-panel/assets/{index-BFs1Tznc.js → index-B9w6Zr_O.js} +1 -1
- package/src/assets/web-panel/assets/{index-B54qoVff.js → index-BG9KlVJl.js} +1 -1
- package/src/assets/web-panel/assets/{index-CEZWQthY.js → index-BGYCtfL-.js} +1 -1
- package/src/assets/web-panel/assets/{index-YlMnFNOi.js → index-Bf9069uM.js} +1 -1
- package/src/assets/web-panel/assets/{index-DidrMvOx.js → index-BrpyZMUe.js} +1 -1
- package/src/assets/web-panel/assets/{index-CBjb2A5R.js → index-CBS8OtL2.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9XoBoty.js → index-CGZGQTF5.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWY7YwDu.js → index-CLeX8Qp7.js} +1 -1
- package/src/assets/web-panel/assets/{index-DP5pPedy.js → index-CdSnkhrR.js} +1 -1
- package/src/assets/web-panel/assets/{index-DSlXL6Ju.js → index-CewbVIM8.js} +1 -1
- package/src/assets/web-panel/assets/index-Cj8Mcdok.js +1 -0
- package/src/assets/web-panel/assets/{index-gkjiFjQd.js → index-CjkiJdIX.js} +1 -1
- package/src/assets/web-panel/assets/{index-CFGLf88d.js → index-Cn71LASJ.js} +1 -1
- package/src/assets/web-panel/assets/{index-D-lpTPS8.js → index-Cqpfzkch.js} +1 -1
- package/src/assets/web-panel/assets/{index-DAESljiJ.js → index-CrBful_u.js} +1 -1
- package/src/assets/web-panel/assets/{index-Cvmc3f25.js → index-CxSgg3Xc.js} +1 -1
- package/src/assets/web-panel/assets/{index-CixqfdRk.js → index-D7yq9nAq.js} +1 -1
- package/src/assets/web-panel/assets/{index-BRZsPxNn.js → index-D9jmNLfO.js} +1 -1
- package/src/assets/web-panel/assets/{index-DWCJnn2O.js → index-DNlvUg0O.js} +1 -1
- package/src/assets/web-panel/assets/{index-D59GbWCN.js → index-DPwOEcUt.js} +1 -1
- package/src/assets/web-panel/assets/{index-BKgaRT0b.js → index-DR1Uw5as.js} +1 -1
- package/src/assets/web-panel/assets/{index-Dj3K5kHs.js → index-DRuSuXJh.js} +1 -1
- package/src/assets/web-panel/assets/{index-CM2X25Er.js → index-DSnQWQ4L.js} +1 -1
- package/src/assets/web-panel/assets/{index-BM7bOUvu.js → index-DdMho2Wr.js} +1 -1
- package/src/assets/web-panel/assets/{index-CLUa68JH.js → index-DjNjO-VL.js} +3 -3
- package/src/assets/web-panel/assets/{index-CkRojEip.js → index-DmtyRKy8.js} +1 -1
- package/src/assets/web-panel/assets/{index-B9aS2VLu.js → index-Dz1TqS34.js} +1 -1
- package/src/assets/web-panel/assets/{index-B8r2t0Ch.js → index-G9bqTRu6.js} +1 -1
- package/src/assets/web-panel/assets/{index-BkAbfBF-.js → index-McW2cdbg.js} +1 -1
- package/src/assets/web-panel/assets/{index-CX4T2uKN.js → index-esCpkxIZ.js} +1 -1
- package/src/assets/web-panel/assets/{index-DDHUx4Yz.js → index-fmwnODwg.js} +1 -1
- package/src/assets/web-panel/assets/index-vira2aS_.js +1 -0
- package/src/assets/web-panel/assets/{index-DZTwP364.js → index-zY56IXHj.js} +1 -1
- package/src/assets/web-panel/assets/{initDefaultProps-BOr4igh3.js → initDefaultProps-CVk4LKJK.js} +1 -1
- package/src/assets/web-panel/assets/{motion-CK469n2j.js → motion-IAABGXc_.js} +1 -1
- package/src/assets/web-panel/assets/{move-DzjudlYQ.js → move-B9HSYeZc.js} +1 -1
- package/src/assets/web-panel/assets/{mtc-parser-BQaKUxC6.js → mtc-parser-CJfDtM89.js} +1 -1
- package/src/assets/web-panel/assets/{omit-MciovCFD.js → omit-D5dYnom7.js} +1 -1
- package/src/assets/web-panel/assets/{pickAttrs-DDPJ4zAz.js → pickAttrs-xbUkaZdY.js} +1 -1
- package/src/assets/web-panel/assets/{placementArrow-Cznyb-jI.js → placementArrow-CIUU5NKN.js} +1 -1
- package/src/assets/web-panel/assets/{responsiveObserve-AJK3SLzJ.js → responsiveObserve-BZpgHE8P.js} +1 -1
- package/src/assets/web-panel/assets/{slide-CPQ28wu7.js → slide-x_8rsSKk.js} +1 -1
- package/src/assets/web-panel/assets/{statusUtils-CFjzvqf_.js → statusUtils-BZyDnVJs.js} +1 -1
- package/src/assets/web-panel/assets/{styleChecker-BPyFfTuR.js → styleChecker-DusfWp6J.js} +1 -1
- package/src/assets/web-panel/assets/{useFlexGapSupport-Dq7N6R05.js → useFlexGapSupport-022JzYAL.js} +1 -1
- package/src/assets/web-panel/assets/{useFs-C3GS0uTc.js → useFs-DRDxX7-3.js} +1 -1
- package/src/assets/web-panel/assets/{usePersonalDataHub-BhgIVzP_.js → usePersonalDataHub-DFrCp7m_.js} +1 -1
- package/src/assets/web-panel/assets/{vnode-4ZD9-MDr.js → vnode-bCuSFOmr.js} +1 -1
- package/src/assets/web-panel/assets/{zoom-Bx4MRVNW.js → zoom-sCpZ0sw7.js} +1 -1
- package/src/assets/web-panel/index.html +1 -1
- package/src/data/changelog.json +26 -0
- package/src/lib/agent-sandbox.js +319 -2
- package/src/lib/lsp/code-intelligence.js +7 -1
- package/src/lib/sandbox-docker-egress.js +507 -0
- package/src/lib/sandbox-egress-authority-monitor.js +137 -0
- package/src/lib/sandbox-egress-proxy.js +167 -10
- package/src/lib/sandbox-egress-worker-thread.js +38 -0
- package/src/lib/sandbox-egress-worker.js +196 -0
- package/src/runtime/agent-core.js +211 -25
- package/src/assets/web-panel/assets/EvolutionSettings-D75_iBoc.js +0 -1
- package/src/assets/web-panel/assets/devWarning-DaEBln_q.js +0 -1
- package/src/assets/web-panel/assets/index-DG1mcYTa.js +0 -1
- package/src/assets/web-panel/assets/index-DRs5Pe8u.js +0 -1
|
@@ -3398,8 +3398,23 @@ export async function executeTool(name, args, context = {}) {
|
|
|
3398
3398
|
throw error;
|
|
3399
3399
|
}
|
|
3400
3400
|
const initialDigest = digestPolicyAuthority(initialProjection);
|
|
3401
|
+
const dockerSandboxDigest =
|
|
3402
|
+
context.sandbox?.engine === "docker-egress"
|
|
3403
|
+
? digestPolicyAuthority(context.sandbox)
|
|
3404
|
+
: null;
|
|
3401
3405
|
shellDispatchPolicyAuthority = Object.freeze({
|
|
3402
3406
|
policyVersion: `cc-shell-policy-authority/v1:${initialDigest}`,
|
|
3407
|
+
revalidateDockerSandbox() {
|
|
3408
|
+
if (
|
|
3409
|
+
!dockerSandboxDigest ||
|
|
3410
|
+
digestPolicyAuthority(liveExecutionContext.sandbox || null) !==
|
|
3411
|
+
dockerSandboxDigest
|
|
3412
|
+
) {
|
|
3413
|
+
const error = new Error("Docker egress sandbox authority changed");
|
|
3414
|
+
error.code = "CC_SHELL_POLICY_AUTHORITY_CHANGED";
|
|
3415
|
+
throw error;
|
|
3416
|
+
}
|
|
3417
|
+
},
|
|
3403
3418
|
async revalidate() {
|
|
3404
3419
|
try {
|
|
3405
3420
|
if (
|
|
@@ -6637,34 +6652,59 @@ async function executeToolInner(
|
|
|
6637
6652
|
);
|
|
6638
6653
|
}
|
|
6639
6654
|
await admitShellDispatch();
|
|
6640
|
-
const {
|
|
6641
|
-
|
|
6642
|
-
|
|
6643
|
-
|
|
6644
|
-
|
|
6645
|
-
|
|
6655
|
+
const {
|
|
6656
|
+
assessAgentSandboxCapabilities,
|
|
6657
|
+
executeDockerEgressShell,
|
|
6658
|
+
executeSandboxedShell,
|
|
6659
|
+
sandboxSummary,
|
|
6660
|
+
} = await import("../lib/agent-sandbox.js");
|
|
6661
|
+
// Keep the proxy on a separate event loop for legacy synchronous
|
|
6662
|
+
// dispatch. The Docker egress route uses an asynchronous session.
|
|
6646
6663
|
const sboxPolicy = shellSandbox.policy || {};
|
|
6647
6664
|
const needsEgress =
|
|
6648
6665
|
shellSandbox.network === true &&
|
|
6649
6666
|
(sboxPolicy.allowedDomains?.length || 0) +
|
|
6650
6667
|
(sboxPolicy.deniedDomains?.length || 0) >
|
|
6651
6668
|
0;
|
|
6669
|
+
const dockerEgress = shellSandbox.engine === "docker-egress";
|
|
6652
6670
|
let egressProxy = null;
|
|
6653
6671
|
let proxyHandle = null;
|
|
6672
|
+
let privateSocketDir = null;
|
|
6673
|
+
let dockerEgressSession = null;
|
|
6674
|
+
let proxyFailed = false;
|
|
6675
|
+
let authorityMonitor = null;
|
|
6654
6676
|
if (needsEgress) {
|
|
6655
6677
|
try {
|
|
6656
|
-
const {
|
|
6657
|
-
await import("../lib/sandbox-egress-
|
|
6658
|
-
|
|
6678
|
+
const { startEgressProxyWorker } =
|
|
6679
|
+
await import("../lib/sandbox-egress-worker.js");
|
|
6680
|
+
if (dockerEgress) {
|
|
6681
|
+
privateSocketDir = fs.mkdtempSync(
|
|
6682
|
+
path.join(os.tmpdir(), "cc-egress-"),
|
|
6683
|
+
);
|
|
6684
|
+
fs.chmodSync(privateSocketDir, 0o700);
|
|
6685
|
+
}
|
|
6686
|
+
proxyHandle = await startEgressProxyWorker(
|
|
6659
6687
|
{
|
|
6660
6688
|
allowedDomains: sboxPolicy.allowedDomains || [],
|
|
6661
6689
|
deniedDomains: sboxPolicy.deniedDomains || [],
|
|
6662
6690
|
allowPrivate: sboxPolicy.allowPrivate === true,
|
|
6663
6691
|
},
|
|
6664
|
-
{
|
|
6692
|
+
{
|
|
6693
|
+
bindHost: "127.0.0.1",
|
|
6694
|
+
...(privateSocketDir
|
|
6695
|
+
? { socketPath: path.join(privateSocketDir, "broker.sock") }
|
|
6696
|
+
: {}),
|
|
6697
|
+
onFailure() {
|
|
6698
|
+
proxyFailed = true;
|
|
6699
|
+
authorityMonitor?.revoke(
|
|
6700
|
+
Object.assign(new Error("Docker egress broker failed"), {
|
|
6701
|
+
code: "CC_DOCKER_EGRESS_BROKER_FAILED",
|
|
6702
|
+
}),
|
|
6703
|
+
);
|
|
6704
|
+
},
|
|
6705
|
+
},
|
|
6665
6706
|
);
|
|
6666
|
-
|
|
6667
|
-
egressProxy = { port: listened.port };
|
|
6707
|
+
if (proxyHandle.port) egressProxy = { port: proxyHandle.port };
|
|
6668
6708
|
} catch {
|
|
6669
6709
|
// If the proxy can't start, leave egressProxy null so the sandbox
|
|
6670
6710
|
// fails closed (refuses) rather than running without enforcement.
|
|
@@ -6675,10 +6715,39 @@ async function executeToolInner(
|
|
|
6675
6715
|
let result;
|
|
6676
6716
|
try {
|
|
6677
6717
|
// Proxy startup and dynamic imports are asynchronous. Re-read the
|
|
6678
|
-
// live authority
|
|
6679
|
-
|
|
6680
|
-
|
|
6681
|
-
|
|
6718
|
+
// live authority after they settle and before sandbox dispatch.
|
|
6719
|
+
if (dockerEgress && proxyHandle?.socketPath) {
|
|
6720
|
+
const { createDockerEgressAuthorityMonitor } =
|
|
6721
|
+
await import("../lib/sandbox-egress-authority-monitor.js");
|
|
6722
|
+
authorityMonitor = createDockerEgressAuthorityMonitor({
|
|
6723
|
+
async revalidate() {
|
|
6724
|
+
await shellDispatchPolicyAuthority?.revalidate?.();
|
|
6725
|
+
shellDispatchPolicyAuthority?.revalidateDockerSandbox?.();
|
|
6726
|
+
refreshPluginExecutionAuthority();
|
|
6727
|
+
if (pluginBinSandboxPolicy) {
|
|
6728
|
+
const error = new Error(
|
|
6729
|
+
"A plugin sandbox authority appeared while Docker egress was running",
|
|
6730
|
+
);
|
|
6731
|
+
error.code = "ERR_PLUGIN_BIN_SANDBOX_ROUTE_CONFLICT";
|
|
6732
|
+
error.pluginBinFailClosed = true;
|
|
6733
|
+
throw error;
|
|
6734
|
+
}
|
|
6735
|
+
if (proxyFailed || proxyHandle.revision !== 0) {
|
|
6736
|
+
const error = new Error(
|
|
6737
|
+
"Docker egress authority changed during execution",
|
|
6738
|
+
);
|
|
6739
|
+
error.code = "CC_DOCKER_EGRESS_AUTHORITY_CHANGED";
|
|
6740
|
+
throw error;
|
|
6741
|
+
}
|
|
6742
|
+
},
|
|
6743
|
+
abortProxy: () => proxyHandle.abort(),
|
|
6744
|
+
});
|
|
6745
|
+
authorityMonitor.start();
|
|
6746
|
+
await authorityMonitor.checkNow();
|
|
6747
|
+
} else {
|
|
6748
|
+
await shellDispatchPolicyAuthority?.revalidate?.();
|
|
6749
|
+
refreshPluginExecutionAuthority();
|
|
6750
|
+
}
|
|
6682
6751
|
if (pluginBinSandboxPolicy) {
|
|
6683
6752
|
const error = new Error(
|
|
6684
6753
|
"A plugin sandbox authority appeared while the legacy shell sandbox was starting",
|
|
@@ -6687,15 +6756,64 @@ async function executeToolInner(
|
|
|
6687
6756
|
error.pluginBinFailClosed = true;
|
|
6688
6757
|
throw error;
|
|
6689
6758
|
}
|
|
6690
|
-
|
|
6691
|
-
|
|
6692
|
-
|
|
6693
|
-
|
|
6694
|
-
|
|
6695
|
-
|
|
6696
|
-
|
|
6697
|
-
|
|
6759
|
+
if (dockerEgress && !proxyHandle?.socketPath) {
|
|
6760
|
+
result = {
|
|
6761
|
+
stdout: "",
|
|
6762
|
+
stderr: "Docker egress policy broker is unavailable",
|
|
6763
|
+
exitCode: 1,
|
|
6764
|
+
failedToStart: true,
|
|
6765
|
+
sandboxCapabilities: assessAgentSandboxCapabilities(
|
|
6766
|
+
shellSandbox,
|
|
6767
|
+
{
|
|
6768
|
+
execution: { attempted: true, started: false },
|
|
6769
|
+
availability: {
|
|
6770
|
+
available: false,
|
|
6771
|
+
reason: "egress-broker-unavailable",
|
|
6772
|
+
},
|
|
6773
|
+
},
|
|
6774
|
+
),
|
|
6775
|
+
};
|
|
6776
|
+
} else if (dockerEgress) {
|
|
6777
|
+
result = await executeDockerEgressShell(
|
|
6778
|
+
args.command,
|
|
6779
|
+
shellSandbox,
|
|
6780
|
+
{
|
|
6781
|
+
cwd: args.cwd || cwd,
|
|
6782
|
+
timeoutMs: _resolveShellTimeout(args.timeout),
|
|
6783
|
+
brokerSocketPath: proxyHandle.socketPath,
|
|
6784
|
+
env: sandboxChildEnvironment,
|
|
6785
|
+
auditContext: createShellProcessAuditContext(),
|
|
6786
|
+
onSession(session) {
|
|
6787
|
+
dockerEgressSession = session;
|
|
6788
|
+
authorityMonitor.attachSession(session);
|
|
6789
|
+
},
|
|
6790
|
+
async beforeStart() {
|
|
6791
|
+
await authorityMonitor.checkFresh();
|
|
6792
|
+
authorityMonitor.assertAuthorized();
|
|
6793
|
+
},
|
|
6794
|
+
beforeReceipt: () => authorityMonitor.finish(),
|
|
6795
|
+
},
|
|
6796
|
+
);
|
|
6797
|
+
} else {
|
|
6798
|
+
result = executeSandboxedShell(args.command, shellSandbox, {
|
|
6799
|
+
cwd: args.cwd || cwd,
|
|
6800
|
+
timeout: _resolveShellTimeout(args.timeout),
|
|
6801
|
+
maxBuffer: 1024 * 1024,
|
|
6802
|
+
egressProxy,
|
|
6803
|
+
env: sandboxChildEnvironment,
|
|
6804
|
+
auditContext: createShellProcessAuditContext(),
|
|
6805
|
+
});
|
|
6806
|
+
}
|
|
6698
6807
|
} finally {
|
|
6808
|
+
authorityMonitor?.stop();
|
|
6809
|
+
await authorityMonitor?.awaitCleanup();
|
|
6810
|
+
if (dockerEgressSession) {
|
|
6811
|
+
try {
|
|
6812
|
+
await dockerEgressSession.close();
|
|
6813
|
+
} catch {
|
|
6814
|
+
/* execution result retains its cleanup status */
|
|
6815
|
+
}
|
|
6816
|
+
}
|
|
6699
6817
|
if (proxyHandle) {
|
|
6700
6818
|
try {
|
|
6701
6819
|
await proxyHandle.close();
|
|
@@ -6703,10 +6821,52 @@ async function executeToolInner(
|
|
|
6703
6821
|
/* best-effort teardown */
|
|
6704
6822
|
}
|
|
6705
6823
|
}
|
|
6824
|
+
if (privateSocketDir) {
|
|
6825
|
+
try {
|
|
6826
|
+
fs.rmSync(path.join(privateSocketDir, "broker.sock"), {
|
|
6827
|
+
force: true,
|
|
6828
|
+
});
|
|
6829
|
+
fs.rmdirSync(privateSocketDir);
|
|
6830
|
+
} catch {
|
|
6831
|
+
/* a failed broker cleanup remains visible via failed-to-start */
|
|
6832
|
+
}
|
|
6833
|
+
}
|
|
6834
|
+
}
|
|
6835
|
+
if (dockerEgress && authorityMonitor?.revocationError) {
|
|
6836
|
+
const revoked = authorityMonitor.revocationError;
|
|
6837
|
+
result.authorityFailure = {
|
|
6838
|
+
code: revoked.code || "CC_DOCKER_EGRESS_AUTHORITY_CHANGED",
|
|
6839
|
+
...(revoked.cleanupError ? { cleanupFailed: true } : {}),
|
|
6840
|
+
};
|
|
6841
|
+
if (result.exitCode === 0) {
|
|
6842
|
+
result = {
|
|
6843
|
+
...result,
|
|
6844
|
+
exitCode: 1,
|
|
6845
|
+
stderr:
|
|
6846
|
+
"Docker egress authority was revoked; execution outcome must not be retried automatically.",
|
|
6847
|
+
executionOutcome: "completed-cleanup-unknown",
|
|
6848
|
+
retrySafe: false,
|
|
6849
|
+
sandboxCapabilities: assessAgentSandboxCapabilities(
|
|
6850
|
+
shellSandbox,
|
|
6851
|
+
{
|
|
6852
|
+
execution: { attempted: true, outcomeUnknown: true },
|
|
6853
|
+
},
|
|
6854
|
+
),
|
|
6855
|
+
};
|
|
6856
|
+
}
|
|
6706
6857
|
}
|
|
6707
6858
|
const common = {
|
|
6708
6859
|
sandbox: sandboxSummary(shellSandbox),
|
|
6709
6860
|
sandboxCapabilities: result.sandboxCapabilities || null,
|
|
6861
|
+
...(result.executionOutcome
|
|
6862
|
+
? {
|
|
6863
|
+
executionOutcome: result.executionOutcome,
|
|
6864
|
+
retrySafe: result.retrySafe,
|
|
6865
|
+
}
|
|
6866
|
+
: {}),
|
|
6867
|
+
...(result.authorityFailure
|
|
6868
|
+
? { authorityFailure: result.authorityFailure }
|
|
6869
|
+
: {}),
|
|
6710
6870
|
shellCommandPolicy: shellPolicy,
|
|
6711
6871
|
approval: approvalOutcome,
|
|
6712
6872
|
policyTrace: ["shell-policy", "approval", "sandbox"],
|
|
@@ -11740,7 +11900,33 @@ export async function chatWithTools(rawMessages, options) {
|
|
|
11740
11900
|
throw new Error("Invalid API response: no choices returned");
|
|
11741
11901
|
}
|
|
11742
11902
|
const choice = data.choices[0];
|
|
11743
|
-
const
|
|
11903
|
+
const providerMessage = choice.message;
|
|
11904
|
+
if (
|
|
11905
|
+
!providerMessage ||
|
|
11906
|
+
typeof providerMessage !== "object" ||
|
|
11907
|
+
Array.isArray(providerMessage) ||
|
|
11908
|
+
providerMessage.role !== "assistant" ||
|
|
11909
|
+
(providerMessage.content !== null &&
|
|
11910
|
+
providerMessage.content !== undefined &&
|
|
11911
|
+
typeof providerMessage.content !== "string") ||
|
|
11912
|
+
(Object.hasOwn(providerMessage, "tool_calls") &&
|
|
11913
|
+
!Array.isArray(providerMessage.tool_calls)) ||
|
|
11914
|
+
(Object.hasOwn(providerMessage, "reasoning_content") &&
|
|
11915
|
+
providerMessage.reasoning_content !== null &&
|
|
11916
|
+
typeof providerMessage.reasoning_content !== "string") ||
|
|
11917
|
+
Object.keys(providerMessage).some(
|
|
11918
|
+
(key) =>
|
|
11919
|
+
!["role", "content", "tool_calls", "reasoning_content"].includes(key),
|
|
11920
|
+
)
|
|
11921
|
+
) {
|
|
11922
|
+
throw new TypeError("Invalid API response: unsupported assistant message");
|
|
11923
|
+
}
|
|
11924
|
+
// Provider reasoning text is not part of the governed replay protocol.
|
|
11925
|
+
const message = { role: "assistant", content: providerMessage.content };
|
|
11926
|
+
if (Object.hasOwn(providerMessage, "tool_calls")) {
|
|
11927
|
+
message.tool_calls = providerMessage.tool_calls;
|
|
11928
|
+
}
|
|
11929
|
+
const out = { message };
|
|
11744
11930
|
const providerReceipt = supportsOpenAIRequestIdentity
|
|
11745
11931
|
? _openAIProviderRequestReceipt(response, data, providerRequestId)
|
|
11746
11932
|
: null;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as r,J as T,U as c,c as a,K as o,S as I,V as C,o as M,r as k,a as V,b as L,P as R,Q as d,R as m,F,Z as H}from"./vendor-Bn1JzzAn.js";import{_ as J,u as N,d as i}from"./index-CLUa68JH.js";import{R as W}from"./icons-DG5UD-6K.js";function B(P){return["ask","agent"].map(t=>{const n=P?.readiness?.[t],e=n?.state==="admitted",f=n?.scope==="deployment-admission"&&n.runtimeVerification==="not_checked"&&Array.isArray(n.requiredCommands)&&n.requiredCommands.includes(t)&&(e?n.ready===!0&&n.taskReady===null:["not_configured","disabled","invalid","command_not_allowed"].includes(n.state)&&n.ready===!1&&n.taskReady===!1);return{command:t,state:f?n.state:"unknown",summary:f?e?"部署准入通过":"部署准入被阻断":"未提供准入诊断",detail:f&&typeof n.detail=="string"?n.detail:"当前 CLI 未提供可识别的部署准入诊断,请更新 CLI。",remediation:f&&typeof n.remediation=="string"?n.remediation:""}})}function U(P,t){for(const n of Object.keys(P))delete P[n];Object.assign(P,{source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[],readiness:null},t||{})}const A={__name:"EvolutionSettings",setup(P,{expose:t}){t();const n=N(),e=k(!1),f=k(!1),S=k(!1),p=k(!1),w=k(!1),g=k(""),_=k(""),E=k(""),v=V({source:"none",effectiveEnabled:!1,profileEnabled:!1,verified:!1,commands:[]}),x=L(()=>e.value||f.value||S.value||p.value||w.value),h=L(()=>B(v));function b(s){U(v,s),_.value=v.descriptorPath||"",E.value=v.trustRootPath||"",g.value=v.modulePath||g.value||""}async function u(s,z=3e4){return await n.waitConnected(8e3),(await n.sendRaw(s,z)).result}async function y(){e.value=!0;try{b(await u({type:"evolution.deployment.status"}))}catch(s){i.error("读取配置失败:"+s.message)}finally{e.value=!1}}async function O(){if(!_.value.trim()||!E.value.trim()){i.warning("请填写描述符和信任根公钥的绝对路径");return}f.value=!0;try{b(await u({type:"evolution.deployment.configure",descriptorPath:_.value.trim(),trustRootPath:E.value.trim()},6e4)),i.success("签名校验通过,配置已保存并启用;自动发布仍为 HOLD")}catch(s){i.error("配置失败:"+s.message)}finally{f.value=!1}}async function D(){if(!g.value.trim()){i.warning("请填写测试部署宿主模块的服务器绝对路径");return}p.value=!0;try{b(await u({type:"evolution.deployment.init-test",modulePath:g.value.trim()},6e4)),i.success("TEST 测试开发环境已生成并启用;禁止用于生产")}catch(s){i.error("生成测试环境失败:"+s.message)}finally{p.value=!1}}async function l(){if(!_.value.trim()||!E.value.trim()){i.warning("请填写正式描述符和正式信任根公钥的绝对路径");return}w.value=!0;try{b(await u({type:"evolution.deployment.replace-test",descriptorPath:_.value.trim(),trustRootPath:E.value.trim()},6e4)),i.success("测试根已安全轮换为正式受管证书;请重启 cc ui、IDE 或 Desktop 长驻进程后做正式验证")}catch(s){i.error("替换失败:"+s.message)}finally{w.value=!1}}async function q(){S.value=!0;try{b(await u({type:"evolution.deployment.set-enabled",enabled:!v.profileEnabled})),i.success(v.profileEnabled?"已启用":"已停用")}catch(s){i.error("更新失败:"+s.message)}finally{S.value=!1}}M(y);const j={ws:n,loading:e,saving:f,toggling:S,initializingTest:p,replacingTest:w,modulePath:g,descriptorPath:_,trustRootPath:E,status:v,busy:x,readinessRows:h,apply:b,request:u,loadStatus:y,save:O,initTest:D,replaceTest:l,toggle:q,computed:L,onMounted:M,reactive:V,ref:k,get ReloadOutlined(){return W},get message(){return i},get useWsStore(){return N},get deploymentReadinessRows(){return B},get replaceDeploymentStatus(){return U}};return Object.defineProperty(j,"__isScriptSetup",{enumerable:!1,value:!0}),j}},K={class:"page-head"},Q={class:"mono"},Z={class:"mono"},G={class:"admission-status","aria-live":"polite"},X=["data-admission-command"],Y={class:"mono"},$={key:0,class:"mono"};function ee(P,t,n,e,f,S){const p=r("a-button"),w=r("a-alert"),g=r("a-input"),_=r("a-form-item"),E=r("a-divider"),v=r("a-space"),x=r("a-form"),h=r("a-card"),b=r("a-col"),u=r("a-tag"),y=r("a-descriptions-item"),O=r("a-descriptions"),D=r("a-row");return R(),T("div",null,[c("div",K,[t[4]||(t[4]=c("div",null,[c("h2",{class:"page-title"},"Skill 自进化配置"),c("p",{class:"page-sub"},"统一配置受治理部署;CLI、IDE 插件与 cc ui 共享。")],-1)),a(p,{loading:e.loading,onClick:e.loadStatus},{icon:o(()=>[a(e.ReloadOutlined)]),default:o(()=>[t[3]||(t[3]=d("刷新 ",-1))]),_:1},8,["loading"])]),a(w,{message:"不会开启自动发布",description:"此开关只启用经过签名的 Skill 自进化运行时。候选项进入 active 前仍需人工审核,自动发布始终保持 HOLD。",type:"warning","show-icon":"",class:"notice"}),e.status.deploymentMode==="test"?(R(),I(w,{key:0,message:"当前为 TEST 测试开发环境",description:"本机自动生成的测试密钥不能用于生产。正式 descriptor 和 trust root 到位后,请使用下方“一键替换测试证书并转正式”。",type:"error","show-icon":"",class:"notice"})):C("v-if",!0),a(D,{gutter:16},{default:o(()=>[a(b,{xs:24,xl:15},{default:o(()=>[a(h,{title:"上线前测试与正式部署",class:"panel-card"},{default:o(()=>[a(x,{layout:"vertical"},{default:o(()=>[a(_,{label:"测试部署宿主模块"},{extra:o(()=>[...t[5]||(t[5]=[d("首次填写后点击一次即可生成 Ed25519 测试密钥、签名描述符并启用;宿主模块修改后再次点击可刷新。",-1)])]),default:o(()=>[a(g,{value:e.modulePath,"onUpdate:value":t[0]||(t[0]=l=>e.modulePath=l),disabled:e.busy,placeholder:"运行 cc ui 的机器上 deployment host .mjs/.js 的绝对路径"},null,8,["value","disabled"])]),_:1}),a(p,{type:"primary",loading:e.initializingTest,onClick:e.initTest},{default:o(()=>[...t[6]||(t[6]=[d("一键生成/刷新测试环境",-1)])]),_:1},8,["loading"]),a(E),a(_,{label:"签名部署描述符"},{extra:o(()=>[...t[7]||(t[7]=[d("Web 页面不能读取本机文件选择器,请填写运行 cc ui 的机器上的绝对路径。",-1)])]),default:o(()=>[a(g,{value:e.descriptorPath,"onUpdate:value":t[1]||(t[1]=l=>e.descriptorPath=l),disabled:e.busy,placeholder:"deployment descriptor JSON 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(_,{label:"Ed25519 信任根公钥"},{default:o(()=>[a(g,{value:e.trustRootPath,"onUpdate:value":t[2]||(t[2]=l=>e.trustRootPath=l),disabled:e.busy,placeholder:"信任根 public key 的服务器绝对路径"},null,8,["value","disabled"])]),_:1}),a(v,null,{default:o(()=>[a(p,{type:"primary",loading:e.saving,onClick:e.save},{default:o(()=>[...t[8]||(t[8]=[d("校验、保存并启用",-1)])]),_:1},8,["loading"]),a(p,{danger:e.status.profileEnabled,disabled:!e.status.descriptorPath,loading:e.toggling,onClick:e.toggle},{default:o(()=>[d(m(e.status.profileEnabled?"停用":"启用"),1)]),_:1},8,["danger","disabled","loading"]),e.status.deploymentMode==="test"?(R(),I(p,{key:0,loading:e.replacingTest,onClick:e.replaceTest},{default:o(()=>[...t[9]||(t[9]=[d("一键替换测试证书并转正式",-1)])]),_:1},8,["loading"])):C("v-if",!0)]),_:1})]),_:1})]),_:1})]),_:1}),a(b,{xs:24,xl:9},{default:o(()=>[a(h,{title:"治理状态",class:"panel-card status-card"},{default:o(()=>[a(O,{column:1,size:"small"},{default:o(()=>[a(y,{label:"部署模式"},{default:o(()=>[a(u,{color:e.status.deploymentMode==="test"?"red":"blue"},{default:o(()=>[d(m(e.status.deploymentMode==="test"?"TEST(仅限上线前联调)":e.status.deploymentMode||"none"),1)]),_:1},8,["color"])]),_:1}),a(y,{label:"生效状态"},{default:o(()=>[a(u,{color:e.status.effectiveEnabled?"green":"default"},{default:o(()=>[d(m(e.status.effectiveEnabled?"已启用":"未启用"),1)]),_:1},8,["color"])]),_:1}),a(y,{label:"生效来源"},{default:o(()=>[d(m(e.status.source||"none"),1)]),_:1}),a(y,{label:"签名校验"},{default:o(()=>[a(u,{color:e.status.verified?"green":"red"},{default:o(()=>[d(m(e.status.verified?"已通过":"未通过"),1)]),_:1},8,["color"])]),_:1}),a(y,{label:"自动发布"},{default:o(()=>[a(u,{color:"orange"},{default:o(()=>[...t[10]||(t[10]=[d("HOLD",-1)])]),_:1})]),_:1}),a(y,{label:"配置文件"},{default:o(()=>[c("span",Q,m(e.status.profilePath||"—"),1)]),_:1}),a(y,{label:"允许命令"},{default:o(()=>[c("span",Z,m((e.status.commands||[]).join(", ")||"—"),1)]),_:1})]),_:1}),c("section",G,[t[11]||(t[11]=c("h3",null,"模型命令部署准入",-1)),t[12]||(t[12]=c("p",null,"这里只检查部署准入,实际任务运行尚未验证。",-1)),(R(!0),T(F,null,H(e.readinessRows,l=>(R(),T("div",{key:l.command,"data-admission-command":l.command},[c("strong",null,m(l.command)+":"+m(l.summary),1),c("p",Y,m(l.detail),1),l.remediation?(R(),T("p",$,m(l.remediation),1)):C("v-if",!0)],8,X))),128))]),e.status.error?(R(),I(w,{key:0,message:e.status.error,type:"error","show-icon":"",class:"error"},null,8,["message"])):C("v-if",!0)]),_:1})]),_:1})]),_:1})])}const le=J(A,[["render",ee],["__scopeId","data-v-5a42105e"],["__file","/tmp/cc-web-panel-IFJ857/repo/packages/web-panel/src/views/EvolutionSettings.vue"]]);export{le as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Q as r}from"./index-CLUa68JH.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-D6nf9-c-.js";import{a0 as t}from"./index-CLUa68JH.js";import"./vendor-Bn1JzzAn.js";import"./responsiveObserve-AJK3SLzJ.js";import"./useFlexGapSupport-Dq7N6R05.js";import"./styleChecker-BPyFfTuR.js";import"./index-Dj3K5kHs.js";import"./icons-DG5UD-6K.js";const l=t(o);export{l as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{C as o}from"./Col-DmiRHy96.js";import{a0 as t}from"./index-CLUa68JH.js";import"./vendor-Bn1JzzAn.js";import"./index-Dj3K5kHs.js";import"./icons-DG5UD-6K.js";const s=t(o);export{s as default};
|