
    0|i                    (   d dl 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
 d dlZ ed          Ze G d d	                      Ze G d
 d                      Ze G d d                      Ze G d d                      Ze G d d                      Ze G d d                      Ze G d d                      Ze G d d                      ZdBdZdCdZdDdEd%ZdFd(ZdGd-ZdHd0ZdIdJd2ZdKd3ZdLd4ZdMd6ZdNd7Z	 dOdPd@Z dQdAZ!dS )R    )annotations)	dataclassfield)datetime)Path)CallableLiteralNz/root/projects/meeting/agentsc                  J    e Zd ZU ded<   ded<   ded<   dZded<   dZded<   dS )	AgentConfigstrnamerolesystem_prompt input_schemaoutput_schemaN)__name__
__module____qualname____annotations__r   r        H/root/.openclaw/workspace/skills/meeting-orchestrator/scripts/runtime.pyr   r      sR         IIIIIILMr   r   c                  P    e Zd ZU ded<   ded<    eej                  Zded<   dS )ScratchpadEntryr   speakercontentdefault_factoryr   	timestampN)r   r   r   r   r   r   nowr    r   r   r   r   r      sD         LLLLLL%===I======r   r   c                  f    e Zd ZU ded<   dZded<    ee          Zded<   dZd	ed
<   dZ	d	ed<   dS )MeetingStater   topicr   contextr   list[ScratchpadEntry]
scratchpadr   intcurrent_round
   
max_roundsN)
r   r   r   r   r%   r   listr'   r)   r+   r   r   r   r#   r#      sl         JJJG(-d(C(C(CJCCCCMJr   r#   c                  N    e Zd ZU ded<   ded<   dZded<   dZded<   dZded	<   dS )

PMDecisionr   analysiszLiteral['CALL_AGENT', 'FINISH']next_actionNz
str | Nonetarget_agentprompt_for_agentfinal_report)r   r   r   r   r1   r2   r3   r   r   r   r.   r.   %   s[         MMM0000#L#####'''''#L######r   r.   c                  N    e Zd ZU ded<   ded<   dZded<   dZded	<   d
Zded<   dS )MeetingPlanr   r$   	list[str]rolesr   r%   r*   r(   r+   Tboolhuman_in_the_loopN)r   r   r   r   r%   r+   r9   r   r   r   r5   r5   .   s[         JJJGJ"""""""r   r5   c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )MeetingRunResultr   reportr&   
transcriptr6   participantsr   
started_atfinished_atNr   r   r   r   r   r   r   r;   r;   7   sK         KKK%%%%r   r;   c                  B    e Zd ZU ded<   ded<   ded<   ded<   ded<   dS )	RoleAnalysisResultr   	role_namepromptresponser   r?   r@   NrA   r   r   r   rC   rC   @   sE         NNNKKKMMMr   rC   c                  J    e Zd ZU ded<   ded<   ded<   dZded	<   d
Zded<   dS )WorkflowStater5   planr#   meetingdict[str, AgentConfig]r>   Fr8   pausedr   r   pause_reasonN)r   r   r   r   rL   rM   r   r   r   rH   rH   I   sX         ((((FLr   rH   rD   r   returnc           
        t           |  dz  }t          j        |                    d                    }t	          |d         |d         |d         |                    dd          |                    d	d          
          S )Nz.jsonzutf-8)encodingr   r   r   r   r   r   )r   r   r   r   r   )ROLE_DIRjsonloads	read_textr   get)rD   pathdatas      r   load_role_configrX   R   s    ))))D:dnngn6677D&\&\?+XXnb11hh33   r   r6   c                 d    t          d t                              d          D                       S )Nc              3  $   K   | ]}|j         V  d S N)stem).0ps     r   	<genexpr>z"load_role_names.<locals>.<genexpr>_   s$      ::Q!&::::::r   z*.json)sortedrQ   globr   r   r   load_role_namesrb   ^   s+    ::(--"9"9::::::r   r   r*   r$   r7   r%   r+   r(   c                (    t          | |||          S )Nr$   r7   r%   r+   )r5   rd   s       r   build_meeting_planre   b   s    U%ZXXXXr   entriesr&   c                H    | sdS d                     d | D                       S )NNo discussion yet.
c              3  :   K   | ]}d |j          d|j         V  dS )[z]: Nr   r   )r]   es     r   r_   z$format_scratchpad.<locals>.<genexpr>i   s7      DDq222qy22DDDDDDr   )join)rf   s    r   format_scratchpadro   f   s1     $##99DDGDDDDDDr   rI   stater>   rK   c           
         d                     d |                                D                       }t          |j                  }d| j         d| j        pd d| d|j         d| 
S )	Nri   c              3  6   K   | ]\  }}d | d|j          V  dS )z- z: N)r   )r]   r   cfgs      r   r_   z"build_pm_prompt.<locals>.<genexpr>m   s9      XXidC1t11sx11XXXXXXr   
## Topic

z

## Background Context

Nonez

## Participants

z

## Current Whiteboard (Round z)

)rn   itemsro   r'   r$   r%   r)   )rI   rp   r>   	role_listr'   s        r   build_pm_promptrx   l   s    		XX<CUCUCWCWXXXXXI"5#344J	Otz 	O 	O$(L$:F	O 	O'	O 	O ).(;	O 	O CM	O 	Or   r'   taskc                    d|  g}|r|                     d|            |                     d|            |                     d|            d                    |          S )Nrt   z## Context

z## Current Meeting Whiteboard

z## Your Task

z

)appendrn   )r$   r%   r'   ry   sectionss        r   build_agent_promptr}   w   s}    &u&&'H 4222333OOD
DDEEEOO-t--...;;x   r   tuple[AgentConfig, str]c                R    t          |           }d}d}|t          ||||          fS )Nrh   zREvaluate the topic directly. Give a clear judgment, risks, and the next best move.r$   r%   r'   ry   )rX   r}   )rD   r$   r%   r   r'   ry   s         r   build_single_role_promptr      s7    I&&D%J_D#%Z^bcccccr   c                R    d| j          d|j         dt          |j                   dS )Nrt   z

## Current Round

z

## Whiteboard

z6

## User Feedback

What should change in the meeting?)r$   r)   ro   r'   )rI   rp   s     r   build_feedback_promptr      sO    	Atz 	A 	A$2	A 	A-e.>??	A 	A 	Ar   c                    t          | j        | j        | j                  }d | j        D             }t          | ||          S )Nr$   r%   r+   c                .    i | ]}|t          |          S r   rX   r]   r   s     r   
<dictcomp>z(build_workflow_state.<locals>.<dictcomp>   s#    HHHTD*400HHHr   rI   rJ   r>   )r#   r$   r%   r+   r7   rH   r   s      r   build_workflow_stater      sF    T\do^^^GHHTZHHHLdG,OOOOr   reasonc                "    d| _         || _        | S )NTrL   rM   )rp   r   s     r   pause_workflowr      s    ELELr   c                "    d| _         d| _        | S )NFr   r   )rp   s    r   resume_workflowr      s    ELELr   select_participants"Callable[[MeetingPlan], list[str]]route_pmQCallable[[MeetingPlan, MeetingState, dict[str, AgentConfig], object], PMDecision]run_role)Callable[[AgentConfig, str, object], str]interrupt_hookCallable[..., None] | Nonec                Z   t          j                    }t          | j        | j        | j                  }d  ||           D             }d}	|j        |j        k     r|xj        dz  c_         || |||          }
|
j        dk    r
|
j        pd}	n|
j	        |vrt          d|
j	                   t          |j                  }t          | j        | j        ||
j        pd	          } |||
j	                 ||          }|j                            t!          |
j	        |
                     | || ||
j	        |           |j        |j        k     |	sd}	t#          |	t%          |j                  t%          |                                          |t          j                              S )Nr   c                .    i | ]}|t          |          S r   r   r   s     r   r   z&run_meeting_native.<locals>.<dictcomp>   s#    WWWTD*400WWWr   r      FINISHz&# Meeting Report

No report generated.zPM selected unavailable agent: zRespond with your judgment.r   rl   )rI   rp   latest_agentlatest_responsezK# Meeting Report

Meeting ended after maximum rounds without PM conclusion.)r<   r=   r>   r?   r@   )r   r!   r#   r$   r%   r+   r)   r0   r3   r1   
ValueErrorro   r'   r}   r2   r{   r   r;   r,   keys)rI   clientr   r   r   r   r?   rp   r>   r3   decisionscratchpad_textagent_promptrF   s                 r   run_meeting_nativer      s    Jtz4<DO\\\EWW=P=PQU=V=VWWWLL

 0
0
0q 8D%v>>8++#0^4^L 44Vx?TVVWWW+E,<==)*L&*K.K	
 
 
 8L)>?vVV8MW_ ` ` `aaa%NE@Ugopppp+ 
 0
0
0.  gf()),++--..LNN   r   c                    t          j                    }t          | ||          \  }} ||||          }t          | |||t          j                              S )N)rD   r$   r%   )rD   rE   rF   r?   r@   )r   r!   r   rC   )	rD   r$   r%   r   r   r?   r   rE   rF   s	            r   run_single_role_analysisr      se    J+iuV]^^^LD&xff--HLNN   r   )rD   r   rN   r   )rN   r6   )r   r*   )
r$   r   r7   r6   r%   r   r+   r(   rN   r5   )rf   r&   rN   r   )rI   r5   rp   r#   r>   rK   rN   r   )
r$   r   r%   r   r'   r   ry   r   rN   r   )r   )rD   r   r$   r   r%   r   rN   r~   )rI   r5   rp   r#   rN   r   )rI   r5   rN   rH   )rp   rH   r   r   rN   rH   )rp   rH   rN   rH   r[   )rI   r5   r   r   r   r   r   r   r   r   rN   r;   )
rD   r   r$   r   r%   r   r   r   rN   rC   )"
__future__r   dataclassesr   r   r   pathlibr   typingr   r	   rR   rQ   r   r   r#   r.   r5   r;   rC   rH   rX   rb   re   ro   rx   r}   r   r   r   r   r   r   r   r   r   r   <module>r      sY   " " " " " " ( ( ( ( ( ( ( (             $ $ $ $ $ $ $ $ 4/00         > > > > > > > >         $ $ $ $ $ $ $ $ # # # # # # # #                        	 	 	 	; ; ; ;Y Y Y Y YE E E E   ! ! ! !d d d d d   P P P P       26- - - - -`
 
 
 
 
 
r   