mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-10-13 18:32:20 +02:00
Unify compact runtime core tools with shared contract inventory
This commit is contained in:
+5
-2
@@ -22760,8 +22760,11 @@ async def stream_agent_loop(
|
||||
# after that narrow surface was selected.
|
||||
and not (_low_signal_turn and workspace)
|
||||
):
|
||||
_core_agent_tools = {
|
||||
"bash", "python", "read_file", "web_search", "web_fetch", "ask_user",
|
||||
from src.turn_contract import CONTRACT_CORE_TOOLS
|
||||
_core_agent_tools = set(CONTRACT_CORE_TOOLS)
|
||||
_known_schema_names = {
|
||||
schema.get("function", {}).get("name") or schema.get("name")
|
||||
for schema in FUNCTION_TOOL_SCHEMAS
|
||||
}
|
||||
_core_agent_tools.difference_update(_hard_blocked_tools)
|
||||
_relevant_tools.update(_core_agent_tools)
|
||||
|
||||
@@ -89,7 +89,7 @@ SAFE_WRITE_TOOLS = frozenset({
|
||||
'draft_email', 'draft_email_reply',
|
||||
'edit_image',
|
||||
})
|
||||
EXPLICIT_EXECUTE_TOOLS = frozenset({'bash'})
|
||||
EXPLICIT_EXECUTE_TOOLS = frozenset({'bash', 'python'})
|
||||
SAFE_UI_TOOLS = frozenset({'ui_control'})
|
||||
BROKERED_JOB_TOOLS = frozenset({'trigger_research'})
|
||||
CONTRACT_REQUIRED_TOOLS = frozenset({
|
||||
@@ -100,17 +100,16 @@ CONTRACT_REQUIRED_TOOLS = frozenset({
|
||||
'download_model',
|
||||
'ask_teacher',
|
||||
})
|
||||
from src.turn_contract import CONTRACT_CORE_TOOLS
|
||||
|
||||
PREVIEW_TOOLS = (
|
||||
READ_TOOLS | SAFE_WRITE_TOOLS | EXPLICIT_EXECUTE_TOOLS | SAFE_UI_TOOLS
|
||||
| BROKERED_JOB_TOOLS | CONTRACT_REQUIRED_TOOLS
|
||||
| BROKERED_JOB_TOOLS | CONTRACT_REQUIRED_TOOLS | CONTRACT_CORE_TOOLS
|
||||
)
|
||||
# Keep a small recovery-capable surface on every interactive compact agent
|
||||
# turn. Routing still adds domain tools, while policy and action guards remain
|
||||
# authoritative for execution. Python is deliberately excluded here because
|
||||
# the WebUI does not own a confined workspace.
|
||||
INTERACTIVE_CORE_TOOLS = frozenset({
|
||||
'web_search', 'web_fetch', 'private_browser', 'bash', 'ask_user',
|
||||
})
|
||||
# authoritative for execution. Use the same definition as contract resolution.
|
||||
INTERACTIVE_CORE_TOOLS = CONTRACT_CORE_TOOLS
|
||||
# The interactive compact-v5 surface above stays unchanged. These tools are
|
||||
# added only for a server-validated ``odysseus-native`` request with an active,
|
||||
# confined workspace. This lets the model-specific clean runtime serve native
|
||||
@@ -2534,6 +2533,8 @@ def evaluate_preview_call(name, args, user_text='', *, allow_execute_code=False,
|
||||
ToolEffect.EXTERNAL_SIDE_EFFECT, ToolEffect.UI_SIDE_EFFECT, ToolEffect.ADMIN_CHANGE,
|
||||
}
|
||||
allowed_effects = set(ALLOWED_EFFECTS)
|
||||
if bare == 'ask_user':
|
||||
allowed_effects.add(ToolEffect.USER_INTERACTION)
|
||||
# web_fetch is an intentionally brokered public reader. Its capability
|
||||
# carries NETWORK_EGRESS as well as BROKERED_NETWORK_READ because the
|
||||
# backend opens a supplied URL; the URL/tool policy remains the sandbox.
|
||||
|
||||
Reference in New Issue
Block a user