
    ]iU                     t   d Z ddlZddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
mZmZmZ ddlmZmZmZ ddlmZ 	 ddlZd	Zd
ZdZdZe dZe dZe dZdZdZ dZ!dZ"dZ#dZ$dZ%e G d d             Z&e G d d             Z'de(de
e&   fdZ)de(de(dee&   fd Z*d!ejV                  d"e&d#e(d$e(de'f
d%Z,d&e
e&   d$e(d'e-d(e(de
e'   f
d)Z.d*e
e'   d+e(fd,Z/d-e
e'   d.e
e'   fd/Z0d-e
e'   d.e
e'   fd0Z1d1 Z2e3d2k(  r ejh                   e2              yy# e$ r  ed        ej.                  d       Y w xY w)3a  
OpenRouter Swarm Orchestrator - Wave 2
Fires 200 agents (100 Kimi K2.5 + 100 MiniMax M2.5) at fresh stories.
Reads from SWARM_MISSIONS_WAVE2.md.

USAGE:
    PYTHONUNBUFFERED=1 python scripts/openrouter_swarm_wave2.py

OUTPUT:
    /mnt/e/genesis-system/swarm-output/session20/kimi_results.jsonl
    /mnt/e/genesis-system/swarm-output/session20/minimax_results.jsonl
    /mnt/e/genesis-system/swarm-output/session20/WAVE2_REPORT.md
    /mnt/e/genesis-system/hive/agents_active_wave2.json

Author: Genesis System
Date: 2026-02-16
    N)datetime)ListDictAnyOptional)	dataclassasdictfield)Pathz?ERROR: aiohttp not installed. Install with: pip install aiohttp   z-https://openrouter.ai/api/v1/chat/completionszIsk-or-v1-e494fd98114561ed140e566df6743e88407e57060e6040d49ce0ebfba2a653f2z2/mnt/e/genesis-system/hive/SWARM_MISSIONS_WAVE2.mdz,/mnt/e/genesis-system/swarm-output/session20z/kimi_results.jsonlz/minimax_results.jsonlz/WAVE2_REPORT.mdz3/mnt/e/genesis-system/hive/agents_active_wave2.jsonzminimax/minimax-m2.5zmoonshotai/kimi-k2.5      ,  iX  c                       e Zd ZU eed<   eed<   eed<   eed<   eed<   ee   ed<   eed<   eed<   eed	<   eed
<   eed<   defdZdefdZy)Storystory_idtitleroleneedbenefitacceptance_criteriablack_box_testswhite_box_testsestimated_tokensmodelprd_namereturnc                    dj                  d | j                  D              }d| j                   d| j                   d| j                   d| j
                   d| j                   d| d	| j                   d
| j                   dS )N
c              3   &   K   | ]	  }d |   yw)z- N ).0cs     7/mnt/e/genesis-system/scripts/openrouter_swarm_wave2.py	<genexpr>z"Story.to_prompt.<locals>.<genexpr>O   s     H!r!XHs   z	# Story: z - z

**User Story:**
As a z	, I need z
, so that z.

**Acceptance Criteria:**
z

**Black Box Tests:**
z

**White Box Tests:**
a  

**Instructions:**
Implement this story following the acceptance criteria. Provide production-ready code/content with inline comments, error handling, and best practices. Include example usage or test scenarios where applicable.
For code stories: Write clean, type-hinted Python (FastAPI) with comprehensive error handling.
For content stories: Write clear, compelling, accurate content optimized for conversion.
)	joinr   r   r   r   r   r   r   r   )selfcriterias     r$   	to_promptzStory.to_promptN   s    99Ht/G/GHHT]]O3tzzl ; ii[	$))Jt||n = 

        	    c                 D    | j                   j                         dk(  r	 y	 y)Nkimia  You are an expert software engineer building production-grade Python code for a SaaS product called Sunaiva (AI voice widgets for small businesses). Write clean, well-documented, type-hinted Python code with comprehensive error handling. Use FastAPI, asyncpg, Redis, Pydantic v2. Follow PEP 8. The backend runs on Elestio VPS with PostgreSQL, Redis, and serves widget.js to customer websites.u:  You are an expert marketing strategist and conversion copywriter for Sunaiva — an AI voice widget product that answers business calls 24/7 using AI. Target market: Australian small businesses (plumbers, dentists, lawyers, real estate agents, restaurants, HVAC, auto repair, vets, accountants, property managers). Pricing: Starter $197/mo, Pro $397/mo, Growth $597/mo. 30% agency commission. Key selling points: never miss a call, 24/7 AI receptionist, 5-minute setup, works on any website. Write persuasive, authentic content. Use Australian English where appropriate.)r   lowerr'   s    r$   system_promptzStory.system_promptd   s-    ::'u]	
r*   N)	__name__
__module____qualname__str__annotations__r   intr)   r/   r!   r*   r$   r   r   @   sY    MJ
I
ILc"JM3 ,
s 
r*   r   c                       e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   eed<   dZee   ed<   dZ	ee   ed<   dZ
eed<   d Zy)AgentResultagent_idteamr   r   story_titler   statusprompt_tokenscompletion_tokenstotal_tokenscost_usdresponse_time_msNresponseerror 	timestampc                 l    | j                   s(t        j                         j                         | _         y y N)rD   r   now	isoformatr.   s    r$   __post_init__zAgentResult.__post_init__   s$    ~~%\\^557DN r*   )r0   r1   r2   r3   r4   r5   floatrA   r   rB   rD   rI   r!   r*   r$   r7   r7   v   sn    M
IJMMKO"Hhsm"E8C=Is8r*   r7   	file_pathr   c                 B   t         j                  j                  |       s$t        d|  d       t	        j
                  d       t        | dd      5 }|j                         }ddd       g }d}t        j                  d	t        j                  
      }|j                  d      D ]:  }t        j                  d|      }|s|j                  d      j                         }< d}|j                  d      }i }	t        |      D ]A  \  }
}t        j                  d|      }|r|j                  d      j                         }||	|
<   C |D ]  }|j                         j                  d      s#|j                         j                  d      d   }t        |      D ]:  \  }
}|j                         |j                         k(  s(|	j!                  |
d      } n t#        ||      }|s|j%                  |        t        dt'        |       d|         |S # 1 sw Y   xY w)z1Parse SWARM_MISSIONS_WAVE2.md into Story objects.zERROR: z
 not foundr   rzutf-8)encodingNUnknownz
(?=^#### ))flagsr   z^# PRD \d+:\s+(.+?)(?:\s*\(|$)z####r   zParsed z stories from )ospathexistsprintsysexitopenreadresplit	MULTILINEmatchgroupstrip	enumerate
startswithget_parse_storyappendlen)rK   fcontentstoriescurrent_prdsectionsline	prd_match
full_linesprd_line_mapisectionsection_first_linestorys                 r$   parse_missionsrr      s   77>>)$	{*-.	iw	/ 1&&( GK xxwbllCH d# 5HH>E	#//!,224K5 Kt$JLZ( &4HH>E	#//!,224K%Q	&  "}}))&1 %]]_2248; , 	GAtzz|17799*..q)<	
 Wk2NN5!" 
GCL>	{
;<NS s   HHtextr   c                 \   	 t        j                  d|       }|sy|j                  d      |j                  d      j                         }}t        j                  d|       }t        j                  d|       }t        j                  d|       }|r|r|syt        j                  d| t         j                        }g }	|ri|j                  d      j                  d	      D ]F  }
|
j                         }
|
j                  d
      s%|	j                  |
dd j                                H t        j                  d| t         j                        }t        j                  d| t         j                        }t        j                  d|       }t        j                  d|       }t        |||j                  d      j                         |j                  d      j                         |j                  d      j                         |	|r|j                  d      j                         nd|r|j                  d      j                         nd|r*t        |j                  d      j                  dd            nd|r|j                  d      nd|      S # t        $ r}t        d|        Y d}~yd}~ww xY w)zParse a single story section.z####\s+([\w-]+):\s+(.+)Nr      z\*\*As a\*\*\s+(.+?),z)\*\*I need\*\*\s+(.+?),\s+\*\*so that\*\*z\*\*so that\*\*\s+(.+?)\.z@\*\*Acceptance Criteria(?::\*\*|\*\*:)\n(.*?)\*\*Black Box Testsr   -zC\*\*Black Box Tests(?::\*\*|\*\*:)\s*(.+?)(?:\n\*\*White Box Tests)zD\*\*White Box Tests(?::\*\*|\*\*:)\s*(.+?)(?:\n\*\*Estimated Tokens)z.\*\*Estimated Tokens(?::\*\*|\*\*:)\s*([\d,]+)z \*\*Model(?::\*\*|\*\*:)\s*(\w+)rC   ,i  Kimi)r   r   r   r   r   r   r   r   r   r   r   z"  WARNING: Failed to parse story: )rY   searchr]   r^   DOTALLrZ   r`   rc   r   r5   replace	ExceptionrT   )rs   r   mr   r   role_mneed_m	benefit_m
criteria_mr(   rj   bb_mwb_mtok_mmod_mes                   r$   rb   rb      s1   .II0$7''!*aggaj&6&6&8% 3T:GNII:DA	6i YYbdhjljsjst
"((+11$7 6zz|??3'OODHNN$456 yy_aegigpgpqyy`bfhjhqhqr 		KTR		=tDa&&(a&&(OOA&,,. (59DJJqM//1r59DJJqM//1rEJSQ!7!7R!@APT$)%++a.v
 	
  21#67s+   J
 A8J
 A-J
 FJ
 
	J+J&&J+sessionrq   r8   model_idc                 P  K   t        j                          }d|v rdnd}dt         dddd}|d	|j                         d
d|j                         d
gdt	        |j
                  dz   d      d}	 t        j                  t              }| j                  t        |||      4 d{   }	t        t        j                          |z
  dz        }
|	j                  dk7  rr|	j                          d{   }t        ||||j                  |j                   |j"                  ddddd|
d|	j                   d|dd        cddd      d{    S |	j%                          d{   }|j'                  di       }|j'                  dd      }|j'                  dd      }|j'                  dd      }d|v rdnd }|d!z  |z  }|d"   d   d#   d$   }t        ||||j                  |j                   |j"                  d%|||||
|&      cddd      d{    S 7 n7 '7 7 7 # 1 d{  7  sw Y   yxY w# t(        j*                  $ rd t        t        j                          |z
  dz        }
t        ||||j                  |j                   |j"                  ddddd|
d't         d(      cY S t,        $ ro}t        t        j                          |z
  dz        }
t        ||||j                  |j                   |j"                  ddddd|
t/        |      dd       cY d}~S d}~ww xY ww))z#Fire a single agent via OpenRouter.r,   KIMIMINIMAXzBearer zapplication/jsonz!https://github.com/genesis-systemzGenesis Swarm Wave2)AuthorizationzContent-TypezHTTP-RefererzX-Titlesystem)r   rf   usergffffff?  i    )r   messagestemperature
max_tokens)total)jsonheaderstimeoutN   failr           zHTTP : r   r8   r9   r   r   r:   r   r;   r<   r=   r>   r?   r@   rB   usager<   r=   r>   gQ?g      ?i@B choicesmessagerf   success)r8   r9   r   r   r:   r   r;   r<   r=   r>   r?   r@   rA   zTimeout after s)timeOPENROUTER_API_KEYr/   r)   minr   aiohttpClientTimeoutREQUEST_TIMEOUTpostOPENROUTER_BASE_URLr5   r;   rs   r7   r   r   r   r   ra   asyncioTimeoutErrorr|   r3   )r   rq   r8   r   startr9   r   payloadr   respelapsederrdatar   ptctttratecostrs   r   s                        r$   execute_agentr      s     IIKEx'6YD ##5"67*;(	G %*=*=*?@(9:
 %0047>G4
''o><< 3'7\c<d 	 	hl499;.$67G{{c! IIK'"%D"^^"^^F"#qq 7!$++bTc<	 	 	 $DHHWb)E?A.B.2B>1-B!X-44DNd*D	?1%i0;D!HU[[	 BR$/	 	 	 (		 %	 	 	 	>  	
tyy{U*d23D^^^^Fqq7"?"315
 	
  	
tyy{U*d23D^^^^Fqq7a&#,
 	
	
s   A-L&07H6 'H(H6 +AH!1H2AH!>H6 
HH6 L&H!#H$BH!H6 HH6 L&H6 H!H6 H!H6 !H3'H*(H3/H6 2L&3H6 6A4L#*L&,L#4A$LL#L&L##L&rg   
batch_size	team_namec                   K   g }t        |       }t        dd        t        d| d| d|        t        d| dt         d       t        d        t        j                         4 d	{   }t        d
||      D ]  }| |||z    }||z  dz   }	||z   dz
  |z  }
t        d|	 d|
 dt        |       d       |D cg c]e  }t        j                  |j                   dt        j                         j                          j                               j                         d	d g }}	 t        j                  t        j                   t#        ||      D cg c]  \  }}t%        ||||       c}} t&               d	{   }|j)                  |       t+        d |D              }t+        d |D              }t+        d |D              }t        d| d| d|d       d|v r0||z   |k  r(t        d       t        j,                  d       d	{     d	d	d	      d	{    |S 7 c c}w c c}}w 7 7 )# t        j.                  $ r t        dt&         d       t#        ||      D ]Y  \  }}|j1                  t3        ||||j                  |j4                  |j6                  dd
d
d
d t&        d!z  d"t&         d#             [ Y Rw xY w7 # 1 d	{  7  sw Y   |S xY ww)$z'Fire all stories for a team in batches.r   <============================================================z  TEAM r   z agents | Model: z  Batch size: z | Timeout: r   Nr   r   z  Batch /z	: Firing z
 agents...rv      )r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   Nr;   r"   rM   s     r$   r%   zfire_team.<locals>.<genexpr>n  s     KqQXX5JK   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   Nr   r   s     r$   r%   zfire_team.<locals>.<genexpr>o  s     Jqxx67I1Jr   c              3   4   K   | ]  }|j                     y wrF   r?   r   s     r$   r%   zfire_team.<locals>.<genexpr>p  s     =!1::=   z    OK: z	 | FAIL: z
 | Cost: $.4fr,   z$    Waiting 10s (Kimi rate limit)...
   z    BATCH TIMEOUT after u   s — marking all failedr   r   r   zBatch timeout r   )rd   rT   r   r   ClientSessionrangehashlibmd5r   r   rG   rH   encode	hexdigestr   wait_forgatherzipr   BATCH_TIMEOUTextendsumsleepr   rc   r7   r   r   )rg   r   r   r   resultsr   r   rn   batch	batch_numtotal_batchesr   	agent_idsrq   aidbatch_resultsokr   r   s                      r$   	fire_teamr   H  s     GLE	Bvh-	GI;b'8

CD	N:,l?2C1
EF	VH$$& , ,'q%, +	AAa
l+EjA-I"Z/!3
BMHYKqyUJWX
  qzzl!HLLN,D,D,F+GHOOQR\\^_a`abI 
&-&6&6NN*-eY*?%&E3 &guc8D%  *' ! }-KMKKJmJJ=}==IdV:d3ZHI X%!j.5*@@B!--+++?+	, ,\ N],%!" ,'' 
0?WXY!%3 FAsNN;!$9H!"!"F&'11!$}t7K .}oQ?$ 
E, , , ,\ Ns   A*K,,H--K,0AK?A*H0)K,-H?H51H?H;BH?H=H?KK,&K'K,0K5H?=H??BKKKKK,K)KK)$K,r   filepathc           	      R   t        j                  t         j                  j                  |      d       t	        |d      5 }| D ]2  }|j                  t        j                  t        |            dz          4 	 ddd       t        dt        |        d|        y# 1 sw Y   $xY w)zSave results to JSONL.Texist_okwr   Nz  Saved z results -> )rQ   makedirsrR   dirnamerW   writer   dumpsr	   rT   rd   )r   r   re   rM   s       r$   save_resultsr     s    KK)D9	h	 2 	2AGGDJJvay)D01	22 
HS\N,xj
9:2 2s   8BB&kimi_resultsminimax_resultsc                 >   ddt        j                         j                         t        |       t        |      z   t        t        |       t        d | D              t        d | D              t        d | D              t        d | D              | D cg c]G  }|j                  |j                  |j                  |j                  |j                  |j                  dI c}dt        t        |      t        d	 |D              t        d
 |D              t        d |D              t        d |D              |D cg c]G  }|j                  |j                  |j                  |j                  |j                  |j                  dI c}ddd}t        j                  t        j                  j!                  t"              d       t%        t"        d      5 }t'        j(                  ||d       ddd       t+        dt"                yc c}w c c}w # 1 sw Y   &xY w)zWrite agent manifest.ru   r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     PQ!((i:OqPr   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     LAV9KaLr   c              3   4   K   | ]  }|j                     y wrF   r>   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     #IqANN#Ir   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     !C!**!Cr   )r8   r   r;   tokensr   r@   )r   r   r   failedr>   
total_costagentsc              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     SQQXX=RqSr   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     OAAHH<NaOr   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     #LqANN#Lr   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z save_manifest.<locals>.<genexpr>  s     !F!**!Fr   )r,   minimax)waver   rD   total_agentsteamsTr   r   )indentNz
Agent manifest -> )r   rG   rH   rd   
KIMI_MODELr   r8   r   r;   r>   r?   r@   MINIMAX_MODELrQ   r   rR   r   MANIFEST_FILErW   r   dumprT   )r   r   rM   manifestre   s        r$   save_manifestr    s    \\^--/L)C,@@ $\*P,PPLLL ##IL#I I!!Cl!CC *
  %&JJ$%JJ"#(("#.. !

,-,>,>
( '_-S/SSOOO ##LO#L L!!Fo!FF -
  %&JJ$%JJ"#(("#.. !

,-,>,>
)'
-H^ KK.>	mS	! )Q		(Aa()	 
01K
&
 ) )s   AH	8AHHHc                 X   | |z   }t        |      }t        d |D              }t        d |D              }t        d |D              }t        d |D              }|rt        d |D              |z  nd}t        d | D              }	t        d | D              }
t        d	 | D              }t        d
 | D              }t        d |D              }t        d |D              }t        d |D              }t        d |D              }dt        j                         j	                  d       d| d| d||z  dz  dd| d|dd|dd|ddt        |        d|	 d|
 d |dd!|dd"}| D ]S  }|j
                  d#k(  rd$nd%}|d&| d'|j                   d(|j                   d)|j                  dd*|j                   d+z  }U |d,t        |       d| d| d |dd!|dd-z  }|D ]S  }|j
                  d#k(  rd$nd%}|d&| d'|j                   d(|j                   d)|j                  dd*|j                   d+z  }U |D cg c]  }|j
                  d.k(  s| }}|rF|d/t        |       d0z  }|D ]/  }|d1|j                   d2|j                   d3|j                   d4z  }1 |d5t         d6t         d7t         d8t         d9t        j                         j!                          d4z  }t#        t        d:      5 }|j%                  |       d;d;d;       t'        d<t                y;c c}w # 1 sw Y   !xY w)=zGenerate execution report.c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>       71Y!6Q7r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     6Q188v#5q6r   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     /A/r   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>       )aqzz)r   c              3   4   K   | ]  }|j                     y wrF   )r@   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     5!1%%5r   r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     @Q!((i*?q@r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     ?qAHH,>?r   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     22r   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     8a1>>8r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     CQQXX-BqCr   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     Bqqxx6/ABr   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     55r   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   z"generate_report.<locals>.<genexpr>  s     ;a1>>;r   z/# Wave 2 Swarm Execution Report
**Session 20 | z%Y-%m-%d %H:%MzG**

## Summary

| Metric | Value |
|--------|-------|
| Total Agents | z |
| Successful | z (d   z.1fz%) |
| Failed | z |
| Total Tokens | rw   z |
| Total Cost | $r   z |
| Avg Response Time | z.0fzcms |

## Team Kimi K2.5 (Code & Infrastructure)

| Metric | Value |
|--------|-------|
| Stories | z |
| Success | z |
| Failed | z |
| Tokens | z |
| Cost | $z |

### Kimi Stories
r   OKFAILz- [z] **z**: z ($z, zms)
z_
## Team MiniMax M2.5 (Marketing & Content)

| Metric | Value |
|--------|-------|
| Stories | z |

### MiniMax Stories
r   z
## Failed Stories (z)

z- **z** (z): r   z#
## Output Files

- Kimi results: `z`
- MiniMax results: `z`
- Agent manifest: `z`
- This report: `z6`

---
Generated by Genesis OpenRouter Swarm Wave 2 | r   Nz
Report -> )rd   r   r   rG   strftimer;   r   r:   r?   r@   r9   rB   KIMI_RESULTS_FILEMINIMAX_RESULTS_FILEr   REPORT_FILErH   rW   r   rT   )r   r   all_rr   r   r   r   r   avg_timek_okk_failk_costk_tokensm_okm_failm_costm_tokensreportrM   iconr   re   s                         r$   generate_reportr'    s   ?*EJE	77	7B6%66D///F)5))DAFs5u55=AH@,@@D?L??F2\22F8<88HC/CCDBOBBF5_55F;?;;H''(89: ;  t2bhsl3' (6  c
 n %   F 8 Q< #, -F4  pxx9,t&CvT!**T!--AJJsCSSUVWVhVhUiinoop  
 !" #F 8 Q< #,  F  pxx9,t&CvT!**T!--AJJsCSSUVWVhVhUiinoop
 5A!((f"4a5F5)#f+e<< 	DAQZZLQVVHCyCCF	D   $$ %)* +!? # 0 190H0H0J/K L
 
F 
k3	 1		J{m
$%) 6$ s   6LL.L  L)c            	      4  K   t        dd        t        d       t        dt        j                         j                                 t        d        t	        t
              } | s t        d       t        j                  d       | D cg c]"  }|j                  j                         dk(  s!|$ }}| D cg c]"  }|j                  j                         dk(  s!|$ }}t        d	t        |              t        d
t        |              t        dt        |               t        |t        t        d       d {   }t        |t               t        |t         t"        d       d {   }t        |t$               t'        ||       t)        ||       ||z   }t+        d |D              }t+        d |D              }t        dd        t        d       t        d| dt        |       d|dd       t        d d       y c c}w c c}w 7 7 w)Nr   r   u4     GENESIS SWARM WAVE 2 — 200 AGENTS — SHIP TODAYz  zERROR: No stories found!r   r,   r   z
Kimi stories: zMiniMax stories: zTotal: r   r   c              3   @   K   | ]  }|j                   d k(  sd  ywr   r   r   s     r$   r%   zmain.<locals>.<genexpr>D  r  r   c              3   4   K   | ]  }|j                     y wrF   r   r   s     r$   r%   zmain.<locals>.<genexpr>E  r
  r   z  WAVE 2 COMPLETEr   z agents succeeded | $r   z total cost)rT   r   rG   rH   rr   MISSIONS_FILErU   rV   r   r-   rd   r   r   BATCH_SIZE_KIMIr   r  r   BATCH_SIZE_MINIMAXr  r'  r  r   )	rg   r   kimi_storiesminimax_storiesr   r   r  r   r   s	            r$   mainr0  $  s    	Bvh-	
@A	Bx||~'')*
+,	VH ]+G()&D!!''--/V*CADLD")JQQWW]]_	-IqJOJ	S./
01	c/23
45	GCL>
"# #<_fUUL01%o}FXZcddO"67 L/2,0 ?*E	77	7B)5))D	Bvh-		Brd!CJ<4T#Jk
JK	VHB-3 EJ V esJ   B	H"H
.H
2H8"HHA H?H -H-H.B'HH__main__)5__doc__rQ   rU   r   r   rY   r   r   r   typingr   r   r   r   dataclassesr   r	   r
   pathlibr   r   ImportErrorrT   rV   r   r   r+  
OUTPUT_DIRr  r  r  r   r   r   r-  r,  r   r   r   r7   r3   rr   rb   r   r   r5   r   r   r  r'  r0  r0   runr!   r*   r$   <module>r9     s2  $ 
 
   	    , , 0 0  F ` D;
!l"56 $%;< ,-E '#
   
 2
 2
 2
j 8 8 80/c /d5k /d0s 0c 0huo 0jO
""O
O
 O
 	O

 O
d<%[<< < 	<
 
+<~;${+ ;s ;42[ 1 42DDU 42nX&${"3 X&d;FW X&z%P zGKK U  	
KLCHHQKs   D D76D7