refactor: SandboxAgent + SDK Shell/Filesystem; agent-browser CLI; nuke FastAPI sidecar
Combined commits 2+3 of the migration plan because the FastAPI sidecar removal in commit 2 broke ``browser_action`` (which lived in the sidecar); they have to land together. Sandbox tool layer (commit 2 piece): - ``build_strix_agent`` now returns a ``SandboxAgent`` with ``capabilities=[Filesystem(), Shell()]``. The SDK runtime binds the capabilities to the live sandbox session per-run; agents get ``exec_command``, ``write_stdin``, ``apply_patch``, ``view_image`` function tools auto-merged into their tool list. Plain ``Agent`` short-circuits capability binding (``agents/sandbox/runtime.py:190``). - Drop ``Compaction`` from the default capability set — it's OpenAI-Responses-API-only and useless for our litellm-routed Anthropic setup. - Delete the entire custom in-container tool layer: - ``strix/tools/terminal/`` (5 files, 748 LoC libtmux) - ``strix/tools/file_edit/`` (3 files, 276 LoC) - ``strix/tools/python/`` (5 files, 459 LoC) - ``strix/runtime/tool_server.py`` (163 LoC FastAPI sidecar) - ``strix/tools/_sandbox_dispatch.py`` (117 LoC) - ``strix/tools/registry.py`` (109 LoC) - ``strix/tools/context.py`` (12 LoC) - Drop the corresponding TUI renderers (``terminal_renderer.py``, ``file_edit_renderer.py``, ``python_renderer.py``) and update ``interface/tool_components/__init__.py``. Browser → agent-browser CLI (commit 3 piece): - Install ``agent-browser@0.26.0`` globally in the Dockerfile right after the existing ``npm install -g`` block. Run ``agent-browser install --with-deps`` (apt, root) and ``agent-browser install`` (Chrome download, pentester) + ``agent-browser doctor --offline --quick`` smoke test. - Drop the explicit Playwright system-deps apt list (replaced by ``--with-deps``) and ``RUN .venv/bin/python -m playwright install chromium``. - Vendor ``agent-browser/skill-data/core/SKILL.md`` → ``strix/skills/tooling/agent_browser.md`` (476 lines). Adapt frontmatter to Strix format; strip the install/Quickstart and the ``agent-browser skills get electron|slack|...`` specialized-skills block; add the "Caido proxy is wired via env vars; do not pass ``--proxy``" note. - ``_resolve_skills`` now eagerly loads ``tooling/agent_browser`` for every agent (matches the previous unconditional ``browser_action`` in ``_BASE_TOOLS``). - Delete ``strix/tools/browser/`` (5 files, 1338 LoC) and the ``browser_renderer.py`` TUI render. Sandbox plumbing: - Drop ``bearer`` token, ``tool_server_host_port`` resolution + bundle keys, ``TOOL_SERVER_TOKEN``/``TOOL_SERVER_PORT``/ ``STRIX_SANDBOX_EXECUTION_TIMEOUT`` from the manifest env in ``session_manager.create_or_reuse``. Caido proxy env vars (``http_proxy``, ``https_proxy``, ``ALL_PROXY``) stay; manifest applies them to every ``docker exec``-spawned process. - Drop ``sandbox_token`` and ``tool_server_host_port`` params from ``make_agent_context`` and the ``create_agent`` graph tool. - Drop the tool-server health-check from ``entry.py`` (only Caido's ``wait_for_tcp_ready`` remains). - ``docker-entrypoint.sh``: delete the ~30 line ``Starting tool server...`` block (sudo + uvicorn launch + curl /health poll). Add ``NO_PROXY=localhost,127.0.0.1`` to ``/etc/profile.d/proxy.sh`` and ``/etc/environment`` so the agent-browser daemon's CDP traffic on localhost isn't routed through Caido. pyproject.toml: - ``[project.optional-dependencies] sandbox = []`` (every member of the previous list — fastapi, uvicorn, ipython, openhands-aci, playwright, libtmux — is gone with the sidecar). - Drop ``numpydoc.*``, ``IPython.*``, ``openhands_aci.*``, ``playwright.*``, ``uvicorn.*``, ``pyte.*``, ``libtmux.*`` from the missing-imports module list. - Drop the per-file ruff ignores for the deleted modules. Net delta: −5512 LoC. ruff drops to 3 errors (was 21 baseline). mypy falls to 69 errors over 3 files (was 84 over 8 — the drop comes from deleting the modules with the worst untyped-import problems). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+1
-27
@@ -49,14 +49,7 @@ dependencies = [
|
||||
strix = "strix.interface.main:main"
|
||||
|
||||
[project.optional-dependencies]
|
||||
sandbox = [
|
||||
"fastapi",
|
||||
"uvicorn",
|
||||
"ipython>=9.3.0",
|
||||
"openhands-aci>=0.3.0",
|
||||
"playwright>=1.48.0",
|
||||
"libtmux>=0.46.2",
|
||||
]
|
||||
sandbox = []
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
@@ -104,20 +97,13 @@ pretty = true
|
||||
[[tool.mypy.overrides]]
|
||||
module = [
|
||||
"litellm.*",
|
||||
"numpydoc.*",
|
||||
"rich.*",
|
||||
"IPython.*",
|
||||
"openhands_aci.*",
|
||||
"playwright.*",
|
||||
"uvicorn.*",
|
||||
"jinja2.*",
|
||||
"pydantic_settings.*",
|
||||
"jwt.*",
|
||||
"httpx.*",
|
||||
"gql.*",
|
||||
"textual.*",
|
||||
"pyte.*",
|
||||
"libtmux.*",
|
||||
"cvss.*",
|
||||
"scrubadub.*",
|
||||
"docker.*",
|
||||
@@ -246,10 +232,6 @@ ignore = [
|
||||
"strix/tools/todo/tools.py" = ["TC002"]
|
||||
"strix/tools/thinking/tool.py" = ["TC002"]
|
||||
"strix/tools/web_search/tool.py" = ["TC002"]
|
||||
"strix/tools/file_edit/tools.py" = ["TC002"]
|
||||
"strix/tools/browser/tool.py" = ["TC002"]
|
||||
"strix/tools/terminal/tool.py" = ["TC002"]
|
||||
"strix/tools/python/tool.py" = ["TC002"]
|
||||
"strix/tools/proxy/tools.py" = ["TC002", "PLR0911"]
|
||||
"strix/tools/agents_graph/tools.py" = ["TC002"]
|
||||
"strix/agents/factory.py" = ["TC002"]
|
||||
@@ -272,14 +254,6 @@ ignore = [
|
||||
"strix/interface/main.py" = ["BLE001", "PLC0415", "PLR0912", "PLR0915"]
|
||||
"strix/interface/streaming_parser.py" = ["PLC0415"]
|
||||
"strix/interface/tool_components/agent_message_renderer.py" = ["PLC0415"]
|
||||
# Each short-circuit error return in the sandbox dispatch is a distinct,
|
||||
# documented failure mode the model needs to see verbatim.
|
||||
"strix/tools/_sandbox_dispatch.py" = ["PLR0911"]
|
||||
# StrixSession + StrixTracingProcessor catch broad Exception
|
||||
# intentionally: compressor / sanitizer / disk failures must not tear
|
||||
# down the run. Calls already log at exception level.
|
||||
"strix/llm/strix_session.py" = ["BLE001"]
|
||||
"strix/telemetry/strix_processor.py" = ["BLE001"]
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
force-single-line = false
|
||||
|
||||
Reference in New Issue
Block a user