Ë
    ÛJêj­  ã                  ó�   — d Z ddlmZ ddlmZmZmZ e G d„ de«      «       Ze G d„ de«      «       Ze G d„ d	e«      «       Z	g d
¢Z
y)u  AgentRegistry â€” registry contract for agent discovery and lookup.

Phase 4 modular contract: AgentRegistry must support registration,
lookup by role, listing, and removal. Concrete implementations may
use in-memory dict, database, or external discovery service.
é    )Úannotations)ÚAnyÚProtocolÚruntime_checkablec                  óX   — e Zd ZdZedd„«       Zed	d„«       Zed	d„«       Zd
d„Zddd„Z	y)ÚAgentzŠMinimal agent interface for dispatch and security boundary.

    All agents registered in AgentRegistry must implement this protocol.
    c                 ó   — y)z.Agent role for dispatch and policy evaluation.N© ©Úselfs    úQ/home/oem/CyberBrain26-unified/src/cyberbrain26/extension_layer/agent_registry.pyÚrolez
Agent.role   ó   € ð 	ó    c                 ó   — y)z<AgentIdentity for permission checks, or None if not secured.Nr
   r   s    r   ÚidentityzAgent.identity   r   r   c                 ó   — y)z@PermissionGateway for security boundary, or None if not secured.Nr
   r   s    r   Úpermission_gatewayzAgent.permission_gateway   r   r   c              ƒ  ó   K  — y­w)z)Execute a task payload and return result.Nr
   )r   Úpayloads     r   ÚexecutezAgent.execute#   ó	   è ø€ àùó   ‚Nc                 ó   — y)z)Check if agent has permission for action.Nr
   )r   ÚactionÚresources      r   Úcheck_permissionzAgent.check_permission'   ó   € àr   )ÚreturnÚstr)r   z
Any | None)r   údict[str, Any]r   r   )N)r   r    r   z
str | Noner   Úbool)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r   r   r   r
   r   r   r   r      sM   „ ñð
 òó ðð òó ðð òó ðóõr   r   c                  ó@   — e Zd ZdZd	d„Zd
d„Zdd„Zdd„Zdd„Zd
d„Z	y)ÚAgentRegistryzŸRegistry for agent discovery and lookup.

    All agents must be registered before they can be discovered by
    orchestrators, planners, or other agents.
    c                 ó   — y)z$Register an agent under a unique ID.Nr
   ©r   Úagent_idÚagents      r   ÚregisterzAgentRegistry.register4   r   r   c                 ó   — y)z,Remove an agent. Returns True if it existed.Nr
   ©r   r,   s     r   Ú
unregisterzAgentRegistry.unregister8   r   r   c                 ó   — y)z.Retrieve an agent by ID, or None if not found.Nr
   r0   s     r   ÚgetzAgentRegistry.get<   r   r   c                 ó   — y)z"List all agents with a given role.Nr
   )r   r   s     r   Úlist_by_rolezAgentRegistry.list_by_role@   r   r   c                 ó   — y)z0List all registered agents as (id, agent) pairs.Nr
   r   s    r   Úlist_allzAgentRegistry.list_allD   r   r   c                 ó   — y)z%Check whether an agent is registered.Nr
   r0   s     r   ÚexistszAgentRegistry.existsH   r   r   N©r,   r    r-   r   r   ÚNone)r,   r    r   r"   )r,   r    r   zAgent | None)r   r    r   zlist[Agent])r   zlist[tuple[str, Agent]])
r#   r$   r%   r&   r.   r1   r3   r5   r7   r9   r
   r   r   r)   r)   ,   s%   „ ñóóóóóôr   r)   c                  ó(   — e Zd ZdZdd„Zdd„Zdd„Zy)	ÚTaskDispatcheruj  Dispatcher for routing tasks to registered agents.

    Phase 4 modular contract: decouples task submission from agent
    execution. Concrete implementations may use direct dispatch,
    event-driven routing, or queue-based scheduling.

    All dispatches must pass through Identity â†’ Policy â†’ Permission â†’ Audit
    before agent.execute() is called.
    c              ƒ  ó   K  — y­w)z:Dispatch a task to a specific agent and return the result.Nr
   )r   Útask_idr,   r   s       r   ÚdispatchzTaskDispatcher.dispatchY   r   r   c              ƒ  ó   K  — y­w)z’Dispatch a task to an available agent with a given role.

        Selection must be deterministic (e.g., round-robin or consistent hash).
        Nr
   )r   r?   r   r   s       r   Údispatch_to_rolezTaskDispatcher.dispatch_to_role]   s   è ø€ ð
 	ùr   c                 ó   — y)z"Register an agent for dispatching.Nr
   r+   s      r   Úregister_agentzTaskDispatcher.register_agentd   r   r   N)r?   r    r,   r    r   r!   r   r   )r?   r    r   r    r   r!   r   r   r:   )r#   r$   r%   r&   r@   rB   rD   r
   r   r   r=   r=   M   s   „ ñóóôr   r=   )r   r)   r=   N)r&   Ú
__future__r   Útypingr   r   r   r   r)   r=   Ú__all__r
   r   r   ú<module>rH      sn   ðñõ #ç 3Ñ 3ð ôˆHó ó ðð< ô�Hó ó ðð@ ô�Xó ó ðò6 7�r   