openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
109 lines (108 loc) • 3.91 kB
JavaScript
import { n as getRuntimeConfig } from "./io.runtime-B9iJRs3w.js";
import "./config-Cs0XXL3x.js";
import "./constants-DE2EIeEP.js";
import "./tool-policy-WMCUEiT6.js";
import "./config-RoLkL_H5.js";
import "./runtime-status-6c8Jb1Kg.js";
import "./sanitize-env-vars-BMa_hV9u.js";
import "./docker-BzxWmWPm.js";
import { n as resolveSandboxAgentId } from "./shared-DdMEwpA0.js";
import { a as readRegistry, c as removeRegistryEntry, r as readBrowserRegistry, s as removeBrowserRegistryEntry } from "./registry-Blki4jt_.js";
import { M as dockerSandboxBackendManager } from "./ssh-backend-Bi2dY2r6.js";
import { o as getSandboxBackendManager, r as stopCachedBrowserBridgesForContainer } from "./browser-bridges-Cf8_qfWT.js";
import "./context-B_khSODz.js";
//#region src/agents/sandbox/manage.ts
/**
* CLI-facing sandbox management helpers.
*
* Lists and removes registered runtime and browser containers using backend manager status.
*/
function toBrowserDockerRuntimeEntry(entry) {
return {
...entry,
backendId: "docker",
runtimeLabel: entry.containerName,
configLabelKind: "BrowserImage"
};
}
/** Lists registered sandbox containers with live backend status and config-label match state. */
async function listSandboxContainers() {
const config = getRuntimeConfig();
const registry = await readRegistry();
const results = [];
for (const entry of registry.entries) {
const backendId = entry.backendId ?? "docker";
const manager = getSandboxBackendManager(backendId);
if (!manager) {
results.push({
...entry,
running: false,
imageMatch: true
});
continue;
}
const agentId = resolveSandboxAgentId(entry.sessionKey);
const runtime = await manager.describeRuntime({
entry,
config,
agentId
});
results.push({
...entry,
image: runtime.actualConfigLabel ?? entry.image,
running: runtime.running,
imageMatch: runtime.configLabelMatch
});
}
return results;
}
/** Lists registered browser sandbox containers with live Docker status. */
async function listSandboxBrowsers() {
const config = getRuntimeConfig();
const registry = await readBrowserRegistry();
const results = [];
for (const entry of registry.entries) {
const agentId = resolveSandboxAgentId(entry.sessionKey);
const runtime = await dockerSandboxBackendManager.describeRuntime({
entry: toBrowserDockerRuntimeEntry(entry),
config,
agentId
});
results.push({
...entry,
image: runtime.actualConfigLabel ?? entry.image,
running: runtime.running,
imageMatch: runtime.configLabelMatch
});
}
return results;
}
/** Removes one sandbox container from its backend and registry. */
async function removeSandboxContainer(containerName) {
const config = getRuntimeConfig();
const entry = (await readRegistry()).entries.find((item) => item.containerName === containerName);
if (entry) {
const backendId = entry.backendId ?? "docker";
const manager = getSandboxBackendManager(backendId);
if (!manager) throw new Error(`Sandbox backend "${backendId}" is unavailable; enable its plugin before removing this runtime.`);
await manager.removeRuntime({
entry,
config,
agentId: resolveSandboxAgentId(entry.sessionKey)
});
}
await removeRegistryEntry(containerName);
}
/** Removes one browser sandbox container, registry entry, and any in-process bridge server. */
async function removeSandboxBrowserContainer(containerName) {
const config = getRuntimeConfig();
const entry = (await readBrowserRegistry()).entries.find((item) => item.containerName === containerName);
await stopCachedBrowserBridgesForContainer(containerName);
if (entry) await dockerSandboxBackendManager.removeRuntime({
entry: toBrowserDockerRuntimeEntry(entry),
config
});
await removeBrowserRegistryEntry(containerName);
}
//#endregion
export { removeSandboxContainer as i, listSandboxContainers as n, removeSandboxBrowserContainer as r, listSandboxBrowsers as t };