multi_agent_chat/connectors+builtins: adopt symmetric self_gated_tool_permission_row helper

This commit is contained in:
CREDO23 2026-05-14 17:40:59 +02:00
parent a06aec2821
commit d68280113b
58 changed files with 290 additions and 171 deletions

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -44,11 +47,11 @@ def load_tools(
) )
return { return {
"allow": [ "allow": [
{"name": getattr(podcast, "name", "") or "", "tool": podcast}, self_gated_tool_permission_row(podcast),
{"name": getattr(video, "name", "") or "", "tool": video}, self_gated_tool_permission_row(video),
{"name": getattr(report, "name", "") or "", "tool": report}, self_gated_tool_permission_row(report),
{"name": getattr(resume, "name", "") or "", "tool": resume}, self_gated_tool_permission_row(resume),
{"name": getattr(image, "name", "") or "", "tool": image}, self_gated_tool_permission_row(image),
], ],
"ask": [], "ask": [],
} }

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
from app.db import ChatVisibility from app.db import ChatVisibility
@ -21,7 +24,7 @@ def load_tools(
llm=resolved_dependencies.get("llm"), llm=resolved_dependencies.get("llm"),
) )
return { return {
"allow": [{"name": getattr(mem, "name", "") or "", "tool": mem}], "allow": [self_gated_tool_permission_row(mem)],
"ask": [], "ask": [],
} }
mem = create_update_memory_tool( mem = create_update_memory_tool(
@ -29,4 +32,4 @@ def load_tools(
db_session=resolved_dependencies["db_session"], db_session=resolved_dependencies["db_session"],
llm=resolved_dependencies.get("llm"), llm=resolved_dependencies.get("llm"),
) )
return {"allow": [{"name": getattr(mem, "name", "") or "", "tool": mem}], "ask": []} return {"allow": [self_gated_tool_permission_row(mem)], "ask": []}

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -27,9 +30,9 @@ def load_tools(
) )
return { return {
"allow": [ "allow": [
{"name": getattr(web, "name", "") or "", "tool": web}, self_gated_tool_permission_row(web),
{"name": getattr(scrape, "name", "") or "", "tool": scrape}, self_gated_tool_permission_row(scrape),
{"name": getattr(docs, "name", "") or "", "tool": docs}, self_gated_tool_permission_row(docs),
], ],
"ask": [], "ask": [],
} }

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -8,7 +8,9 @@ from googleapiclient.discovery import build
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.google_calendar import GoogleCalendarToolMetadataService from app.services.google_calendar import GoogleCalendarToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -8,7 +8,9 @@ from googleapiclient.discovery import build
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.google_calendar import GoogleCalendarToolMetadataService from app.services.google_calendar import GoogleCalendarToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -26,10 +29,10 @@ def load_tools(
update = create_update_calendar_event_tool(**session_dependencies) update = create_update_calendar_event_tool(**session_dependencies)
delete = create_delete_calendar_event_tool(**session_dependencies) delete = create_delete_calendar_event_tool(**session_dependencies)
return { return {
"allow": [{"name": getattr(search, "name", "") or "", "tool": search}], "allow": [self_gated_tool_permission_row(search)],
"ask": [ "ask": [
{"name": getattr(create, "name", "") or "", "tool": create}, self_gated_tool_permission_row(create),
{"name": getattr(update, "name", "") or "", "tool": update}, self_gated_tool_permission_row(update),
{"name": getattr(delete, "name", "") or "", "tool": delete}, self_gated_tool_permission_row(delete),
], ],
} }

View file

@ -8,7 +8,9 @@ from googleapiclient.discovery import build
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.google_calendar import GoogleCalendarToolMetadataService from app.services.google_calendar import GoogleCalendarToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -5,7 +5,9 @@ from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm.attributes import flag_modified from sqlalchemy.orm.attributes import flag_modified
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.confluence_history import ConfluenceHistoryConnector from app.connectors.confluence_history import ConfluenceHistoryConnector
from app.services.confluence import ConfluenceToolMetadataService from app.services.confluence import ConfluenceToolMetadataService

View file

@ -5,7 +5,9 @@ from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm.attributes import flag_modified from sqlalchemy.orm.attributes import flag_modified
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.confluence_history import ConfluenceHistoryConnector from app.connectors.confluence_history import ConfluenceHistoryConnector
from app.services.confluence import ConfluenceToolMetadataService from app.services.confluence import ConfluenceToolMetadataService

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -27,8 +30,8 @@ def load_tools(
return { return {
"allow": [], "allow": [],
"ask": [ "ask": [
{"name": getattr(create, "name", "") or "", "tool": create}, self_gated_tool_permission_row(create),
{"name": getattr(update, "name", "") or "", "tool": update}, self_gated_tool_permission_row(update),
{"name": getattr(delete, "name", "") or "", "tool": delete}, self_gated_tool_permission_row(delete),
], ],
} }

View file

@ -5,7 +5,9 @@ from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm.attributes import flag_modified from sqlalchemy.orm.attributes import flag_modified
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.confluence_history import ConfluenceHistoryConnector from app.connectors.confluence_history import ConfluenceHistoryConnector
from app.services.confluence import ConfluenceToolMetadataService from app.services.confluence import ConfluenceToolMetadataService

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -25,8 +28,8 @@ def load_tools(
send = create_send_discord_message_tool(**common) send = create_send_discord_message_tool(**common)
return { return {
"allow": [ "allow": [
{"name": getattr(list_ch, "name", "") or "", "tool": list_ch}, self_gated_tool_permission_row(list_ch),
{"name": getattr(read_msg, "name", "") or "", "tool": read_msg}, self_gated_tool_permission_row(read_msg),
], ],
"ask": [{"name": getattr(send, "name", "") or "", "tool": send}], "ask": [self_gated_tool_permission_row(send)],
} }

View file

@ -5,7 +5,9 @@ import httpx
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from ._auth import DISCORD_API, get_bot_token, get_discord_connector from ._auth import DISCORD_API, get_bot_token, get_discord_connector

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -8,7 +8,9 @@ from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.dropbox.client import DropboxClient from app.connectors.dropbox.client import DropboxClient
from app.db import SearchSourceConnector, SearchSourceConnectorType from app.db import SearchSourceConnector, SearchSourceConnectorType

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -24,7 +27,7 @@ def load_tools(
return { return {
"allow": [], "allow": [],
"ask": [ "ask": [
{"name": getattr(create, "name", "") or "", "tool": create}, self_gated_tool_permission_row(create),
{"name": getattr(delete, "name", "") or "", "tool": delete}, self_gated_tool_permission_row(delete),
], ],
} }

View file

@ -6,7 +6,9 @@ from sqlalchemy import String, and_, cast, func
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.dropbox.client import DropboxClient from app.connectors.dropbox.client import DropboxClient
from app.db import ( from app.db import (
Document, Document,

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -8,7 +8,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.gmail import GmailToolMetadataService from app.services.gmail import GmailToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -31,13 +34,13 @@ def load_tools(
updraft = create_update_gmail_draft_tool(**common) updraft = create_update_gmail_draft_tool(**common)
return { return {
"allow": [ "allow": [
{"name": getattr(search, "name", "") or "", "tool": search}, self_gated_tool_permission_row(search),
{"name": getattr(read, "name", "") or "", "tool": read}, self_gated_tool_permission_row(read),
], ],
"ask": [ "ask": [
{"name": getattr(draft, "name", "") or "", "tool": draft}, self_gated_tool_permission_row(draft),
{"name": getattr(send, "name", "") or "", "tool": send}, self_gated_tool_permission_row(send),
{"name": getattr(trash, "name", "") or "", "tool": trash}, self_gated_tool_permission_row(trash),
{"name": getattr(updraft, "name", "") or "", "tool": updraft}, self_gated_tool_permission_row(updraft),
], ],
} }

View file

@ -8,7 +8,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.gmail import GmailToolMetadataService from app.services.gmail import GmailToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -6,7 +6,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.gmail import GmailToolMetadataService from app.services.gmail import GmailToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -8,7 +8,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.services.gmail import GmailToolMetadataService from app.services.gmail import GmailToolMetadataService
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -5,7 +5,9 @@ from googleapiclient.errors import HttpError
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.google_drive.client import GoogleDriveClient from app.connectors.google_drive.client import GoogleDriveClient
from app.connectors.google_drive.file_types import GOOGLE_DOC, GOOGLE_SHEET from app.connectors.google_drive.file_types import GOOGLE_DOC, GOOGLE_SHEET
from app.services.google_drive import GoogleDriveToolMetadataService from app.services.google_drive import GoogleDriveToolMetadataService

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -24,7 +27,7 @@ def load_tools(
return { return {
"allow": [], "allow": [],
"ask": [ "ask": [
{"name": getattr(create, "name", "") or "", "tool": create}, self_gated_tool_permission_row(create),
{"name": getattr(delete, "name", "") or "", "tool": delete}, self_gated_tool_permission_row(delete),
], ],
} }

View file

@ -5,7 +5,9 @@ from googleapiclient.errors import HttpError
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.google_drive.client import GoogleDriveClient from app.connectors.google_drive.client import GoogleDriveClient
from app.services.google_drive import GoogleDriveToolMetadataService from app.services.google_drive import GoogleDriveToolMetadataService

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -5,7 +5,9 @@ import httpx
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from ._auth import LUMA_API, get_api_key, get_luma_connector, luma_headers from ._auth import LUMA_API, get_api_key, get_luma_connector, luma_headers

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -25,8 +28,8 @@ def load_tools(
create = create_create_luma_event_tool(**common) create = create_create_luma_event_tool(**common)
return { return {
"allow": [ "allow": [
{"name": getattr(list_ev, "name", "") or "", "tool": list_ev}, self_gated_tool_permission_row(list_ev),
{"name": getattr(read_ev, "name", "") or "", "tool": read_ev}, self_gated_tool_permission_row(read_ev),
], ],
"ask": [{"name": getattr(create, "name", "") or "", "tool": create}], "ask": [self_gated_tool_permission_row(create)],
} }

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -4,7 +4,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.notion_history import NotionAPIError, NotionHistoryConnector from app.connectors.notion_history import NotionAPIError, NotionHistoryConnector
from app.services.notion import NotionToolMetadataService from app.services.notion import NotionToolMetadataService

View file

@ -4,7 +4,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.notion_history import NotionAPIError, NotionHistoryConnector from app.connectors.notion_history import NotionAPIError, NotionHistoryConnector
from app.services.notion.tool_metadata_service import NotionToolMetadataService from app.services.notion.tool_metadata_service import NotionToolMetadataService

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -26,8 +29,8 @@ def load_tools(
return { return {
"allow": [], "allow": [],
"ask": [ "ask": [
{"name": getattr(create, "name", "") or "", "tool": create}, self_gated_tool_permission_row(create),
{"name": getattr(update, "name", "") or "", "tool": update}, self_gated_tool_permission_row(update),
{"name": getattr(delete, "name", "") or "", "tool": delete}, self_gated_tool_permission_row(delete),
], ],
} }

View file

@ -4,7 +4,9 @@ from typing import Any
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.notion_history import NotionAPIError, NotionHistoryConnector from app.connectors.notion_history import NotionAPIError, NotionHistoryConnector
from app.services.notion import NotionToolMetadataService from app.services.notion import NotionToolMetadataService

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -8,7 +8,9 @@ from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.onedrive.client import OneDriveClient from app.connectors.onedrive.client import OneDriveClient
from app.db import SearchSourceConnector, SearchSourceConnectorType from app.db import SearchSourceConnector, SearchSourceConnectorType

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -24,7 +27,7 @@ def load_tools(
return { return {
"allow": [], "allow": [],
"ask": [ "ask": [
{"name": getattr(create, "name", "") or "", "tool": create}, self_gated_tool_permission_row(create),
{"name": getattr(delete, "name", "") or "", "tool": delete}, self_gated_tool_permission_row(delete),
], ],
} }

View file

@ -6,7 +6,9 @@ from sqlalchemy import String, and_, cast, func
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select from sqlalchemy.future import select
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from app.connectors.onedrive.client import OneDriveClient from app.connectors.onedrive.client import OneDriveClient
from app.db import ( from app.db import (
Document, Document,

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,7 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )

View file

@ -7,17 +7,19 @@ from typing import Any
from deepagents import SubAgent from deepagents import SubAgent
from langchain_core.language_models import BaseChatModel from langchain_core.language_models import BaseChatModel
from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.middleware_gated import (
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.md_file_reader import ( from app.agents.multi_agent_chat.subagents.shared.md_file_reader import (
read_md_file, read_md_file,
) )
from app.agents.multi_agent_chat.subagents.shared.permissions import (
ToolsPermissions,
merge_tools_permissions,
middleware_gated_interrupt_on,
)
from app.agents.multi_agent_chat.subagents.shared.subagent_builder import ( from app.agents.multi_agent_chat.subagents.shared.subagent_builder import (
pack_subagent, pack_subagent,
) )
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions,
merge_tools_permissions,
)
from .tools.index import load_tools from .tools.index import load_tools

View file

@ -2,7 +2,10 @@ from __future__ import annotations
from typing import Any from typing import Any
from app.agents.multi_agent_chat.subagents.shared.permissions import ( from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
self_gated_tool_permission_row,
)
from app.agents.multi_agent_chat.subagents.shared.tool_kinds import (
ToolsPermissions, ToolsPermissions,
) )
@ -25,8 +28,8 @@ def load_tools(
send = create_send_teams_message_tool(**common) send = create_send_teams_message_tool(**common)
return { return {
"allow": [ "allow": [
{"name": getattr(list_ch, "name", "") or "", "tool": list_ch}, self_gated_tool_permission_row(list_ch),
{"name": getattr(read_msg, "name", "") or "", "tool": read_msg}, self_gated_tool_permission_row(read_msg),
], ],
"ask": [{"name": getattr(send, "name", "") or "", "tool": send}], "ask": [self_gated_tool_permission_row(send)],
} }

View file

@ -5,7 +5,9 @@ import httpx
from langchain_core.tools import tool from langchain_core.tools import tool
from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy.ext.asyncio import AsyncSession
from app.agents.new_chat.tools.hitl import request_approval from app.agents.multi_agent_chat.subagents.shared.hitl.approvals.self_gated import (
request_approval,
)
from ._auth import GRAPH_API, get_access_token, get_teams_connector from ._auth import GRAPH_API, get_access_token, get_teams_connector