+
    i                        R t ^ RIt^ RIt^ RIt^ RIHt ^ RIHt ^RIH	t	 ]P                  ! 4       R,          R,          R,          R,          sR	 R
 ltR tR R ltRR R lltRR R lltR R ltR R ltRR R lltR R ltR# )z&Output rendering for last30days skill.N)Path)Optional)schemaz.localshare
last30daysoutc                $    V ^8  d   QhR\         /#    returnstr)formats   "R/Users/bowang/.openclaw/workspace/skills/last30days-official/scripts/lib/render.py__annotate__r      s      s     c                P   \        V RR4      pV'       g   R# \        4       pV EFW  pVP                  R4      '       d   VP                  R4       K.  VP                  R4      '       d   VP                  R4       KX  VP                  R4      '       d   VP                  R4       K  VP                  R	4      '       d   VP                  R
4       K  VP                  R4      '       d   VP                  R4       K  VP                  R4      '       d   VP                  R4       EK  VP                  R4      '       d   VP                  R4       EK,  VP                  R4      '       g   EKF  VP                  R4       EKZ  	  V'       d   RRP	                  \        V4      4       R2# R# )zGReturn ' [also on: Reddit, HN]' string if item has cross_refs, else ''.
cross_refsN RRedditXYTYouTubeTKTikTokIG	InstagramHNPM
PolymarketWWebz [also on: , ])getattrset
startswithaddjoinsorted)itemrefssource_namesref_ids   &   r   	_xref_tagr/      sE   4t,D5LS!!X&s##S!t$$Y't$$X&t$$[)t$$T"t$$\*s##U#! " TYYvl';<=Q??r   c                 D   \         P                  P                  R4      p V '       d   \        V 4      s \        P                  RRR7       R#   \         dH    \        \        P                  ! 4       4      R,          R,          s\        P                  RRR7        R# i ; i)zKEnsure output directory exists. Supports env override and sandbox fallback.LAST30DAYS_OUTPUT_DIRT)parentsexist_okr   r   N)	osenvirongetr   
OUTPUT_DIRmkdirPermissionErrortempfile
gettempdir)env_dirs    r   ensure_output_dirr=   *   sz     jjnn45G']
65 6(--/0<?%G
56s   A ABBc                D    V ^8  d   QhR\         P                  R\        /# r
   reportr   )r   Reportdict)r   s   "r   r   r   8   s      6== T r   c                  a  \        V 3R lS P                   4       4      p\        V 3R lS P                   4       4      p\        V 3R lS P                   4       4      p\        V 3R lS P                   4       4      p\        V 3R lS P
                   4       4      p\        V 3R lS P                   4       4      p\        V 3R lS P                   4       4      pW,           V,           V,           V,           V,           V,           p\        S P                  4      \        S P                  4      ,           \        S P                  4      ,           \        S P                  4      ,           \        S P
                  4      ,           \        S P                  4      ,           \        S P                  4      ,           p	RTR	TR
TRTRT	RV^8  RV	^ 8  ;'       d    WR,          8  /# )z7Assess how much data is actually from the last 30 days.c              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5i   Ndate
range_from).0rr@   s   & r   	<genexpr>)_assess_data_freshness.<locals>.<genexpr>:   *     [=aFFqvvIZIZ?Z=   AA
Ac              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5irE   rG   )rJ   xr@   s   & r   rL   rM   ;   s*     Qh&&1QVVv?P?P5P11hrO   c              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5irE   rG   )rJ   wr@   s   & r   rL   rM   <   s*     U
1ffQ6CTCT9TQQ
rO   c              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5irE   rG   )rJ   hr@   s   & r   rL   rM   =   ,     [0!FFAqvvIZIZ?ZAA0rO   c              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5irE   rG   )rJ   pr@   s   & r   rL   rM   >   rV   rO   c              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5irE   rG   )rJ   tr@   s   & r   rL   rM   @   rN   rO   c              3      <"   T F7  qP                   '       g   K  VP                   SP                  8  g   K3  ^x  K9  	  R# 5irE   rG   )rJ   igr@   s   & r   rL   rM   A   s,     ] 0"GGA6K\K\@\AA 0rO   reddit_recentx_recent
web_recenttotal_recenttotal_items	is_sparsemostly_evergreeng333333?)	sumredditrQ   web
hackernews
polymarkettiktok	instagramlen)
r@   r]   r^   r_   	hn_recent	pm_recenttiktok_recent	ig_recentr`   ra   s
   f         r   _assess_data_freshnessrp   8   s   [6==[[MQfhhQQHU

UUJ[v00[[I[v00[[I[6==[[M] 0 0]]I +j89DyPS``cllLfmm$s688}4s6::FVM^M^I__beflfwfwbxx{~  @F  @M  @M  |N  N  QT  U[  Ue  Ue  Qf  fK 	Hj{\A%K!OPPS?P0P r   c                \    V ^8  d   QhR\         P                  R\        R\        R\        /# )r
   r@   limitmissing_keysr   )r   rA   intr   )r   s   "r   r   r   Q   s3     j j6== j j jZ] jr   c                B4   . pVP                  RV P                   24       VP                  R4       \        V 4      pVR,          '       dj   VP                  R4       VP                  RVR,           RV P                   RV P                   R	24       VP                  R
4       VP                  R4       V P
                  R8X  d   VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       V P                  '       dK   V P                  '       d   V P                  R R2MRpVP                  RV R24       VP                  R4       VP                  RV P                   RV P                   24       VP                  RV P
                   24       V P                  '       d   VP                  RV P                   24       V P                  '       d   VP                  RV P                   24       V P                  '       d   VP                  RV P                   24       VP                  R4       V P
                  R8X  d+   VRf9   d$   VP                  R4       VP                  R4       M:V P
                  R8X  d*   VRg9   d#   VP                  R 4       VP                  R4       V P                  '       dT   VP                  R!4       VP                  R4       VP                  R"V P                   24       VP                  R4       EMGV P
                  Rh9   dY   V P                  '       gG   VP                  R!4       VP                  R4       VP                  R#4       VP                  R4       EMV P                  '       Ed   VP                  R!4       VP                  R4       V P                  R$V  EF  pRpVP                  '       d   VP                  p. p	VP                  e   V	P                  VP                   R%24       VP                  e   V	P                  VP                   R&24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MR,p
VP$                  R-8w  d   R.VP$                   R)2MRpVP                  R/VP&                   R0VP                   R1VP(                   V
 V V \+        V4       2
4       VP                  R2VP,                   24       VP                  R2VP.                   24       VP                  R3VP0                   R424       VP2                  '       d   VP2                  ^ ,          P                  ^
8  dz   VP2                  ^ ,          pVP4                  R5,          p\7        VP4                  4      ^8  d   VP9                  4       R6,           pVP                  R7VP                   R8V R924       VP:                  '       d@   VP                  R:4       VP:                  R;,           F  pVP                  R<V 24       K  	  VP                  R4       EK  	  V P<                  '       dT   VP                  R=4       VP                  R4       VP                  R"V P<                   24       VP                  R4       EMQV P
                  Ri9   dY   V P>                  '       gG   VP                  R=4       VP                  R4       VP                  R>4       VP                  R4       EMV P>                  '       Ed   VP                  R=4       VP                  R4       V P>                  R$V  EF  pRpVP                  '       d   VP                  p. p	VP@                  e   V	P                  VP@                   R?24       VPB                  e   V	P                  VPB                   R@24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MR,p
VP$                  R-8w  d   R.VP$                   R)2MRpVP                  R/VP&                   R0VP                   RAVPD                   V
 V V \+        V4       2
4       VP                  R2VPF                  R5,           R624       VP                  R2VP.                   24       VP                  R3VP0                   R424       VP                  R4       EK  	  V PH                  '       dT   VP                  RB4       VP                  R4       VP                  R"V PH                   24       VP                  R4       EMV PJ                  '       Ed   VP                  RB4       VP                  R4       V PJ                  R$V  EF  pRpVP                  '       d   VP                  p. p	VPL                  e    V	P                  VPL                  RC RD24       VP@                  e    V	P                  VP@                  RC RE24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MRp
VP                  R/VP&                   R0VP                   RFVPN                   V
 V \+        V4       2	4       VP                  R2VP,                   24       VP                  R2VP.                   24       VPP                  '       dK   VPP                  R5,          p\7        VPP                  4      ^8  d
   VR6,          pVP                  RGV 24       VP                  R3VP0                   R424       VP                  R4       EK  	  V PR                  '       dT   VP                  RH4       VP                  R4       VP                  R"V PR                   24       VP                  R4       EMV PT                  '       Ed   VP                  RH4       VP                  R4       V PT                  R$V  EFU  pRpVP                  '       d   VP                  p. p	VPL                  e    V	P                  VPL                  RC RD24       VP@                  e    V	P                  VP@                  RC RE24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MRp
VP                  R/VP&                   R0VP                   RAVPV                   V
 V \+        V4       2	4       VP                  R2VPF                  R5,           24       VP                  R2VP.                   24       VPX                  '       d|   VPX                  VPF                  R$\7        VPX                  4       8w  dK   VPX                  R5,          p\7        VPX                  4      ^8  d
   VR6,          pVP                  RIV 24       VPZ                  '       d<   VP                  RJRKP!                  RL VPZ                  RM,           4       4       24       VP                  R3VP0                   R424       VP                  R4       EKX  	  V P\                  '       dT   VP                  RN4       VP                  R4       VP                  R"V P\                   24       VP                  R4       EMV P^                  '       Ed   VP                  RN4       VP                  R4       V P^                  R$V  EFU  pRpVP                  '       d   VP                  p. p	VPL                  e    V	P                  VPL                  RC RD24       VP@                  e    V	P                  VP@                  RC RE24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MRp
VP                  R/VP&                   R0VP                   RAVPV                   V
 V \+        V4       2	4       VP                  R2VPF                  R5,           24       VP                  R2VP.                   24       VPX                  '       d|   VPX                  VPF                  R$\7        VPX                  4       8w  dK   VPX                  R5,          p\7        VPX                  4      ^8  d
   VR6,          pVP                  RIV 24       VPZ                  '       d<   VP                  RJRKP!                  RO VPZ                  RM,           4       4       24       VP                  R3VP0                   R424       VP                  R4       EKX  	  V P`                  '       dT   VP                  RP4       VP                  R4       VP                  R"V P`                   24       VP                  R4       EMV Pb                  '       Ed   VP                  RP4       VP                  R4       V Pb                  R$V  EF  pRpVP                  '       d   VP                  p. p	VP                  e   V	P                  VP                   R%24       VP                  e   V	P                  VP                   R&24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MRp
VP                  R/VP&                   R0VP                   RQVPd                   V
 V \+        V4       2	4       VP                  R2VP,                   24       VP                  R2VPf                   24       VP                  R3VP0                   R424       VP:                  '       d@   VP                  R:4       VP:                  R;,           F  pVP                  R<V 24       K  	  VP                  R4       EK  	  V Ph                  '       dT   VP                  RR4       VP                  R4       VP                  R"V Ph                   24       VP                  R4       EMWV Pj                  '       EdE   VP                  RR4       VP                  R4       V Pj                  R$V  EF  pRpVP                  '       Edl   VP                  p. p	VPl                  e   VPl                  RS8  d)   V	P                  RTVPl                  RS,          R RU24       MYVPl                  RV8  d)   V	P                  RTVPl                  RV,          RW RX24       M V	P                  RTVPl                  RW RY24       VPn                  e   VPn                  RS8  d)   V	P                  RTVPn                  RS,          R RZ24       MYVPn                  RV8  d)   V	P                  RTVPn                  RV,          RW R[24       M V	P                  RTVPn                  RW R\24       V	'       d   R'R(P!                  V	4       R)2pVP"                  '       d   R*VP"                   R+2MRp
VP                  R/VP&                   R0VP                   R+V \+        V4       24       VP                  R2VPp                   24       VPr                  '       d   . pVPr                   F'  w  ppV^d,          pVP                  V R]VRW R^24       K)  	  R_P!                  V4      pVPt                  ^ 8  d   VR`VPt                   Ra2,          pVPv                  '       d   VR*VPv                   R+2,          pVP                  R2V 24       VP                  R2VP.                   24       VP                  R3VP0                   R424       VP                  R4       EK  	  V Px                  '       dT   VP                  Rb4       VP                  R4       VP                  R"V Px                   24       VP                  R4       EMmV Pz                  '       Ed[   VP                  Rb4       VP                  R4       V Pz                  R$V  EF$  pVP"                  '       d   R*VP"                   R+2MR,p
VP$                  R-8w  d   R.VP$                   R)2MRpVP                  R/VP&                   RcVP                   RFVP|                   V
 V \+        V4       2	4       VP                  R2VP,                   24       VP                  R2VP.                   24       VP                  R2VP~                  Rd,           R624       VP                  R3VP0                   R424       VP                  R4       EK'  	  ReP!                  V4      # )jzRender compact output for the assistant to synthesize.

Args:
    report: Report data
    limit: Max items per source
    missing_keys: 'both', 'reddit', 'x', or 'none'

Returns:
    Compact markdown string
z## Research Results: r   rb   uG   **⚠️ LIMITED RECENT DATA** - Few discussions from the last 30 days.zOnly r`   z item(s) confirmed from  to .z[Results below may include older/evergreen content. Be transparent with the user about this.zweb-onlyuC   **🌐 WEB SEARCH MODE** - assistant will search blogs, docs & news---uW   **⚡ Want better results?** Add API keys to unlock Reddit, TikTok, Instagram & X data:ur   - `SCRAPECREATORS_API_KEY` → Reddit + TikTok + Instagram (one key, all three!) — real upvotes, comments, viewsu5   - `XAI_API_KEY` → X posts with real likes & repostsuD   - `OPENAI_API_KEY` (legacy) → Reddit threads (slower, higher cost)z.- Edit `~/.config/last30days/.env` to add keysz.1fzh oldcachedu   **⚡ CACHED RESULTS** (z") - use `--refresh` for fresh data**Date Range:** 
**Mode:** z**OpenAI Model:** z**xAI Model:** z**Resolved X Handle:** @reddit-onlyuW   *💡 Tip: Add an xAI key (`XAI_API_KEY`) for X/Twitter data and better triangulation.*x-onlyu|   *💡 Tip: Add `SCRAPECREATORS_API_KEY` for Reddit + TikTok + Instagram data (one key, all three) and better triangulation.*z### Reddit Threadsz**ERROR:** z2*No relevant Reddit threads found for this topic.*Nptscmtz [r#   r$   z ()z (date unknown)highz [date:z**z
** (score:z) r/z  z  **N   N...u     💬 Top comment (z upvotes): ""z  Insights::N   Nz    - z### X Postsz+*No relevant X posts found for this topic.*likesrtz) @z### YouTube Videos,z viewsz likesz) z  Transcript: z### TikTok Videosz  Caption: z  Tags:  c              3   4   "   T F  pR V,           x  K  	  R# 5i#N rJ   rU   s   & r   rL   !render_compact.<locals>.<genexpr>&       0TBSQqBS   :N   Nz### Instagram Reelsc              3   4   "   T F  pR V,           x  K  	  R# 5ir   r   r   s   & r   rL   r   J  r   r   z### Hacker News Storiesz) hn/z#### Prediction Markets (Polymarket)i@B $zM volumei  .0fzK volumez volumezM liquidityzK liquidityz
 liquidity: % | z and z morez### Web Resultsz** [WEB] (score::N   N
)rQ   none)re   r   )bothr|   r   r}   allzx-web)@appendtopicrp   rI   range_tomode
from_cachecache_age_hoursopenai_model_usedxai_model_usedresolved_x_handlereddit_errorre   
engagementscorenum_commentsr)   rH   date_confidenceid	subredditr/   titleurlwhy_relevanttop_commentsexcerptrk   rstripcomment_insightsx_errorrQ   r   repostsauthor_handletextyoutube_erroryoutubeviewschannel_nametranscript_snippettiktok_errorri   author_namecaption_snippethashtagsinstagram_errorrj   hackernews_errorrg   authorhn_urlpolymarket_errorrh   volume	liquidityquestionoutcome_pricesoutcomes_remainingprice_movement	web_errorrf   source_domainsnippet)r@   rr   rs   lines	freshnessage_strr+   eng_strengpartsdate_strconf_strtcr   insightr   outcomesnamepricepctoutcome_lines   &&&                  r   render_compactr   Q   s`    E 
LL(78	LL 'v.I^_uY~677OPVPaPaObbfgmgvgvfwwxyzrsR {{j Z[RUno  J  	KLM[\EFUR :@:P:P:PV++C06V^/y8Z[\R	LL#F$5$5#6d6??:KLM	LL:fkk]+,)&*B*B)CDEv'<'<&=>?/0H0H/IJK	LL {{m#(EnoR		 \5G%G  T  	UR )*R{6#6#6"789R	/	/)*RIJR	)*RMM&5)DGoo99(LLCII;c!23##/LLC$4$4#5S!9: "499U#3"4A6G,0IIIDII;a(;LH<@<P<PTZ<Z!5!5 6a8`bHLL2dggYjD@PQYPZ[cZdeldmnwx|n}m~  ALL2djj\*+LL2dhhZ)LL3t00134    T%6%6q%9%?%?2%E&&q)**T*rzz?S(%nn.6G9"((<PWyXYZ[ $$$]+#44R88GLL6'!34  9 LLE *J ~~~]#R{6>>"234R	:	:6888]#RBCR	]#RHHVe$DGoo99(LLCII;e!45;;*LLCKK=!34 "499U#3"4A6G,0IIIDII;a(;LH<@<P<PTZ<Z!5!5 6a8`bHLL2dggYjC@R@R?ST\S]^f]ghogpqz{  rA  qB  C  DLL2diio.c23LL2dhhZ)LL3t00134LL' %, )*R{6#7#7"89:R	)*RNN6E*DGoo99(LLCIIa=!7899(LLCIIa=!78 "499U#3"4A6G,0IIIDII;a(2HLL2dggYjBt?P?P>QRZQ[\c[denosetduvwLL2djj\*+LL2dhhZ)&&&11$7t../#5u$G~gY78LL3t00134LL/ +4 ()R{6#6#6"789R	()RMM&5)DGoo99(LLCIIa=!7899(LLCIIa=!78 "499U#3"4A6G,0IIIDII;a(2HLL2dggYjC@P@P?QRZQ[\c[denosetduvwLL2diio./0LL2dhhZ)###(<(<		Jd3tOcOcKd@e(e..t4t++,s2u$G{7)45}}}x0T$--PRBS0T(T'UVWLL3t00134LL3 *8 *+R{6#9#9":;<R				*+R$$Ve,DGoo99(LLCIIa=!7899(LLCIIa=!78 "499U#3"4A6G,0IIIDII;a(2HLL2dggYjC@P@P?QRZQ[\c[denosetduvwLL2diio./0LL2dhhZ)###(<(<		Jd3tOcOcKd@e(e..t4t++,s2u$G{7)45}}}x0T$--PRBS0T(T'UVWLL3t00134LL3 -8 ./R{6#:#:";<=R				./R%%fu-DGoo99(LLCII;c!23##/LLC$4$4#5S!9: "499U#3"4A6G,0IIIDII;a(2HLL2dggYjE$++xjY`XabklpbqarstLL2djj\*+LL2dkk]+,LL3t00134 $$${,#44R88GLL6'!34  9 LL3 .8 :;R{6#:#:";<=R				:;R%%fu-DGoo::)zzY.qI)=c(B(%KLu,qE)9#(>h%GHqC(8%@A==,}}	1qy)@(E[%QR%/qu)<S(A%MNqs(;:%FG "499U#3"4A6G,0IIIDII;a(2HLL2dggYjAgYyQUFWXYLL2dmm_-. """#'#6#6KD%#+COOtfBs3iq$9: $7  %zz(3**Q. eD,C,C+DE$JJL&&& b)<)<(=Q$??Lr,01LL2dhhZ)LL3t00134LLU .Z &'R{6#3#3"456R	&'RJJv&D,0IIIDII;a(;LH<@<P<PTZ<Z!5!5 6a8`bHLL2dggY&6tzzl"TEWEWDXYaXbckblmvw{m|l}~LL2djj\*+LL2dhhZ)LL2dll40156LL3t00134LL ' 99Ur   c                P    V ^8  d   QhR\         P                  R\        R\        /# )r
   r@   source_infor   )r   rA   rB   r   )r   s   "r   r   r     s*     [ [ [T [S [r   c                	   Vf   / p. pVP                  R4       VP                  R4       V P                  '       d    VP                  RV P                   24       MsV P                  '       d*   VP                  R\        V P                  4       R24       M8V P                  R,9   d   M&VP                  RR4      pVP                  RV 24       V P                  '       d    VP                  R	V P                   24       MV P                  '       dU   R
\        V P                  4       R2pV P                  '       d   VRV P                   R2,          pVP                  V4       M8V P                  R-9   d   M&VP                  RR4      pVP                  RV 24       V P                  '       d    VP                  RV P                   24       MYV P                  '       dH   \        R V P                   4       4      pVP                  R\        V P                  4       RV R24       V P                  '       d    VP                  RV P                   24       MYV P                  '       dH   \        R V P                   4       4      pVP                  R\        V P                  4       RV R24       V P                  '       d    VP                  RV P                   24       MYV P                  '       dH   \        R V P                   4       4      pVP                  R\        V P                  4       RV R24       V P                   '       d    VP                  RV P                    24       M:V P"                  '       d)   VP                  R\        V P"                  4       R 24       V P$                  '       d    VP                  R!V P$                   24       M:V P&                  '       d)   VP                  R"\        V P&                  4       R#24       V P(                  '       d    VP                  R$V P(                   24       MaV P*                  '       d*   VP                  R%\        V P*                  4       R&24       M&VP                  R'R(4      pVP                  R)V 24       VP                  R*4       R+P-                  V4      # ).zRender source status footer showing what was used/skipped and why.

Args:
    report: Report data
    source_info: Dict with source availability info:
        x_skip_reason, youtube_skip_reason, web_skip_reason

Returns:
    Source status markdown string
rx   z**Sources:**u     ❌ Reddit: error — u     ✅ Reddit: z threadsreddit_skip_reasonznot configuredu     ⏭️ Reddit: skipped — u     ❌ X: error — u	     ✅ X: z postsz (via @z + keyword search)x_skip_reasonzNo Bird CLI or XAI_API_KEYu     ⏭️ X: skipped — u     ❌ YouTube: error — c              3   P   "   T F  p\        VR R4      '       g   K  ^x  K  	  R# 5i)r   Nr%   rJ   vs   & r   rL   'render_source_status.<locals>.<genexpr>  s     c.QGAG[]a<bqq.   &
&u     ✅ YouTube: z	 videos (z with transcripts)u     ❌ TikTok: error — c              3   P   "   T F  p\        VR R4      '       g   K  ^x  K  	  R# 5ir   Nr   r   s   & r   rL   r     s     \}!CTVZ8[AA}r   u     ✅ TikTok: z with captions)u     ❌ Instagram: error — c              3   P   "   T F  p\        VR R4      '       g   K  ^x  K  	  R# 5ir   r   r   s   & r   rL   r     s!     _'7!71FWY];^AA'7r   u     ✅ Instagram: z reels (u     ❌ HN: error - u
     ✅ HN: z storiesu     ❌ Polymarket: error - u     ✅ Polymarket: z marketsu     ❌ Web: error — u     ✅ Web: z pagesweb_skip_reasonzassistant will use WebSearchu     ⚡ Web: r   r   )r   r|   r   z
reddit-webr   )r   r   re   rk   r   r6   r   rQ   r   r   r   rd   r   ri   r   rj   r   rg   r   rh   r   rf   r)   )r@   r   r   reasonx_linewith_transcriptswith_captionss   &&     r   render_source_statusr     s    E	LL	LL  /0C0C/DEF	~c&--&8%9BC	D	D!57GH4VH=> ~~~*6>>*:;<	S]O62### 8 899KLLFV	:	:2NO/x89 01E1E0FGH	c&..ccs6>>':&;9EUDVVhij /0C0C/DEF	\v}}\\~c&--&8%9=/Q`ab 263I3I2JKL				_v'7'7__(V-=-=)>(?xVefg )&*A*A)BCD				z#f&7&7"8!9BC 1&2I2I1JKL				)#f.?.?*@)AJK ,V-=-=,>?@	{3vzz?"36:;!24RS{6(+,	LL99Ur   c                D    V ^8  d   QhR\         P                  R\        /# r?   r   rA   r   )r   s   "r   r   r     s     - -6== -S -r   c                Z   . pVP                  RV P                   R24       VP                  R4       VP                  RV P                  R,           RV P                   R24       VP                  R4       VP                  R4       VP                  R4       . pV P                  R	,           F6  pVP                  VP
                  R
VP                  VP                  34       K8  	  V P                  R	,           FD  pVP                  VP
                  RVP                  R,          R,           VP                  34       KF  	  V P                  R	,           FD  pVP                  VP
                  RVP                  R,          R,           VP                  34       KF  	  V P                  R	,           FD  pVP                  VP
                  RVP                  R,          R,           VP                  34       KF  	  V P                  R	,           FD  pVP                  VP
                  RVP                  R,          R,           VP                  34       KF  	  V P                  R	,           FD  pVP                  VP
                  RVP                  R,          R,           VP                  34       KF  	  V P                   R	,           FD  pVP                  VP
                  RVP                  R,          R,           VP                  34       KF  	  VP#                  R R7       VR,           F  w  rErgVP                  RV RV 24       K  	  VP                  R4       VP                  R4       VP                  R4       VP                  R4       VP                  R4       RP%                  V4      # )zfRender reusable context snippet.

Args:
    report: Report data

Returns:
    Context markdown string
z# Context: z (Last 30 Days)r   z*Generated: N
   Nz | Sources: r   z## Key Sources:N   Nr   r   :N2   Nr   r   r   r   r    r"   c                     V ^ ,          ) # )    r   )rQ   s   &r   <lambda>(render_context_snippet.<locals>.<lambda>?  s
    !A$r   )key:N   Nz- [z] z
## SummaryzH*See full report for best practices, prompt pack, and detailed sources.*r   )r   r   generated_atr   re   r   r   r   rQ   r   ri   rj   rg   r   rh   r   rf   sortr)   )r@   r   	all_itemsr+   r   sourcer   r   s   &       r   render_context_snippetr    s    E	LL;v||nO<=	LL	LL< 3 3C 89fkk]RSTU	LL 
LL!"	LLIb!!$**h

DHHEF "$**c499S>E+A488LM b!!$**h		#0FQR "  $$$**k499S>E3I488TU %!!"%%$**dDJJsOe,CT[[QR &!!"%%$**lDMM#4F4NPTPXPXYZ &

2$**eTZZ_u-DdhhOP  NNN'$-bMM ts6("TF+, %2 
LL	LL	LL	LL[\	LL99Ur   c                D    V ^8  d   QhR\         P                  R\        /# r?   r   )r   s   "r   r   r   L  s"     M Mv}} M Mr   c           
     d    . pVP                  RV P                   R24       VP                  R4       VP                  RV P                   24       VP                  RV P                   RV P                   24       VP                  RV P
                   24       VP                  R4       VP                  R4       VP                  R4       V P                  '       d   VP                  R	V P                   24       V P                  '       d   VP                  R
V P                   24       VP                  R4       V P                  '       Ed   VP                  R4       VP                  R4       V P                   EF  pVP                  RVP                   RVP                   24       VP                  R4       VP                  RVP                   24       VP                  RVP                   24       TP                  RVP                  ;'       g    R RVP                   R24       VP                  RVP                   R24       VP                  RVP                    24       VP"                  '       dM   VP"                  pTP                  RVP                  ;'       g    R RVP$                  ;'       g    R R24       VP&                  '       d   VP&                  ^ ,          P                  ^
8  d   VP&                  ^ ,          pVP(                  R,          p\+        VP(                  4      ^8  d   VP-                  4       R,           pVP                  R4       VP                  RVP                   RVP.                   R24       VP                  R V 24       VP0                  '       dJ   VP                  R4       VP                  R!4       VP0                   F  pVP                  R"V 24       K  	  VP                  R4       EK  	  V P2                  '       Ed   VP                  R#4       VP                  R4       V P2                   EFo  pVP                  RVP                   R$VP4                   24       VP                  R4       VP                  RVP                   24       TP                  RVP                  ;'       g    R RVP                   R24       VP                  RVP                   R24       VP                  RVP                    24       VP"                  '       dM   VP"                  pTP                  RVP6                  ;'       g    R R%VP8                  ;'       g    R R&24       VP                  R4       VP                  R VP:                   24       VP                  R4       EKr  	  V P<                  '       Ed    VP                  R'4       VP                  R4       V P<                   EF  pVP                  RVP                   R$VP>                   24       VP                  R4       VP                  RVP                   24       TP                  RVP                  ;'       g    R 24       VP                  RVP                   R24       VP                  RVP                    24       VP"                  '       dd   VP"                  pTP                  RVP@                  ;'       g    R R(VP6                  ;'       g    R R%VP$                  ;'       g    R R24       VPB                  '       d<   VP                  R)R*PE                  R+ VPB                  R,,           4       4       24       VP                  R4       VP                  R VP:                  R-,           24       VP                  R4       EK  	  V PF                  '       Ed    VP                  R.4       VP                  R4       V PF                   EF  pVP                  RVP                   R$VP>                   24       VP                  R4       VP                  RVP                   24       TP                  RVP                  ;'       g    R 24       VP                  RVP                   R24       VP                  RVP                    24       VP"                  '       dd   VP"                  pTP                  RVP@                  ;'       g    R R(VP6                  ;'       g    R R%VP$                  ;'       g    R R24       VPB                  '       d<   VP                  R)R*PE                  R/ VPB                  R,,           4       4       24       VP                  R4       VP                  R VP:                  R-,           24       VP                  R4       EK  	  V PH                  '       Ed   VP                  R04       VP                  R4       V PH                   EF  pVP                  RVP                   RVP                   24       VP                  R4       VP                  R1VP.                   24       VP                  R2VPJ                   24       VP                  '       d   VP                  R3VP                   24       TP                  RVP                  ;'       g    R 24       VP                  RVP                   R24       VP                  RVP                    24       VP"                  '       dM   VP"                  pTP                  RVP                  ;'       g    R RVP$                  ;'       g    R R24       VP0                  '       dJ   VP                  R4       VP                  R!4       VP0                   F  pVP                  R"V 24       K  	  VP                  R4       EK  	  V PL                  '       Ed   VP                  R44       VP                  R4       V PL                   EF  pVP                  RVP                   RVPN                   24       VP                  R4       VP                  R5VP                   24       VP                  RVP                   24       TP                  RVP                  ;'       g    R 24       VP                  RVP                   R24       VPP                  '       dQ   VPP                   UUu. uF  w  rxV RV^d,          R6 R72NK  	  p	ppVP                  R8R9PE                  V	4       24       VPR                  '       d   VP                  R:VPR                   24       VP"                  '       dN   VP"                  pTP                  R;VPT                  ;'       g    ^ R< R=VPV                  ;'       g    ^ R< 24       VP                  R4       EK  	  V PX                  '       Edc   VP                  R>4       VP                  R4       V PX                   EF/  pVP                  RVP                   RVP                   24       VP                  R4       VP                  R?VPZ                   24       VP                  RVP                   24       TP                  RVP                  ;'       g    R RVP                   R24       VP                  RVP                   R24       VP                  RVP                    24       VP                  R4       VP                  R VP\                   24       VP                  R4       EK2  	  VP                  R@4       VP                  R4       VP                  RA4       VP                  R4       VP                  RB4       VP                  R4       VP                  RA4       VP                  R4       RCPE                  V4      # u uppi )Dz_Render full markdown report.

Args:
    report: Report data

Returns:
    Full report markdown
z# z - Last 30 Days Research Reportr   z**Generated:** rz   rv   r{   z## Models Usedz- **OpenAI:** z- **xAI:** z## Reddit Threadsz### r   z- **Subreddit:** r/z- **URL:** z- **Date:** Unknownz (confidence: r   z- **Score:** z/100z- **Relevance:** z- **Engagement:** ?z	 points, z	 commentsr   r   u   **💬 Top Comment** (z upvotes, u/z):z> z**Key Insights from Comments:**z- z
## X Postsz: @z likes, z repostsz## TikTok Videosz views, z- **Hashtags:** r   c              3   4   "   T F  pR V,           x  K  	  R# 5ir   r   r   s   & r   rL   %render_full_report.<locals>.<genexpr>       8]J\QqJ\r   r   :Ni,  Nz## Instagram Reelsc              3   4   "   T F  pR V,           x  K  	  R# 5ir   r   r   s   & r   rL   r    r  r   z## Hacker News Storiesz- **Author:** z- **HN URL:** z- **Article URL:** z"## Prediction Markets (Polymarket)z- **Event:** r   r   z- **Outcomes:** r   z- **Trend:** z- **Volume:** $z,.0fz | Liquidity: $z## Web Resultsz- **Source:** z## Best Practicesz *To be synthesized by assistant*z## Prompt Packr   )/r   r   r  rI   r   r   r   r   re   r   r   r   r   rH   r   r   r   r   r   r   r   rk   r   r   r   rQ   r   r   r   r   ri   r   r   r   r)   rj   rg   r   rh   r   r   r   r   r   rf   r   r   )
r@   r   r+   r   r   r   r   r   r   r   s
   &         r   render_full_reportr  L  s    E 
LL2fll^#BCD	LL	LL?6#6#6"789	LL#F$5$5#6d6??:KLM	LL:fkk]+,	LL 
LL!"	LL~f&>&>%?@A{6#8#8"9:;	LL }}}()RMMDLL4y4::,78LLLL.t~~.>?@LL;txxj12LL<		(>(>Y'?~dNbNbMccdefLL=D9:LL,T->->,?@Aoo1#))2B2Bs1C9SM]M]MdMdadLeenop   T%6%6q%9%?%?2%E&&q)**T*rzz?S(%nn.6GR ;BHH:\RTR[R[Q\\^_`r'^,$$$R >?#44GLL2gY0  5 LL9 "> xxx\"RHHDLL4yD,>,>+?@ALLLL;txxj12LL<		(>(>Y'?~dNbNbMccdefLL=D9:LL,T->->,?@Aoo1#))2B2Bs1C8CKKL^L^[^K__ghiLLLL2dii[)*LL " }}}'(RMMDLL4yD,<,<+=>?LLLL;txxj12LL<		(>(>Y'?@ALL=D9:LL,T->->,?@Aoo1#))2B2Bs1C8CIIL\L\Y\K]]efifvfvf}f}z}e~  H  I  J}}}/8]$--X[J\8]0]/^_`LLLL2diio./0LL# "( )*R$$DLL4yD,<,<+=>?LLLL;txxj12LL<		(>(>Y'?@ALL=D9:LL,T->->,?@Aoo1#))2B2Bs1C8CIIL\L\Y\K]]efifvfvf}f}z}e~  H  I  J}}}/8]$--X[J\8]0]/^_`LLLL2diio./0LL# %( -.R%%DLL4y4::,78LLLL>$++78LL>$++78xxx2488*=>LL<		(>(>Y'?@ALL=D9:LL,T->->,?@Aoo1#))2B2Bs1C9SM]M]MdMdadLeenop$$$R >?#44GLL2gY0  5 LL+ &0 9:R%%DLL4y4==/:;LLLL=56LL;txxj12LL<		(>(>Y'?@ALL=D9:"""KOK^K^_K^KDtfBuSyoQ7K^_/

80D/EFG"""}T-@-@,ABCooszzQt.DOTWTaTaTfTfefgkSlmnLL# &( zzz%&RJJDLL4y4::,78LLLL>$*<*<)=>?LL;txxj12LL<		(>(>Y'?~dNbNbMccdefLL=D9:LL,T->->,?@ALLLL2dll^,-LL  
LL$%	LL	LL34	LL	LL!"	LL	LL34	LL99UK `s   8A@,c          	          V ^8  d   QhR\         P                  R\        \        ,          R\        \        ,          R\        \        ,          /# )r
   r@   
raw_openairaw_xairaw_reddit_enriched)r   rA   r   rB   list)r   s   "r   r   r     s@     '8 '8MM'8'8 d^'8 "$	'8r   c                `   \        4        \        \        R,          R4      ;_uu_ 4       p\        P                  ! V P                  4       V^R7       RRR4       \        \        R,          R4      ;_uu_ 4       pVP                  \        V 4      4       RRR4       \        \        R,          R4      ;_uu_ 4       pVP                  \        V 4      4       RRR4       V'       dA   \        \        R,          R4      ;_uu_ 4       p\        P                  ! W^R7       RRR4       V'       dA   \        \        R,          R4      ;_uu_ 4       p\        P                  ! W$^R7       RRR4       V'       dC   \        \        R	,          R4      ;_uu_ 4       p\        P                  ! W4^R7       RRR4       R# R#   + '       g   i     ELq; i  + '       g   i     ELC; i  + '       g   i     EL; i  + '       g   i     L; i  + '       g   i     L; i  + '       g   i     R# ; i)
zWrite all output files.

Args:
    report: Report data
    raw_openai: Raw OpenAI API response
    raw_xai: Raw xAI API response
    raw_reddit_enriched: Raw enriched Reddit thread data
zreport.jsonrS   )indentNz	report.mdlast30days.context.mdzraw_openai.jsonzraw_xai.jsonz raw_reddit_threads_enriched.json)	r=   openr7   jsondumpto_dictwriter  r  )r@   r  r  r  fs   &&&& r   write_outputsr     sj     
j=(#	.	.!		&.."Aa0 
/ 
j;&	,	,	"6*+ 
- 
j22C	8	8A	&v./ 
9 *00#66!IIjA. 7 *~-s33qIIg+ 4 *AA3GG1II)Q7 HG ) 
/	.	. 
-	,	, 
9	8	8
 76 43 HGGsG   (F:9G;G"G6H	H:G	G	"G3	6H		H	H-	c                $    V ^8  d   QhR\         /# r	   r   )r   s   "r   r   r   H  s     5 5# 5r   c                 .    \        \        R,          4      # )zGet path to context file.r  )r   r7   r   r   r   get_context_pathr#  H  s    z3344r   )   r   )N)NNN)__doc__r  r4   r:   pathlibr   typingr   r   r   homer7   r/   r=   rp   r   r   r  r  r   r#  r   r   r   <module>r)     sn    ,  	    YY[8#g-<uD
862jZ[|-`Md'8T5r   