mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-06 20:15:17 +02:00
refactor(agents): relocate remaining MAC-only kernel (permissions, deliverable_wait)
permissions.py (authorization Rule/Ruleset model) is consumed across all MAC subagents + the permissions middleware, with a single external consumer (user_tool_allowlist service) -> move to multi_agent_chat/shared/permissions.py and repoint all 42 sites. deliverable_wait.py (wait_for_deliverable) is used only by the podcast and video_presentation deliverable tools -> colocate into subagents/builtins/deliverables/. No behavior change; import-all + permission/allowlist/deliverable unit tests stay green.
This commit is contained in:
parent
714c5ffea9
commit
f615d6b530
47 changed files with 61 additions and 53 deletions
|
|
@ -6,6 +6,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule
|
||||
from app.agents.multi_agent_chat.subagents.shared.hitl.wire import (
|
||||
LC_DECISION_APPROVE,
|
||||
LC_DECISION_EDIT,
|
||||
|
|
@ -13,7 +14,6 @@ from app.agents.multi_agent_chat.subagents.shared.hitl.wire import (
|
|||
SURFSENSE_DECISION_APPROVE_ALWAYS,
|
||||
build_lc_hitl_payload,
|
||||
)
|
||||
from app.agents.shared.permissions import Rule
|
||||
|
||||
PERMISSION_ASK_INTERRUPT_TYPE = "permission_ask"
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ from typing import Any
|
|||
from langchain_core.tools import BaseTool
|
||||
from langgraph.types import interrupt
|
||||
|
||||
from app.agents.shared.permissions import Rule
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule
|
||||
from app.observability import metrics as ot_metrics, otel as ot
|
||||
|
||||
from .decision import normalize_permission_decision
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@ from typing import Any
|
|||
|
||||
from langchain_core.messages import ToolMessage
|
||||
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule
|
||||
from app.agents.shared.errors import StreamingError
|
||||
from app.agents.shared.permissions import Rule
|
||||
|
||||
|
||||
def build_deny_message(tool_call: dict[str, Any], rule: Rule) -> ToolMessage:
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ from langchain_core.messages import AIMessage, ToolMessage
|
|||
from langchain_core.tools import BaseTool
|
||||
from langgraph.runtime import Runtime
|
||||
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
from app.agents.shared.errors import CorrectedError, RejectedError
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.services.user_tool_allowlist import TrustedToolSaver
|
||||
|
||||
from ..ask.edit import merge_edited_args
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ from __future__ import annotations
|
|||
import logging
|
||||
from typing import Any
|
||||
|
||||
from app.agents.shared.permissions import (
|
||||
from app.agents.multi_agent_chat.shared.permissions import (
|
||||
Rule,
|
||||
RuleAction,
|
||||
Ruleset,
|
||||
|
|
|
|||
|
|
@ -27,8 +27,8 @@ from collections.abc import Sequence
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.agents.shared.feature_flags import AgentFeatureFlags
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.services.user_tool_allowlist import TrustedToolSaver
|
||||
|
||||
from .core import PermissionMiddleware
|
||||
|
|
|
|||
|
|
@ -9,7 +9,11 @@ newly-promoted rules apply to subsequent calls.
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Ruleset, aggregate_action, evaluate_many
|
||||
from app.agents.multi_agent_chat.shared.permissions import (
|
||||
Ruleset,
|
||||
aggregate_action,
|
||||
evaluate_many,
|
||||
)
|
||||
|
||||
|
||||
def all_rulesets(
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ is the streaming layer's job — this module keeps the in-memory copy only.
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
|
||||
|
||||
def persist_always(
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .generate_image import create_generate_image_tool
|
||||
from .podcast import create_generate_podcast_tool
|
||||
|
|
|
|||
|
|
@ -18,7 +18,9 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
|||
|
||||
from app.agents.multi_agent_chat.shared.receipts.command import with_receipt
|
||||
from app.agents.multi_agent_chat.shared.receipts.receipt import make_receipt
|
||||
from app.agents.shared.deliverable_wait import wait_for_deliverable
|
||||
from app.agents.multi_agent_chat.subagents.builtins.deliverables.deliverable_wait import (
|
||||
wait_for_deliverable,
|
||||
)
|
||||
from app.db import Podcast, PodcastStatus, shielded_async_session
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -96,7 +98,7 @@ def create_generate_podcast_tool(
|
|||
# Wait until the Celery worker flips the row to a terminal
|
||||
# state. The wait is bounded only by the subagent invoke
|
||||
# timeout (multi-agent) or HTTP lifetime (single-agent) —
|
||||
# see app.agents.shared.deliverable_wait for details.
|
||||
# see app.agents.multi_agent_chat.subagents.builtins.deliverables.deliverable_wait for details.
|
||||
terminal_status, columns, elapsed = await wait_for_deliverable(
|
||||
model=Podcast,
|
||||
row_id=podcast_id,
|
||||
|
|
|
|||
|
|
@ -19,7 +19,9 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
|||
|
||||
from app.agents.multi_agent_chat.shared.receipts.command import with_receipt
|
||||
from app.agents.multi_agent_chat.shared.receipts.receipt import make_receipt
|
||||
from app.agents.shared.deliverable_wait import wait_for_deliverable
|
||||
from app.agents.multi_agent_chat.subagents.builtins.deliverables.deliverable_wait import (
|
||||
wait_for_deliverable,
|
||||
)
|
||||
from app.db import VideoPresentation, VideoPresentationStatus, shielded_async_session
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
@ -83,7 +85,7 @@ def create_generate_video_presentation_tool(
|
|||
# Wait until the Celery worker flips the row to a terminal
|
||||
# state. The wait is bounded only by the subagent invoke
|
||||
# timeout (multi-agent) or HTTP lifetime (single-agent) —
|
||||
# see app.agents.shared.deliverable_wait for details.
|
||||
# see app.agents.multi_agent_chat.subagents.builtins.deliverables.deliverable_wait for details.
|
||||
terminal_status, _columns, elapsed = await wait_for_deliverable(
|
||||
model=VideoPresentation,
|
||||
row_id=video_pres_id,
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ from deepagents import SubAgent
|
|||
from langchain_core.language_models import BaseChatModel
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.subagents.shared.spec import SurfSenseSubagentSpec
|
||||
from app.agents.shared.filesystem_selection import FilesystemMode
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
|
||||
from .middleware_stack import build_kb_middleware
|
||||
from .prompts import load_description, load_readonly_system_prompt, load_system_prompt
|
||||
|
|
|
|||
|
|
@ -28,9 +28,9 @@ from app.agents.multi_agent_chat.shared.middleware.patch_tool_calls import (
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions import (
|
||||
build_permission_mw,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
from app.agents.shared.feature_flags import AgentFeatureFlags
|
||||
from app.agents.shared.filesystem_selection import FilesystemMode
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
|
||||
|
||||
def _kb_user_allowlist(
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
from app.db import ChatVisibility
|
||||
|
||||
from .update_memory import create_update_memory_tool, create_update_team_memory_tool
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .scrape_webpage import create_scrape_webpage_tool
|
||||
from .web_search import create_web_search_tool
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
|
||||
NAME = "airtable"
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_event import create_create_calendar_event_tool
|
||||
from .delete_event import create_delete_calendar_event_tool
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
|
||||
NAME = "clickup"
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_page import create_create_confluence_page_tool
|
||||
from .delete_page import create_delete_confluence_page_tool
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .list_channels import create_list_discord_channels_tool
|
||||
from .read_messages import create_read_discord_messages_tool
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_file import create_create_dropbox_file_tool
|
||||
from .trash_file import create_delete_dropbox_file_tool
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_draft import create_create_gmail_draft_tool
|
||||
from .read_email import create_read_gmail_email_tool
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_file import create_create_google_drive_file_tool
|
||||
from .trash_file import create_delete_google_drive_file_tool
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
|
||||
NAME = "jira"
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
|
||||
NAME = "linear"
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_event import create_create_luma_event_tool
|
||||
from .list_events import create_list_luma_events_tool
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_page import create_create_notion_page_tool
|
||||
from .delete_page import create_delete_notion_page_tool
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .create_file import create_create_onedrive_file_tool
|
||||
from .trash_file import create_delete_onedrive_file_tool
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
|
||||
NAME = "slack"
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ from typing import Any
|
|||
|
||||
from langchain_core.tools import BaseTool
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
from .list_channels import create_list_teams_channels_tool
|
||||
from .read_messages import create_read_teams_messages_tool
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ from typing import Any
|
|||
|
||||
from deepagents import SubAgent
|
||||
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
|
||||
# A context-hint provider receives the parent-agent ``runtime.state`` mapping
|
||||
# and the ``description`` the orchestrator wrote, and returns a short string
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ from langchain_core.tools import BaseTool
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions import (
|
||||
build_permission_mw,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Ruleset
|
||||
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
|
||||
read_shared_snippet,
|
||||
)
|
||||
|
|
@ -22,7 +23,6 @@ from app.agents.multi_agent_chat.subagents.shared.spec import (
|
|||
ContextHintProvider,
|
||||
SurfSenseSubagentSpec,
|
||||
)
|
||||
from app.agents.shared.permissions import Ruleset
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
|||
|
|
@ -50,17 +50,17 @@ from langchain_core.messages import AIMessage, ToolMessage
|
|||
from langgraph.runtime import Runtime
|
||||
from langgraph.types import interrupt
|
||||
|
||||
from app.agents.shared.errors import (
|
||||
CorrectedError,
|
||||
RejectedError,
|
||||
StreamingError,
|
||||
)
|
||||
from app.agents.shared.permissions import (
|
||||
from app.agents.multi_agent_chat.shared.permissions import (
|
||||
Rule,
|
||||
Ruleset,
|
||||
aggregate_action,
|
||||
evaluate_many,
|
||||
)
|
||||
from app.agents.shared.errors import (
|
||||
CorrectedError,
|
||||
RejectedError,
|
||||
StreamingError,
|
||||
)
|
||||
from app.observability import metrics as ot_metrics, otel as ot
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ from sqlalchemy.orm.attributes import flag_modified
|
|||
from app.agents.multi_agent_chat.constants import (
|
||||
CONNECTOR_TYPE_TO_CONNECTOR_AGENT_MAPS,
|
||||
)
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.db import SearchSourceConnector, async_session_maker
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ def iter_completion_emission_frames(
|
|||
# ``ready`` is the live success status now that the tool waits for the
|
||||
# Celery worker to reach a terminal state. ``pending`` is retained as a
|
||||
# legacy branch for old saved chats that pre-date the wait-for-terminal
|
||||
# change (see ``app.agents.shared.deliverable_wait``).
|
||||
# change (see ``app.agents.multi_agent_chat.subagents.builtins.deliverables.deliverable_wait``).
|
||||
if status == "ready":
|
||||
yield ctx.streaming_service.format_terminal_info(
|
||||
f"Video presentation generated successfully: {out.get('title', 'Presentation')}",
|
||||
|
|
|
|||
|
|
@ -46,10 +46,10 @@ from app.agents.multi_agent_chat.main_agent.middleware.checkpointed_subagent_mid
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions.ask.request import (
|
||||
request_permission_decision,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule
|
||||
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
|
||||
request_approval,
|
||||
)
|
||||
from app.agents.shared.permissions import Rule
|
||||
|
||||
|
||||
class _SubState(TypedDict, total=False):
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ from typing_extensions import TypedDict
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions.ask.request import (
|
||||
request_permission_decision,
|
||||
)
|
||||
from app.agents.shared.permissions import Rule
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule
|
||||
|
||||
|
||||
class _State(TypedDict, total=False):
|
||||
|
|
|
|||
|
|
@ -19,8 +19,8 @@ from app.agents.multi_agent_chat.shared.middleware.permissions import (
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions.ask.payload import (
|
||||
build_permission_ask_payload,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.agents.shared.feature_flags import AgentFeatureFlags
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
|
||||
|
||||
class _NoArgs(BaseModel):
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ from typing_extensions import TypedDict
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions import (
|
||||
build_permission_mw,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.agents.shared.feature_flags import AgentFeatureFlags
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
|
||||
|
||||
def _kb_style_ruleset() -> Ruleset:
|
||||
|
|
|
|||
|
|
@ -17,8 +17,8 @@ from typing_extensions import TypedDict
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions import (
|
||||
build_permission_mw,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.agents.shared.feature_flags import AgentFeatureFlags
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
|
||||
|
||||
class _NoArgs(BaseModel):
|
||||
|
|
|
|||
|
|
@ -22,11 +22,11 @@ from langchain_core.outputs import ChatGeneration, ChatResult
|
|||
from app.agents.multi_agent_chat.shared.middleware.permissions.middleware.core import (
|
||||
PermissionMiddleware,
|
||||
)
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset, evaluate
|
||||
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
|
||||
pack_subagent,
|
||||
)
|
||||
from app.agents.shared.feature_flags import AgentFeatureFlags
|
||||
from app.agents.shared.permissions import Rule, Ruleset, evaluate
|
||||
|
||||
|
||||
class RateLimitError(Exception):
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ from __future__ import annotations
|
|||
|
||||
import pytest
|
||||
|
||||
from app.agents.shared.permissions import (
|
||||
from app.agents.multi_agent_chat.shared.permissions import (
|
||||
Rule,
|
||||
Ruleset,
|
||||
aggregate_action,
|
||||
|
|
|
|||
|
|
@ -10,13 +10,13 @@ from __future__ import annotations
|
|||
|
||||
import pytest
|
||||
|
||||
from app.agents.shared.middleware.permission import PermissionMiddleware
|
||||
from app.agents.shared.permissions import (
|
||||
from app.agents.multi_agent_chat.shared.permissions import (
|
||||
Rule,
|
||||
Ruleset,
|
||||
aggregate_action,
|
||||
evaluate_many,
|
||||
)
|
||||
from app.agents.shared.middleware.permission import PermissionMiddleware
|
||||
|
||||
pytestmark = pytest.mark.unit
|
||||
|
||||
|
|
|
|||
|
|
@ -5,12 +5,12 @@ from __future__ import annotations
|
|||
import pytest
|
||||
from langchain_core.messages import AIMessage, ToolMessage
|
||||
|
||||
from app.agents.multi_agent_chat.shared.permissions import Rule, Ruleset
|
||||
from app.agents.shared.errors import CorrectedError, RejectedError
|
||||
from app.agents.shared.middleware.permission import (
|
||||
PermissionMiddleware,
|
||||
_normalize_permission_decision,
|
||||
)
|
||||
from app.agents.shared.permissions import Rule, Ruleset
|
||||
|
||||
pytestmark = pytest.mark.unit
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||
|
||||
import pytest
|
||||
|
||||
from app.agents.shared.permissions import (
|
||||
from app.agents.multi_agent_chat.shared.permissions import (
|
||||
Rule,
|
||||
Ruleset,
|
||||
aggregate_action,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue