
    joO                    (   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
Z
ddlmZ  ed      Z ed      Z ed      Z ed      Zd	Zd
 Zd ZddZd Zd Zd Zd Zd ZddZddZd Zd Zd Zd Zd Z e!dk(  r e" e              y)zDeterministic post-session knowledge review.
Scans all local Hermes profile state DBs, extracts only explicit durable facts,
and writes provenance-bearing project notes. No LLM, no transcript archive.
    )annotationsN)Pathz/home/hermes/.hermesz/opt/obsidian-vaultz0/opt/struktur/session-knowledge-review/review.dbz2/opt/struktur/session-knowledge-review/audit.jsonlzsession-knowledge-review/1.2.0c                 L   t         j                  j                  dd       t        j                  t               } t        j
                  | _        | j                  d       | j                  d       | j                  d       | j                  d       | j                          | S )NTparentsexist_oka  create table if not exists session_reviews (session_key text primary key, session_id text, profile text, source_db text, project text, status text not null, knowledge_items_found integer not null default 0, created integer not null, completed_at real, error text, version text not null)a  create table if not exists semantic_reviews (session_key text primary key, session_id text, profile text, project text, status text not null, knowledge_items_found integer not null default 0, created_at real not null, completed_at real, version text not null, error text)a8  create table if not exists semantic_items (session_key text, claim_id text, project text, subject text, claim text, claim_type text, source_session_id text, source_profile text, source_timestamp real, confidence real, validation_status text, knowledge_action text, target text, primary key(session_key,claim_id))a  create table if not exists agent_reviews (item_key text primary key, semantic_item_id text not null, claim_id text, project text, source_session_id text, source_profile text, review_agent text not null, review_agent_version text not null, reviewed_at real not null, decision text, decision_reason text, decision_confidence real, fact_check_required integer not null default 0, fact_check_status text, final_action text, error text))	STATEparentmkdirsqlite3connectRowrow_factoryexecutecommit)cs    2/opt/struktur/session-knowledge-review/reviewer.pydbr      s    D$/
??5!-AII  ?c  5d  ef  en  en  oD
  eE
  F
G
  F
O
  F
O
  P
N  F
O  PQ  PY  PY  ZO  PP  QR  QY  QY  Q[  cd  \d    c                L   t        j                  dd| xs dj                               t        fddD              ryt        fddD              ry	d
v sdv sdv rydv sdv rydv ryt        fddD              ry|xs dd d j                         }d|v sd|v ryy)Nz[-_]+  c              3  &   K   | ]  }|v  
 y wN .0kts     r   	<genexpr>zproject_for.<locals>.<genexpr>   s     s1Qs   )zmas visual libraryzvisual kuratorzasset groupvariantenlogikzvariant candidateMAS Visual Libraryc              3  &   K   | ]  }|v  
 y wr   r   r   s     r   r    zproject_for.<locals>.<genexpr>   s     |1Q|r!   )zsocial media radarzsocial media agentz	sma radarzaa 045zfacebook propertyzsocial mediazSocial Media Radarz
youtube lmzyoutube videozyoutube audioz
YouTube LMzyoutube research
transkriptzYouTube ResearchventoVentoc              3  &   K   | ]  }|v  
 y wr   r   r   s     r   r    zproject_for.<locals>.<genexpr>   s     I1QIr!   )zworker watcherwachfunktionu   überwachungu   Worker-Überwachungi N  z!/opt/struktur/mas-visual-library/zvisual_library.dbzMAS allgemein)resublowerany)titletextbodyr   s      @r   project_forr1      s     66(3**,-srss	|{||	AA-A1E\!|q08JqLIHIIQfzr6E  "'4/3F$3NVjr   c                    | |||dS )N)claim_id	statement
confidencesource_typer   )cidr4   r5   r6   s       r   claimr8   #   s    I:T_``r   c                B   g }t               }dj                  d |xs dj                         D              }|j                         D ]  }|j                         dv sdv st	        j
                  d      r3t	        j
                  d|      }|r,t        |      dk  r|j                         j                  d	      st        fd
dD              sdv sdv sdv sdv rt	        j                  d      r|j                  d      j                  d      }	dt        j                  |	j                               j!                         dd z   }
|
|vri|j#                  |
       |j%                  | j                         j'                  dd       d|
 d||ddt)        |	      j+                         rdnddd       t	        j                  d      st        fd d!D              sd"vst	        j                  d#      rt	        j,                  d$d|      j/                         }t        |      d%k\  st        |      d&k  s	t        fd'd(D              r|j1                  d)      r2t	        j,                  d*d+t3        j4                  d,|j                                     j/                  d+      dd- }| j                         j'                  dd       d.| }
|
|vs|j#                  |
       |j%                  |
d/||d0d1ddd2d3	        |S )4zExtract explicit, stable claims; this is claim extraction, not summarization.
 Only user-authored durable markers and verifiable production paths qualify.
 
c              3  ^   K   | ]%  }|j                         s|j                          ' y wr   )stripr   xs     r   r    z#semantic_extract.<locals>.<genexpr>*   s"     #^!TUT[T[T]AGGI#^s   --r   z/tmp/debugz\b(job|run|session)[ _-]?id\bz.(/opt/(?:struktur|obsidian-vault)/[^\s`\"\']+)   )-*u   •c              3  &   K   | ]  }|v  
 y wr   r   r   r   lows     r   r    z#semantic_extract.<locals>.<genexpr>/   s!       ZhghZ[_bZb  Zhr!   )z	reporter:status=bittearbeitsauftragz
noch offenzoffen:zverifiziert unter   prüfepruefesollmussliegtpfad	datenbankvaultz ^(die|der|das|hermes|obsidian)\b   z.,)zpath.N   r   .production_pathPATHg
ףp=
?	VALIDATEDSUPPORTED_BY_SESSIONsession_user_instruction)r3   subjectr8   r4   
claim_typer5   validation_statusr6   z:^(die|der|das|hermes|obsidian|der aktuelle|die aktuelle)\bc              3  &   K   | ]  }|v  
 y wr   r   rD   s     r   r    z#semantic_extract.<locals>.<genexpr>4   s!       Y}fgYZ^aYa  Y}r!   )z ist z sind z liegt z bleibt z dient z	 erfolgt z wurde z gilt:?u|   ^(prüfe|pruefe|erstelle|lege|führe|fuehre|behalte|muss|soll|darf|implementiere|aktualisiere|bitte|vor jeder|für |fuer )\bz\s+#   i,  c              3  &   K   | ]  }|v  
 y wr   r   rD   s     r   r    z#semantic_extract.<locals>.<genexpr>6   s       5[!Q#X  5[r!   )znoch zunter anderemz	nicht alsu   häufigbeispielsweiserH   rF   rI   rJ   sollteu   könntekoennterG   :z
[^a-z0-9]+_NFKDF   z.rule.explicit_ruleRULEgQ?REVIEW_REQUIRED)	r3   rY   r8   r4   rZ   r5   r[   r6   knowledge_action)setjoin
splitlinesr,   r*   searchlenlstrip
startswithr-   matchgrouprstriphashlibsha256encode	hexdigestaddappendreplacer   existsr+   r<   endswithunicodedata	normalize)projectsidr.   r/   outseenr0   linempathkeycleanslugrE   s                @r   semantic_extractr   &   s    ce$))#^
7N7N7P#^^T__ IT
jjl#^w#~3STW)XZbII?E!3t9c>$++-":":;L"MVY  Zh  mg  Zh  Wh  ov  z}  o}  CI  MP  CP  Va  eh  Vh  nu  y|  n|  CE  CK  CK  Lo  ps  Ct	
% 4ggnnT[[].K.U.U.WX[Y[.\&\#	oHHSM#**GMMO,C,CC,L+MQse)T_py}  KO  ]c  qu  Y]  ^b  Yc  Yj  Yj  Yl  JU  rH  Wq  r  sXXKCPUX  Y}  l|  Y}  V}  BE  MP  BP  Y[  Ya  Ya  ba  be  Yf	s4	 	&	&	(5	%j"nUS  5[  HZ  5[  2[  di  dr  dr  sv  dw	c+"7"7u{{}"M	N	T	TUX	YZ][]	^D==?""3s+
,F4&9C
$	XXc]3::#PUbgu{  JN  cy  Hb  vG  H  II  	r   c                F   |d   }| d| }| j                  d|f      j                         ry t        j                  d|z   dz   d      }dj	                  d	 |j                  d
|f      D              }t        |d   xs d|      }t        |||d   xs d|      }	d||g dt        j                         d}
	 t        j                         st        d      |	D ]u  }|j                  dd      dk  rd|d<   |
d   j                  |       2t        t        |      ||||d      \  }}||d<   t        |      |d<   |
d   j                  |       w t!        d |
d   D              rdnd}|
d   D ]  }| j                  d||j                  d      ||j                  d      |j                  d       |j                  d!      ||t        j                         |j                  d      |j                  d"      |j                  d      |j                  d      f        ||
d<   | j                  d#|||||t%        |	      t        j                         |dk(  rt        j                         nd t&        |
j                  d      f
       | j)                          t*        j,                  j/                  dd$       t*        j1                  d%d&'      j3                  t5        j6                  |
d()      dz          |
S # t"        $ r }d}||
d<   t        |      |
d<   Y d }~d }~ww xY w)*Nidrc   z2select 1 from semantic_reviews where session_key=?file:?mode=roTurir:   c              3  .   K   | ]  }|d    xs d  yw)r   r   Nr   r=   s     r   r    zsemantic_one.<locals>.<genexpr>@   s#       G|VWqtzrz  G|   zKselect content from messages where session_id=? and role='user' order by idr.   r   semantic_review	COMPLETED)event
session_idr   itemsstatus	timestampOBSIDIAN_VAULT_UNAVAILABLEr5   r   g?ri   rj   r   r   profiletargetc              3  D   K   | ]  }|j                  d       dk(    yw)rj   ri   N)getr=   s     r   r    zsemantic_one.<locals>.<genexpr>I   s!     !hST!%%(:";=N"N!hs    KNOWLEDGE_REVIEW_PENDINGr   errorzGinsert or replace into semantic_items values(?,?,?,?,?,?,?,?,?,?,?,?,?)r3   rY   r8   rZ   r[   z8insert into semantic_reviews values(?,?,?,?,?,?,?,?,?,?)r   autf-8encodingFensure_ascii)r   fetchoner   r   rl   r1   r   timeVAULTr|   RuntimeErrorr   rz   append_note	note_pathstrr-   	Exceptionro   VERSIONr   AUDITr
   r   openwritejsondumps)r   r   dbpathrowr   r   qr/   r   r   resultitemactionr   r   es                   r   semantic_oner   =   s   Ywiq&IIBC6JSSU^b
??76>*,6TYY  G|[\[d[d  fs  ux  tz  \{  G|  >|	S\'R	-5EgcRUV]R^Rdbdei5ju  }N  \_  jq  z|  FQ  ^b  ^g  ^g  ^i  tjlri	|,HII wd
hh|As".D	w0F0Ft0Lh9W-gdW^;_`;6$  {Aaefxay  QT  UY  QZ  BF  GO  BP  [a  bi  [j  [q  [q  rv  [w	w
 "!hX^_fXg!hh	ny&G_ tT))UWZ[_[c[cdn[opwx|  yA  yA  BK  yL  MQ  MU  MU  V]  M^  _c  _g  _g  ht  _u  vy  zA  BF  BK  BK  BM  NR  NV  NV  Wc  Nd  ei  em  em  nA  eB  CG  CK  CK  L^  C_  `d  `h  `h  iq  `r  Ws  ttEs3wW^_efijofpquqzqzq|  MS  U`  M`  ~B  ~G  ~G  ~I  fj  kr  sy  s}  s}  ~E  sF  GG  H  IJ  IQ  IQ  ISD$/

3
0P0V0VW[WaWabhv{W|  ~B  XB  1C  KQ  DQ 	h96&:JbefgbhRXY`Rahs   9B2K7 7	L  LL c                    t        | xs d      D ]]  \  }}|dk(  s	 t        j                  | || j                  d      dz          }t	        |t
              r|j                  d      dv r|c S _ y # t        $ r Y lw xY w)Nr   {}rQ   decision>   CREATEREJECTCONFIRMCONFLICT)	enumerater   loadsrfind
isinstancedictr   r   )r/   ichr>   s       r   _agent_jsonr   Q   s    tzr" TQrW
jja

3)*+A!DaeeJ/3[[de]e	 	 Ts   AA11	A=<A=c                   | d    d| d    | d   | d   | d   | d   | d   | d   | d	   | d
   | d   | d   d | d   | d   d}dt        j                  |d      z   }ddddddddddddd|g}	 t        j                  |ddd       }t	        |j
                        }|sd!|j
                  d"d  d#S |S # t        $ r}d$t        |      icY d }~S d }~ww xY w)%Nsession_keyrc   r3   r   rY   r8   rZ   source_session_idsource_profilesource_timestampr5   r[   )semantic_item_idr3   r   rY   r8   rZ   r   r   r   r5   r[   existing_obsidian_claimtechnical_validationrelevant_contextu  Prüfe ausschließlich diesen einzelnen REVIEW_REQUIRED-Wissensclaim. Keine Zusammenfassung. Bestätigte produktive Pfade, Datenmodelle, Rollen, Konfigurationen, Reparaturen und Prozessregeln sind dauerhaft relevant; Aktualität allein ist kein Ablehnungsgrund. Temporäre Pfade, Arbeitsaufträge, Zwischenstände und Spekulationen sind REJECT. Antworte ausschließlich als JSON mit decision CREATE|CONFIRM|CONFLICT|REJECT, reason, confidence, needs_fact_check boolean, fact_check_reason. Claim: Fr   sudo-uhermesenvHOME=/home/hermesUSER=hermesLOGNAME=hermes/home/hermes/.local/bin/hermes-pwissensprueferchat	--oneshot-qTr@   r/   capture_outputtimeoutinvalid_agent_jsoni)r   rawr   )r   r   
subprocessrunr   stdoutr   r   )r   payloadpromptcmdpdr   s          r   run_wissensprueferr   Z   s    $] 34Ad:6F5GHTXYcTdost}o~  JN  OX  JY  bf  gn  bo  }A  BN  }O  dh  i|  d}  OS  Td  Oe  y}  ~P  yQ  _c  dp  _q  FJ  K^  F_  z~  VZ  [n  Vo  CG  HO  CP  
Q
c dh  dn  dn  ov  DI  dJ
J T(5!4]CSTtuy  {K  LR  S^  _c  dj  k/NN3DSA![QRQYQYEZ1	
0qxx7GHH	
(.ws1v...s%   ,AB0 .B0 0	C9CCCc                   | d   | d   | d   | d   | d   d}dt        j                  |d	      z   }d
dddddddddddd|g}	 t        j                  |ddd      }t	        |j
                  xs d      D ]a  \  }}|dk(  s	 t        j                  |j
                  ||j
                  j                  d      dz          }|j                  d      dv r|c S c d d!iS # t        $ r Y sw xY w# t        $ r}d t        |      icY d }~S d }~ww xY w)"Nr3   r   r8   r[   r   )r3   r   r8   r[   r   u   Prüfe ausschließlich die Belegbarkeit dieses Claims. Antworte ausschließlich als JSON mit verdict VALIDATED|UNVERIFIED|CONFLICT|REJECT, reason und confidence. Keine Zusammenfassung, keine neue Tatsache. Claim: Fr   r   r   r   r   r   r   r   r   r   faktenprueferr   r   r   Tr@   r   r   r   r   rQ   verdict>   r   r   rV   
UNVERIFIEDr   invalid_fact_checker_json)r   r   r   r   r   r   r   r   r   r   r   )	r   r   r   r   r   r   r   r>   r   s	            r   run_faktenprueferr   f   s~   *%YWjn  pC  kD  Y]  ^q  Yr  
s 
a  bf  bl  bl  mt  BG  bH  
HT(5!4]CSTtuy  {J  KQ  R]  ^b  ci  j	/NN3DSA!B' da#gzz!((1QXX^^C0234Q	iJJRS8J	 -	.. T.ws1v...sI   =C, ACC, C, 	C)&C, (C))C, ,	D5DDDc                z   | j                  d|f      j                         }g }|D ]  }t        |      }t        |      }|j	                  d      }d|v rd}d}	n<|dk(  rd}|d   dv r|d   nd	}	n&|d
k(  rd
}d
}	n|xs d}|d	k(  s|dk(  r
|d   d	k(  rd	nd}	| j                  d||	|d   xs ddz   t        |j	                  d            z   |d   f       | j                  d|	|d   |d   f       | j                          |j                  |d   |||	|j	                  d      |j	                  d      d        |S )Nzselect a.*,s.claim,s.subject,s.validation_status,s.session_key from agent_reviews a join semantic_items s on a.item_key=s.session_key||':'||a.claim_id where a.final_action='PENDING_FACT_CHECK' and a.fact_check_status='PENDING' limit ?r   r   ERRORPENDING_FACT_CHECKrV   r   )r   r   r   r   r   z^update agent_reviews set fact_check_status=?,final_action=?,decision_reason=? where item_key=?decision_reasonr   u    | Faktenprüfer: reasonitem_keyzOupdate semantic_items set knowledge_action=? where session_key=? and claim_id=?r   r3   )r   r   fact_check_statusfinal_actionr   r   )r   fetchallr   r   r   r   r   rz   )
r   limitrowsr   rr   r   verr   finals
             r   resolve_fact_checksr  u   sj   ii  }  D  ~F  G  P  P  R  WY  SV
 nQAw$"4(qQUU9-=\&';
K{!J-SgBg:mu5
Jjvz!\vS(]sLGX]^_i]jlt]t  }Q%))lntuz|}  P  }Q  }W  UW  Ym  |m  nq  rs  rw  rw  x@  rA  nB  |B  CD  EO  CP  nQ  R))]_defgteuvw  yC  wD  _E  F  GH  GO  GO  GQ  RU  R\  R\  qr  s}  q~  IL  ag  w|  FG  FK  FK  LT  FU  ^_  ^c  ^c  dk  ^l  ]m  Rnn 	r   c                   | j                  d|f      j                         }g }|D ]  }t        |      }|d   |d<   t        |      }|d    d|d    }d|vr|j	                  d      nd }ddd	d
dj	                  |d      }	d }
|j	                  d      rd}	nH|	dk(  rC|d   |d<   d|d<   t        t        |d         |d   ||d   |d   d      \  }}t        |      }
|}	| j                  d|	|
|d   |d   f       | j                  d|||d   |d   |d   |d   ddt        j                         ||j	                  d      |j	                  d      |j	                  d      rdnd|j	                  d      rdnd |	|j	                  d      f       | j                          |j                  |||	|j	                  d      |j	                  d      |
d         |S )!Nzselect * from semantic_items where knowledge_action='REVIEW_REQUIRED' and (session_key||':'||claim_id) not in (select item_key from agent_reviews) order by source_timestamp limit ?r   rc   r3   r   r   r   r   r   r   )r   r   r   r   r   needs_fact_checkr   r8   r4   rX   r6   r   r   r   r   zXupdate semantic_items set knowledge_action=?,target=? where session_key=? and claim_id=?zKinsert or ignore into agent_reviews values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)r   zwissenspruefer/1.0.0r   r5   rQ   r   PENDING)r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   rz   )r   r  r  doner  r   r   r   r   r  r   r   target_paths                r   escalate_review_requiredr     sI   ii  G  IN  HP  Q  Z  Z  \  bd  ]a
 RQAw$Am$4]#8J48PaYZ[hYiXjjklmnxlykzV{RU  \c  kl  \l  GH  GL  GL  MW  GX  rv  ~F  HP  [d  pz  DL  ~M  ~Q  ~Q  RZ  [b  ~c  x}	&UU%9uhwZ45Om!4dopyz{  }F  {G  qH  IJ  KT  IU  VZ  ij  k~  i  JK  L\  J]  [^  e_QcQWXc  hk  lw  hx  ag  @F  z))fhmntuv  xE  vF  GH  IS  GT  hU  V))Y[^_bcdeocpqrs|q}~  AT  U  VW  Xh  Vi  jz  {Q  RV  R[  R[  R]  ^f  gh  gl  gl  mu  gv  wx  w|  w|  }I  wJ  PQ  PU  PU  Vh  Pi  KL  op  ~  ~C  ~C  DV  ~W  qz  ]a  bg  hi  hm  hm  nu  hv  [w  x  yz  yA  yA  yC  DH  DO  DO  dg  s{  KP  Z[  Z_  Z_  `h  Zi  rs  rw  rw  x  r@  JP  PQ  DRR 	r   c                   | dk7  rg S t        ddd      t        ddd      t        ddd	      t        d
dd      t        ddd	      t        ddd      t        ddd      g}	 t        d      }t        j                  dt	        |      z   dz   d      }|j                  d      j                         d   }|j                  d      j                         d   }|j                  d      j                         d   }	|j                  d      j                         d   }
|j                  d      j                         d   }||
|	z
  z
  }|t        dd | d!| d"|	 d#|
 d$||
z
   d%| d&| d'dd(      gz  }|j                          |S # t        $ r Y |S w xY w))Nr#   z
masvl.rootzODie MAS Visual Library liegt produktiv unter /opt/struktur/mas-visual-library/.gGz?zmasvl.dbzYDie produktive Datenbank ist /opt/struktur/mas-visual-library/database/visual_library.db.zmasvl.originals_immutableuf   Originaldateien werden nicht überschrieben oder gelöscht; visual_id und SHA256 bleiben unverändert.g\(\?zmasvl.import_analysis_splitzuTechnischer Import/Katalogisierung und fachliche Bildanalyse durch den Visual-Kurator sind getrennte Prozessschritte.gffffff?zmasvl.duplicate_ruleu[   SHA256 dient ausschließlich zur Erkennung exakter Dubletten, nicht als Variantenkriterium.zmasvl.variant_groupsuV   Asset-Groups modellieren Variantenbeziehungen ausschließlich als Metadatenrelationen.gQ?zmasvl.candidate_lifecyclezVariant-Candidates besitzen einen nachvollziehbaren Lebenszyklus mit OPEN, RESOLVED_GROUPED, RESOLVED_FALSE_POSITIVE und RESOLVED_ALREADY_GROUPED.z;/opt/struktur/mas-visual-library/database/visual_library.dbr   r   Tr   zselect count(*) from visualsr   zselect count(*) from analysesz!select count(*) from asset_groupsz=select count(*) from visuals where asset_group_id is not nullz;select count(*) from variant_candidates where status='OPEN'zmasvl.live_inventoryzLive-Stand: z Visuals und z Kuratoranalysen; z Asset-Groups; z gruppierte und z ungruppierte Visuals; z Motivfamilien; z offene Variant-Candidates.zsession+live_db_validation)	r8   r   r   r   r   r   r   closer   )r   r   r.   r/   r   r   r   visualsanalysesgroupsgrouped
candidatesfamiliess                r   extractr     s   !!	) fgkl
nost#  %M  NR  S%  '^  _c  d|  ~B  Cwx|}#  %y  z~  	FG!7??[bcfghci[ijt[ty}K~
))2
3
<
<
>q
A'AIIVuLvLL  MB  CD  ME8  NO  NW  NW  X{  N|  NE  NE  NG  HI  NJ  GM  TU  T]  T]  ^]  T^  Tg  Tg  Ti  jk  Tl  LS  yz  yB  yB  C@  yA  yJ  yJ  yL  MN  yO  nxGFN#(E(<yhZWijpiq  rA  BI  AJ  JZ  [b  cj  [j  Zk  kB  CK  BL  L\  ]g  \h  hC  *D  EI  Jf  g  h  h%'') 	 	 s   DE? ?	FFc                    t        j                  dd|       j                         j                  dd      }t        dz  |z  dz  S )Nu   [^A-Za-z0-9ÄÖÜäöüß -]+r   r   rA   z03-ProjektezSESSION-KNOWLEDGE.md)r*   r+   r<   r{   r   )r   safes     r   r   r      sA    ff-b9??AII#cRmD !777r   c                l   | j                   j                  dd       d|d    }t        j                  dt        j                               }| j                         r| j                  dd      }||v rh|d	   |v rd
| fS t        j                  dt        j                               }d|d    d| d|d	    d|d    d| d}| j                  ||z   d       d| fS d}nd| d}d}d|d    d|d	    d| d|d    d| d|d    d| d|d    d|d   d d!}	| j                  ||z   |	z   d       d"| fS )#NTr   z
claim_id: r3   z%Y-%m-%dT%H:%M:%SZr   r{   )r   errorsr4   r   z
## CONFLICT_REVIEW z
- existing claim marker: z
- new assertion: z
- source_session_id: r   z
- timestamp: zO
- recommendation: human review; do not overwrite existing claim automatically
r   r   r   z---
title: uC    – Session Knowledge
type: durable_knowledge
status: active
---

z
## z
- z
- project: z
- agent/profile: r   z
- source_type: r6   z
- confidence: r5   z.2fz
- knowledge_action: CREATE
r   )r
   r   r   strftimegmtimer|   	read_text
write_text)
r   r   r   sourcemarkernowoldconflictprefixblocks
             r   r   r      s   4.
T*%&'	]]'6KKM
nngYn7#s]
;3T>}})$++-83$T*%5$6 7))/ 1!!%k!2 3 4%%+L%9$: ; E "_	`8 ??3x<?1
T/	&y h	i&#	tJ T+%6$7tF8CZ[abn[oZpp}  F  ~G  GZ  [a  bk  [l  Zm  m|  }@  |A  AR  SW  Xe  Sf  Rg  gw  x|  }I  xJ  KN  wO  Om  nE!73r   c                   |d   }| d| }| j                  d|f      j                         }|r|d   dk(  rt        | |||      S t        j                  d|z   dz   d	      j                  d
|f      j                         }dj                  d |D              }t        |d   xs d|      }	t        |	||d   xs d|      }
|||d}||	g dd d}	 t        j                         st        d      |
D ]@  }t        t        |	      |	||      \  }}|d   j                  i ||t        |      d       B d}|||||	|t#        |
      t%        t'        j&                               |dk(  rt'        j&                         nd |d   t(        f}|r| j                  d|dd  |fz          n| j                  d|       | j+                          t,        j.                  j1                  dd       t,        j3                  dd      j5                  t7        j8                  i |dt'        j&                         id       dz          t        | |||      }||d!S # t         $ r }d}||d<   t        |      |d<   Y d }~=d }~ww xY w)"Nr   rc   z6select status from session_reviews where session_key=?r   r   r   r   Tr   zPselect role,content from messages where session_id=? and role='user' order by idr:   c              3  .   K   | ]  }|d    xs d  yw)rQ   r   Nr   r=   s     r   r    zreview_one.<locals>.<genexpr>   sE       xT  JK  z{  |}  z~  zD  BD  zD  xTr   r.   r   )r   r   	source_db)r   r   r   r   r   r   r   )rj   r   r   r   r   zupdate session_reviews set session_id=?,profile=?,source_db=?,project=?,status=?,knowledge_items_found=?,created=?,completed_at=?,error=?,version=? where session_key=?rQ   z9insert into session_reviews values(?,?,?,?,?,?,?,?,?,?,?)r   r   r   r   r   Fr   )deterministicsemantic)r   r   r   r   r   r   rl   r1   r  r   r|   r   r   r   rz   r   r   ro   intr   r   r   r   r
   r   r   r   r   r   )r   r   r   r   r   r   existingmsgsr/   r   r   r  r   r   r   r   str   valuessems                       r   
review_oner0     s@   Ywiq&
))LcV
T
]
]
_!k),qPS2T+ToogfnZ/D9AA  CU  WZ  V\  ]  f  f  h  os  ox  ox  xT  OS  xT  oT  jn	S\'R	-WWSWI[Y[\`5aux{  GN  [a  kbciGBTXYK	|,HII Qd9W-gd6B;6$6'?CYCY  [P]a  [Pu{  FI  JN  FO  [P  DQQ" 
S3u:c$))+6FVXZeVetyy{kopvw~p  AH  	I))  v  w}  ~  ~@  wA  CF  BH  wH  I))GOD$/

3
0P0V0VW[WaWa  cEek  cElwx|  yB  yB  yD  cE  SX  XY  Z^  X^  1_!GF3'RU/V(V 	 K"x 0CFF7OKs   A&I 	I9I44I9c                    t        j                         } | j                  dd       | j                  d       | j                  dt        d       | j	                         }t               }g }t        j                  d      D cg c]  }|j                         s| c}t        d	z  j                         r
t        d	z  gng z   }|D ]  }|j                  j                  d
k7  r|j                  j                  nd}	 t        j                  dt        |      z   dz   d      }t        j                  |_        d}d}	|j"                  r|dz  }|j"                  f}	|j%                  ||	      D ]-  }
t'        ||t        |      |
      }|s|j)                  |       /  t/        |t1        d|j2                              }t5        |t1        d|j2                              }t-        t7        j8                  t:        t=        |      t=        |      |||dd             yc c}w # t*        $ r}t-        d||       Y d }~ud }~ww xY w)Nz--once
store_true)r   z--session-idz--agent-limit   )typedefaultzprofiles/*/state.dbzstate.dbz.hermesr5  r   r   Tr   zEselect * from sessions where ended_at is not null and message_count>0r   z	 and id=?
SCAN_ERRORr   )version	processedagent_escalationsagent_resultsfact_checksresultsFr   )argparseArgumentParseradd_argumentr*  
parse_argsr   ROOTglobis_filer|   r
   namer   r   r   r   r   r   r   r0  rz   r   printr  maxagent_limitr  r   r   r   ro   )apr   r   r   r   pathsr   r   sqlparamsr   r  r   agentfactss                  r   mainrN     s]   boohloKBOO\jLklnl{l{  }L  RU  ^_l{  m`  ce  cp  cp  cr  ab  uw  uy  st  ~@  z}9923Caqyy{C[_`j[jZrZrZtd:oEVz|}
 
1Q88==)3!((--'1__WSV^J.481w{{N3
6llC$CQ\\OViiF# s73q6#&AA
1  #a"67>QRSTWXYZ[ZgZgTh>ijoptpzpz  GN  [^  _b  [c  x{  |A  xB  SX  gl  wz  |{  IN  qO  kP	 D 
0|Aa000s+   HH<BH H  	I)H<<I__main__)zsession+live_validation)r3  )#__doc__
__future__r   r=  ru   r   r   r   r*   r~   r   pathlibr   rA  r   r	   r   r   r   r1   r8   r   r   r   r   r   r  r  r  r   r   r0  rN  __name__
SystemExitr   r   r   <module>rU     s    # J J J J 	
 !.C)D5
=>dK  GA(d"a.Q(
//

.88W.
  Zj00r   