
    i!              	         d Z ddlm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
mZ ddlmZ ddlmZ ddlmZ ddlZ	 ddlmZ dd	lmZmZ n# e$ r	 dZdZdZY nw xY w ee                                          j        d
         Zej        Zedz  edz  edz  dz  dz  gZg dZ dZ!dZ"dZ#dZ$i dd
dd
ddddddddddddddd d!d"d!d#d$d%d$d&d'd(d'd)d*d+d*d*d,d,d-d-d.d.d/Z%dd2Z&dd6Z'dd8Z(dd9Z)dd;Z*dd>Z+dd?Z,ddAZ-ddCZ.ddFZ/ddGZ0ddHZ1ddIZ2ddJZ3ddKZ4ddMZ5ddOZ6ddQZ7ddSZ8dddVZ9dddXZ:dddYZ;dddZZ<dd\Z=dddaZ>ddeZ?ddfZ@ddgZAddjZBdddmZCddnZDddoZEdddqZFddtZGdduZHddvZIddwZJddxZKddyZLddd|ZMddZNddZOddZPddZQddZRddZSddZTddZUdddZVd'dkdddddZWdS )z/MiniMax search helpers for latest Pokemon news.    )annotationsN)datetimetimezone)unescape)Path)urlparse)ClientSession)StdioServerParametersstdio_client   z.envoldtcg_pro)!pokemon latest news official 2026zpokemon tcg latest news 2026u"   寶可夢 最新消息 官方 2026z0https://api.minimax.io/v1/text/chatcompletion_v2)pokemon.comzpokemongolive.comzpokemon.co.jpznintendo.com)zyoutube.comzign.comzpolygon.comzgamespot.comzeurogamer.net)zx.comztwitter.comzthreads.comzfacebook.comzinstagram.comz
reddit.comz
tiktok.comjanjanuaryfeb   februarymar   marchapr   aprilmay   jun   junejul   julyaug   augustsep	   sept
         )	septemberoctoctobernovnovemberdecdecemberreturnstrc                 b    t          j        t          j                                                  S N)r   nowr   utc	isoformat     /app/scripts/minimax_news.py_now_isor>   [   s     <%%//111r<   pathr   dict[str, str]c                Z   i }|                                  s|S 	 |                     dd          }n# t          $ r |cY S w xY w|                                D ]}|                                }|r|                    d          r.|                    d          r|dd                                          }d|vrd|                    dd          \  }}|                                }|                                                    d	                              d
          }|r|||<   |S )Nzutf-8ignore)encodingerrors#zexport r"   =r   "')exists	read_text	Exception
splitlinesstrip
startswithsplit)r?   outrawlinerowkeyvalues          r=   _read_env_filerV   _   s9   C;;== 
nnghn??   


    jjll 	cnnS)) 	>>)$$ 	"abb'--//Cc>>YYsA&&
Uiikk##C((..s33 	CHJs   2 A Atuple[str, str]c                    i } t           D ]$}|                     t          |                     %t          j        d          p?|                     d          p*t          j        d          p|                     d          pd                                }t          j        d          p|                     d          pd                                }||fS )NMINIMAX_API_KEYMINIMAX_KEY MINIMAX_API_HOSTzhttps://api.minimax.io)	ENV_FILESupdaterV   osgetenvgetrM   )env_mapr?   api_keyapi_hosts       r=   _resolve_minimax_credentialsre   w   s     G - -~d++,,,,
	#$$ 	;;())	9]##	 ;;}%%	 egg  		$%% 	$;;)**	$#egg	 
 Hr<   c                    g }t          | dd           pg D ]*}t          |dd           }|r|                    |           +d                    |                                          S )Ncontenttext
)getattrappendjoinrM   )call_resultchunkspartrh   s       r=   _extract_text_payloadrp      sq    Fi66<"    tVT** 	 MM$99V""$$$r<   rU   c                :   t          t          | pd                    }|                    dd                              dd          }|                    dd                              dd          }t          j        dd|          }|                                S )Nr[   u   ​ u   ﻿ri   z\s+)r   r5   replaceresubrM   )rU   rh   s     r=   _normalize_textrw      s    C$$%%D<<#&&..x==D<<c""**455D6&#t$$D::<<r<   lang
str | Nonec                ^   t          | pd                                                                          }|                    d          s|dv rdS |                    d          rdS |                    d          rdS |                    d          rdS |                    d	          rd	S dS )
Nr[   zzh-hant>   zh-hkzh-mozh-twzh-Hantzhzh-Hansjakoen)r5   rM   lowerrN   )rx   rQ   s     r=   _normalize_langr      s    
djb//


!
!
'
'
)
)C
~~i   C+F$F$Fy
~~d y
~~d t
~~d t
~~d t9r<   c                >    dddddd}|                     | d          S )Nu   繁體中文u   简体中文u	   日本語u	   한국어English)r~   r   r   r   r   )ra   )rx   mappings     r=   _lang_prompt_hintr      s3    !! G ;;t^,,,r<   	list[str]c                Z    | dk    rg dS | dk    rg dS | dk    rg dS | dk    rg dS g d	S )
Nr   )"site:pokemon.com pokemon news 2026+site:pokemongolive.com pokemon go 2026 newsu&   宝可梦 TCG 最新消息 官方 2026r~   )r   r   u&   寶可夢 TCG 最新消息 官方 2026r   )u+   ポケモン 最新ニュース 公式 2026u-   ポケモンカード 最新ニュース 2026r   r   )u#   포켓몬 최신 뉴스 공식 2026u#   포켓몬 카드 최신 뉴스 2026r   )z)site:pokemon.com pokemon latest news 2026z2site:pokemongolive.com pokemon go latest news 2026z%pokemon tcg official latest news 2026r;   )rx   s    r=   _default_queries_for_langr      s    y
 
 
 	

 y
 
 
 	

 t||
 
 
 	

 t||
 
 
 	

   r<   urlc                    	 t          t          | pd                    j        pd                                }n# t          $ r d}Y nw xY wt          j        dd|          }|pdS )Nr[   z^www\.unknown)r   r5   netlocr   rK   ru   rv   )r   hosts     r=   _source_namer      sv    SYB((/52<<>>   6)R&&D9s   7: A	A	sourceboolc                    t          |                                           t          ot          fdt          D                                 S )Nc              3  T   K   | ]"}|k    p                     d |           V  #dS .Nendswith.0suffixss     r=   	<genexpr>z&_is_official_source.<locals>.<genexpr>   s>      iif!v+ALLL)A)Aiiiiiir<   )rw   r   r   anyOFFICIAL_SOURCE_SUFFIXESr   r   s    @r=   _is_official_sourcer      sM    %%''AiciiiiPhiiiiijjjr<   c                    t          |                                           t          ot          fdt          D                                 S )Nc              3  T   K   | ]"}|k    p                     d |           V  #dS r   r   r   s     r=   r   z'_is_secondary_source.<locals>.<genexpr>   s>      jjf!v+ALLL)A)Ajjjjjjr<   )rw   r   r   r   SECONDARY_SOURCE_SUFFIXESr   s    @r=   _is_secondary_sourcer      sM    %%''AjcjjjjPijjjjjkkkr<   c                    t          |                                           t          ot          fdt          D                                 S )Nc              3  T   K   | ]"}|k    p                     d |           V  #dS r   r   r   s     r=   r   z%_is_blocked_source.<locals>.<genexpr>   s>      hhf!v+ALLL)A)Ahhhhhhr<   )rw   r   r   r   BLOCKED_SOURCE_SUFFIXESr   s    @r=   _is_blocked_sourcer      sM    %%''AhchhhhPghhhhhiiir<   c                h    t          |           rdS t          |           st          |           rdS dS )NFT)r   r   r   )r   s    r=   _is_allowed_sourcer      sA    &!! u6"" &:6&B&B t5r<   c                   t          | pd                                          }|                    d          s|S 	 t          |          }|j                                        pd}|j        pd                                }|j        pd}|dk    r|                    d          }| d| | S # t          $ r |cY S w xY w)Nr[   http://https://https/z://)
r5   rM   rN   r   schemer   r   r?   rstriprK   )r   rQ   parsedr   r   r?   s         r=   _canonical_urlr      s    
ciR..


 
 C>>122 
	#$$&&1'#**,,{!c3;;;;s##D))T)4)))   


s   A1B. .B=<B=c                   t          | pd                                          }|                    d          sdS 	 t          |          }|j        pd                                }|j        pd                    d          pd}n# t          $ r Y dS w xY w|	                    d          r|dv rdS |	                    d          r|dv rdS dS )	Nr[   r   Fr   r   >   /pokemon-news/us/pokemon-news/en-us/pokemon-newsT>   /us/en-usr   )
r5   rM   rN   r   r   r   r?   r   rK   r   )r   rQ   r   r   r?   s        r=   _is_generic_news_hubr     s    
ciR..


 
 C>>122 u##**,,"s**3//63   uu}}]## 0l(l(lt}}]## 0F(F(Ft5s   AB 
BB
source_urlc                    t          j        ddt          | pd                                          t           j                  }d| S )Nz
^https?://r[   flagszhttps://r.jina.ai/http://)ru   rv   r5   rM   I)r   cleaneds     r=   _reader_urlr     sC    f]BJ,<"(=(=(C(C(E(ERTRRRG0w000r<   raw_htmlc                    t          | pd          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          |          S )Nr[   z?(?is)<(script|style|noscript|svg|footer|header|nav).*?>.*?</\1>rr   z(?is)<br\s*/?>ri   z	(?is)</p>z(?is)<[^>]+>)r5   ru   rv   rw   )r   rh   s     r=   _strip_html_tagsr     sq    x~2D6TVY[_``D6#T400D6,d++D6/3--D4   r<   rh   c                   t          | pd          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        dd|          }t          j        d	d|          }t          j        d
d|          }|                    dd          }|                    dd          }t          j        dd|          }t          j        dd|          }t	          |          }t          j        dd|t          j                  }t          j        dd|                                          }|S )Nr[   z(?is)^.*?Markdown Content:\s*z(?im)^Title:\s*.*?$rr   z(?im)^URL Source:\s*.*?$z(?im)^Published Time:\s*.*?$z(?im)^#+\s*z(?is)\[image[^\]]*\]z)(?is)\[[^\]]{1,220}\]\((https?://[^)]+)\)z'(?im)^\s*[-*]\s*\[[^\]]+\]\([^)]*\)\s*$z[](z)[](z\*{2,}zhttps?://[^\s]+uG   (?:\bHome\b|\bMenu\b|\bNews\b|\bLog In\b|\bSign Up\b)(?:\s*[|/·-]\s*)?r   z\s{2,})r5   ru   rv   rt   rw   r   rM   )rh   rQ   r   s      r=   _clean_content_textr   $  sM   
djb//C
&12s
;
;C
&'c
2
2C
&,c3
7
7C
&0#s
;
;C
&c
*
*C
&(#s
3
3C
&=sC
H
HC
&;S#
F
FC
++eS
!
!C
++fc
"
"C
&C
%
%C
&#S#
.
.Cc""Gf_adfmuwuyzzzGfYW--3355GNr<   htmlc                    g }g d}|D ]W}t          j        || pd          D ]=}t          |          }t          |          dk    r||vr|                    |           >X|S )N)zL(?is)<meta[^>]+property=["\']og:description["\'][^>]+content=["\'](.*?)["\']zE(?is)<meta[^>]+name=["\']description["\'][^>]+content=["\'](.*?)["\']zM(?is)<meta[^>]+name=["\']twitter:description["\'][^>]+content=["\'](.*?)["\']r[      )ru   findallr   lenrk   )r   rowspatternspatternmatchrh   s         r=   _extract_meta_descriptionsr   8  s    D  H
  " "Z44 	" 	"E&u--D4yyB4t#3#3D!!!	" Kr<   limitintc                T   t          | pd          }t          j        d|          }g }|D ]|}t          t	          |                    }t          |          dk     r2||v r7|                    |           t          |          t          dt          |                    k    r n}|S )Nr[   z(?is)<p[^>]*>(.*?)</p>&   r   )	r5   ru   r   r   r   r   rk   maxr   )r   r   bodyrn   rP   chunkrh   s          r=   _extract_html_paragraphsr   G  s    tzr??DZ1488FC  "#3E#:#:;;t99r>>3;;

4s88s1c%jj))))E *Jr<   timeout_secc                   ddi}	 t          j        | ||          }|j        dk    rdS t          |j        pd          }t          |          dk     rdS t          |          }t          |d          }g }g ||D ]>}t          |          }	t          |	          d	k     s|	|v r)|	                    |	           ?|sLt          t          |                    }
t          |
          dk    r|	                    |
d d
                    t          d                    |                    d d         S # t          $ r Y dS w xY w)N
User-AgentMozilla/5.0headerstimeout  r[   x   r   r   r   i  rr   i  )requestsra   status_coder5   rh   r   r   r   r   rk   r   rw   rl   rK   )r   r   r   respr   metaparasstackrS   r   fallbacks              r=   _fetch_html_excerptr   W  sh   ]+G|C+FFFs""249?##t99s??2)$//(Q777"T?E? 	" 	"C)#..G7||b  Gu$4$4LL!!!! 	-*+;D+A+ABBH8}}##Xdsd^,,,sxx//66   rrs   "D4 )D4 CD4 4
EEc                   ddi}	 t          j        t          |           ||          }|j        dk    rdS t	          t          |j        pd                    }t          |          dk     rdS |d d         S # t          $ r Y dS w xY w)Nr   r   r   r   r[   r   ix  )	r   ra   r   r   r   r5   rh   r   rK   )r   r   r   r   rQ   s        r=   _fetch_reader_excerptr   q  s    ]+G	|K,,g{SSSs""2!#dio2"6"677s88c>>25D5z   rrs   /A9 6A9 /	A9 9
BBc                    t          | pd                              d          sdS t          | |          }t          |          dk    r|S t	          | |          S )Nr[   r   r   P   )r5   rN   r   r   r   )r   r   html_excerpts      r=   _fetch_article_excerptr     sf    syb>>$$%<== r&sDDDL
<B +>>>>r<   dict | Nonec                   t          | pd                                          }|sd S 	 t          j        |          }t	          |t
                    r|nd S # t          $ r Y nw xY wt          j        d|t          j	                  }|sd S 	 t          j        |
                    d                    }t	          |t
                    r|nd S # t          $ r Y d S w xY w)Nr[   z\{.*\}r   )r5   rM   jsonloads
isinstancedictrK   ru   searchSgroup)rh   rQ   r   r   s       r=   _parse_json_blockr    s    
djb//


!
!C tC#FD11;vvt;   Iibd++E tEKKNN++#FD11;vvt;   tts#   ,A 
A#"A#?C 
CCpromptrc   
max_tokens
int | Nonec                \   t          t          j        d          pt          j        d          pd                                          pd}|d| dgddd}|}t          t          j        d	          pd
                                          }|%|r#	 t	          |          }n# t
          $ r d }Y nw xY w||dk    rt	          |          |d<   d| dd}d}t          t          j        d          pd
                                          }	|	r1	 t          dt	          |	                    }n# t
          $ r d}Y nw xY wt          j        t          |||          }
|

                                 |
                                }|                    d          }t          |t                    r|rt          |d         t                    r|d         ni }t          |                    d          t                    r|                    d          ni }|                    d          }t          |t                     r(|                                r|                                S |                    d          p)|                    d          p|                    d          }t          |t                     r(|                                r|                                S t          |                    d          t                    r|                    d          ni }t          |                    d          pd
                                          }|rt!          d|           t!          d| dt#          t          |                                                               )NMINIMAX_TEXT_MODELMINIMAX_MODELzMiniMax-M2.7user)rolerg   g      ?F)modelmessagestemperaturereasoning_splitMINIMAX_NEWS_MAX_TOKENSr[   r   r  zBearer zapplication/json)AuthorizationzContent-Type   MINIMAX_TEXT_TIMEOUT_SECONDS   )r   r   r   choicesmessagerg   replyoutput_textrh   	base_resp
status_msgzMiniMax text response error: z-MiniMax text response missing content: model=z keys=)r5   r_   r`   rM   r   rK   r   r   postMINIMAX_TEXT_URLraise_for_statusr   ra   r   listr   RuntimeErrorsortedkeys)r  rc   r  
model_namepayloadtoken_limit	env_limitr   r   env_timeoutr   datar  firstr  rg   directr  r  s                      r=   _minimax_chatr(    s   
	&'' 	9_%%	  egg	   	  $889 	 G KBI788>B??EEGGIy	i..KK 	 	 	KKK	;?? #K 0 0,7,,* G Kbi >??E2FFLLNNK 	b#k"2"233KK 	 	 	KKK	=)7R]^^^D99;;Dhhy!!G'4   #W #(T::B

*4UYYy5I5I4*P*PX%))I&&&VX++i((gs## 	# 	#==??"XXgM$((="9"9MTXXf=M=MF&# 6<<>> ||~~)3DHH[4I4I4)P)PX%%%VXIY]]<006B77==??J IG:GGHHH
tzttY_`deienenepep`q`qYrYrtt
u
uus$   B# #B21B2D/ /D>=D>payload_textquery
list[dict]c           
     h   | sg S 	 t          j        |           }n# t          $ r d }Y nw xY wg }t          |t                    r|                    d          }t          |t                    rs|D ]o}t          |t                    st          |                    d          p|                    d          pd                                          }|	                    d          szt          |                    d          p|                                          }t          |                    d          p|                    d          pd                                          }t          |                    d	          p|                    d
          pd                                          }	|
                    ||||	t          |          |d           q|r|S t          j        d|           }
|
d d         D ]+}|
                    ||ddt          |          |d           ,|S )Norganiclinkr   r[   r   titledatepublishedDatesnippetdescriptionr/  r   r0  r2  r   r*  https?://[^\s)>\"]+r*   )r   r   rK   r   r   ra   r  r5   rM   rN   rk   r   ru   r   )r)  r*  r%  rP   r-  rS   r   r/  	date_textr2  linksr.  s               r=   _extract_itemsr8    sF    	z,''    C$ ((9%%gt$$ 	  !#t,, #''&//ASWWU^^ArBBHHJJ~~&=>> CGGG,,344::<< Q377?3K3K QrRRXXZZ	cggi00PCGGM4J4JPbQQWWYY

!&" )#*".s"3"3!& 	 	 	 	  	J J-|<<Ecrc
 z z

T$rUabfUgUgrwxxyyyyJs    **c                v   t          | |          }|r|S t          | pd          }g }d |                                D             }|D ]p}t          j        d|          }|D ]V}|                    |d                              d          }	|                    |	p||d|	t          |          |d           Wq|S )Nr[   c                ^    g | ]*}|                                 |                                 +S r;   )rM   r   xs     r=   
<listcomp>z-_extract_mmx_search_items.<locals>.<listcomp>  s-    DDD!''))D17799DDDr<   r5  rr   z -:|r4  )	r8  r5   rL   ru   r   rt   rM   rk   r   )
r)  r*  r   rQ   rP   line_chunksrR   urlsr   r/  s
             r=   _extract_mmx_search_itemsr@    s    ,..D 
l b
!
!CCDDcnn&6&6DDDK  z0$77 	 	CLLc**0088EJJ"\c$*3//" 	 	 	 		 Jr<   c                     t          t          j        d          pd                                          } | r| S t	          j        d          pdS )NMINIMAX_CLI_BINr[   mmx)r5   r_   r`   rM   shutilwhich)
configureds    r=   _mmx_binrG    sN    RY0117R88>>@@J <$"$r<   bin_pathrd   c                   t           j                                        }|r||d<   |r
||d<   ||d<   d|d<   | ddd|d	dd
g| ddd|d	dd
g| d|d	dd
gg}d}|D ]}	 t          j        |t          j        t          j        dt          dt          |                    |          }	n&# t          $ r}
t          |
          }Y d }
~
ld }
~
ww xY wt          |	j
        pd                                          }t          |	j        pd                                          }|	j        dk    r|r|c S |p|p	d|	j         }d|                                vrd|                                vr nt          d|pd           )NrY   r\   MINIMAX_BASE_URLr   MINIMAX_OUTPUTr   r*  z--qz--outputz--non-interactivewebr[   Tr%   )stdoutstderrrh   r   envr   zexit zunknown commandzunknown optionzMiniMax CLI search failed: z	no output)r_   environcopy
subprocessrunPIPEr   r   rK   r5   rM  rM   rN  
returncoder   r  )rH  r*  rc   rd   r   rO  variants
last_errorcmdprocexcrM  rN  s                r=   _run_single_mmx_searchr[    s   
*//

C )!( +"*"*"C	8WeUJH[\	8UE5*fFYZ	8UJ8KLH
 J  	>!!As;//00  DD  	 	 	SJHHHH	 T[&B''--//T[&B''--//?aFMMMBvB)B)B)B
J$4$4$6$666;KS]ScScSeSe;e;eE
PZ5N;PP
Q
QQs   A	B$$
C.CC-   queriesc                   t                      }|st          d          g }t          dt          t	          |          d                    }| D ]8}t          |||||          }|                    t          ||                     9|S )NzuMiniMax CLI not installed: install with `npm install -g mmx-cli` and authenticate with `mmx auth login --api-key ...`r*   <   )rG  r  r   minr   r[  extendr@  )	r]  rc   rd   r   rH  	collectedper_query_timeoutr*  r)  s	            r=   _run_queries_mmx_clird  >  s    zzH T  S  T  T  	TIBC$4$4b 9 9:: I I-hwRcdd2<GGHHHHr<   c           	        K   t           t          t          t          d          t          t          j        g d||d          }g }t          |          4 d {V \  }}t          ||          4 d {V }|                                 d {V  |                                 d {V }d |j        D             }	d|	vrt          dt          |	                     | D ]R}
|
                    dd|
i           d {V }t          |          }|                    t          ||
                     S	 d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  n# 1 d {V swxY w Y   |S )	NzVMCP package is not installed; use NEWS_SEARCH_PROVIDER=mmx or install mcp dependencies)z-muvtoolrS  zminimax-coding-plan-mcpz-y)rY   r\   )commandargsrO  c                    h | ]	}|j         
S r;   )name)r   rg  s     r=   	<setcomp>z#_run_queries_mcp.<locals>.<setcomp>Z  s    7774TY777r<   
web_searchu&   MiniMax MCP 缺少 web_search，tools=r*  )r	   r
   r   r  sys
executable
initialize
list_toolstoolsr  	call_toolrp   ra  r8  )r]  rc   rd   server_paramsrb  read_streamwrite_streamsessionrr  namesr*  r  r)  s                r=   _run_queries_mcpry  J  s      5 =AUsttt)III& (
 
  M IM** 
F 
F 
F 
F 
F 
F 
F.I{L l;; 		F 		F 		F 		F 		F 		F 		Fw$$&&&&&&&&&!,,........E775;777E5(("#[FSXMM#[#[\\\  F F%//w>NOOOOOOOO4U;;  e!D!DEEEEF		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F 		F
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F 
F s7   E-9B>E
8E-

E	E-E	E--
E7:E7c                     t          t          j        d          pt          j        d          pd                                                                          } | dv rdS | dv rdS | dv rdS | d	k    rd	S dS )
NNEWS_SEARCH_PROVIDERPOKEMON_NEWS_PROVIDERrC  >   clirC  minimax_cli>   mcpminimax_mcpr  >   0offnonefalsedisabledr  auto)r5   r_   r`   rM   r   )rQ   s    r=   _news_search_providerr  d  s    
bi.//^29=T3U3U^Y^
_
_
e
e
g
g
m
m
o
oC
+++u
$$$u
777z
f}}v5r<   tuple[list[dict], str]c                   t                      }|dk    rt          d          |dk    rTt          j        t          j        t          | ||          t          dt          |                                        dfS |dk    r8g }	 t          | |||          d	fS # t          $ r"}|
                    d
|            Y d }~nd }~ww xY wt          t          j        d          pd                                                                          dv r	 t          j        t          j        t          | ||          t          dt          |                                        dfS # t          $ r"}|
                    d|            Y d }~nd }~ww xY wt          d                    |          pd          t          | |||          d	fS )Nr  z5News search disabled by NEWS_SEARCH_PROVIDER=disabledr  r*   )r   minimax_mcp_web_searchr  r   minimax_cli_searchzmmx=NEWS_ALLOW_MCP_FALLBACKr[   >   1onyestruezmcp=z; z!no news search provider succeeded)r  r  asynciorS  wait_forry  r   r   rd  rK   rk   r5   r_   r`   rM   r   rl   )r]  rc   rd   r   providerrD   rZ  s          r=   _run_queriesr  q  s9   $&&H:RSSS5{7+,<Wgx,X,Xbefhjmnyjzjzb{b{|||}}  @X  X  	X6	('(P[\\\^rrr 	( 	( 	(MM,,,''''''''	(ry2339r::@@BBHHJJNhhh,{7#34DWgW_4`4`jmnpru  wB  sC  sC  kD  kD  $E  $E  $E  F  F  H`  `  ` , , ,lSll++++++++,499V,,S0STTT(TTTVjjjs1   B 
C	'CC	AE* *
F4FFitems	max_itemsc                ^   g }g }t          |           D ]\  }}t          |t                    st          |          }t          |                    d          pd                                          }|sct          |          }t          |          s||d<   t          |          r|	                    ||f           |	                    ||f           |s|r|}|}	|	
                    d            g }
t                      }|	D ]\  }}t          |                    d          pd                                          }t          |          }|r||v rQ|                    |           |
	                    |           t          |
          t          dt!          |                    k    r nt          |
          t          dt#          d|                    k     r|r|
                    d	            |D ]\  }}t          |                    d          pd                                          }t          |          }|r||v rQ|                    |           |
	                    |           t          |
          t          dt!          |                    k    r n|
S )
Nr   r[   r   c                    t          | d         pi                     d          p)t          | d         pi                     d                              | d         fS Nr   r   r   r   _source_priorityra   r   pairs    r=   <lambda>z_dedupe_items.<locals>.<lambda>  sW    d1gm00::flDQRGMWYK^K^_dKeKe>f>fggG
 r<   rT   r   r   r   c                    t          | d         pi                     d          p)t          | d         pi                     d                              | d         fS r  r  r  s    r=   r  z_dedupe_items.<locals>.<lambda>  sZ     $q'-R!4!4X!>!>!j,PTUVPWP][]ObObchOiOiBjBjkkQ r<   )	enumerater   r   r5   ra   rM   r   r   r   rk   sortsetr   addr   r   r   r`  )r  r  preparedgeneric_poolidxrS   itemr   r   indexedrP   seen_rT   s                 r=   _dedupe_itemsr    s   ')H+-Le$$ ) )S#t$$ 	Cyy$((5//'R((..00 	c""!&)) 	X$$ 	)d,,,,OOS$K((((    GLL
 
     CUUD  4$((5//'R((..00S!! 	cTkk

4s88s1c)nn----E . 3xx#aQ	**+++++  	 	
 	
 	
 $ 	 	GAtdhhuoo+,,2244C %%C #++HHSMMMJJt3xx3q#i..1111 2Jr<   c                    t          |                                           }|sdS t          |          rdS t          |          rdS t	          |          rdS dS )Nr(   r   r   r"   r   )rw   r   r   r   r   r   s     r=   r  r    sl    %%''A q1 qA q! q1r<   c                    t          |           }t          |          t          dt          |                    k    r|S |d t          dt          |          dz
                                                      dS )Nr   u   …)rw   r   r   r   r   )rh   r   safes      r=   _truncate_textr    so    4  D
4yyC3u::&&&&*C3u::>***+22449999r<   c                    t          |           }|sdS t          j        dd|t          j                  }t          j        dd|t          j                  }t          |          }|pdS )Nu   未命名消息uF   \s*[|｜]\s*(pokemon\.com|youtube|polygon|reddit|x|twitter|threads).*$r[   r   zA\s*-\s*(youtube|pokemon\.com|polygon|reddit|x|twitter|threads).*$)rw   ru   rv   r   )rh   r/  s     r=   _clean_titler    st    D!!E !  F\^`bgoqostttEFWY[]bjljnoooEE""E%%%r<   c                N   t          t          |                     }|sg S t          j        d|          }g }|D ]j}t          t          |                    }t	          |          dk     r2t	          |          dk    rt          |d          }|                    |           k|S )Nu2   (?:[。！？!?；;]+|(?<=[a-z0-9])\.(?=\s+[A-Z]))r,      )r   rw   ru   rO   r   r  rk   )rh   rQ   partsrP   ro   rS   s         r=   _split_sentencesr    s    
od33
4
4C 	HJCPPEC  !/$"7"788s88b==s88c>> c**C

3Jr<   c                   t          |                                           sdS g d}t          fd|D                       rdS                     d          s                    d          rdS dv sdv sdv sd	v rdS d
v sdv rdS t	          j        d          rdS t	          j        d          rdS t	          j        d          rdS                     d          rdS t          t	          j        d                    dk    rdS t	          j        dd          }t          |          dk     rdS dS )NT)zofficial site	instagramtiktoksnapchat	subscribecookieprivacy policyall rights reservedzsign inzlog inzview allz	watch now
javascriptzskip to mainzskip to navigationzterms of usezcookie policyznot responsible for the contentzprivacy practices may differz2privacy policies and security practices may differzplease note that these websiteszclick continue to visitz!if you click on the youtube videozleave pokemon.comc              3      K   | ]}|v V  	d S r7   r;   )r   termrS   s     r=   r   z%_is_noise_sentence.<locals>.<genexpr>  s'      
/
/443;
/
/
/
/
/
/r<   z[imagezimage zsource=utm_url source:zpublished time:r   r   z(?:\[\]|\*\s*){3,}z^\[[^\]]{1,30}\:\s*z\.(png|jpg|jpeg|webp|gif)\b)zhome zmenu znews zshare z	comments z[\[\]\*\(\)]r%   z[^a-z0-9\u4e00-\u9fff]+r[   F)	rw   r   r   rN   ru   r   r   r   rv   )rh   noisy_terms	alpha_numrS   s      @r=   _is_noise_sentencer    s   
$


%
%
'
'C t  K4 
/
/
/
/;
/
/
/// t
~~h 3>>(#;#; tC6S==MS,@,@DUY\D\D\tC:,,t	y&,, t	y'-- t	y/55 t
~~HII t
2:os++,,11t12s;;I
9~~t5r<   r  r   c           	     H   t          t          |                     d          pd                    }t          t          |                     d          pd                    }t          t          |                     d          pd                    }g }|||fD ]}t          |          D ]}t	          |          r|                                t          fd|D                       rB|                    |           t          |          t          dt          |                    k    r nt          |          t          dt          |                    k    r n|s|r|                    |           |d t          dt          |                             S )Nr/  r[   r2  article_excerptc              3     K   | ]H}|                                 k    p+|                                 v p|                                 v V  Id S r7   )r   )r   r   norms     r=   r   z+_extract_focus_sentences.<locals>.<genexpr>1  sU      ^^ST417799$N		(9NQWWYY$=N^^^^^^r<   r   )r   rw   ra   r  r  r   r   rk   r   r   r   )	r  r   r/  r2  excerptr   srcsentencer  s	           @r=   _extract_focus_sentencesr  '  s   0A0A0GR H HIIE!/$((92E2E2K"L"LMMG!/$((;L2M2M2SQS"T"TUUGE%(  (-- 	 	H!(++ >>##D^^^^X]^^^^^ LL"""5zzSCJJ//// 0u::QE

++++E , U U%3q#e**%%%&&r<   r/  r2  r  c                   t          d                    | |||g                                                    t          fddD                       rdS t          fddD                       rdS t          fdd	D                       rd
S t          fddD                       rdS t          fddD                       rdS dS )Nrr   c              3      K   | ]}|v V  	d S r7   r;   r   r<  blobs     r=   r   z_infer_topic.<locals>.<genexpr>?  s'      
^
^19
^
^
^
^
^
^r<   )z
pokemon goraidzcommunity dayz	go battlezgo fest   Pokémon GOc              3      K   | ]}|v V  	d S r7   r;   r  s     r=   r   z_infer_topic.<locals>.<genexpr>A  s'      
g
g19
g
g
g
g
g
gr<   )patchzupdate notesversionroadmapmaintenancehotfix   功能/版本更新c              3      K   | ]}|v V  	d S r7   r;   r  s     r=   r   z_infer_topic.<locals>.<genexpr>C  s?        E  E19  E  E  E  E  E  Er<   )	eventfesttourfestivalchampionship
tournamentticketregisterpresents   活動/賽事c              3      K   | ]}|v V  	d S r7   r;   r  s     r=   r   z_infer_topic.<locals>.<genexpr>E  s'      
{
{19
{
{
{
{
{
{r<   )tcgboosterzelite trainer box	expansionzproduct release
collectionr     卡牌/商品發售c              3      K   | ]}|v V  	d S r7   r;   r  s     r=   r   z_infer_topic.<locals>.<genexpr>G  s'      
K
K19
K
K
K
K
K
Kr<   )rewardbonusgiftprizedrop   福利/獎勵消息u   官方消息rw   rl   r   r   )r/  r2  r  r   r  s       @r=   _infer_topicr  =  s.   388UGWf$EFFGGMMOOD

^
^
^
^]
^
^
^^^ }

g
g
g
gf
g
g
ggg %$$
  E  E  E  E  D  E  E  E  E  E 

{
{
{
{z
{
{
{{{ %$$

K
K
K
KJ
K
K
KKK %$$>r<   r6  c                   t          |           }|r|S t          d                    |||g                    }t          j        d|          }|r>|                                \  }}}	| dt          |          ddt          |	          dS t          j        d|          }
|
ru|
                                \  }}}t                              |                                          }|r/|r| d|ddt          |          dS | dt          |           S t          j        d|          }|r-|	                    d           d|	                    d           S d	S )
Nrr   z'\b(20\d{2})[-/](\d{1,2})[-/](\d{1,2})\br   02dz1\b([A-Za-z]{3,9})\s+(\d{1,2})(?:,\s*(20\d{2}))?\bu!   (\d{1,2})月(\d{1,2})[日号號]?r   r   u	   未標示)
rw   rl   ru   r   groupsr   	MONTH_MAPra   r   r   )r6  r/  r2  r  explicitr  	match_isoymdmatch_month	month_rawday_rawyear_raw	month_nummatch_zhs                   r=   _extract_time_hintr  L  s   y))H 388UGW$=>>??D	DdKKI 0""$$1a//c!ff///3q66////)PRVWWK 1'2'9'9';';$	7HMM)//"3"344	 	1 H"GGYGGGS\\GGGG00#g,,000y=tDDH :..##99hnnQ&7&7999;r<   c                   t          d                    | ||g                    }|                                g d}t          fd|D                       sdS t	          |          }|D ]S}|                                t          fd|D                       r"t          |          rAt          |d          c S TdS )Nrr   )	r  r  r  r  r  sbtcouponr  
invitationc              3      K   | ]}|v V  	d S r7   r;   )r   r  r   s     r=   r   z'_extract_reward_hint.<locals>.<genexpr>g  s'      66tu}666666r<   r[   c              3      K   | ]}|v V  	d S r7   r;   )r   r  ls     r=   r   z'_extract_reward_hint.<locals>.<genexpr>l  s'      22Ttqy222222r<   H   uE   提及獎勵或福利條件，建議閱讀原文確認領取方式。)rw   rl   r   r   r  r  r  )	r/  r2  r  r  reward_termslinesrR   r  r   s	          @@r=   _extract_reward_hintr  c  s    388UGW$=>>??DJJLLEhhhL666666666 rT""E , ,JJLL2222\22222 	,!$'' !$+++++	, SRr<   topicc                @   t          d                    |||g                                                    t          fddD                       rdS t          fddD                       rdS | dk    rt          fd	d
D                       rdS | dk    rdS dS )Nrr   c              3      K   | ]}|v V  	d S r7   r;   r   kr  s     r=   r   z%_build_action_hint.<locals>.<genexpr>u  s'      
=
=19
=
=
=
=
=
=r<   )r^   r  r  u<   先看更新內容與適用版本，再安排是否跟進。c              3      K   | ]}|v V  	d S r7   r;   r  s     r=   r   z%_build_action_hint.<locals>.<genexpr>w  s'      
M
M19
M
M
M
M
M
Mr<   )releaselaunch	availablepreorderu=   先記下上線或發售時間，確認購買/下載管道。r  c              3      K   | ]}|v V  	d S r7   r;   r  s     r=   r   z%_build_action_hint.<locals>.<genexpr>y  s'      'v'vaT	'v'v'v'v'v'vr<   )r  registrationr  zsign upapplyu.   先確認報名/購票條件與截止時間。u*   先確認時區、地點與參與方式。u9   先讀原文確認完整條件，再決定是否追蹤。r  )r  r/  r2  r  r  s       @r=   _build_action_hintr  s  s    388UGW$=>>??EEGGD

=
=
=
=<
=
=
=== NMM

M
M
M
ML
M
M
MMM ONNC'v'v'v'v;u'v'v'v$v$v??;;FFr<   c                @   t          |          }| dk    rt          d| d          S | dk    rt          d| d          S | dk    rt          d| d          S | dk    rt          d	| d          S | d
k    rt          d| d          S t          d| d          S )Nr  u   活動快訊｜   r  u   發售更新｜r  u   功能更新｜r  u   GO 更新｜r  u   獎勵資訊｜u   官方消息｜)r  r  )r  r/  cleans      r=   _summary_title_from_topicr"    s    E777===%%%777===%%%777===4U44c:::%%%777===3E33S999r<   c                   t          |                     d          pd          }t          t          |                     d          pd                    }t          t          |                     d          pd                    }t          |                     d          p!t	          |                     d                              }t          |                     d          pd          }t          | d	          }t          ||||          }t          |r|d
         n|p|d          }	t          ||||          }
t          |||          }t          ||||          }|                    d          r| d| }|	r>|	                                |                                vr|dt          |	d           z  }dt          |	p|d           d|
 d| g}d| dt          |	p|p|d           d|
 d| g}|rdt          |	p|p|d           d| |d<   n|dk    r-t          |pdd          }d| d |pd! d"g}|d d         pd#g}n_|d$k    r-t          |pd%d          }d&| d'|pd( d)g}|d d         pd*g}n,t          |pd+d          }d,| d-|pd. d/g}|d d         pd0g}t          ||          t          |d1          d2 |D             d3 |D             d d         d4S )5Nr/  r[   r2  r  r   r   r0  r   r   r   v   r   u	   重點：u   ；摘要：B   u   這在講什麼：b   u	   時間：u   你要做什麼：u   主題分類：u   內容摘要：r  u   時間資訊：u   執行建議：z   u   ；獎勵線索：r   r   u6   詳細は原文リンクで確認してください。   u   ソース: u   日付: u	   未記載u,   要点: 公式情報を優先して確認。u*   公式情報を確認してください。r   u5   상세 내용은 원문 링크에서 확인하세요.u   출처: u   날짜: u	   미표기u'   핵심: 공식 공지를 우선 확인.u5   원문 링크에서 공지 내용을 확인하세요.z.Open the original source for complete details.zSource: zDate: zN/Az+Key: verify official details before acting.z*Open original source for complete details.  c                "    g | ]}|d d         S Nr   r;   )r   ps     r=   r=  z*_fallback_summary_item.<locals>.<listcomp>  s     ///1q#w///r<   c                Z    g | ](}t          |          t          |          d d         )S Nr(  )rw   r5   r;  s     r=   r=  z*_fallback_summary_item.<locals>.<listcomp>  s3    RRR!q?Q?QRQRRRr<   summary_titlesummary
key_pointsdetail_lines)r  ra   r   rw   r   r  r  r  r  r  r  rN   r   r"  )r  rx   r/  r2  r  r   r6  focus_linesr  lead	time_hintreward_hintaction_hintr1  pointsr3  s                   r=   _fallback_summary_itemr:    s   '**0b11E!/$((92E2E2K"L"LMMG!/$((;L2M2M2SQS"T"TUUGTXXh//P<3P3PQQF 0 0 6B77I*4q999K&99EKO+a..g>NQTUUD"9eWgFFI&ugw??K$UE7GDDKt (Y,,U,, 	ADJJLL55@nT2&>&>@@@GDr!B!BDD#	##...
 &e%%MnT-EW-EsKKMM)i))+k++	
  	~t?Ww?WRWY\0]0]~~q|~~LO	 !d,dfijj"&""1y/K11:

 #2A2X+W*X	 !c,cehiiv1y/K115

 #2A2c+b*c !\,\^abbv)Y'%))9

 #2A2X+W*X25%@@!'3///////RR|RRRSUTUSUV	  r<   c                    t          |                                           sdS g d}t          fd|D                       S )NT)r  zmarkdown contentr   r   r  r  zskip tou   依網址判断u   依網址判斷u   從網址判斷u   根据网址判断u   根據網址判斷u   猜測u   推測probablylikelyzfrom the urlzbased on the urlc              3      K   | ]}|v V  	d S r7   r;   )r   flagrS   s     r=   r   z1_is_low_quality_generated_text.<locals>.<genexpr>  s'      --tts{------r<   )rw   r   r   )rh   r   rS   s     @r=   _is_low_quality_generated_textr@    s_    
$


%
%
'
'C t  E( ----u------r<   c                $     sg S t                     dk    rgg } D ]`}	 |                    t          |g||                     *# t          $ r* |                    i |t          ||                     Y ]w xY w|S t          |          }g }t           d          D ]\  }}|                    |t          |	                    d                    t          |	                    d                    t          |	                    d                    t          |	                    d                    t          |	                    d                    t          |	                    d	                    d d
         d           d| dt          j        |d           }t          ||          }	t          |	          pi }
t          |
	                    d          t                    r|
	                    d          ng }g } fdt!          t                               D             }|s. D ])}|                    i |t          ||                     *|S t#                      }|D ]%}t          |t$                    s	 t'          |	                    d                    }n# t          $ r Y Iw xY w|	                    |          }|se|                    |           t+          t          |	                    d          p|	                    d                              }t+          t          |	                    d          p|	                    d                              }t          |	                    d          t                    r|	                    d          ng }d |D             }t          |	                    d          t                    r|	                    d          ng }d |D             }t-          |          pt-          |          }t          |          dk     rd}|rt          ||          }|d         }|d         }|rt          |          ng }|d         D ]0}t          |          dk    r n||vr|                    |           1|rt          |          ng }|	                    dg           D ]0}t          |          dk    r n||vr|                    |           1|                    i |t/          |d d         p!t1          |	                    d                    d          t/          |d d         pt          ||          d         d          |d d         |d d         d           '|                                D ]1\  }}||v r
|                    i |t          ||                     2g }d t                     D             t5          |fd !          }|S )"Nr   rc   rx   startr   r/  r0  r   r2  r  i  )r  r   r/  r0  r   r2  r  ux   你是專業新聞編輯。請逐條閱讀輸入內容，對每則新聞輸出可讀整理。所有輸出必須使用：u$  。
輸出只允許 JSON，格式：{"items":[{"idx":1,"summary_title":"...","summary":"...","key_points":["...","...","..."],"detail_lines":["...","...","...","..."]}]}
規則：
1) summary_title 必須是讀者看得懂的整理標題，不可原樣複製整段英文。
2) summary 需為濃縮摘要，突出事件本質，避免空話。
3) key_points 固定 3 條，內容要有資訊密度（時間/內容/影響）。
4) detail_lines 固定 4 條，列出更細的重點敘述。
5) 若資訊不足，明確指出需看原文確認。
6) 禁止捏造；不可依網址、標題或常識猜地點/時間/獎勵。沒有明確寫出就寫「未標示」或「需看原文確認」。
7) 禁止出現「依網址判斷」「猜測」「推測」「probably」「likely」等字眼。

新聞資料：Fensure_asciir  c                B    i | ]}t          |d z             |         S )r   )r   )r   ir  s     r=   
<dictcomp>z*_batch_summarize_items.<locals>.<dictcomp>  s)    AAA!QUU1XAAAr<   r  r0  r1  r2  c                t    g | ]5}t          |          t          t          |                    d d         6S r+  rw   r   r;  s     r=   r=  z*_batch_summarize_items.<locals>.<listcomp>+  sA    rrr_nop_q_qr)/!*<*<==dsdCrrrr<   r3  c                t    g | ]5}t          |          t          t          |                    d d         6S r.  rK  r;  s     r=   r=  z*_batch_summarize_items.<locals>.<listcomp>-  sA    vvv!crstcucuv+OA,>,>??Evvvr<   r   Tr      r)  r/  c                Z    i | ](\  }}t          |                    d                     |)S )r   )r5   ra   )r   rH  r<  s      r=   rI  z*_batch_summarize_items.<locals>.<dictcomp>S  s0    AAA1s155<<  !AAAr<   c                p                         t          |                      d                    d          S )Nr   i'  )ra   r5   )r<  url_poss    r=   r  z(_batch_summarize_items.<locals>.<lambda>T  s'    Ce4E4Et(L(L r<   r  )r   ra  _batch_summarize_itemsrK   rk   r:  r   r  rw   ra   r   dumpsr(  r  r   r  ranger  r   r   r  r   r@  r  r  r  r  )r  rc   rx   rP   r  	lang_hintcompact_rowsr  r  rQ   r   r   	index_mapr  rS   source_itemr0  r1  key_points_rawr2  detail_lines_rawr3  low_qualityfbr,  rR   orderedrP  s   `                          @r=   rQ  rQ    s    	
5zzA~~ 	K 	KDK

14&'PTUUUVVVV K K K

IdI&<T4&H&HIJJJJJK
!$''ILuA... 
 
	T&txx77('):):;;'(8(899)$((8*<*<==*488I+>+>??*4884E+F+FGGN 
	
 
	
 
	
 
	
	I&/	I 	I *\FFF	I 	I   
(
(Cs##)rF",VZZ-@-@$"G"GO6::gRDCAAAAuSZZ/@/@AAAI  	G 	GDJJE$E"8t"D"DEFFFF
UUD ,
 ,
#t$$ 		cggenn%%CC 	 	 	H	mmC(( 	+OCGGO<T<T<pXcXgXghoXpXp,q,qrr%ocggi6H6H6fKOO\eLfLf&g&ghh2<SWW\=R=RTX2Y2Ya..._arr^rrr
6@AXAXZ^6_6_g377>222egvvO_vvv4]CCnGefmGnGnz??QK 	.'T::B/MmG-7?j)))RJ% ) )z??a''EJ&&%%a(((1=E4---2L~r22 . .|$$))E|++ ''---

!/dsd0C0m|T_TcTcdkTlTlGmGmor!s!s)'$3$-*o;QR]_c;d;den;oqtuu(!n ,RaR 0  	
 	
 	
 	
 &OO-- Q Q[$;;

OkO%;K%N%NOPPPP GAA	%0@0@AAAGSLLLLMMMGNs#   &A1A<;A<"J11
J>=J>r!  c                X   t          |          }t          | t                    rt          |           ni }t          t          |                    d          pd                    }||k    rt          |          }||d<   |S t          |                    d          t
                    r|                    d          ng }|s8t          |          }||d<   ||d<   |                    d          pd d|d<   |S t          |          dk    rg }|D ]}	t          |          }
|	g|
d<   	 |                    t          |
||	                              d          pg            S# t          $ r6 |                    d
 |
                    dg           D                        Y w xY wt          |          }||d<   ||d<   |                    d          pd d|d<   ||d<   |S |pt                      d                                         }|st          d          t          |          }g }t          |d          D ];\  }}	t          |	t                    s|                    |t!          |	                    d          p|	                    d                    t!          |	                    d                    d t          |	                    d          t
                    r|	                    d          ng D             d t          |	                    d          t
                    r|	                    d          ng D             t!          |	                    d                    d           =d| dt#          j        |d           }t'          ||          }t)          |          pi }t          |                    d          t
                    r|                    d          ng }i }|D ]Q}t          |t                    s	 t+          |                    d                    }n# t          $ r Y Hw xY w|||<   Rg }t          |d          D ]	\  }}	t          |	t                    st          |	          }|                    |          pi }dD ]_}t-          t!          |                    |          pd                    }|r*t/          |          st1          ||dk    rdnd           ||<   `d!D ]M\  }}|                    |          }t          |t
                    rfd"|D             }|r|d#|         ||<   N|                    |           t          |          }||d<   ||d<   |                    d          pd d|d<   ||d<   |S )$zLTranslate a canonical Pokemon news payload without running web search again.rx   r~   r  translation_source_langsummary_moder   z+translatedr   )rc   c              3  ^   K   | ](}t          |t                    t          |          V  )d S r7   )r   r   r;  s     r=   r   z1translate_pokemon_news_payload.<locals>.<genexpr>q  s:      'o'oA[efgim[n[n'oQ'o'o'o'o'o'or<   air   u9   未設定 MINIMAX_API_KEY，無法翻譯 NewsAgent 快取rC  r0  r/  r1  c                ,    g | ]}t          |          S r;   rw   r;  s     r=   r=  z2translate_pokemon_news_payload.<locals>.<listcomp>  s2      I  I  Iaq11  I  I  Ir<   r2  c                ,    g | ]}t          |          S r;   rc  r;  s     r=   r=  z2translate_pokemon_news_payload.<locals>.<listcomp>  s2      !O  !O  !O!3!3  !O  !O  !Or<   r3  detail_excerpt)r  r0  r1  r2  r3  re  u   你是 News Translation Agent。請只翻譯已整理好的新聞卡片，不要重新搜尋、不要改變事實、不要新增猜測。
目標語言：u  
輸出只允許 JSON，格式：{"items":[{"idx":1,"summary_title":"...","summary":"...","key_points":["..."],"detail_lines":["..."],"detail_excerpt":"..."}]}
規則：
1) idx 必須對應原資料，順序不重要但不可漏。
2) 保留 URL、來源、日期、數字、貨幣、Pokemon/Pokémon、TCG、SBT 等專有名詞。
3) 不可把未標示改成具體時間或地點。
4) 不要輸出 Markdown，不要附註解。

source=FrE  r  )r0  r1  re  r[     r)  ))r2  r   rM  )r3  r   r  c                v    g | ]5}t          |          t          t          |                    d          6S r7   rK  )r   r<  
item_limits     r=   r=  z2translate_pokemon_news_payload.<locals>.<listcomp>  sC    uuuTUbqrsbtbtu.q/A/ABB;J;Ouuur<   N)r   r   r   r5   ra   r  r   ra  translate_pokemon_news_payloadrK   re   rM   r  r   r  rk   rw   r   rR  r(  r  r   r   r@  r  )r!  rx   rc   target_langr   source_langrP   r  translated_itemsr  chunk_payloadrT   rT  r   r  r  rQ   r   translated_rowsby_idxrS   	out_itemsnew_itemkey_namerU   r   r   rh  s                              @r=   ri  ri  X  s   !$''K($77?T']]]RF!#fjj&8&8&EI"F"FGGKk!!6ll!F
#-fjj.A.A4#H#HPFJJwbE 6ll!F)4%&!'N!;!;!HyUUUN

5zzA~~') 	p 	pD LLM&*VM'"p ''(F}Vakr(s(s(s(w(wx  )A  )A  )G  EG  H  H  H  H p p p '''o'o9J9J7TV9W9W'o'o'oooooop6ll!F)4%&!'N!;!;!CtPPPN'G
7244Q7
>
>
@
@C XVWWW!+..IDuA... 
 
	T$%% 	!0/1J1J1_dhhW^N_N_!`!`*488I+>+>?? I  IV`aeaiaijvawawy}V~V~  =GDHH\<R<R<R  EG  I  I  I !O  !OZdeiememn|e}e}  @D  [E  [E  ?Mdhh~>V>V>V  KM  !O  !O  !O"1$((;K2L2L"M"M 		
 		
 		
 		
		9#		9 		9 *T666		9 		9  
$
$Cs##)rF-7

78K8KT-R-RZfjj)))XZO F  #t$$ 		cggenn%%CC 	 	 	H	sIuA... # #	T$%% 	::jjoo#F 	i 	iH'8I8I8OR(P(PQQE i;EBB i%3E(N^B^B^33dg%h%h"+] 	9 	9'HeZGGH%%E%&& 9uuuuY^uuu 9)0%HX&""""
v,,CCK%0C!"#ZZ77?4LLLCCLJs$   ,:E''=F'&F'"P;;
QQr~   )r  r   r]  rx   list[str] | Nonec           
     $   t                      \  }}|st          d          t          |          |r|nt                    }d |D             }|st          d          t	          ||||          \  }}	t          ||           }
|
D ]}t          |                    d                    |d<   t          |                    d          pd	          |d<   t          |                    d
          pd	          |d
<   t          t          t          |                    d          pd	                              |d<   d}	 t          |
|          }n # t          $ r d}fd|
D             }Y nw xY w|D ]t}d t          |                    d          pd	          D             }t          d                    |d d                   d          |d<   |                    dd            ut%                      |	|t'          |          |dS )NuH   未設定 MINIMAX_API_KEY（可放在專案 .env 或 old/tcg_pro/.env）c                    g | ]D}t          |                                          #t          |                                          ES r;   )r5   rM   r;  s     r=   r=  z-fetch_pokemon_latest_news.<locals>.<listcomp>  s9    GGGQAG#a&&,,..GGGr<   u   查詢字串為空r   )r  r   r   r/  r[   r2  r  ra  rB  r   c                8    g | ]}i |t          |          S r;   )r:  )r   r  out_langs     r=   r=  z-fetch_pokemon_latest_news.<locals>.<listcomp>  s/    \\\THH!7h!G!GH\\\r<   c                0    g | ]}t          |          |S r;   )r  )r   r   s     r=   r=  z-fetch_pokemon_latest_news.<locals>.<listcomp>  s'    yyy1cuvwcxcxyQyyyr<   rr   r   rf  re  )generated_atr  rx   r_  query_countr  )re   r  r   r   r  r  r   ra   r  r   r   r5   rQ  rK   r  r  rl   popr>   r   )r  r   r]  rx   rc   rd   
query_seed
query_listrb  r  mergedr  r_  
summarizedexcerpt_sentencesrw  s                  @r=   fetch_pokemon_latest_newsr    sk    566GX geffft$$H#L)B8)L)LJGG*GGGJ 1/000&z7HR]^^^Ix9	:::F j j%dhhuoo66X$TXXg%6%6%<"==W-dhhy.A.A.GRHHY"56LSQUQYQYZ_Q`Q`QfdfMgMg6h6h"i"iL]+FG(SSS

 ] ] ]!\\\\U[\\\


]  * *yy(8BS9T9T9ZXZ([([yyy!/9J2A29N0O0OQT!U!U"D)))) !

$:  s   E E65E6)r4   r5   )r?   r   r4   r@   )r4   rW   )rU   r5   r4   r5   )rx   ry   r4   r5   )rx   r5   r4   r5   )rx   r5   r4   r   )r   r5   r4   r5   )r   r5   r4   r   )r   r5   r4   r   )r   r5   r4   r5   )r   r5   r4   r5   )rh   r5   r4   r5   )r   r5   r4   r   )r   )r   r5   r   r   r4   r   )r,   )r   r5   r   r   r4   r5   )rh   r5   r4   r   r7   )r  r5   rc   r5   r  r  r4   r5   )r)  r5   r*  r5   r4   r+  )rH  r5   r*  r5   rc   r5   rd   r5   r   r   r4   r5   )r\  )
r]  r   rc   r5   rd   r5   r   r   r4   r+  )r]  r   rc   r5   rd   r5   r4   r+  )
r]  r   rc   r5   rd   r5   r   r   r4   r  )r  r+  r  r   r4   r+  )r   r5   r4   r   )rh   r5   r   r   r4   r5   )rh   r5   r4   r   )rh   r5   r4   r   )r   )r  r   r   r   r4   r   )
r/  r5   r2  r5   r  r5   r   r5   r4   r5   )
r6  r5   r/  r5   r2  r5   r  r5   r4   r5   )r/  r5   r2  r5   r  r5   r4   r5   )
r  r5   r/  r5   r2  r5   r  r5   r4   r5   )r  r5   r/  r5   r4   r5   )r  r   rx   r5   r4   r   )r  r+  rc   r5   rx   r5   r4   r+  )r!  r   rx   r5   rc   ry   r4   r   )
r  r   r   r   r]  rs  rx   r5   r4   r   )X__doc__
__future__r   r  r   r_   ru   rD  rR  rn  r   r   r   r   pathlibr   urllib.parser   r   r  r	   mcp.client.stdior
   r   rK   __file__resolveparentsROOTparentPROJECT_ROOTr]   DEFAULT_QUERIESr  r   r   r   r  r>   rV   re   rp   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r(  r8  r@  rG  r[  rd  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r:  r@  rQ  ri  r  r;   r<   r=   <module>r     s   5 5 " " " " " "   				 				      



 ' ' ' ' ' ' ' '             ! ! ! ! ! ! !!!!!!DDDDDDDDD   M LLL
 tH~~'*{66M59$v-	
  
 F    	1q 
1 	
 
1 Q 
1 Q 
1 
1 A 
1 A 
1 a  
1!" A#$ 1  	82 2 2 2   0   &% % % %      - - - -   @   k k k k
l l l l
j j j j
          "1 1 1 1
! ! ! !   (            4    ? ? ? ? ?   &2v 2v 2v 2v 2vj& & & &R   0% % % %#R #R #R #RL	 	 	 	 	   4
 
 
 
k k k k k*9 9 9 9x
 
 
 
: : : :& & & &    3 3 3 3l' ' ' ' ',      .S S S S 
G 
G 
G 
G: : : :: : : :z. . . .6n n n nbe e e e eT  $) ) ) ) ) ) ) )s   A A! A!