Files
timmy-config/wizards/allegro-primus/knowledge/__pycache__/sync.cpython-312.pyc

146 lines
21 KiB
Plaintext
Raw Normal View History

2026-03-31 20:02:01 +00:00
<EFBFBD>
<00><08>i?F<00><00><><00>dZddlZddlZddlmZddlmZddlmZmZm Z m
Z
m Z ddl m Z mZddlmZmZmZmZddlmZe Gd <09>d
<EFBFBD><00>ZGd <0B>d <0C>Zy) z<>
AP Knowledge Base - Father Sync
Sync with father's knowledge:
- Export memories for father review
- Import father teachings
- Conflict resolution
<EFBFBD>N)<01>Path)<01>datetime)<05>List<73>Dict<63>Optional<61>Tuple<6C>Set)<02> dataclass<73>asdict)<04> MemoryEntry<72> MemoryScope<70> SyncConflict<63>
MemoryType)<01>MemoryDirectoryc<00>d<00>eZdZUdZeed<eed<eed<dZeed<defd<08>Z e
d eddfd
<EFBFBD><04>Z y ) <0C> SyncManifestzManifest for a sync operation.<2E>export_timestamp<6D>source<63> memory_countz1.0<EFBFBD>version<6F>returnc<00><00>t|<00>S<00>N)r <00><01>selfs <20>sync.py<70>to_dictzSyncManifest.to_dicts <00><00><15>d<EFBFBD>|<7C><1B><00>datac<00><00>|di|<01><01>S)N<>r!)<02>clsrs r<00> from_dictzSyncManifest.from_dict s<00><00><12>{<7B>T<EFBFBD>{<7B>rN) <0C>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>str<74>__annotations__<5F>intrrr<00> classmethodr#r!rrrrsN<00><00>(<28><19><19> <0F>K<EFBFBD><15><15><18>G<EFBFBD>S<EFBFBD><18><1C><14><1C><11><1B>T<EFBFBD><1B>n<EFBFBD><1B><11>rrc <00><><00>eZdZdZd&dedeefd<05>Zdefd<07>Z d<08>Z
d e de fd
<EFBFBD>Z d'd eed eeed eee dededef d<10>Zd(dedeeeeeffd<12>Zde de defd<15>Zdedee fd<17>Zde de defd<1A>Zde de de fd<1B>Zd e fd<1C>Z d&dede dee de fd<1F>Zdeefd <20>Zdeefd!<21>Zdeefd"<22>Zd)d#e defd$<24>Z defd%<25>Z!y)*<2A>
FatherSyncz<EFBFBD>
Handles synchronization between AP (child) and father's knowledge base.
Key concepts:
- Export: Package memories for father's review
- Import: Incorporate father's teachings
- Conflict resolution: Handle divergent updates
N<>memdir<69> father_inboxc<00><00>||_|j|_|jdz |_|jjd<02><03>|jdz |_|jjd<02><03>|xs|jdz |_|j
jd<02><03>|jdz |_|j jd<02><03>|jdz |_|j<00>|_ y)N<>syncT)<01>exist_ok<6F>outbox<6F>inbox<6F> processedzsync_state.json)
r.<00>base_dir<69>sync_dir<69>mkdirr3r4r5<00>sync_state_path<74>_load_sync_state<74>
sync_state)rr.r/s r<00>__init__zFatherSync.__init__/s<><00><00><1C><04> <0B><1E><0F><0F><04> <0A><1D> <0A> <0A><06>.<2E><04> <0A> <0C> <0A> <0A><1B><1B>T<EFBFBD><1B>*<2A><1A>m<EFBFBD>m<EFBFBD>h<EFBFBD>.<2E><04> <0B> <0C> <0B> <0B><19><19>4<EFBFBD><19>(<28>!<21>><3E>d<EFBFBD>m<EFBFBD>m<EFBFBD>g<EFBFBD>&=<3D><04>
<EFBFBD> <0C>
<EFBFBD>
<EFBFBD><18><18>$<24><18>'<27><1D><1D><1D><1B>4<><04><0E> <0C><0E><0E><1C><1C>d<EFBFBD><1C>+<2B> $<24>}<7D>}<7D>/@<40>@<40><04><1C><1E>/<2F>/<2F>1<><04>rrc<00><><00>|jj<00>r. tj|jj <00><00>Sddiigd<03>S#t
$r}t d|<01><00><02>Yd}~<01>$d}~wwxYw)zLoad sync state from disk.z$Warning: Failed to load sync state: N)<05> last_export<72> last_import<72>exported_memories<65>imported_memories<65> conflicts)r9<00>exists<74>json<6F>loads<64> read_text<78> Exception<6F>print)r<00>es rr:zFatherSync._load_sync_stateDsz<00><00> <0F> <1F> <1F> &<26> &<26> (<28> B<01><1B>z<EFBFBD>z<EFBFBD>$<24>"6<>"6<>"@<40>"@<40>"B<>C<>C<>
 <20><1F>!#<23>!#<23><1B> 
<EFBFBD>
<EFBFBD><EFBFBD><1D> B<01><15><<3C>Q<EFBFBD>C<EFBFBD>@<40>A<>A<><41> B<01>s<00>,A<00> A2<03>A-<03>-A2c<00>|<00>|jjtj|jd<01><02>d<03><04>y)zSave sync state to disk.<2E><00><01>indent<6E>utf-8<><01>encodingN)r9<00>
write_textrD<00>dumpsr;rs r<00>_save_sync_statezFatherSync._save_sync_stateTs+<00><00> <0C><1C><1C>'<27>'<27><04>
<EFBFBD>
<EFBFBD>4<EFBFBD>?<3F>?<3F>1<EFBFBD>(M<>X_<58>'<27>`r<00>entryc<00><><00>|j<00>d|j<00>d|j<00>d|jj <00><00><00>}t j |j<00><00>j<00>ddS)z7Generate a hash of memory content for change detection.<2E>:N<>) <09>name<6D> description<6F>content<6E> modified_at<61> isoformat<61>hashlib<69>sha256<35>encode<64> hexdigest)rrTrZs r<00> _hash_memoryzFatherSync._hash_memoryXsc<00><00><1A>Z<EFBFBD>Z<EFBFBD>L<EFBFBD><01>%<25>"3<>"3<>!4<>A<EFBFBD>e<EFBFBD>m<EFBFBD>m<EFBFBD>_<EFBFBD>A<EFBFBD>e<EFBFBD>FW<46>FW<46>Fa<46>Fa<46>Fc<46>Ed<45>e<><07><16>~<7E>~<7E>g<EFBFBD>n<EFBFBD>n<EFBFBD>.<2E>/<2F>9<>9<>;<3B>C<EFBFBD>R<EFBFBD>@<40>@r<00>scope<70>types<65>tags<67>since_last_export<72>include_archivedc <00>l<00><0E>g}|jjj<00>D<00>]}|r|j|k7r<01>|r|j|vr<01>'|r1t d<01>|j D<00><00><00>t<00>fd<02>|D<00><00>s<01>Z|jjd<03>r|s<01>x|r}|jdrntj|jd<00>}|j|kr=|j|<07>} |jdj|j<00>| k(r<01><>|j!|<07><00><01>
t#tj$<00>j'<00>dt)|<06><00><07>j+<00>|D<00>cgc]}|j-<00><00><02>c}d|t.j0k(|r |j2nd |r|D<00>
cgc]}
|
j2<00><02>c}
nd |d
<EFBFBD>d <0B>d <0C>} tj$<00>j5d <0A>} |j6d| <0C>d<0F>z } | j9t;j<| d<10><11>d<12><13>tj$<00>j'<00>|jd<|D]-}|j|<07>|jd|j<<00>/|j?<00>| Scc}wcc}
w)a<>
Export memories for father's review.
Args:
scope: Filter by scope (private memories usually not shared)
types: Filter by memory types
tags: Filter by tags
since_last_export: Only export memories modified since last export
include_archived: Include archived memories
Returns:
Path to the exported file
c3<00><K<00>|]}|j<00><00><01><00>y<00>wr<00><01>lower)<02>.0<EFBFBD>ts r<00> <genexpr>z/FatherSync.export_for_father.<locals>.<genexpr><3E>s<00><00><><00> ?<3F>q<EFBFBD><11><17><17><19> ?<3F>s<00>c3<00>B<00>K<00>|]}|j<00><00>v<00><01><00>y<00>wrri)rkrl<00>
entry_tagss <20>rrmz/FatherSync.export_for_father.<locals>.<genexpr><3E>s<00><><00><><00>A<>q<EFBFBD>1<EFBFBD>7<EFBFBD>7<EFBFBD>9<EFBFBD>
<EFBFBD>2<>A<>s<00><01>archivedr>r@<00>child)rrr<00> father_reviewN)rbrcrd)<03> export_reason<6F>includes_private<74>filters)<03>manifest<73>memories<65>metadataz %Y%m%d_%H%M%S<>export_z.jsonrKrLrNrO) r.<00> _memories<65>valuesrb<00>type<70>setrd<00>anyrx<00>getr;r<00> fromisoformatr[ra<00>id<69>appendr<00>utcnowr\<00>lenr<00>to_frontmatterr <00>PRIVATE<54>value<75>strftimer3rQrDrRrS)rrbrcrdrerf<00> to_exportrTr><00> current_hashrl<00> export_data<74> timestamp<6D> export_pathros @r<00>export_for_fatherzFatherSync.export_for_father]sZ<00><><00>,<17> <09><19>[<5B>[<5B>*<2A>*<2A>1<>1<>3<> $<24>E<EFBFBD><14><15><1B><1B><05>-<2D><18><15><15><1A><1A>5<EFBFBD>0<><18><14> <20> ?<3F>E<EFBFBD>J<EFBFBD>J<EFBFBD> ?<3F>?<3F>
<EFBFBD><1A>A<>D<EFBFBD>A<>A<><1C><15>~<7E>~<7E>!<21>!<21>*<2A>-<2D>6F<36><18>!<21>T<EFBFBD>_<EFBFBD>_<EFBFBD>]<5D>%C<>&<26>4<>4<>T<EFBFBD>_<EFBFBD>_<EFBFBD>]<5D>5S<35>T<> <0B><18>$<24>$<24> <0B>3<>#'<27>#4<>#4<>U<EFBFBD>#;<3B>L<EFBFBD><1B><EFBFBD><EFBFBD>':<3A>;<3B>?<3F>?<3F><05><08><08>I<>\<5C>Y<> <20> <15> <1C> <1C>U<EFBFBD> #<23>9 $<24>@%<25>!)<29><1F><1F>!2<>!<<3C>!<<3C>!><3E><1E> <20><19>^<5E><0E><16>g<EFBFBD>i<EFBFBD>=F<>G<>E<EFBFBD><15>-<2D>-<2D>/<2F>G<>!0<>$)<29>[<5B>-@<40>-@<40>$@<40>,1<>U<EFBFBD>[<5B>[<5B>t<EFBFBD>9><3E>u<EFBFBD>5<>!<21>a<EFBFBD>g<EFBFBD>g<EFBFBD>5<>D<EFBFBD> <20><12><0E>
<EFBFBD> <0B>&<1D>O<EFBFBD>O<EFBFBD>%<25>.<2E>.<2E><EFBFBD>?<3F> <09><1A>k<EFBFBD>k<EFBFBD>g<EFBFBD>i<EFBFBD>[<5B><05>$><3E>><3E> <0B><13><1E><1E>t<EFBFBD>z<EFBFBD>z<EFBFBD>+<2B>a<EFBFBD>@<40>7<EFBFBD><1E>S<>*2<><1F><1F>):<3A>)D<>)D<>)F<><04><0F><0F> <0A>&<26><1E> V<01>E<EFBFBD>=A<>=N<>=N<>u<EFBFBD>=U<>D<EFBFBD>O<EFBFBD>O<EFBFBD>/<2F> 0<><15><18><18> :<3A> V<01> <0C><1D><1D><1F><1A><1A><>/H<01><> 6s <00>;J,<06><J1<0E> auto_resolvec<00><><00>d}d}g}|jjd<02>D<00>]<5D>} tj|j <00><00>}t
j |jdi<00><00>}|jdk7rtd|j<00><00><02><00>u|jdg<00>D<00>]"}tj|<08>} |jj| j<00>}
|
r<EFBFBD>|j|
| <09>r<>t|
| d<07><08>} |r<>|j!| <0B>} | ra| | _| d k(r|j%| <09>|d
z }<02><>| d k(r3|j'|
| <09>} |jj)| <0A>|d
z }<02><>|d
z }<03><>|j+| <0B><00><>|j+| <0B>|d
z }<03><>|d
z }<03><01>d| _|j%| <09>|d
z }<02><01>%|j,|j.z }|j1|<0E><00><01><>t5j6<00>j9<00>|j:d<|D]w} |j:dj+| j<j| j>j| j@t5j6<00>j9<00>d<11><04><00>y|jC<00>|||fS#t2$r!}td |<05>d |<0F><00><04>|d
z }Yd}~<0F><02><>d}~wwxYw)z<>
Import teachings from father.
Args:
auto_resolve: Automatically resolve simple conflicts
Returns:
(imported_count, skipped_count, conflicts)
r<00> import_*.jsonrv<00>fatherz.Warning: Skipping import from unknown source: rwrZ<00><03> local_entry<72> remote_entry<72> conflict_type<70> keep_remote<74><00>mergezError processing z: Nr?rB)<04>local_id<69> remote_idr|<00> detected_at)"r4<00>globrDrErFrr#rrrHr <00>from_frontmatterr.r<><00> _has_conflictr<00> _auto_resolve<76>
resolution<EFBFBD> _apply_import<72>_merge_memories<65>saver<65>r5rX<00>renamerGrr<>r\r;r<>r<>r<>rS)rr<><00>imported<65>skippedrB<00> import_filerrv<00>mem_textrT<00>existing<6E>conflictr<74><00>merged<65>processed_pathrIs r<00>import_from_fatherzFatherSync.import_from_father<65>s<><00><00><15><08><13><07><16> <09> <20>:<3A>:<3A>?<3F>?<3F>?<3F>;<3B>< <1D>K<EFBFBD>; <1D><1B>z<EFBFBD>z<EFBFBD>+<2B>"7<>"7<>"9<>:<3A><04>(<28>1<>1<>$<24>(<28>(<28>:<3A>r<EFBFBD>2J<32>K<><08><1B>?<3F>?<3F>h<EFBFBD>.<2E><19>J<>8<EFBFBD>?<3F>?<3F>J[<5B>\<5C>]<5D><1C>!%<25><08><08><1A>R<EFBFBD> 8<>(&<26>H<EFBFBD>'<27>8<>8<><18>B<>E<EFBFBD> $<24>{<7B>{<7B><EFBFBD><EFBFBD>u<EFBFBD>x<EFBFBD>x<EFBFBD>8<>H<EFBFBD><1F><1F>-<2D>-<2D>h<EFBFBD><05>><3E>'3<>,4<>-2<>.7<EFBFBD>(<1E>H<EFBFBD> ,<2C>-1<>-?<3F>-?<3F><08>-I<>
<EFBFBD>#-<2D>:D<>H<EFBFBD>$7<>'1<>]<5D>'B<>(,<2C>(:<3A>(:<3A>5<EFBFBD>(A<>(0<>A<EFBFBD> <0A><08>)3<>w<EFBFBD>)><3E>15<31>1E<31>1E<31>h<EFBFBD>PU<50>1V<31><06>(,<2C> <0B> <0B>(8<>(8<><16>(@<40>(0<>A<EFBFBD> <0A><08>(/<2F>1<EFBFBD> <0C><07>$-<2D>$4<>$4<>X<EFBFBD>$><3E> )<29> 0<> 0<><18> :<3A> '<27>1<EFBFBD> <0C><07>$<24>q<EFBFBD>L<EFBFBD>G<EFBFBD>(0<><05> <0C><1C>*<2A>*<2A>5<EFBFBD>1<> <20>A<EFBFBD> <0A><08>Q(&<26>V"&<26><1E><1E>+<2B>2B<32>2B<32>!B<><0E><1B>"<22>"<22>><3E>2<>q< <1D>~*2<><1F><1F>):<3A>)D<>)D<>)F<><04><0F><0F> <0A>&<26>!<21> <0F>H<EFBFBD> <10>O<EFBFBD>O<EFBFBD>K<EFBFBD> (<28> /<2F> /<2F>$<24>0<>0<>3<>3<>%<25>2<>2<>5<>5<> <20>.<2E>.<2E>'<27><EFBFBD><EFBFBD>0<>:<3A>:<3A><<3C> 1<0E> <0F> <0F> <0A><1D><1D><1F><17><17>)<29>+<2B>+<2B><><1D> <1D><15>)<29>+<2B><1D>b<EFBFBD><11><03><<3C>=<3D><17>1<EFBFBD> <0C><07><> <1D>s<00>A/J<<02>E"J<<02>< K&<05>K!<05>!K&<05>local<61>remotec<00>l<00>|j|jk7ry|j|jk7ryy)z5Check if there's a conflict between local and remote.TF)rZrY)rr<>r<>s rr<>zFatherSync._has_conflict s1<00><00> <11>=<3D>=<3D>F<EFBFBD>N<EFBFBD>N<EFBFBD> *<2A><17> <10> <1C> <1C><06> 2<> 2<> 2<><17>rr<>c<00>:<00>|j}|j}|j|jkDr|j|jkDry|jr1t j <00>|jz
j}|dkry|j||<03>ryy)z<>
Attempt to auto-resolve a conflict.
Returns:
Resolution strategy or None if manual resolution needed
r<><00><00>
keep_localr<EFBFBD>N) r<>r<>r[<00>
confidence<EFBFBD> accessed_atrr<><00>days<79>
_can_merge)rr<>r<>r<><00>days_since_accesss rr<>zFatherSync._auto_resolves<><00><00><19>$<24>$<24><05><19>&<26>&<26><06> <12> <1D> <1D><05> 1<> 1<> 1<><15> <20> <20>5<EFBFBD>#3<>#3<>3<>$<24> <11> <1C> <1C>!)<29><1F><1F>!2<>U<EFBFBD>5F<35>5F<35>!F<> L<> L<> <1D> <20>1<EFBFBD>$<24>#<23> <10>?<3F>?<3F>5<EFBFBD>&<26> )<29><1A>r<00>a<>bc<00><><00>t|jjd<01><00>}t|jjd<01><00>}||ks||kryt||z<00>}t||z<00>}|dkDr||z dkDSdS)z2Check if two memories can be automatically merged.<2E>
Trg<00>?)r}rZ<00>splitr<74>)rr<>r<><00>a_lines<65>b_lines<65>overlap<61>totals rr<>zFatherSync._can_merge3s<><00><00><16>a<EFBFBD>i<EFBFBD>i<EFBFBD>o<EFBFBD>o<EFBFBD>d<EFBFBD>+<2B>,<2C><07><15>a<EFBFBD>i<EFBFBD>i<EFBFBD>o<EFBFBD>o<EFBFBD>d<EFBFBD>+<2B>,<2C><07> <13>g<EFBFBD> <1D><17>G<EFBFBD>!3<><17><16>g<EFBFBD><07>'<27>(<28><07><13>G<EFBFBD>g<EFBFBD>%<25>&<26><05>(-<2D><01> <09>w<EFBFBD><15><EFBFBD><13>$<24>;<3B>t<EFBFBD>;rc<00>\<00>t|jjd<01><00>}t|jjd<01><00>}djt ||z<00><00>}t |j <00>t |j <00>kDr |j n |j }tt|j|jz<00><00>}t|j|j||j|j|||jtj <00>dt#|j$|j$<00>|j&i|j(<00>|jtj <00>j+<00>|j,j+<00>d<03><03><01><04> }|S)zMerge two memories into one.r<>r<>)<03> merged_from<6F> merged_at<61>father_version) r<>rXrYr|rbrZrd<00>
created_atr[rr<><00> file_pathrx)r}rZr<><00>join<69>sortedr<64>rY<00>listrdr r<>rXr|rbr<>rr<><00>maxr<78>r<>rxr\r[) rr<>r<><00> local_lines<65> remote_lines<65>merged_contentrYrdr<>s rr<>zFatherSync._merge_memoriesCsL<00><00><1A>%<25>-<2D>-<2D>-<2D>-<2D>d<EFBFBD>3<>4<> <0B><1A>6<EFBFBD>><3E>><3E>/<2F>/<2F><04>5<>6<> <0C><1D><19><19>6<EFBFBD>+<2B> <0C>*D<>#E<>F<><0E>-0<><06>0B<30>0B<30>,C<>c<EFBFBD>%<25>J[<5B>J[<5B>F\<5C>,\<5C>f<EFBFBD>(<28>(<28>bg<62>bs<62>bs<62> <0B><14>C<EFBFBD><05>
<EFBFBD>
<EFBFBD>V<EFBFBD>[<5B>[<5B>0<>1<>2<><04><1D><14>x<EFBFBD>x<EFBFBD><16><1A><1A>#<23><16><1A><1A><17>+<2B>+<2B>"<22><15><1C>'<27>'<27> <20><0F><0F>)<29><1B><1A>5<EFBFBD>+<2B>+<2B>V<EFBFBD>-><3E>-><3E>?<3F><1B>o<EFBFBD>o<EFBFBD><0E><17>.<2E>.<2E><0E>%<25>y<EFBFBD>y<EFBFBD>%<25>_<EFBFBD>_<EFBFBD>.<2E>8<>8<>:<3A>"(<28>"4<>"4<>"><3E>"><3E>"@<40> <0E>
<EFBFBD><06>*<16> rc<00><><00>tj<00>|_|jj |<01>tj<00>j <00>|j d<01>|jd|j<y)zApply an imported memory.)<02> imported_at<61>original_sourcerAN) rr<>r[r.r<>r\rr;r<>)rrTs rr<>zFatherSync._apply_importhsY<00><00>$<24>O<EFBFBD>O<EFBFBD>-<2D><05><19> <0C> <0B> <0B><18><18><15><1F>$<24>?<3F>?<3F>,<2C>6<>6<>8<>$<24>|<7C>|<7C>:
<EFBFBD><04><0F><0F>+<2B>,<2C>U<EFBFBD>X<EFBFBD>X<EFBFBD>6rr<><00>custom_contentc<00>T<00>|dk(r |j}n<>|dk(rC|j}|jj|_|jj|_nn|dk(r'|j |j|j<00>}nB|dk(r/|r-|j}||_t j<00>|_ntd|<02><00><02><00>d|jd<||jd<t j<00>j<00>|jd <|jj|<04>|jd
D<00>cgc]<}|d |jjk(r|d |jjk(s|<05><02>>c}|jd
<|j<00>|Scc}w) a$
Manually resolve a conflict.
Args:
conflict: The conflict to resolve
resolution: Resolution strategy
custom_content: Custom content if resolution is 'custom'
Returns:
The resolved memory entry
r<>r<>r<><00>customzInvalid resolution: T<>conflict_resolved<65>resolution_strategy<67> resolved_atrBr<>r<>)r<>r<>r<>r<>r<>rZrr<>r[<00>
ValueErrorrxr\r.r<>r;rS)rr<>r<>r<><00>result<6C>cs r<00>resolve_conflictzFatherSync.resolve_conflictssy<00><00>" <16><1C> %<25><1D>)<29>)<29>F<EFBFBD> <17>=<3D> (<28><1D>*<2A>*<2A>F<EFBFBD> <20>,<2C>,<2C>/<2F>/<2F>F<EFBFBD>I<EFBFBD>'<27>3<>3<>=<3D>=<3D>F<EFBFBD> <1C> <17>7<EFBFBD> "<22><19>)<29>)<29>(<28>*><3E>*><3E><08>@U<>@U<>V<>F<EFBFBD> <17>8<EFBFBD> #<23><0E><1D>)<29>)<29>F<EFBFBD>+<2B>F<EFBFBD>N<EFBFBD>!)<29><1F><1F>!2<>F<EFBFBD> <1E><1C>3<>J<EFBFBD><<3C>@<40>A<> A<>04<30><06><0F><0F>+<2B>,<2C>1;<3B><06><0F><0F>-<2D>.<2E>)1<><1F><1F>):<3A>)D<>)D<>)F<><06><0F><0F> <0A>&<26> <0C> <0B> <0B><18><18><16> <20><1C><EFBFBD><EFBFBD>{<7B>3<>(
<EFBFBD><13><15>j<EFBFBD>M<EFBFBD>X<EFBFBD>%9<>%9<>%<<3C>%<<3C><<3C><15>k<EFBFBD>N<EFBFBD>h<EFBFBD>&;<3B>&;<3B>&><3E>&><3E>><3E> <0E>(
<EFBFBD><04><0F><0F> <0B>$<24>
<0A><1D><1D><1F><15> <0A><>(
s<00>AF%c<00>J<00>t|jjd<01><00>S)z!Get list of pending export files.z export_*.json)r<>r3r<>rs r<00>get_pending_exportszFatherSync.get_pending_exports<74>s<00><00><15>d<EFBFBD>k<EFBFBD>k<EFBFBD>&<26>&<26><EFBFBD>7<>8<>8rc<00>J<00>t|jjd<01><00>S)z!Get list of pending import files.r<>)r<>r4r<>rs r<00>get_pending_importszFatherSync.get_pending_imports<74>s<00><00><15>d<EFBFBD>j<EFBFBD>j<EFBFBD>o<EFBFBD>o<EFBFBD>o<EFBFBD>6<>7<>7rc
<00><><00>g}|jjdg<00>D]Q}|jj|d<00>}|s<01>$|jt |t |dd<04><05>|d<00><07><00><00>S|S)zGet all unresolved conflicts.rBr<>r<><00>unknown)r<>rXr|r<>)r;rr.r<>rr )rrB<00> conf_datar<61>s r<00>get_unresolved_conflictsz#FatherSync.get_unresolved_conflicts<74>sz<00><00><16> <09><1D><1F><1F>,<2C>,<2C>[<5B>"<22>=<3D> <13>I<EFBFBD><18>K<EFBFBD>K<EFBFBD>O<EFBFBD>O<EFBFBD>I<EFBFBD>j<EFBFBD>$9<>:<3A>E<EFBFBD><15><19> <20> <20><1C> %<25>!,<2C> <09>+<2B>0F<30>Y<EFBFBD>!W<>"+<2B>F<EFBFBD>"3<>"<12><13> <13><19>r<00>notesc<00>,<00>|jtjd<01><02>}tj|j <00><00>}||d<g|d<|j j<00>|d<|jtj|d<06><07>d<08> <09>|S)
z<EFBFBD>
Create a complete package for father's review.
This includes:
- All team-scope memories
- Statistics and metadata
- Child's questions or notes
F)rbrer<><00> questions<6E>statsrKrLrNrO)
r<EFBFBD>r <00>TEAMrDrErFr.<00> get_statsrQrR)rr<>r<>rs r<00>create_father_packagez FatherSync.create_father_package<67>s<><00><00><1B>,<2C>,<2C><1D>"<22>"<22>#<23>-<2D>
<EFBFBD> <0B> <14>z<EFBFBD>z<EFBFBD>+<2B>/<2F>/<2F>1<>2<><04><1D><04>W<EFBFBD> <0A><1E><04>[<5B><19><1C> <0B> <0B>-<2D>-<2D>/<2F><04>W<EFBFBD> <0A><13><1E><1E>t<EFBFBD>z<EFBFBD>z<EFBFBD>$<24>q<EFBFBD>9<>G<EFBFBD><1E>L<><1A>rc
<00>,<00>|jd|jdt|j<00><00>t|j<00><00>t|j <00><00>t|jd<00>t|jd<00>d<05>S)zGet current sync status.r>r?r@rA)r>r?<00>pending_exports<74>pending_imports<74>unresolved_conflicts<74>total_exported<65>total_imported)r;r<>r<>r<>r<>rs r<00> sync_statuszFatherSync.sync_status<75>s}<00><00> <20>?<3F>?<3F>=<3D>9<><1F>?<3F>?<3F>=<3D>9<>"<22>4<EFBFBD>#;<3B>#;<3B>#=<3D>><3E>"<22>4<EFBFBD>#;<3B>#;<3B>#=<3D>><3E>$'<27><04>(E<>(E<>(G<>$H<>!<21>$<24>/<2F>/<2F>2E<32>"F<>G<>!<21>$<24>/<2F>/<2F>2E<32>"F<>G<>
<EFBFBD>
rr)NNNTF)F)<01>)"r$r%r&r'rrrr<rr:rSr r(rar rr<00>boolr<6C>rr*rr<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r!rrr-r-%s<><00><00><08>2<><EFBFBD>2<>h<EFBFBD>t<EFBFBD>n<EFBFBD>2<>*
<EFBFBD>$<24>
<EFBFBD> a<01>A<01>+<2B>A<01>#<23>A<01>(,<2C>,0<>$(<28>"&<26>!&<26> T<1B><17> <0B>$<24>T<1B><18><04>Z<EFBFBD>(<28>)<29>T<1B><17>t<EFBFBD>C<EFBFBD>y<EFBFBD>!<21> T<1B>
 <20> T<1B> <1F> T<1B>
<0E>T<1B>lX,<2C>t<EFBFBD>X,<2C><05>c<EFBFBD>3<EFBFBD>PT<50>Ua<55>Pb<50>Fb<46>@c<>X,<2C>t<15>;<3B><15> <0B><15><04><15><14>l<EFBFBD><14>x<EFBFBD><03>}<7D><14>:<<3C>K<EFBFBD><<3C>K<EFBFBD><<3C>D<EFBFBD><<3C> #<16>[<5B>#<16>+<2B>#<16>+<2B>#<16>J 
<EFBFBD>;<3B> 
<EFBFBD>)-<2D> /<16><1E>/<16><18>/<16>!<21><13> <0A> /<16>
<15> /<16>b9<>T<EFBFBD>$<24>Z<EFBFBD>9<>8<>T<EFBFBD>$<24>Z<EFBFBD>8<><19>$<24>|<7C>*<<3C><19>"<1B>3<EFBFBD><1B><04><1B>2

<EFBFBD>T<EFBFBD>

rr-)r'rDr]<00>pathlibrr<00>typingrrrrr <00> dataclassesr
r <00> memory_typesr r rrr.rrr-r!rr<00><module>r<>sO<00><01><04> <0C><0E><18><1D>3<>3<>)<29>K<>K<>"<22> <0B> <1B> <1B> <0B> <1B>{
<EFBFBD>{
r