refactor(agents): colocate main-agent middleware under main_agent/ slice

Vertical-slice colocation: all main-agent code should live under
main_agent/ instead of being split across a parallel middleware/main_agent
tree. Move multi_agent_chat/middleware/main_agent/ -> main_agent/middleware/
and its assembler middleware/stack.py -> main_agent/middleware/stack.py, so
the main-agent slice is self-contained (graph, runtime, system_prompt, tools,
middleware).

Genuinely cross-slice middleware (middleware/shared/, middleware/subagent/)
stays under multi_agent_chat/middleware/ for a later slice; the moved builders
now reference it via absolute imports.

Pure move + import rewrite (git-tracked renames). Verified: full unit suite
green (2430 passed, 1 skipped), including test_import_all and the
checkpointed-subagent middleware suite.
This commit is contained in:
CREDO23 2026-06-04 18:03:49 +02:00
parent 1acde6a470
commit 9c845d562e
42 changed files with 60 additions and 58 deletions

View file

@ -11,7 +11,7 @@ from langchain_core.language_models import BaseChatModel
from langchain_core.tools import BaseTool
from langgraph.types import Checkpointer
from app.agents.multi_agent_chat.middleware.stack import (
from app.agents.multi_agent_chat.main_agent.middleware.stack import (
build_main_agent_deepagent_middleware,
)
from app.agents.shared.context import SurfSenseContextSchema

View file

@ -8,7 +8,7 @@ from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.middleware import ActionLogMiddleware
from app.agents.shared.tools.registry import BUILTIN_TOOLS
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_action_log_mw(

View file

@ -5,7 +5,7 @@ from __future__ import annotations
from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.middleware import BusyMutexMiddleware
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_busy_mutex_mw(flags: AgentFeatureFlags) -> BusyMutexMiddleware | None:

View file

@ -17,7 +17,7 @@ from app.agents.shared.middleware import (
SpillToBackendEdit,
)
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_context_editing_mw(

View file

@ -5,7 +5,7 @@ from __future__ import annotations
from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.middleware import DoomLoopMiddleware
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_doom_loop_mw(flags: AgentFeatureFlags) -> DoomLoopMiddleware | None:

View file

@ -5,7 +5,7 @@ from __future__ import annotations
from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.middleware import NoopInjectionMiddleware
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_noop_injection_mw(flags: AgentFeatureFlags) -> NoopInjectionMiddleware | None:

View file

@ -5,7 +5,7 @@ from __future__ import annotations
from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.middleware import OtelSpanMiddleware
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_otel_mw(flags: AgentFeatureFlags) -> OtelSpanMiddleware | None:

View file

@ -15,7 +15,7 @@ from app.agents.shared.plugin_loader import (
)
from app.db import ChatVisibility
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_plugin_middlewares(

View file

@ -9,7 +9,7 @@ from langchain_core.tools import BaseTool
from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.middleware import ToolCallNameRepairMiddleware
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
# deepagents-built-in tool names the repair pass treats as known.
_DEEPAGENT_BUILTIN_TOOL_NAMES: frozenset[str] = frozenset(

View file

@ -13,7 +13,7 @@ from app.agents.shared.middleware import (
default_skills_sources,
)
from ..shared.flags import enabled
from app.agents.multi_agent_chat.middleware.shared.flags import enabled
def build_skills_mw(

View file

@ -35,35 +35,37 @@ from app.agents.shared.feature_flags import AgentFeatureFlags
from app.agents.shared.filesystem_selection import FilesystemMode
from app.db import ChatVisibility
from .main_agent.action_log import build_action_log_mw
from .main_agent.anonymous_doc import build_anonymous_doc_mw
from .main_agent.busy_mutex import build_busy_mutex_mw
from .main_agent.checkpointed_subagent_middleware import (
from .action_log import build_action_log_mw
from .anonymous_doc import build_anonymous_doc_mw
from .busy_mutex import build_busy_mutex_mw
from .checkpointed_subagent_middleware import (
SurfSenseCheckpointedSubAgentMiddleware,
)
from .main_agent.checkpointed_subagent_middleware.task_description import (
from .checkpointed_subagent_middleware.task_description import (
TASK_TOOL_DESCRIPTION,
)
from .main_agent.context_editing import build_context_editing_mw
from .main_agent.dedup_hitl import build_dedup_hitl_mw
from .main_agent.doom_loop import build_doom_loop_mw
from .main_agent.kb_persistence import build_kb_persistence_mw
from .main_agent.knowledge_priority import build_knowledge_priority_mw
from .main_agent.knowledge_tree import build_knowledge_tree_mw
from .main_agent.noop_injection import build_noop_injection_mw
from .main_agent.otel import build_otel_mw
from .main_agent.plugins import build_plugin_middlewares
from .main_agent.repair import build_repair_mw
from .main_agent.skills import build_skills_mw
from .shared.anthropic_cache import build_anthropic_cache_mw
from .shared.compaction import build_compaction_mw
from .shared.kb_context_projection import build_kb_context_projection_mw
from .shared.memory import build_memory_mw
from .shared.patch_tool_calls import build_patch_tool_calls_mw
from .shared.permissions import build_permission_mw
from .shared.resilience import build_resilience_middlewares
from .shared.todos import build_todos_mw
from .subagent.middleware_stack import build_subagent_middleware_stack
from .context_editing import build_context_editing_mw
from .dedup_hitl import build_dedup_hitl_mw
from .doom_loop import build_doom_loop_mw
from .kb_persistence import build_kb_persistence_mw
from .knowledge_priority import build_knowledge_priority_mw
from .knowledge_tree import build_knowledge_tree_mw
from .noop_injection import build_noop_injection_mw
from .otel import build_otel_mw
from .plugins import build_plugin_middlewares
from .repair import build_repair_mw
from .skills import build_skills_mw
from app.agents.multi_agent_chat.middleware.shared.anthropic_cache import build_anthropic_cache_mw
from app.agents.multi_agent_chat.middleware.shared.compaction import build_compaction_mw
from app.agents.multi_agent_chat.middleware.shared.kb_context_projection import build_kb_context_projection_mw
from app.agents.multi_agent_chat.middleware.shared.memory import build_memory_mw
from app.agents.multi_agent_chat.middleware.shared.patch_tool_calls import build_patch_tool_calls_mw
from app.agents.multi_agent_chat.middleware.shared.permissions import build_permission_mw
from app.agents.multi_agent_chat.middleware.shared.resilience import build_resilience_middlewares
from app.agents.multi_agent_chat.middleware.shared.todos import build_todos_mw
from app.agents.multi_agent_chat.middleware.subagent.middleware_stack import (
build_subagent_middleware_stack,
)
def build_main_agent_deepagent_middleware(

View file

@ -10,10 +10,10 @@ from langchain_core.runnables import Runnable
from langchain_core.tools import StructuredTool
from langgraph.types import Command
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.config import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.config import (
subagent_invoke_config,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.constants import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.constants import (
EXCLUDED_STATE_KEYS,
)

View file

@ -41,7 +41,7 @@ async def build_resume_routing(
``surfsense_resume_value`` configurable; parallel siblings each pop their
own entry so they never race.
"""
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
build_lg_resume_map,
collect_pending_tool_calls,
slice_decisions_by_tool_call,

View file

@ -14,14 +14,14 @@ from langgraph.graph import END, START, StateGraph
from langgraph.types import Command, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.config import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.config import (
subagent_invoke_config,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -40,12 +40,12 @@ from langgraph.graph.message import add_messages
from langgraph.types import Command, Send, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
build_lg_resume_map,
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -47,12 +47,12 @@ from langgraph.graph.message import add_messages
from langgraph.types import Command, Send, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
build_lg_resume_map,
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -37,12 +37,12 @@ from langgraph.graph.message import add_messages
from langgraph.types import Command, Send, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
build_lg_resume_map,
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -37,12 +37,12 @@ from langgraph.graph.message import add_messages
from langgraph.types import Command, Send, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
build_lg_resume_map,
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -35,12 +35,12 @@ from langgraph.graph.message import add_messages
from langgraph.types import Command, Send
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
build_lg_resume_map,
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)
from app.agents.multi_agent_chat.middleware.shared.permissions.ask.request import (

View file

@ -18,7 +18,7 @@ from langgraph.graph import END, START, StateGraph
from langgraph.types import Command
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -9,7 +9,7 @@ from __future__ import annotations
from types import SimpleNamespace
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume import (
get_first_pending_subagent_interrupt,
)

View file

@ -17,7 +17,7 @@ from types import SimpleNamespace
import pytest
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.resume_routing import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.resume_routing import (
collect_pending_tool_calls,
slice_decisions_by_tool_call,
)

View file

@ -4,7 +4,7 @@ from __future__ import annotations
from langchain.tools import ToolRuntime
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.config import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.config import (
consume_surfsense_resume,
has_surfsense_resume,
)

View file

@ -30,7 +30,7 @@ from langgraph.graph import END, START, StateGraph
from langgraph.types import Send, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)

View file

@ -16,7 +16,7 @@ from __future__ import annotations
from langchain.tools import ToolRuntime
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.config import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.config import (
subagent_invoke_config,
)

View file

@ -18,7 +18,7 @@ from langgraph.graph import END, START, StateGraph
from langgraph.types import Send, interrupt
from typing_extensions import TypedDict
from app.agents.multi_agent_chat.middleware.main_agent.checkpointed_subagent_middleware.task_tool import (
from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_middleware.task_tool import (
build_task_tool_with_parent_config,
)
from app.tasks.chat.streaming.helpers.interrupt_inspector import (