
    duj              	          d dl Z d dlZd dlZd dlmZ d dlmZmZ  ed      Z ed      Z	e	j                  d        ed      Zej                  d       d	Z ej                  e      5 Zej                  d
       ej!                          ej                  d      j#                         Zddd       d Zd ZeD  cg c]  } | s e|        c} Z ed ee       dd        ed      5 ZeD cg c]  }ej3                  e|       c}Z ee      D ]  Z edej9                         d        	 ddd        ej                  e      5 Z edej                  d      jA                         d    dej                  d      jA                         d    d       ddd       y# 1 sw Y   xY wc c} w c c}w # e$ rZ ed ee      d       Y dZ[dZ[ww xY w# 1 sw Y   xY w# 1 sw Y   yxY w)    N)Path)ThreadPoolExecutoras_completedz(/opt/struktur/lead-engine/email_agent.dbz,/home/hermes/lead-engine-german-review-tasksT)exist_okz,/opt/struktur/lead-engine/german-review-runsz!/home/hermes/.local/bin/hermesvpsa  CREATE TABLE IF NOT EXISTS email_evaluations_v2 (
      id INTEGER PRIMARY KEY AUTOINCREMENT, prospect_id INTEGER NOT NULL UNIQUE,
      relevance REAL, problem_concreteness REAL, benefit_clarity REAL, credibility REAL,
      individualization REAL, recipient_perspective REAL, opening REAL, brevity REAL,
      cta REAL, spam_feel REAL, overall_score REAL, verdict TEXT,
      strongest_point TEXT, biggest_risk TEXT, improvement TEXT,
      would_reply TEXT, reply_reason TEXT, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP)zISELECT project_id,title,customer_problem,source_file FROM product_catalogc                    | \  }}}}t        j                  t              5 }|j                  d      D cg c]  }|d   	 }}|j                  d|f      D cg c]  }t	        t        ||             }	}d d d        t        | dz  }
t        | dz  }	D cg c]"  }dD ci c]  }||j                  |       c}$ }}}d| d|xs d	 d
| dt        |	       d|
 dt        j                  |dd       d}|j                  |d       ||||
t        |	      fS c c}w c c}w # 1 sw Y   xY wc c}w c c}}w )NzPRAGMA table_info(prospects_v2)   z9SELECT * FROM prospects_v2 WHERE project_id=? ORDER BY idz.jsonz.txt)
idcompanyindustrylocationwebsitecontact_pagecompany_sizeneed_signalsfit_rationalesources_jsonz?AUFTRAG: Bearbeite exakt diese Mallorca-Leads fuer das Projekt z.
Projektproblem:  z

Dossier: a  

Fuer JEDEN Lead:
1. Uebersetze Branche, Fit-Begruendung, Bedarfssignale und Quellen-Claims sauber ins Deutsche. URLs unveraendert lassen.
2. Schreibe eine kurze individuelle deutsche Erstkontakt-E-Mail, nur auf belegten Daten basierend.
3. Bewerte die E-Mail kritisch aus Sicht des Empfaengers auf 0-10: Relevanz, Problemkonkretheit, Nutzenklarheit, Glaubwuerdigkeit, Individualisierung, Empfaengerperspektive, Einstieg, Kuerze, CTA, geringes Spamgefuehl.
4. Gib Gesamtscore, Urteil, staerksten Punkt, groesstes Risiko, konkrete Verbesserung sowie 'Wuerde ich antworten?' = Ja/Vielleicht/Nein mit Begruendung.
Keine erfundenen Ansprechpartner, Referenzen, Preise oder Erfolge. Kein Versand.
Ausgabe NUR valides JSON als Array mit exakt z Objekten nach z.
Felder: prospect_id, industry_de, fit_rationale_de, need_signals_de(array), sources_de(array mit url,source_type,claim), subject, body, evaluation(object).
LEADS:
F   )ensure_asciiindent
utf-8encoding)sqlite3connectDBexecutedictzipOUT_DIRTASK_DIRgetlenjsondumps
write_text)rowpidtitleproblemsource_fileconxcolsrleadsouttasklkcompactprompts                   2/home/hermes/lead-engine-germanize-draft-review.py	build_jobr9      s|   "%!Cgk		 {KK(IJKqadKK*-++6qsvrx*yzQtCQK zz{ 	3%uCHuD\$9t jo  p  ef  #_  `Qaaj  `  pG  pNug VB{;- 8. /2%j\ N		Ga	89
?F 	OOFGO,uT#c%j((! Lz{ { `  ps@   D*D D*D%4D*	D;$D6=D; 
D**D36D;c                    | \  }}}}}t        j                  t        dd| dgt         j                  t         j                  dd      }|j                         s||ddfS t        j                  |j                  d	
            }t        |t              rt        |      |k7  r'||ddt        |t              rt        |      nd d| fS t        j                  t              5 }|j                  d|f      D 	ch c]  }	|	d   	 }
}	|D ]  }t!        |d         }||
vrt#        d|       |j                  dt%        |j'                  dd            j)                         t%        |j'                  dd            j)                         t        j*                  |j'                  dg       d      t        j*                  |j'                  dg       d      |f       |j                  d||t%        |j'                  dd            j)                         t%        |j'                  dd            j)                         f       |j'                  d      xs i }dD cg c]  }|j'                  |       }}|j                  d|g|z           |j-                          d d d        ||ddt        |       fS c c}	w c c}w # 1 sw Y   %xY w) Nz-zzLies zg vollstaendig und fuehre den Auftrag aus. Schreibe nur die verlangte JSON-Datei. Keine Kontaktaufnahme.Ti  )stdoutstderrtexttimeoutFz	no outputr   r   zwrong count ?/z.SELECT id FROM prospects_v2 WHERE project_id=?r   prospect_idzforeign id zxUPDATE prospects_v2 SET industry=?,fit_rationale=?,need_signals=?,sources_json=?,updated_at=CURRENT_TIMESTAMP WHERE id=?industry_der   fit_rationale_deneed_signals_de)r   
sources_deab  INSERT INTO email_drafts_v2(prospect_id,project_id,subject,body,status,generated_by,updated_at)
              VALUES(?,?,?,?,"draft","hermes",CURRENT_TIMESTAMP)
              ON CONFLICT(prospect_id) DO UPDATE SET subject=excluded.subject,body=excluded.body,project_id=excluded.project_id,status="draft",generated_by="hermes",updated_at=CURRENT_TIMESTAMPsubjectbody
evaluation)	relevanceproblem_concretenessbenefit_claritycredibilityindividualizationrecipient_perspectiveopeningbrevitycta	spam_feeloverall_scoreverdictstrongest_pointbiggest_riskimprovementwould_replyreply_reasona  INSERT INTO email_evaluations_v2(prospect_id,relevance,problem_concreteness,benefit_clarity,credibility,individualization,recipient_perspective,opening,brevity,cta,spam_feel,overall_score,verdict,strongest_point,biggest_risk,improvement,would_reply,reply_reason,updated_at)
              VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)
              ON CONFLICT(prospect_id) DO UPDATE SET relevance=excluded.relevance,problem_concreteness=excluded.problem_concreteness,benefit_clarity=excluded.benefit_clarity,credibility=excluded.credibility,individualization=excluded.individualization,recipient_perspective=excluded.recipient_perspective,opening=excluded.opening,brevity=excluded.brevity,cta=excluded.cta,spam_feel=excluded.spam_feel,overall_score=excluded.overall_score,verdict=excluded.verdict,strongest_point=excluded.strongest_point,biggest_risk=excluded.biggest_risk,improvement=excluded.improvement,would_reply=excluded.would_reply,reply_reason=excluded.reply_reason,updated_at=CURRENT_TIMESTAMPzupdated )
subprocessrunHERMESPIPESTDOUTexistsr%   loads	read_text
isinstancelistr$   r   r   r   r   int
ValueErrorstrr#   stripr&   commit)jobr)   r*   r3   r2   npdatar-   r0   validdlead_ider5   valss                   r8   run_jobrr   (   s   Cd3qnnfTE$  0W  #X  Y  ak  ap  ap  xB  xI  xI  OS  \`  aA::<E% ;;	CMM7M3	4Dd4 CIqLU5<eoptuyezX[\`Xa  AD  XE  EF  GH  FI  JJ  :J  3J		  [[)Y[^Z`abqtbb 	p
A-()Ge#:G96M+N%NKK  SAEE-+,224c!%%@RSU:V6W6]6]6_

155!226EJDJJWXW\W\]ijlWm  |A  MB  DKTL M KK E s3quuYr2399;CfR@P<Q<W<W<YZ\ eeL!'RA %a  bq!%%(  bD  bKK `
 b
i
  a
j
  k
o
  a
o
p
	p
 	

#$ uTHSYK000# c b s+   #K 9J6EK J;1+K 6
K  K	zSTART projects=z max_parallel=3)flush   )max_workersRESULTERRORzdrafts=z$SELECT COUNT(*) FROM email_drafts_v2zreviews=z)SELECT COUNT(*) FROM email_evaluations_v2)!r%   r   rZ   pathlibr   concurrent.futuresr   r   r   r"   mkdirr!   r\   r   r-   r   rh   fetchallprojectsr9   rr   jobsprintr$   exsubmitfutsfutresult	Exceptionrp   reprfetchone)rk   js   00r8   <module>r      s        ?23	<	=x~~W[~?\;<gmmUYm>Z*W__R 	qCKK ] ^ JJL[[dennpH	q)(14 %*qil* D	{/2 >A& A"(,	-1"))GA
	-DD! A8CJJLt4AA
 W__R uC	)CKK FGPPRSTUWabebmbm  oZ  c[  cd  cd  cf  gh  ci  pt  uu u	q 	qp + 
. @uWT!W4@@@	A A
u usn   +AF)>F5
F50G"5F:G"F?5G"AG.)F2:G"?GGG"GG""G+.G7