# retoor <retoor@molodetz.nl>
from __future__ import annotations
from .actions.avatar_actions import AVATAR_ACTIONS
from .actions.behavior_actions import BEHAVIOR_ACTIONS
from .actions.catalog import ACTIONS
from .actions.chunk_actions import CHUNK_ACTIONS
from .actions.client_actions import CLIENT_ACTIONS
from .actions.container_actions import CONTAINER_ACTIONS
from .actions.cost_actions import COST_ACTIONS
from .actions.customization_actions import CUSTOMIZATION_ACTIONS
from .actions.docs_actions import DOCS_ACTIONS
from .actions.fetch_actions import FETCH_ACTIONS
from .actions.rsearch_actions import RSEARCH_ACTIONS
from .actions.spec import Catalog
from .virtual_tools.actions import VIRTUAL_TOOL_ACTIONS
from .agentic.actions import AGENTIC_ACTIONS
from .tasks.actions import TASK_ACTIONS
CATALOG = Catalog(
actions=ACTIONS
+ TASK_ACTIONS
+ AGENTIC_ACTIONS
+ AVATAR_ACTIONS
+ CLIENT_ACTIONS
+ FETCH_ACTIONS
+ DOCS_ACTIONS
+ COST_ACTIONS
+ CHUNK_ACTIONS
+ RSEARCH_ACTIONS
+ CONTAINER_ACTIONS
+ CUSTOMIZATION_ACTIONS
+ BEHAVIOR_ACTIONS
+ VIRTUAL_TOOL_ACTIONS
)
def _assert_confirm_params(catalog: Catalog) -> None:
from .actions.dispatcher import CONFIRM_REQUIRED, CONDITIONAL_CONFIRM
by_name = catalog.by_name()
gated = set(CONFIRM_REQUIRED) | set(CONDITIONAL_CONFIRM)
missing = sorted(
name
for name in gated
if name in by_name
and not any(param.name == "confirm" for param in by_name[name].params)
)
if missing:
raise RuntimeError(
"Confirmation-gated Devii tools lack a declared 'confirm' parameter, so the model can "
"never satisfy the gate and the agent loops forever: " + ", ".join(missing) + ". Add "
"confirm() (catalog.py) or arg('confirm', ..., kind='boolean') to each."
)
_assert_confirm_params(CATALOG)