| """ | |
| Sandbox execution subsystem (ADR-0007 Phase 1). | |
| Two halves that speak a small JSON-over-HTTP protocol: | |
| - `kernel.py` — the exec-kernel HTTP server that RUNS inside the sandbox | |
| (container in prod; a localhost subprocess in dev/test). Holds | |
| the persistent per-session namespace and `exec`s untrusted code. | |
| - `executor.py` — the `SandboxedExecutor` CLIENT that runs in the agent process, | |
| starts/tears-down one kernel per session (pluggable launcher), | |
| and proxies `Executor`-protocol calls over HTTP. | |
| `mcp_bridge.py` builds the in-kernel MCP tool stubs so injected tool NAMES resolve | |
| to callables that dispatch to the vetted MCP HTTP server (tools stay outside the | |
| sandbox — only the untrusted free-form code is confined). | |
| """ | |
| __all__ = ["SandboxedExecutor", "get_sandboxed_executor"] | |
| def __getattr__(name): # lazy re-export so importing the package is dep-light | |
| if name in ("SandboxedExecutor", "get_sandboxed_executor"): | |
| from .executor import SandboxedExecutor, get_sandboxed_executor | |
| return { | |
| "SandboxedExecutor": SandboxedExecutor, | |
| "get_sandboxed_executor": get_sandboxed_executor, | |
| }[name] | |
| raise AttributeError(name) | |