+
    jD                       R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ^ RIHt ^ RIHt ^ RIHtHtHt ^ RItRtRt]P,                  ! R	4      tR
 R ltR R lt]! ]4      P7                  4       P8                  t]R,          t]R,          t]R,          t ]R,          t!^t"RR.t#RR.t$0 RkRkRkRkRkRkRkRkRkRkR kR!kR"kR#kR$kR%kR&kR'kR(kR)kR*kR+kR,kR-kR.kR/kR0kR1kR2kR3kR4kR5kR6kR7kR8kR9kR:kR;kR<kR=kR>kR?kR@kRAkRBkRCkRDkREkRFkRGkRHkRIkRJkRKkRLkRMkRNkROkRPkRQkRRkRSkRTkRUkRVkRWkRXkRYkRZkR[kR\kR]kt%] ! R^ R_4      4       t&R` Ra lt'Rb Rc lt(Rd Re lt)Rf Rg lt*Rh Ri lt+Rj Rk lt,Rl Rm lt-RRn Ro llt.RRp Rq llt/Rr Rs lt0 ! Rt Ru4      t1Rv Rw lt2Rx Ry lt3Rz R{ lt4RR| R} llt5R~ R lt6RR/R R llt7R R lt8R t9]:R8X  d
   ]9! 4        R# R# )ap  
03_publish_to_wordpress.py (Beta 0.5)

Watches a transcripts folder for new .txt files. If a transcript begins with a
spoken "Meta note" / "System note" block AND includes:
  - "create blog post" OR "create a blog post"
then it automatically creates a WordPress DRAFT via the WP REST API.

It extracts:
  - title (spoken "Title:" or derived from body)
  - excerpt (spoken "Excerpt:" or derived)
  - tags (spoken "Tags:" or derived keywords; creates tags if missing)

Categories: intentionally NOT set (leave unassigned).

Beta 0.5 addition:
- Strips the transcription footer/tagline block from WordPress output by default.
)annotationsN)	dataclass)datetime)Path)ListOptionalTuplez[[TRANSCRIBE_FOOTER_START]]z[[TRANSCRIBE_FOOTER_END]]z^\[\d{2}:\d{2}(?::\d{2})?\]\s*c                    V ^8  d   QhRRRR/#    textstrreturn )formats   "03_publish_to_wordpress.py__annotate__r   +   s     S S3 S3 S    c                j    R P                  R V P                  4        4       4      P                  4       # )
c              3  N   "   T F  p\         P                  R V4      x  K  	  R# 5i) N)TIMESTAMP_REsub).0lns   & r   	<genexpr>#strip_timestamps.<locals>.<genexpr>,   s"     J8I"\%%b"--8Is   #%)join
splitlinesstripr   s   &r   strip_timestampsr"   +   s'    99J8IJJPPRRr   c                    V ^8  d   QhRRRR/# r
   r   )r   s   "r   r   r   .   s      S S r   c                    \         V 9   d9   \        V 9   d.   V P                  \         ^4      ^ ,          P                  4       pV# V P                  4       #    )FOOTER_START
FOOTER_ENDsplitrstrip)r   pres   & r   strip_footer_blockr,   .   s@    t
d 2jjq)!,335
;;=r   _02_Transcripts_LOGSwp_publish_state.jsonwp_publish.logz\bcreate\s+blog\s+post\bz\bcreate\s+a\s+blog\s+post\bz\bmeta\s+note\bz\bsystem\s+note\baanandareasatbebecausebeenbutbycancoulddiddodoesforfromhadhashaveheherhimhishowiifinintoisititsjustlikememoremostmynonotofonorouroutsosomethanthatthetheirthemthentherethesetheythistoupwaswewerewhatwhenwherewhichwhowhywithyouyourc                  J    ] tR t^Tt$ R]R&   R]R&   R]R&   R]R&   R]R	&   R
tR# )
ParsedMetaboolshould_postOptional[str]titleexcerptzOptional[List[str]]tagsr   bodyr   N)__name__
__module____qualname____firstlineno____annotations____static_attributes__r   r   r   rz   rz   T   s    

Ir   rz   c               $    V ^8  d   QhRRRRRR/# )r   msgr   log_filer   r   Noner   )r   s   "r   r   r   ]   s!      S D T r   c                D   VP                   P                  R R R7       \        P                  ! 4       P	                  R4      pRV RV  R2pVP                  RRR7      ;_uu_ 4       pVP                  V4       R	R	R	4       \        VR
R7       R	#   + '       g   i     L; i)Tparentsexist_okz%Y-%m-%d %H:%M:%S[z] r   r1   utf-8encodingNr   )end)parentmkdirr   nowstrftimeopenwriteprint)r   r   tslinefs   &&   r   logr   ]   s|    OO$6		 	 !4	5Brd"SED	sW	-	-	 
.	$B 
.	-s   &BB	c                    V ^8  d   QhRRRR/# r
   r   )r   s   "r   r   r   f   s     M Mc Mc Mr   c                l    \         P                  ! V P                  R RR7      4      P                  4       # )r   ignore)errors)hashlibsha256encode	hexdigestr!   s   &r   sha256_textr   f   s'    >>$++gh+?@JJLLr   c                    V ^8  d   QhRRRR/# )r   
state_filer   r   dictr   )r   s   "r   r   r   j   s      4 D r   c                    V P                   P                  R R R7       V P                  4       '       d(    \        P                  ! V P                  RR7      4      # / #   \         d    / u # i ; i)Tr   r   r   )r   r   existsjsonloads	read_text	Exception)r   s   &r   
load_stater   j   si    D48	::j22G2DEE I  	I	s   %A A-,A-c               $    V ^8  d   QhRRRRRR/# )r   r   r   stater   r   r   r   )r   s   "r   r   r   t   s&     Y Y4 Y Y Yr   c                    V P                   P                  R R R7       V P                  \        P                  ! V^R R7      RR7       R# )Tr   )indent	sort_keysr   r   N)r   r   
write_textr   dumps)r   r   s   &&r   
save_stater   t   s<    D48$**U1EPWXr   c                    V ^8  d   QhRRRR/# )r   tagr   r   r   )r   s   "r   r   r   y   s      s s r   c                    V P                  4       P                  4       p\        P                  ! R RV4      p\        P                  ! RRV4      P                  4       pV# )z[^a-z0-9\s\-_/]+r   \s+ )r    lowerrer   )r   ts   & r   normalize_tagr   y   sI    		A
"B*A
vsA$$&AHr   c                    V ^8  d   QhRRRR/# )r   r   r   r   	List[str]r   )r   s   "r   r   r      s     3 3# 3) 3r   c                   \         P                  ! R RV P                  4       4      p V '       g   . # \         P                  ! RV 4      pV Uu. uF*  q"P                  4       '       g   K  VP                  4       NK,  	  up# u upi )r   r   z(?<=[.!?])\s+)r   r   r    r)   )r   partsps   &  r   split_sentencesr      sY    66&#tzz|,D	HH%t,E$2u!	IAGGIu222s   A?(A?c                    V ^8  d   QhRRRR/# )r   r   r   r   r   )r   s   "r   r   r      s     
% 
%s 
%s 
%r   c                @   V P                  4        Uu. uF*  qP                  4       '       g   K  VP                  4       NK,  	  ppV'       d
   V^ ,          MRp\        V4      pV'       d
   V^ ,          MTpVP                  4       P                  R4      P                  4       p\        P                  ! RRV4      p\        V4      ^H8  d   VR,          P                  4       R,           p\        P                  ! RRV4      P                  4       pT;'       g    R# u upi )	    r   u   "“”r   r   :NH   N   …z[.!?]+$Untitled Draft)r   r    r   r   r   lenr*   )r   r   lines	candidatesentsr~   s   &     r   derive_titler      s    "&//"3B"3BxxzZRXXZ"3EB!arII&EE!H9EKKM	*002EFF63&E
5zBc
!!#e+FF:r5)//1E$$$$ Cs
   DDc               $    V ^8  d   QhRRRRRR/# )r   r   r   	max_charsintr   r   )r   s   "r   r   r      s!        s r   c                   \        V 4      pV'       d   R P                  VR,          4      MV P                  4       p\        P                  ! RR V4      P                  4       p\        V4      V8  d   VRV P                  4       R,           pV# )r   :Nr   Nr   Nr   )r   r   r    r   r   r   r*   )r   r   r   r   s   &&  r   derive_excerptr      sn    D!E%*chhuRy!

GffVS'*002G
7|i*9%,,.6Nr   c               $    V ^8  d   QhRRRRRR/# )r   r   r   max_tagsr   r   r   r   )r   s   "r   r   r      s!     " "c "S " "r   c                   V P                  4       p\        P                  ! R V4      p/ pV FY  pV\        9   d   K  VP	                  R4      p\        V4      ^8  g   V\        9   d   K>  VP                  V^ 4      ^,           WE&   K[  	  \        VP                  4       R R7      pVRV  UUu. uF  w  rx\        V4      NK  	  p	ppV	 U
u. uF  q'       g   K  V
NK  	  up
# u uppi u up
i )z[a-z0-9][a-z0-9\-_/]{2,}z-_/c                (    V ^,          ) V ^ ,          3# r%   r   )kvs   &r   <lambda>derive_tags.<locals>.<lambda>   s    2a5&"Q%r   )keyN)
r   r   findall	STOPWORDSr    r   getsorteditemsr   )r   r   r   wordsfreqwrankedk_r   r   s   &&         r   derive_tagsr      s    ::<DJJ2D9ED	>GGENq6A:i((1a.1$  DJJL&@AF)/	):;):M!):D;!t!qAAt!! <!s   -C!
	C'C'c                    V ^8  d   QhRRRR/# )r   r   r   r   rz   r   )r   s   "r   r   r      s     *c *cC *cJ *cr   c                
  aaa \        V 4      p \        V 4      p V P                  4       oR P                  SR\         4      P                  4       o\        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      p\        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      p\        T;'       d    T4      pR V3R llpV! R4      pV! R	4      pV! R
4      pRpV'       dC   \        P                  ! RV4       U	u. uF!  p	\        V	4      '       g   K  \        V	4      NK#  	  pp	^ p
Rp\        SR\         4       F  w  po\        P                  ! RS\        P                  R7      '       gI   \        ;QJ d#    V3R l\         4       F  '       g   K   RM	  RM! V3R l\         4       4      '       d   RpV'       g   K  SP!                  4       R8X  g   K  V^,           p
 M	  R P                  SV
R 4      P!                  4       pV'       g   \#        V4      pV'       g   \%        V4      pV'       g   \'        V4      p\)        W5WhVR7      # u up	i )r   Nc              3  r   <"   T F,  p\         P                  ! VS\         P                  R 7      x  K.  	  R# 5iflagsNr   searchIr   patheads   & r   r   ,parse_transcript_for_meta.<locals>.<genexpr>   s%     Lms"))CRTT22m   47TFc              3  r   <"   T F,  p\         P                  ! VS\         P                  R 7      x  K.  	  R# 5ir   r   r   s   & r   r   r      s%     PBIIc4rtt44r   c                    V ^8  d   QhRRRR/# )r   patternr   r   r}   r   )r   s   "r   r   /parse_transcript_for_meta.<locals>.__annotate__   s     1 1C 1M 1r   c                   < \         P                  ! V R P                  SR\         4      \         P                  \         P
                  ,          R7      pV'       d    VP                  ^4      P                  4       # R# )r   Nr   )r   r   r   META_SCAN_MAX_LINESr   Mgroupr    )r   mr   s   & r   
find_field-parse_transcript_for_meta.<locals>.find_field   sT    IIgtyy/C0C)DERTTTVTXTX[Y%&qwwqz!0D0r   z^\s*title\s*:\s*(.+)\s*$z^\s*excerpt\s*:\s*(.+)\s*$z^\s*tags\s*:\s*(.+)\s*$z[,\|;]+z(meta\s+note|system\s+note)r   c              3  r   <"   T F,  p\         P                  ! VS\         P                  R 7      x  K.  	  R# 5ir   r   )r   r   r   s   & r   r   r      s9       LC  sBmnBIIVWY[cecgcgLhLh  sBr   r   )r|   r~   r   r   r   )r,   r"   r   r   r  r   anyGATE_PATTERNSACTION_PATTERNSr{   r   r)   r   	enumerater   r   r    r   r   r   rz   )r   gate_ok	action_okr|   r  r~   r   tags_rawr   r   body_start_idxseen_gate_or_actionrK   r   r   r   r   s   &             @@@r   parse_transcript_for_metar     s   d#DD!DOOE99U//01779DcLmLcccLmLLGPPPPPIw,,9-K1 1 23E67G45HD*,((:x*H]*HQMZ[L\ a *H]N5!5"5672993RrttDD  LC  sB  LC  LC  sB  LC  IC  IC"&288:#3UN 8 99U>?+,224DT" &4 +G]abb) ^s   -J J c                  F    ] tR t^tR R ltR R ltR R ltR R ltR	tR
# )WordPressClientc               (    V ^8  d   QhRRRRRRRR/# )r   site_urlr   usernameapp_passwordr   r   r   )r   s   "r   r   WordPressClient.__annotate__   s)     ! ! ! !3 !RV !r   c                	v    VP                  R 4      V n        V P                   R2V n        W#3V n        W@n        R# )/z/wp-json/wp/v2N)r*   r  api_baseauthr   )selfr  r  r  r   s   &&&&&r   __init__WordPressClient.__init__   s3     ,==/8,	 r   c                    V ^8  d   QhRRRR/# )r   methodr   pathr   )r   s   "r   r   r     s      3 c r   c                	    V P                    V 2p\        P                  ! W3R V P                  R^/VB pVP                  R8  d-   \        RVP                   RVP                  R,           24      hV# )r  timeouti  zWP API error z: :Ni  N)r  requestsrequestr  status_codeRuntimeErrorr   )r  r!  r"  kwargsurlresps   &&&,  r   _reqWordPressClient._req   sr    v&R$))RRR6Rs"t/?/?.@499T?BSTUUr   c                    V ^8  d   QhRRRR/# )r   	tag_namesr   r   z	List[int]r   )r   s   "r   r   r     s      	 i r   c                	   . pV EF2  pVP                  4       pV'       g   K  V P                  R R\        P                  P	                  V4       R24      pVP                  4       pRpV Fa  p\        VP                  RR4      4      P                  4       P                  4       VP                  4       8X  g   KO  \        VR,          4      p M	  VfT   V P                  RRRV/R	7      p	\        V	P                  4       R,          4      p\        R
V RV R2V P                  4       VP                  V4       EK5  	  \        4       p
. pV F-  pW9  g   K  V
P                  V4       VP                  V4       K/  	  V# )GETz/tags?search=z&per_page=100Nnamer   idPOSTz/tagsr   zCreated new tag: 'z' (id=))r    r,  r%  utilsquoter   r   r   r   r   r   r   appendsetadd)r  r/  idsr2  cleanr+  r   tag_idrP   resp2seenr^   rK   s   &&           r   ensure_tag_idsWordPressClient.ensure_tag_ids   s>   DJJLE99UmHNN4H4H4O3PP]$^_DIIKEFrvvfb)*00288:ekkmK D]F 
 ~		&'	HUZZ\$/0(vfXQ?OJJv' * uA}

1  
r   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )	r   r~   r   contentr   r   r   r   zTuple[int, str]r   )r   s   "r   r   r    s0      s S 3 i \k r   c                	*   V'       d   V P                  V4      M. pR VRVRVRR/pV'       d   WVR&   V P                  RRVR7      pVP                  4       p\        VR	,          4      p	VP	                  R
4      ;'       g    V P
                   RV	 2p
W3# )r~   rD  r   statusdraftr   r4  z/postsr5  r3  linkz/?p=)rA  r,  r   r   r   r  )r  r~   rD  r   r   tag_idspayloadr+  datapost_idrH  s   &&&&&      r   create_draft_post!WordPressClient.create_draft_post  s    /3$%%d+Uwwg	&
 %FOyyy8yy{d4j/xxBBdmm_D	#B}r   )r  r  r   r  N)	r   r   r   r   r  r,  rA  rM  r   r   r   r   r  r     s    !> r   r  c                    V ^8  d   QhRRRR/# )r   r2  r   r   r   )r   s   "r   r   r     s      3 3 r   c                    \         P                  P                  V R 4      P                  4       pV'       g   \	        RV  24      hV# )r   z'Missing required environment variable: )osenvironr   r    
SystemExit)r2  vs   & r   get_env_requiredrU    s:    


tR &&(AB4&IJJHr   c                    V ^8  d   QhRRRR/# )r   valuer   r   r   )r   s   "r   r   r   !  s     
0 
0s 
0s 
0r   c                    V P                  4       P                  4       p \        P                  ! RRV 4      p \        P                  ! RRV 4      P                  R4      # )zNormalize a site label into an env-prefix style key.

Examples:
  - "berchman" -> "BERCHMAN"
  - "bert.forsale" -> "BERT_FORSALE"
  - "Bert Mahoney" -> "BERT_MAHONEY"
z
[^A-Z0-9]+r   z_+)r    upperr   r   )rW  s   &r   _normalize_site_keyrZ  !  sH     KKM!EFF=#u-E66%e$**3//r   c               $    V ^8  d   QhRRRRRR/# )r   prefixr   r2  r   r   )r   s   "r   r   r   .  s&     O O3 Oc Oc Or   c                z    \         P                  P                  \        V 4       R V 2R4      P	                  4       # )r   r   )rQ  rR  r   rZ  r    )r\  r2  s   &&r   _get_site_prefixed_envr^  .  s2    ::>>0894&A2FLLNNr   c                    V ^8  d   QhRRRR/# )r   site_keyr}   r   ztuple[str, str, str, str]r   )r   s   "r   r   r   2  s     & &] &>W &r   c           	        R\         P                  P                  RR4      P                  4       R\         P                  P                  RR4      P                  4       R\         P                  P                  RR4      P                  4       /p\	        VP                  4       4      '       d   VR,          VR,          VR,          R3# . pV \         P                  P                  R	4      \         P                  P                  R
4      \         P                  P                  R4      3 F;  pV'       g   K  \        V4      pV'       g   K"  WB9  g   K*  VP                  V4       K=  	  V FL  p\        VR4      p\        VR4      p\        VR4      pV'       g   K1  V'       g   K;  V'       g   KE  WgW R23u # 	  \        R4      h)a#  Resolve WordPress credentials from either generic or site-prefixed env vars.

Priority:
  1) Generic WP_SITE_URL / WP_USERNAME / WP_APP_PASSWORD
  2) Explicit site key from --site-key or WP_SITE_KEY / WP_PROFILE / WP_SITE_PREFIX
  3) Any site-prefixed vars already loaded in the environment
r  WP_SITE_URLr   r  WP_USERNAMEr  WP_APP_PASSWORDzgeneric WP_*WP_SITE_KEY
WP_PROFILEWP_SITE_PREFIXWP_URLWP_USERz_WP_*zMissing WordPress credentials. Set WP_SITE_URL/WP_USERNAME/WP_APP_PASSWORD or set WP_SITE_KEY (or pass --site-key) plus <SITEKEY>_WP_URL/<SITEKEY>_WP_USER/<SITEKEY>_WP_APP_PASSWORD.)
rQ  rR  r   r    allvaluesrZ  r9  r^  rS  )	r`  generic
candidatesr   
normalizedr\  r  r  r  s	   &        r   resolve_wp_credentialsro  2  si    	BJJNN="5;;=BJJNN="5;;=

'8"=CCEG
 7>>z"GJ$79PR```J


}%


|$


'(		 9,Y7Jzj:!!*- )&(;)&)<-f6GH8\\|xu5EEE  	r r   c               $    V ^8  d   QhRRRRRR/# )r   rW  r   envzdict[str, str]r   r   )r   s   "r   r   r   [  s&     B BC Bn B Br   c                D   a R V3R llp\         P                  ! RW 4      # )zAExpand simple ${NAME} references using already-loaded/env values.c                    V ^8  d   QhRRRR/# )r   matchzre.Match[str]r   r   r   )r   s   "r   r   &_expand_env_refs.<locals>.__annotate__]  s     7 7M 7c 7r   c                d   < SP                  V P                  ^4      V P                  ^ 4      4      # r%   )r   r  )rt  rq  s   &r   repl_expand_env_refs.<locals>.repl]  s$    wwu{{1~u{{1~66r   z\$\{([A-Za-z_][A-Za-z0-9_]*)\})r   r   )rW  rq  rw  s   &f r   _expand_env_refsry  [  s!    7 7 663TAAr   overrideFc               $    V ^8  d   QhRRRRRR/# )r   r"  r   rz  r{   r   r   r   )r   s   "r   r   r   c  s!     $ $ $4 $D $r   c                  V P                  4       '       g   R# \        \        P                  4      pV P	                  RRR7      P                  4        EFC  pVP                  4       pV'       d   VP                  R4      '       d   K5  VP                  R4      '       d   V\        R4      R P                  4       pRV9  d   Kq  VP                  R^4      w  rVVP                  4       p\        P                  ! RV4      '       g   K  V\        P                  9   d$   V'       g   \        P                  V,          W%&   K   \        P                  ! VR	R	R
7      pV'       d   RP                  V4      MRp\        W4      pV\        P                  V&   WV&   EKF  	  R#   \         d2    TP                  4       P                  R4      P                  R4      p Ldi ; i)aj  Load a small KEY=VALUE env file without logging values.

By default, existing environment variables win, so launchd/shell-provided
secrets are not overwritten by local config files. Pass ``override=True`` for
canonical secret files that should refresh stale inherited process env vars.
Lines may use optional `export`, comments, and single/double-quoted values.
Nr   r   r   r   #zexport =z[A-Za-z_][A-Za-z0-9_]*T)commentsposixr   r   "')r   r   rQ  rR  r   r   r    
startswithr   r)   r   	fullmatchshlexr   
ValueErrorry  )	r"  rz  loadedraw_liner   r   	raw_valuer   rW  s	   &$       r   load_env_filer  c  s`    ;;=="**FNNGHNEPPR~~ts++??9%%I(..0Dd?C+iik||5s;;"**X**S/FK	<KK	DEE',CHHUO"E !/

3s1 S(  	<OO%++C066s;E	<s     F!F9GGc                    V ^8  d   QhRRRR/# )r   transcripts_dirr   r   z
List[Path]r   )r   s   "r   r   r     s     M M4 MJ Mr   c                    \        V P                  R 4       Uu. uF  qP                  4       '       g   K  VNK  	  up4      # u upi )z*.txt)r   globis_file)r  r   s   & r   iter_transcript_filesr    s4    o227;K;yy{11;KLLKs
   AAc                 
   \         P                  ! R R7      p V P                  R\        \        4      R7       V P                  R\        \
        4      R7       V P                  R\        \        R,          4      RR7       V P                  R	\        P                  P                  R
R4      RR7       V P                  R\        ^R7       V P                  RRR7       V P                  4       p\        \        VP                  4      P                  4       4       \        R4      \        P                   ! 4       R,          R,          3 F  p\        VRR7       K  	  \        VP"                  4      P                  4       P%                  4       p\        VP&                  4      P                  4       P%                  4       pVR,          pVR,          pVP)                  RRR7       VP)                  RRR7       \+        VP,                  4      w  rxr\/        WxW4      p\1        V4      pVP3                  R/ 4       \5        RV
 2V4       \5        RV 2V4       \5        RVP6                  '       d   RMR R VP8                   R!2V4         \;        V4       EFI  p\        V4      pVP=                  R"R#R$7      p\?        V4      pVR,          P                  V4      pV'       d   VP                  R%4      V8X  d   Ke  \A        V4      pVPB                  '       gC   R%VR&R'R(\D        PF                  ! 4       PI                  R)R*7      /VR,          V&   \K        Wl4       K  \5        R+VPL                   2V4       \5        R,VPN                   2V4       \5        R-R.PQ                  VPR                  ;'       g    . 4       2V4       VP6                  '       dP   R%VR&R/R0VPN                  R(\D        PF                  ! 4       PI                  R)R*7      /VR,          V&   \K        Wl4       EK  TPU                  VPN                  ;'       g    R1VPV                  VPX                  ;'       g    RVPR                  ;'       g    . R27      w  pp\5        R3V R4V 2V4       R%VR&R5R6VR7VR0VPN                  R8\D        PF                  ! 4       PI                  R)R*7      /VR,          V&   \K        Wl4       EKL  	  \Z        P\                  ! VP8                  4       EK~    \^         d    \5        R9T4        R:# \`         dF   p\5        R;T 2T4       \Z        P\                  ! \c        ^TP8                  4      4        R:p?EK  R:p?ii ; i)<z9Auto-publish selected transcripts to WordPress as drafts.)descriptionz--transcripts-dir)defaultz	--log-dirz
--env-filez
config.envz3Optional KEY=VALUE env file (default: ./config.env))r  helpz
--site-keyre  r   zBOptional site selector like BERTMAHONEY, BERCHMAN, or BERT_FORSALEz--poll-seconds)typer  z	--dry-run
store_true)actionz/Users/bertmahoney/.hermes/.envz.hermesz.envT)rz  r0   r/   r   postedz"Using WordPress credentials from: zWatching transcripts folder: zMode: zDRY RUNLIVEz | Poll every sr   r   r}  sharF  ignored_no_intent
updated_atseconds)timespeczIntent detected in: z	  Title: z  Tags: z, dry_run_would_postr~   r   )r~   rD  r   r   zDraft created: post_id=z | posted_draftrL  rH  	posted_atzStopped by user (Ctrl+C).NzERROR: )2argparseArgumentParseradd_argumentr   DEFAULT_TRANSCRIPTS_DIRDEFAULT_LOG_DIR
SCRIPT_DIRrQ  rR  r   r   
parse_argsr  r   env_file
expanduserhomer  resolvelog_dirr   ro  r`  r  r   
setdefaultr   dry_runpoll_secondsr  r   r   r  r|   r   r   	isoformatr   r2  r~   r   r   rM  r   r   timesleepKeyboardInterruptr   max)parserargs
hermes_envr  r  r   r   r  r  r  resolved_fromwpr   r"  r   r   digestalreadyparsedrL  rH  es                         r   mainr    s   $$1lmF
+S9P5QR
S-AB
c*|2K.L  TI  J
bjjnn]B.O  W[  \
(sA>
L9D$t}}%0023./		i&(
 	j40	 4//0;;=EEGO4<< ++-557G))H22J$6MM$M.6LT]]6[3H	\	DBz"E	Xr"
,]O<hG
''898D&dlll7~dFWFWEXXYZ\de
=	2-o>$i~~wx~H$T*/--c2w{{51V;248)))v "5$hlln&>&>	&>&R,E(OC(
 z1*499+6Ai~.9htyy):):;<=xH<<<v "6$hlln&>&>	&>&R	,E(OC( z1 " 4 4 ,,::*:"KK"NN00b**	 !5 ! -gYc$@(K 6nwDV\\!9!99!9!M(h$ :-g ?j JJt(()  	+X6 	2'!x(JJs1d//011	2s?   ET A,T 9T T .BT U,U,&U,'9U''U,__main__)   )   )N);__doc__
__future__r   r  r   r   rQ  r   r  r  dataclassesr   r   pathlibr   typingr   r   r   r%  r'   r(   compiler   r"   r,   __file__r  r   r  r  r  DEFAULT_STATE_FILEDEFAULT_LOG_FILEr  r
  r	  r   rz   r   r   r   r   r   r   r   r   r   r  r  rU  rZ  r^  ro  ry  r  r  r  r   r   r   r   <module>r     s!  & #    	 	   !   ( (  -*
zz;<S (^##%,,
$'88 w&$'>> "%55    # 
"#'(1289>?C	
#$)*0167<=C 	 
   ! "% &* +/ 06 7; <@ AF 	 	 	 	 %	 &*	 +/	 05	 6:	 ;?	 @D	
 

 
 
 
 #
 $*
 +0
 18
 9?
 @F    " #' (, -2 37 8> ?E    ! "' (. /4 5;	   MY
3
%" *cZ< <~
0O&RB$% $NMb2J zF r   