Ë
    ÛJêjœ`  ã                  óî  — d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZ dd	lmZmZmZmZmZ dd
lmZ ddl m!Z!m"Z"m#Z# ddl$m%Z% ddl&m'Z'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4  ejj                  e6«      Z7 G d„ de8e«      Z9 G d„ de8e«      Z:e
 G d„ d«      «       Z;e
 G d„ d«      «       Z<e
 G d„ d«      «       Z=g d¢Z> G d„ d«      Z?y) aô  Ptah Bridge - orchestrator connecting AsyncEventBus and MemoryTaskQueue.

Ptah maps roadmap execution steps to registered agents and routes execution
through the modular AgentRegistry/TaskDispatcher security boundary.

Execution path:

    PtahBridge
        -> AgentRegistry
        -> TaskDispatcher              identity -> scope -> policy -> approval -> audit
        -> Agent.execute()
        -> AuthorizedExecutionService  re-verifies, does not re-ask
        -> ExecutionProvider

A step that a human had to approve raises exactly one approval request. The
dispatcher owns that decision and hands it to the agent's execution service as
a grant bound to the one agent call it just authorized; the service re-checks
scope, policy, identity, action and the payload digest, and only then proceeds
without asking again. Both gates run on every step - the inner one is a
verification, not a formality - but one operator decision authorises one step,
which is what the documented single-approval flow promises.
é    )ÚannotationsN)ÚIterableÚMapping)Ú	dataclassÚfield)ÚEnum)ÚAny)ÚAgentResultÚBrowserAgentÚ
CoderAgentÚEvaluatorAgentÚPlannerAgentÚResearchAgentÚSecurityAgent)ÚEXECUTION_ATTEMPTED_KEYÚAsyncEventBusÚMemoryTaskQueueÚPersistentTaskStatusÚSQLiteTaskQueue)ÚSQLiteDatabase)ÚAuthorizedExecutionServiceÚBubblewrapExecutionProviderÚExecutionRefused)ÚExecutionProvider)ÚInMemoryAgentRegistryÚInMemoryTaskDispatcher)ÚApprovalManager)ÚAuditEventTypeÚAuditLog)ÚAgentIdentity)ÚPermissionGatewayÚSecurityError)ÚPolicyEnginec                  ó(   — e Zd ZdZdZdZdZdZdZdZ	y)	ÚRoadmapStatusz(Lifecycle status of a roadmap execution.ÚpendingÚrunningÚ	completedÚfailedÚblockedÚ	cancelledN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚPENDINGÚRUNNINGÚ	COMPLETEDÚFAILEDÚBLOCKEDÚ	CANCELLED© ó    úL/home/oem/CyberBrain26-unified/src/cyberbrain26/orchestration/ptah_bridge.pyr%   r%   F   s#   „ Ù2à€GØ€GØ€IØ€FØ€GØ�Ir7   r%   c                  ó$   — e Zd ZdZdZdZdZdZdZy)Ú
StepStatusz*Lifecycle status of a single roadmap step.r&   Ú
dispatchedr(   r)   r*   N)	r,   r-   r.   r/   r0   Ú
DISPATCHEDr2   r3   r4   r6   r7   r8   r:   r:   Q   s   „ Ù4à€GØ€JØ€IØ€FØ�Gr7   r:   c                  ó˜   — e Zd ZU dZded<   ded<   ded<    ee¬«      Zded<    ee¬«      Z	d	ed
<   e
j                  Zded<   dZded<   y)ÚRoadmapStepz)A single execution step within a roadmap.ÚstrÚidÚroleÚdescription©Údefault_factoryúdict[str, Any]Úpayloadz	list[str]Ú
depends_onr:   ÚstatusNúStepResult | NoneÚresult)r,   r-   r.   r/   Ú__annotations__r   ÚdictrF   ÚlistrG   r:   r0   rH   rJ   r6   r7   r8   r>   r>   [   sN   … á3àƒGØ
ƒIØÓÙ#°DÔ9€Gˆ^Ó9Ù!°$Ô7€J�	Ó7Ø#×+Ñ+€FˆJÓ+Ø $€FÐÔ$r7   r>   c                  óZ   — e Zd ZU dZded<   ded<   ded<    ee¬«      Zded	<   d
Zded<   y
)Ú
StepResultz+Outcome of executing a single roadmap step.r?   Ústep_idrA   ÚboolÚsuccessrC   rE   ÚdataNz
str | NoneÚerror)	r,   r-   r.   r/   rK   r   rL   rS   rT   r6   r7   r8   rO   rO   h   s-   … á5àƒLØ
ƒIØƒMÙ °Ô6€Dˆ.Ó6Ø€Eˆ:Ôr7   rO   c                  ó‚   — e Zd ZU dZded<   ded<    ee¬«      Zded<   ej                  Z
ded	<    ed
„ ¬«      Zded<   y)ÚRoadmapz7A collection of steps executed as a unit by the bridge.r?   r@   ÚnamerC   zlist[RoadmapStep]Ústepsr%   rH   c                 ó*   — t        j                   «       S ©N)Útimer6   r7   r8   ú<lambda>zRoadmap.<lambda>{   s   € ´d·i±i³k€ r7   ÚfloatÚ
created_atN)r,   r-   r.   r/   rK   r   rM   rX   r%   r0   rH   r^   r6   r7   r8   rV   rV   s   s?   … áAàƒGØ
ƒIÙ$°TÔ:€EÐÓ:Ø)×1Ñ1€FˆMÓ1ÙÑ.AÔB€J�ÔBr7   rV   )r
   Ú
PtahBridgerV   r%   r>   rO   c                  ó¸   — e Zd ZdZ	 	 	 	 	 	 dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 dd„Zdd„Zdd„Z	 	 	 	 	 	 dd„Zdd	„Z	dd
„Z
dd„Zdd„Zdd„Zdd„Zy)r_   a¤  Orchestrator for roadmap-driven multi-agent execution.

    Ptah owns the default in-memory registry and dispatcher used by the
    local application. Every built-in Ptah agent receives an explicit
    AgentIdentity and shared PermissionGateway.

    The public roadmap/query API remains compatible with the previous
    implementation while execution is routed through the modular
    orchestration/security layer.
    N)Úidentity_scopesc               óP	  — t        |t        «      r=|�.|j                  j                  |j                  k7  rt	        d«      ‚|j                  }n|�|�t        d«      ‚|�<|�:|j                  �#|j                  j                  |j                  k7  rt	        d«      ‚|xs
 t        «       | _        || _        |xs |�t        |«      n	t        «       | _	        |�Bt        | j                  t        «      r(| j                  j                  d| j                  d¬«       t        |¬«      | _        t        | j                  ¬«      | _        t!        | j                  | j                  ¬«      | _        |xs |�t%        |¬«      nd }|| _        t)        |xs
 t+        «       | j"                  || j                  |¬	«      | _        t/        «       | _        t3        | j0                  | j                  | j                  ||¬
«      | _        t7        | j                  | j                  t9        dd¬«      | j"                  ¬«      | _        t=        | j                  | j                  t9        dd¬«      | j"                  | j,                  ¬«      | _        tA        | j                  | j                  t9        dd¬«      | j"                  ¬«      | _!        tE        | j                  | j                  t9        dd¬«      | j"                  ¬«      | _#        tI        | j                  | j                  t9        dd¬«      | j"                  ¬«      | _%        tM        | j                  | j                  t9        dd¬«      | j"                  ¬«      | _'        | j:                  | j>                  | jB                  | jF                  | jJ                  | jN                  dœ| _(        |�o|jS                  «       D ]\  \  }	}
| jP                  jU                  |	«      }|€t	        d|	›�«      ‚|jV                  jX                  j[                  d„ |
D «       «       Œ^ | jP                  j]                  «       D ]2  }| j0                  j_                  |jV                  j`                  |«       Œ4 i | _1        i | _2        tg        jh                  «       | _5        y )Nz=PtahBridge and task queue must share the same SQLite databasezFpass a SQLiteTaskQueue when configuring PtahBridge with SQLiteDatabasezBPtahBridge and ApprovalManager must share the same SQLite databaseúptah.dispatch_stepT)Úreplace)Údatabase)Ú	audit_log)Úapproval_managerrf   Úapproval_timeout_seconds)ÚregistryÚpolicy_enginerf   rg   rh   zptah-plannerÚplanner)Úagent_idrA   )ÚidentityÚpermission_gatewayz
ptah-coderÚcoder)rm   rn   Úexecution_servicezptah-evaluatorÚ	evaluatorzptah-securityÚsecurityzptah-researchÚresearchzptah-browserÚbrowser)rk   ro   rq   rr   rs   rt   z.identity_scopes references unknown Ptah role: c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wrZ   )r?   )Ú.0Úscopes     r8   ú	<genexpr>z&PtahBridge.__init__.<locals>.<genexpr>$  s   è ø€ Ò,L¸E¬S°¯ZÑ,Lùs   ‚)6Ú
isinstancer   re   ÚpathÚ
ValueErrorÚ	TypeErrorr   Úbusr   ÚqueueÚregister_handlerÚ_dispatch_persistent_stepr   rf   r#   rj   r!   rn   r   rg   r   r   rp   r   ri   r   Ú
dispatcherr   r    rk   r   ro   r   rq   r   rr   r   rs   r   rt   Ú_agentsÚitemsÚgetrm   ÚscopesÚupdateÚvaluesÚregisterrl   Ú	_roadmapsÚ_step_resultsÚasyncioÚLockÚ_lock)Úselfr}   r~   rg   rh   Úexecution_providerre   ra   Úeffective_approval_managerrA   r…   Úagents               r8   Ú__init__zPtahBridge.__init__”   s  € ô �eœ_Ô-ØÐ#¨¯©×(;Ñ(;¸x¿}¹}Ò(LÜ Ð!`ÓaÐaØ—~‘~‰HØÐ! eÐ&7ÜÐdÓeÐeàÐ Ø Ð,à ×)Ñ)Ð1Ø#×,Ñ,×1Ñ1°X·]±]ÒBô ØTóð ð Ò)œ-›/ˆŒØ ˆŒØò 
Ø)1Ð)=ŒO˜HÔ%Ä?ÓCTð 	Œ
ð Ð¤J¨t¯z©z¼?Ô$KØ�J‰J×'Ñ'Ø$ d×&DÑ&DÈdð (ô ô
 "¨8Ô4ˆŒÜ)°D·N±NÔCˆÔÜ"3Ø×Ñ¨$¯.©.ô#
ˆÔð &6ò &
Ø2:Ð2FŒO XÕ.ÈDð 	#ð !;ˆÔÜ!;ØÒ?Ô"=Ó"?Ø×#Ñ#Ø7Ø—n‘nØ%=ô"
ˆÔô .Ó/ˆŒÜ0Ø—]‘]Ø×,Ñ,Ø—n‘nØ7Ø%=ô
ˆŒô $Ø�H‰HØ�J‰JÜ"Ø'Øôð  $×6Ñ6ô
ˆŒô  Ø�H‰HØ�J‰JÜ"Ø%Øôð  $×6Ñ6Ø"×4Ñ4ô	
ˆŒ
ô (Ø�H‰HØ�J‰JÜ"Ø)Ø ôð  $×6Ñ6ô
ˆŒô &Ø�H‰HØ�J‰JÜ"Ø(Øôð  $×6Ñ6ô
ˆŒô &Ø�H‰HØ�J‰JÜ"Ø(Øôð  $×6Ñ6ô
ˆŒô $Ø�H‰HØ�J‰JÜ"Ø'Øôð  $×6Ñ6ô
ˆŒð —|‘|Ø—Z‘ZØŸ™ØŸ™ØŸ™Ø—|‘|ñ(
ˆŒð  Ð&Ø /× 5Ñ 5Ó 7ò M‘��fØŸ™×(Ñ(¨Ó.�Ø�=Ü$ØHÈÈÐQóð ð —‘×%Ñ%×,Ñ,Ñ,LÀVÔ,LÕLðMð —\‘\×(Ñ(Ó*ò 	CˆEØ�M‰M×"Ñ" 5§>¡>×#:Ñ#:¸EÕBð	Cð .0ˆŒØ46ˆÔÜ—\‘\“^ˆ�
r7   c                óø   — |xs g }t        «       }|D ]G  }|j                  |v rt        d|j                  › d|› d�«      ‚|j                  |j                  «       ŒI t	        |||¬«      }|| j
                  |<   |S )z[Register a new roadmap and return it.

        Validates that step IDs are unique.
        zduplicate step id 'z' in roadmap 'ú')r@   rW   rX   )Úsetr@   r{   ÚaddrV   r‰   )rŽ   Ú
roadmap_idrW   rX   Ústep_idsÚstepÚroadmaps          r8   Úcreate_roadmapzPtahBridge.create_roadmap1  s‡   € ð ’˜ˆÜ ›UˆØò 	"ˆDØ�w‰w˜(Ñ"Ü Ø)¨$¯'©'¨°.ÀÀÈAÐNóð ð �L‰L˜Ÿ™Õ!ð	"ô ˜Z¨d¸%Ô@ˆØ%,ˆ�‰�zÑ"Øˆr7   c                ó8   — | j                   j                  |«      S )z5Return a roadmap by id, or None if it does not exist.)r‰   r„   )rŽ   r—   s     r8   Úget_roadmapzPtahBridge.get_roadmapH  s   € à�~‰~×!Ñ! *Ó-Ð-r7   c                óH   — t        | j                  j                  «       «      S )zReturn all registered roadmaps.)rM   r‰   r‡   ©rŽ   s    r8   Úlist_roadmapszPtahBridge.list_roadmapsL  s   € ä�D—N‘N×)Ñ)Ó+Ó,Ð,r7   c              ƒ  óè  K  — | j                   j                  |j                  «      }|€gt        |j                  |j                  dd|j                  › �¬«      }t
        j                  |_        ||_        || j                  |j                  <   |S t        |j                  «      }|j                  d|j                  «       |j                  d|«       t
        j                  |_        	 | j                  ��;t        | j                   t"        «      �r d|› d|j                  › �}| j                   j%                  |«      }|€ª| j                   j'                  d	|j                  |j(                  j*                  |d
œ|¬«       | j,                  j/                  t0        j2                  |j(                  j*                  |j                  d||dœ¬«       | j                   j%                  |«      }|�Ç|j                  t4        j                  u r«| j                   j7                  |«      r�t8        j;                  d|«       | j,                  j/                  t0        j<                  |j(                  j*                  |j                  dd|j>                  xs d||dœ¬«       | j                   j%                  |«      }|�ã|j                  t4        j@                  u rÇ| j                   jC                  |«      r¬t8        j;                  d|«       | j,                  j/                  t0        j<                  |j(                  j*                  |j                  ddtE        |j                  xs i j                  d«      xs d«      ||dœ¬«       | j                   j%                  |«      }|�?|j                  t4        jF                  u r#| j                   jI                  |«      ƒ d{  –—† }|€tK        d«      ‚|j                  t4        j@                  u rØt        |j                  t        «      r¾tM        tE        |j                  j                  d|jN                  «      «      |j                  tQ        |j                  j                  dd«      «      |j                  j                  di «      |j                  j                  d«      |j                  j                  tR        «      du¬«      }n›|j                  t4        jT                  u rtK        d«      ‚tK        |j>                  xs d|j                  jV                  › �«      ‚| jX                  j[                  |j                  |j(                  j*                  |¬
«      ƒ d{  –—† }|rtQ        |jd                  «      nd}
|r|jf                  ni }|r|j>                  nd}t        |j                  |j                  |
||¬«      }|
rt
        j@                  nt
        j                  |_        ||_        || j                  |j                  <   |S 7 �ŒG7 Œ­# t\        $ rÅ}	t        |	t^        t`        f«      r"t8        j;                  d|j                  |	«       n t8        jc                  d|j                  «       t        |j                  |j                  dtE        |	«      ¬«      }t
        j                  |_        ||_        || j                  |j                  <   |cY d}	~	S d}	~	ww xY w­w) zÀDispatch one roadmap step through the TaskDispatcher.

        The dispatcher performs the security boundary checks before the
        underlying agent's ``execute`` method is called.
        NFzunknown role: )rP   rA   rR   rT   Útask_idr—   zptah:ú:rc   ©r¢   rl   rF   )r¢   Údispatch_step)Údurable_task_idr—   )rl   r¢   ÚactionÚmetadataz0re-dispatching previously failed durable step %sÚfailed_task_requeuedÚ )rl   r¢   r§   rJ   rT   r¨   z1re-dispatching previously blocked durable step %sÚblocked_task_requeuedrT   z(durable roadmap task could not be loadedÚ
agent_namerR   rS   )r¬   r¢   rR   rS   rT   Úexecution_attemptedzostep was interrupted after process restart; review its side effects before explicitly retrying the durable taskzdurable task ended with status zstep %s refused: %szstep %s failed unexpectedly)rP   rA   rR   rS   rT   )4r‚   r„   rA   rO   r@   r:   r3   rH   rJ   rŠ   rL   rF   Ú
setdefaultr<   re   ry   r~   r   Úget_jobÚenqueue_jobrm   rl   rf   Úrecordr   ÚTASK_CREATEDr   Úretry_failedÚloggerÚwarningÚERRORrT   r2   Úretry_blockedr?   r0   Údispatch_jobÚRuntimeErrorr
   rW   rQ   r   ÚINTERRUPTEDÚvaluer�   ÚdispatchÚ	Exceptionr"   r   Ú	exceptionrR   rS   )rŽ   r—   r™   r‘   rJ   rF   Ú
durable_idÚjobÚagent_resultÚexcrR   rS   rT   s                r8   Úexecute_stepzPtahBridge.execute_stepS  s�  è ø€ ð —‘× Ñ  §¡Ó+ˆØˆ=ÜØŸ™Ø—Y‘YØØ& t§y¡y kÐ2ô	ˆFô %×+Ñ+ˆDŒKØ ˆDŒKØ*0ˆD×Ñ˜tŸw™wÑ'ØˆMô �t—|‘|Ó$ˆØ×Ñ˜9 d§g¡gÔ.Ø×Ñ˜<¨Ô4ä ×+Ñ+ˆŒðC	Ø�}‰}Ñ(¬Z¸¿
¹
ÄOÕ-TØ$ Z L°°$·'±'°Ð;�
Ø—j‘j×(Ñ(¨Ó4�Ø�;Ø—J‘J×*Ñ*Ø,à'+§w¡wØ(-¯©×(?Ñ(?Ø'.ñð
 !+ð +ô ð —N‘N×)Ñ)Ü&×3Ñ3Ø!&§¡×!8Ñ!8Ø $§¡Ø.Ø5?ÈzÑ!Zð *ô ð Ÿ*™*×,Ñ,¨ZÓ8�Cà�OØŸ
™
Ô&:×&AÑ&AÑAØŸ
™
×/Ñ/°
Ô;ô —N‘NØJÈJôð —N‘N×)Ñ)Ü&×,Ñ,Ø!&§¡×!8Ñ!8Ø $§¡Ø.Ø5Ø!Ÿi™išo¨2à/9Ø*4ñ"ð *ô ð Ÿ*™*×,Ñ,¨ZÓ8�Cà�OØŸ
™
Ô&:×&DÑ&DÑDØŸ
™
×0Ñ0°Ô<ô —N‘NØKÈZôð —N‘N×)Ñ)Ü&×,Ñ,Ø!&§¡×!8Ñ!8Ø $§¡Ø.Ø6Ü! 3§:¡:Ò#3°×"8Ñ"8¸Ó"AÒ"GÀRÓHà/9Ø*4ñ"ð *ô ð Ÿ*™*×,Ñ,¨ZÓ8�CØ�? s§z¡zÔ5I×5QÑ5QÑ'QØ $§
¡
× 7Ñ 7¸
Ó C×C�CØ�;Ü&Ð'QÓRÐRØ—:‘:Ô!5×!?Ñ!?Ñ?ÄJÈsÏzÉzÔ[_ÔD`Ü#.Ü#& s§z¡z§~¡~°lÀEÇJÁJÓ'OÓ#PØ $§¡Ü $ S§Z¡Z§^¡^°I¸uÓ%EÓ FØ ŸZ™ZŸ^™^¨F°BÓ7Ø!Ÿj™jŸn™n¨WÓ5ð  ŸJ™JŸN™NÔ+BÓCÈ5ÐPô$‘Lð —Z‘ZÔ#7×#CÑ#CÑCÜ&ðFóð ô
 'ØŸ	™	ÒYÐ'FÀsÇzÁz×GWÑGWÐFXÐ%Yóð ð &*§_¡_×%=Ñ%=Ø ŸG™GØ"Ÿ^™^×4Ñ4Ø#ð &>ó &÷  �ñ* 1=”$�|×+Ñ+Ô,À%ˆÙ$0ˆ|× Ò °bˆÙ&2�×"Ò"¸ˆäØ—G‘GØ—‘ØØØô
ˆñ /6”j×*Ò*¼:×;LÑ;LˆŒØˆŒØ&,ˆ×Ñ˜4Ÿ7™7Ñ#Øˆð} Dùð4 ùô
 ò 	Ü˜#¤Ô/?Ð@ÔAÜ—‘Ð4°d·g±g¸sÕCä× Ñ Ð!>ÀÇÁÔHÜØŸ™Ø—Y‘YØÜ˜#“hô	ˆFô %×+Ñ+ˆDŒKØ ˆDŒKØ*0ˆD×Ñ˜tŸw™wÑ'Ø�Mûð	üs^   ‚C'[2Ã*K+X! ÏXÏFX! Õ1XÕ2X! Õ6B&[2ØX! ØX! Ø!	[/Ø*B:[*Û$[/Û%[2Û*[/Û/[2c              ƒ  ó¶  K  — 	 | j                   j                  t        |d   «      t        |d   «      t        |d   «      ¬«      ƒ d{  –—† }t        |t        «      rBd|j                  d
|j                  d|j                  d|j                  t        |j                   iS dt        t#        |dd«      «      d
t%        t#        |d
d«      «      dt#        |di «      xs i dt#        |dd«      t        diS 7 Œ¨# t        t
        f$ rS}t        j                  dt        |j                  dd«      «      |«       dd	d
ddi dt        |«      t        dicY d}~S d}~ww xY w­w)zBExecute a persisted step payload and return JSON-safe result data.r¢   rl   rF   r¤   Nzdurable step %s refused: %sÚunknownr¬   zptah-dispatcherrR   FrS   rT   T)r�   r¼   r?   rL   r"   r   r´   rµ   r„   r   ry   r
   r¬   rR   rS   rT   r­   ÚgetattrrQ   )rŽ   rÀ   rÁ   rÂ   s       r8   r€   z$PtahBridge._dispatch_persistent_step  s`  è ø€ ð	Ø!%§¡×!9Ñ!9Ü˜C 	™NÓ+Ü˜S ™_Ó-Ü˜S ™^Ó,ð ":ó "÷ ˆLô  �l¤KÔ0à˜l×5Ñ5Ø˜<×/Ñ/Ø˜×)Ñ)Ø˜×+Ñ+ô (¨×)IÑ)Iðð ð œ#œg l°LÀ)ÓLÓMØ”tœG L°)¸TÓBÓCØ”G˜L¨&°"Ó5Ò;¸Ø”W˜\¨7°DÓ9ô $ Tð
ð 	
ð5ùô
 Ô/Ð0ò 
	Ü�N‰NØ-¬s°3·7±7¸9ÀiÓ3PÓ/QÐSVôð Ð/Ø˜5Ø˜Øœ˜S›Ü'¨ðõ ûð	
	üsI   ‚E„AC4 Á	C2Á
C4 ÁB$EÃ2C4 Ã4EÄAEÅEÅEÅEÅEc              ƒ  óŽ  K  — | j                   j                  |«      }|€t        d|› �«      ‚| j                  4 ƒd{  –—†  t        j
                  |_        t        «       }d}t        |j                  «      }|ròd}t        |«      D ]™  }t        |j                  «      }|r|j                  |«      sŒ,|j                  |«       | j                  ||«      ƒ d{  –—†  |j                  €Œd|j                  j                  r|j!                  |j"                  «       nd}d}Œ› |sD|D ]  }t$        j&                  |_        Œ t        j&                  |_        |cddd«      ƒd{  –—†  S |rŒò|rt        j(                  nt        j*                  |_        |cddd«      ƒd{  –—†  S 7 �Œi7 ŒÏ7 ŒG7 Œ# 1 ƒd{  –—†7  sw Y   yxY w­w)zÆExecute roadmap steps while respecting dependencies.

        A roadmap with unresolved dependencies is explicitly marked BLOCKED
        instead of incorrectly being reported as COMPLETED.
        Nzunknown roadmap: FT)r‰   r„   ÚKeyErrorr�   r%   r1   rH   r•   rM   rX   rG   ÚissubsetÚremoverÃ   rJ   rR   r–   r@   r:   r4   r3   r2   )	rŽ   r—   rš   r(   r)   r&   Úprogressr™   Údepss	            r8   Úexecute_roadmapzPtahBridge.execute_roadmap/  sš  è ø€ ð —.‘.×$Ñ$ ZÓ0ˆØˆ?ÜÐ.¨z¨lÐ;Ó<Ð<à—:‘:÷ )	ñ )	Ü*×2Ñ2ˆGŒNÜ"%£%ˆIØˆFä˜7Ÿ=™=Ó)ˆGáØ �ä  ›Mò (�DÜ˜tŸ™Ó/�Dá D§M¡M°)Ô$<Ø à—N‘N 4Ô(Ø×+Ñ+¨J¸Ó=×=Ð=à—{‘{Ñ.ØŸ;™;×.Ò.Ø%ŸM™M¨$¯'©'Õ2à%)˜Fà#'™ð(ñ"  ð !(ò 9˜Ü&0×&8Ñ&8˜�ð9ô &3×%:Ñ%:�G”NØ"÷E)	÷ )	ñ )	ò ñ> ô ×$Ò$ä"×,Ñ,ð ŒNð
 ÷S)	÷ )	ò )	ùð" >øð#)	øð )	ø÷ )	÷ )	ñ )	üsƒ   ‚<G¾F'¿GÁBF0ÃF*ÃF0Ã,A,F0ÅGÅ$F,Å%GÅ*F0Å-(F0ÆGÆ!F.Æ"GÆ*F0Æ,GÆ.GÆ0GÆ6F9Æ7GÆ>Gc                ó8   — | j                   j                  |«      S )z.Return the recorded result for a step, if any.)rŠ   r„   )rŽ   rP   s     r8   Ústep_resultzPtahBridge.step_resultg  s   € à×!Ñ!×%Ñ% gÓ.Ð.r7   c                óX   — | j                   j                  |«      }|r|j                  S dS )z;Return the current status of a roadmap, or None if unknown.N)r‰   r„   rH   )rŽ   r—   rš   s      r8   Úroadmap_statuszPtahBridge.roadmap_statusk  s'   € à—.‘.×$Ñ$ ZÓ0ˆÙ!(ˆw�~‰~Ð2¨dÐ2r7   c                ój   — | j                   j                  |«      }|rt        |j                  «      S g S )z6Return the accumulated results for a given agent role.)r‚   r„   rM   Úresults)rŽ   rA   r‘   s      r8   Úagent_resultszPtahBridge.agent_resultsp  s,   € à—‘× Ñ  Ó&ˆÙ&+Œt�E—M‘MÓ"Ð3°Ð3r7   c              ƒ  ó^   K  — t         j                  dt        | j                  «      «       y­w)z"Best-effort cleanup of the bridge.z%PtahBridge shutdown for roadmap(s)=%sN)r´   ÚdebugrM   r‰   rŸ   s    r8   ÚshutdownzPtahBridge.shutdownu  s!   è ø€ ä�‰Ø3Ü�—‘Ó õ	
ùs   ‚+-)NNNg      >@NN)r}   zAsyncEventBus | Noner~   zMemoryTaskQueue | Nonerg   zApprovalManager | Nonerh   r]   r�   zExecutionProvider | Nonere   zSQLiteDatabase | Nonera   z"Mapping[str, Iterable[str]] | NoneÚreturnÚNonerZ   )r—   r?   rW   r?   rX   zlist[RoadmapStep] | NonerØ   rV   )r—   r?   rØ   zRoadmap | None)rØ   zlist[Roadmap])r—   r?   r™   r>   rØ   rO   )rÀ   rE   rØ   rE   )r—   r?   rØ   rV   )rP   r?   rØ   rI   )r—   r?   rØ   zRoadmapStatus | None)rA   r?   rØ   zlist[AgentResult])rØ   rÙ   )r,   r-   r.   r/   r’   r›   r�   r    rÃ   r€   rÍ   rÏ   rÑ   rÔ   r×   r6   r7   r8   r_   r_   ˆ   s  „ ñ	ð %)Ø(,Ø37Ø*.Ø7;Ø*.ðX$ð ?CñX$à!ðX$ð &ðX$ð 1ð	X$ð
 #(ðX$ð 5ðX$ð (ðX$ð <ðX$ð 
óX$ðB +/ð	àðð ðð (ð	ð
 
óó..ó-ðsàðsð ðsð 
ó	sój%
óN3óp/ó3ó
4ô

r7   r_   )@r/   Ú
__future__r   r‹   Úloggingr[   Úcollections.abcr   r   Údataclassesr   r   Úenumr   Útypingr	   Ú cyberbrain26.agents.orchestratorr
   r   r   r   r   r   r   Úcyberbrain26.control_planer   r   r   r   r   Ú$cyberbrain26.data_plane.sqlite_storer   Úcyberbrain26.execution_planer   r   r   Ú/cyberbrain26.extension_layer.execution_providerr   Ú*cyberbrain26.extension_layer.registry_implr   r   Ú$cyberbrain26.security_plane.approvalr   Ú!cyberbrain26.security_plane.auditr   r   Ú$cyberbrain26.security_plane.identityr    Ú&cyberbrain26.security_plane.permissionr!   r"   Ú"cyberbrain26.security_plane.policyr#   Ú	getLoggerr,   r´   r?   r%   r:   r>   rO   rV   Ú__all__r_   r6   r7   r8   ú<module>rí      sù   ðñõ. #ã Û Û ß -ß (Ý Ý ÷÷ ñ ÷õ õ @÷ñ õ
 N÷õ Aß FÝ >ß SÝ ;à	ˆ×	Ñ	˜8Ó	$€ô�C˜ô ô��dô ð ÷	%ð 	%ó ð	%ð ÷ð ó ðð ÷Cð Có ðCò€÷r
ò r
r7   