JOjbUdZddlZddlZddlZddlmZmZddlmZedZdZ dZ de d e e fd Zd e d e d dfd Zd"dZeddedD]&Zededddeedde(edD]Zededddd e e fdZeZeed<eZeed<eZeed< edD]BZedevs ej3edededddeeddeDedD]/Zedevs ej3edededdd1eD]BZedevs ej3edededdZedZeded eddDej<d!)#u\Polling code Mauro→Adrian (msg-m2a-*), Elon→Adrian (msg-e2a-*) e inbox→Adrian (classify-request-*). Protocollo msg-m2a: msg-m2a-{ts} : Mauro scrive un messaggio ack-m2a-{ts} : form_watch scrive quando notifica Adrian Protocollo msg-e2a: msg-e2a-{ts} : Elon scrive una risposta/aggiornamento ack-e2a-{ts} : Adrian scrive dopo aver letto Protocollo classify: classify-request-{doc_id} : inbox_watch chiede classificazione ad Adrian classify-result-{doc_id} : Adrian risponde con JSON classificazione Messaggi senza ack = Adrian non ha ancora letto → mostrati subito all'avvio. N)datetimetimezone)Pathz(/mnt/ssd/data/vault-secondbrain/vault.dbzda-mauro-a-adriancbtjt}tj|_|S)N)sqlite3connectDB_PATHRow row_factoryconns //mnt/ssd/adrian/vault-secondbrain/form_watch.py_dbrs! ??7 #D{{D Kprefixreturnct}|jd|dfj}|j|Dcgc] }t |c}Scc}w)z>Ritorna i messaggi con prefisso dato senza ack corrispondente.a SELECT i.id, i.body, json_extract(i.meta,'$.ts') as ts FROM items i WHERE i.id LIKE ? AND NOT EXISTS ( SELECT 1 FROM items a WHERE a.id = 'ack-' || substr(i.id, 5) ) ORDER BY ts ASC z-%rexecutefetchallclosedict)rr rowsrs r_pendingr"sY 5D << HB-  $8:  JJL! "DG "" "sAmsg_idbyc*d|ddz}tjtjj d}t j |||d}t}|jd|dd|f|j|jy)Nzack-z%Y%m%dT%H%M%S%fZ)rackstszMINSERT OR IGNORE INTO items(id, type, body, file, meta) VALUES (?,?,?,NULL,?)os) rnowrutcstrftimejsondumpsrrcommitr)rrack_idr!metar s r_ackr,3s{ fQRj F hll # , ,-? @B ::Rr: ;D 5DLLW r4  KKMJJLrct}|jdtd|j|j y)Nz#UPDATE items SET body='' WHERE id='')rrLEGACYr)rr s r clear_legacyr0@s1 5DLL6vha@AKKMJJLrzB[form_watch] In ascolto su msg-m2a-* (Mauro) e msg-e2a-* (Elon)...T)flushzmsg-m2az [MAURO] body idadrianzmsg-e2az [ELON] ct}|jdj}|j|Dcgc] }t |c}Scc}w)z6Classify-request senza classify-result corrispondente.a SELECT i.id, i.body, i.meta FROM items i WHERE i.id LIKE 'classify-request-%' AND NOT EXISTS ( SELECT 1 FROM items r WHERE r.id = 'classify-result-' || substr(i.id, 18) ) ORDER BY i.id ASC r)r rrs r_pending_classifyr7SsK 5D <<     JJL! "DG "" "sAseen_m2aseen_e2a seen_classifyzclassify-request-z [INBOX] :)rN)__doc__r'rtimerrpathlibrr r/rstrlistrrr,r0printmr7setr8__annotations__r9r:addrlendoc_idpathsleeprrrLs<   ' 9 :  #S#T$Z#"  # $ JRVW ) A Jqyk $D14(N ) 1A Iai[ #401#4:#"##U s i  T7( " LL4 ! Jqyk,D 9 4( # N i 9 T7( " LL4 ! Iai[+4 89  > T7- '   ag &tWS!4567FV9D JtfAfXR0 = >DJJqM+ r