mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-06 20:15:17 +02:00
Relocate the entire new_chat/middleware/ package to the shared kernel as one cohesive unit (it is live shared infrastructure: the multi-agent stack wraps nearly every middleware via multi_agent_chat/middleware/main_agent/*, and anonymous_agent consumes it too). Flip 69 live importers across both the package-path and submodule-path forms. Shims left for the frozen single-agent stack: a package __init__ re-export plus submodule shims for permission, skills_backends, and scoped_model_fallback (the three imported via submodule path by chat_deepagent/subagents). Cycle break: importing shared.middleware previously reached back into new_chat.tools at module load, which dragged in new_chat.__init__ -> chat_deepagent -> the middleware shim -> half-initialized shared.middleware. Made action_log's ToolDefinition import TYPE_CHECKING-only and tool_call_repair's INVALID_TOOL_NAME import function-local. These tools-package back-edges fully resolve in slice 6. Asset note: skills_backends._default_builtin_root now walks to app/agents/new_chat/skills/builtin (the skills/ tree migrates in slice 7).
63 lines
2.2 KiB
Python
63 lines
2.2 KiB
Python
"""Filesystem backend resolver for cloud and desktop-local modes."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Callable
|
|
from functools import lru_cache
|
|
|
|
from deepagents.backends.protocol import BackendProtocol
|
|
from deepagents.backends.state import StateBackend
|
|
from langgraph.prebuilt.tool_node import ToolRuntime
|
|
|
|
from app.agents.shared.filesystem_selection import FilesystemMode, FilesystemSelection
|
|
from app.agents.shared.middleware.kb_postgres_backend import KBPostgresBackend
|
|
from app.agents.shared.middleware.multi_root_local_folder_backend import (
|
|
MultiRootLocalFolderBackend,
|
|
)
|
|
|
|
|
|
@lru_cache(maxsize=64)
|
|
def _cached_multi_root_backend(
|
|
mounts: tuple[tuple[str, str], ...],
|
|
) -> MultiRootLocalFolderBackend:
|
|
return MultiRootLocalFolderBackend(mounts)
|
|
|
|
|
|
def build_backend_resolver(
|
|
selection: FilesystemSelection,
|
|
*,
|
|
search_space_id: int | None = None,
|
|
) -> Callable[[ToolRuntime], BackendProtocol]:
|
|
"""Create deepagents backend resolver for the selected filesystem mode.
|
|
|
|
In cloud mode the resolver returns a fresh :class:`KBPostgresBackend`
|
|
bound to the current ``runtime`` so the backend can read staging state
|
|
(``staged_dirs``, ``pending_moves``, ``files`` cache, ``kb_anon_doc``,
|
|
``kb_matched_chunk_ids``) for each tool call. When no ``search_space_id``
|
|
is provided, the resolver falls back to :class:`StateBackend` (used by
|
|
sub-agents and tests that don't need DB-backed reads).
|
|
|
|
Desktop-local mode unchanged.
|
|
"""
|
|
|
|
if selection.mode == FilesystemMode.DESKTOP_LOCAL_FOLDER and selection.local_mounts:
|
|
|
|
def _resolve_local(_runtime: ToolRuntime) -> MultiRootLocalFolderBackend:
|
|
mounts = tuple(
|
|
(entry.mount_id, entry.root_path) for entry in selection.local_mounts
|
|
)
|
|
return _cached_multi_root_backend(mounts)
|
|
|
|
return _resolve_local
|
|
|
|
if search_space_id is not None:
|
|
|
|
def _resolve_kb(runtime: ToolRuntime) -> BackendProtocol:
|
|
return KBPostgresBackend(search_space_id, runtime)
|
|
|
|
return _resolve_kb
|
|
|
|
def _resolve_state(runtime: ToolRuntime) -> StateBackend:
|
|
return StateBackend(runtime)
|
|
|
|
return _resolve_state
|