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

122 lines
24 KiB
Plaintext
Raw Normal View History

2026-03-31 20:02:01 +00:00
<EFBFBD>
U<08>iMC<00><00><><00>dZddlZddlZddlZddlmZddlmZddlmZm Z m
Z
m Z m Z m Z ddlmZddlZddlmZmZmZmZmZmZGd<08>d <09>Zy)
z<EFBFBD>
AP Knowledge Base - Memory Directory Core
Hierarchical memory storage with aging, relevance scoring, and consolidation.
Based on the memdir pattern from Claude Code.
<EFBFBD>N)<01>Path)<01>datetime)<06>List<73>Dict<63>Optional<61>Tuple<6C>Set<65>Callable)<01> defaultdict)<06> MemoryEntry<72> MemoryQuery<72>
MemoryType<EFBFBD> MemoryScope<70> MemoryIndex<65>RelationshipTypec <00><><00>eZdZdZdZdZdZdZdefd<06>Z d<07>Z
de d efd
<EFBFBD>Z d e d efd <0C>Zd <0A>Zd e d efd<0E>Zded ee fd<10>Zded efd<11>Zded efd<12>Zded eee effd<14>Zd+deeded ee fd<17>Zd,d e ded ee fd<19>Zde de d efd<1C>Zd+ded eee e ffd<1E>Zde de d efd<1F>Z d-d e!d ee fd!<21>Z"d.d e!d e!fd"<22>Z#d#<23>Z$d$<24>Z%d e&fd%<25>Z'd e&fd&<26>Z(d+d'e&d(ed ee!e!ffd)<29>Z)y*)/<2F>MemoryDirectorya<79>
Core memory directory for hierarchical memory storage.
Memory layout:
<base_dir>/
MEMORY.md # Index file
facts/ # Fact memories
procedures/ # Procedure memories
observations/ # Observation memories
lessons/ # Lesson memories
archive/ # Archived memories
relationships.json # Memory relationship graph
<20><>i<>ag333333<33>?<3F>base_dirc<00><><00>t|<01>|_|j<00>i|_t t
<00>|_|j<00>y<00>N)rr<00>_ensure_directories<65> _memoriesr <00>list<73>_relationships<70> _load_all)<02>selfrs <20> memdir.py<70>__init__zMemoryDirectory.__init__+s8<00><00><1C>X<EFBFBD><0E><04> <0A> <0C> <20> <20>"<22>13<31><04><0E>MX<4D>Y]<5D>M^<5E><04><1B> <0C><0E><0E><18>c<00>Z<00>gd<01>}|D]"}|j|z jdd<02><03><00>$y)z/Create directory structure if it doesn't exist.)<05>facts<74>
procedures<EFBFBD> observations<6E>lessons<6E>archiveT<65><02>parents<74>exist_okN)r<00>mkdir)r<00>dirs<72>ds rrz#MemoryDirectory._ensure_directories2s4<00><00>L<><04><15> C<01>A<EFBFBD> <11>]<5D>]<5D>Q<EFBFBD> <1E> %<25> %<25>d<EFBFBD>T<EFBFBD> %<25> B<> Cr <00>mem_type<70>returnc<00>:<00>|j|j<00>d<01>z S)z$Get the directory for a memory type.<2E>s)r<00>value)rr-s r<00> _type_dirzMemoryDirectory._type_dir8s<00><00><13>}<7D>}<7D>(<28>.<2E>.<2E>!1<><11>3<>3<>3r <00>entryc<00><><00>djd<02>|jD<00><00>}|dd}|j|j<00>|j<00>d|<02>d<06>z S)z&Generate file path for a memory entry.<2E>c3<00>LK<00>|]}|j<00>s|dvr|nd<01><01><00>y<02>w)z-_<>_N)<01>isalnum)<02>.0<EFBFBD>cs r<00> <genexpr>z/MemoryDirectory._memory_path.<locals>.<genexpr>>s#<00><00><><00>W<>q<EFBFBD><11><19><19><1B><01>T<EFBFBD> <09>A<EFBFBD>s<EFBFBD>B<>W<>s<00>"$N<>2r7z.md)<05>join<69>namer2<00>type<70>id)rr3<00> safe_names r<00> _memory_pathzMemoryDirectory._memory_path<sN<00><00><16>G<EFBFBD>G<EFBFBD>W<>E<EFBFBD>J<EFBFBD>J<EFBFBD>W<>W<> <09><1D>c<EFBFBD>r<EFBFBD>N<EFBFBD> <09><13>~<7E>~<7E>e<EFBFBD>j<EFBFBD>j<EFBFBD>)<29>u<EFBFBD>x<EFBFBD>x<EFBFBD>j<EFBFBD><01>)<29><1B>C<EFBFBD>,H<>H<>Hr c <00><><00>|jj<00>tD]|}|j|<01>}|j <00>s<01>%|j d<01>D]D} |j d<02><03>}tj||<03>}||j|j<<00>F<00>~|jdz }|j <00>r^ tj|j <00><00>}|D]4} |j| dj!| d t#| d
<00>f<02><00>6yy#t$r}td|<03>d|<06><00><04>Yd}~<06><>d}~wwxYw#t$r}td |<06><00><02>Yd}~yd}~wwxYw) zLoad all memories from disk.<2E>*.md<6D>utf-8<><01>encodingzWarning: Failed to load <20>: N<>relationships.json<6F>source<63>targetr?z'Warning: Failed to load relationships: )r<00>clearrr2<00>exists<74>glob<6F> read_textr <00>from_frontmatterr@<00> Exception<6F>printr<00>json<6F>loadsr<00>appendr)
rr-<00>type_dir<69> file_path<74>contentr3<00>e<>rel_path<74>data<74>rels
rrzMemoryDirectory._load_allBsg<00><00> <0C><0E><0E><1C><1C><1E>"<22> G<01>H<EFBFBD><1B>~<7E>~<7E>h<EFBFBD>/<2F>H<EFBFBD><1B>?<3F>?<3F>$<24><18>%<25>]<5D>]<5D>6<EFBFBD>2<> G<01> <09>G<01>'<27>1<>1<>7<EFBFBD>1<>C<>G<EFBFBD>'<27>8<>8<><17>)<29>L<>E<EFBFBD>/4<>D<EFBFBD>N<EFBFBD>N<EFBFBD>5<EFBFBD>8<EFBFBD>8<EFBFBD>,<2C>  G<01> G<01><18>=<3D>=<3D>#7<>7<><08> <13>?<3F>?<3F> <1C> E<01><1B>z<EFBFBD>z<EFBFBD>(<28>"4<>"4<>"6<>7<><04><1F><16>C<EFBFBD><18>'<27>'<27><03>H<EFBFBD> <0A>6<>=<3D>=<3D><1C>X<EFBFBD><1D>(8<><13>V<EFBFBD><1B>(E<>F<><16><16> <1D><> !<21>G<01><19>4<>Y<EFBFBD>K<EFBFBD>r<EFBFBD>!<21><13>E<>F<>F<><46>G<01><><1D> E<01><15>?<3F><01>s<EFBFBD>C<>D<>D<><44> E<01>s2<00>AD<04>AE<00> E<07>'D=<07>=E<07> E&<03>E!<03>!E&c<00>n<00>tj<00>|_|j|<01>|_|jj
j dd<01><02>|jj|j<00>d<03><04>||j|j<|j<00>|jS)zk
Save a memory entry to disk.
Returns:
Path to the saved file
Tr'rErF) r<00>utcnow<6F> modified_atrBrW<00>parentr*<00>
write_text<EFBFBD>to_frontmatterrr@<00> _update_index)rr3s r<00>savezMemoryDirectory.save_s<><00><00>%<25>O<EFBFBD>O<EFBFBD>-<2D><05><19><1F>+<2B>+<2B>E<EFBFBD>2<><05><0F> <0E><0F><0F><1E><1E>$<24>$<24>T<EFBFBD>D<EFBFBD>$<24>A<> <0A><0F><0F>"<22>"<22>5<EFBFBD>#7<>#7<>#9<>G<EFBFBD>"<22>L<>$)<29><04><0E><0E>u<EFBFBD>x<EFBFBD>x<EFBFBD> <20> <0A><1A><1A><1C><14><EFBFBD><EFBFBD>r <00> memory_idc<00>`<00>|jj|<01>}|r|j<00>|S)zGet a memory by ID.)r<00>get<65>touch)rrer3s rrgzMemoryDirectory.getws'<00><00><14><0E><0E>"<22>"<22>9<EFBFBD>-<2D><05> <10> <11>K<EFBFBD>K<EFBFBD>M<EFBFBD><14> r c<00><><00>|jj|<01>}|sy|jr4|jj<00>r|jj <00>|j|=||j
vr |j
|=|j
j <00>D]/\}}|D<00><05>cgc]\}}||k7s<01> ||f<02><02>c}}|j
|<<00>1|j<00>|j<00>ycc}}w)zDelete a memory by ID.FT) rrgrWrM<00>unlinkr<00>items<6D>_save_relationshipsrc)rrer3<00>src<72>rels<6C>t<>rs r<00>deletezMemoryDirectory.delete~s<><00><00><14><0E><0E>"<22>"<22>9<EFBFBD>-<2D><05><14><18> <11>?<3F>?<3F>u<EFBFBD><EFBFBD><EFBFBD>5<>5<>7<> <11>O<EFBFBD>O<EFBFBD> "<22> "<22> $<24> <11>N<EFBFBD>N<EFBFBD>9<EFBFBD> %<25> <15><04>+<2B>+<2B> +<2B><14>#<23>#<23>I<EFBFBD>.<2E><1D>,<2C>,<2C>2<>2<>4<> S<01>I<EFBFBD>C<EFBFBD><14>;?<3F>'R<>4<EFBFBD>1<EFBFBD>a<EFBFBD>1<EFBFBD> <09>><3E><11>A<EFBFBD><06>'R<>D<EFBFBD> <1F> <1F><03> $<24> S<01> <0A> <20> <20>"<22> <0C><1A><1A><1C><13><> (Ss <00>, C4<08>:C4c<00><><00>|jj|<01>}|r |jsy|jdz }|j d<03><04>||jj
z }t jt|j<00>t|<04><00>||_d|jd<tj<00>j<00>|jd<y)zMove a memory to the archive.Fr&T)r)<00>archived<65> archived_at) rrgrWrr*r><00>shutil<69>move<76>str<74>metadatarr^<00> isoformat)rrer3<00> archive_dir<69>new_paths rr&zMemoryDirectory.archive<76>s<><00><00><14><0E><0E>"<22>"<22>9<EFBFBD>-<2D><05><14>E<EFBFBD>O<EFBFBD>O<EFBFBD><18><1A>m<EFBFBD>m<EFBFBD>i<EFBFBD>/<2F> <0B><13><19><19>4<EFBFBD><19>(<28><1E><15><1F><1F>!5<>!5<>5<><08><0E> <0B> <0B>C<EFBFBD><05><0F><0F>(<28>#<23>h<EFBFBD>-<2D>8<>"<22><05><0F>%)<29><05><0E><0E>z<EFBFBD>"<22>(0<><0F><0F>(9<>(C<>(C<>(E<><05><0E><0E>}<7D>%<25>r <00>queryc<00><00>g}|jj<00>D]<5D>}|j|<03>s<01>|jdk(r5|j |j
<00>}|dz|j <00>dzz}n_|jdk(r|j <00>}n?|jdk(rtd|jdz <00>}ndd|j<00>zz }|j||f<02><00><>|jd <09>d
<EFBFBD> <0B>|d |jS) z<>
Search memories matching the query.
Returns:
List of (entry, score) tuples sorted by score
<20> relevancegffffff<66>?g333333<33>?<3F> freshness<73>accessg<00>?g$@<40>c<00> <00>|dS)Nr<4E><00><00><01>xs r<00><lambda>z(MemoryDirectory.search.<locals>.<lambda><3E>s
<00><00>1<EFBFBD>Q<EFBFBD>4<EFBFBD>r T<><02>key<65>reverseN) r<00>values<65>matches<65>sort_by<62>relevance_score<72>text<78>freshness_score<72>min<69> access_count<6E>age_daysrU<00>sort<72>limit)rr|<00>resultsr3<00>scores r<00>searchzMemoryDirectory.search<63>s<><00><00><15><07><19>^<5E>^<5E>*<2A>*<2A>,<2C> +<2B>E<EFBFBD><18>=<3D>=<3D><15>'<27><18><15>}<7D>}<7D> <0B>+<2B><1D>-<2D>-<2D>e<EFBFBD>j<EFBFBD>j<EFBFBD>9<><05><1D><03> <0B>e<EFBFBD>&;<3B>&;<3B>&=<3D><03>&C<>C<><05><16><1D><1D>+<2B>-<2D><1D>-<2D>-<2D>/<2F><05><16><1D><1D>(<28>*<2A><1B>C<EFBFBD><15>!3<>!3<>d<EFBFBD>!:<3A>;<3B><05><1B>q<EFBFBD>5<EFBFBD>><3E>><3E>#3<>3<>4<><05> <13>N<EFBFBD>N<EFBFBD>E<EFBFBD>5<EFBFBD>><3E> *<2A>! +<2B>& <10> <0C> <0C><1E><14> <0C>6<><16>|<7C><05> <0B> <0B>$<24>$r <00>tags<67> match_allc<00><00>td<01>|D<00><00>}g}|jj<00>D]O}td<02>|jD<00><00>}|r||ks<01>'|j |<05><00>9||zs<01>?|j |<05><00>Q|S)zFind memories by tags.c3<00><K<00>|]}|j<00><00><01><00>y<00>wr<00><01>lower<65>r9ros rr;z/MemoryDirectory.find_by_tags.<locals>.<genexpr><3E>s<00><00><><00>.<2E>A<EFBFBD>a<EFBFBD>g<EFBFBD>g<EFBFBD>i<EFBFBD>.<2E><><00>c3<00><K<00>|]}|j<00><00><01><00>y<00>wrr<>r<>s rr;z/MemoryDirectory.find_by_tags.<locals>.<genexpr><3E>s<00><00><><00>;<3B>1<EFBFBD>Q<EFBFBD>W<EFBFBD>W<EFBFBD>Y<EFBFBD>;<3B>r<EFBFBD>)<05>setrr<>r<>rU)rr<>r<><00>tag_setr<74>r3<00>
entry_tagss r<00> find_by_tagszMemoryDirectory.find_by_tags<67>sy<00><00><15>.<2E><14>.<2E>.<2E><07><14><07><19>^<5E>^<5E>*<2A>*<2A>,<2C> *<2A>E<EFBFBD><1C>;<3B><05>
<EFBFBD>
<EFBFBD>;<3B>;<3B>J<EFBFBD><18><1A>j<EFBFBD>(<28><1B>N<EFBFBD>N<EFBFBD>5<EFBFBD>)<29><1A>Z<EFBFBD>'<27><1B>N<EFBFBD>N<EFBFBD>5<EFBFBD>)<29> *<2A><17>r <00> thresholdc<00><><00>g}|jj<00>D]E}|j|jk(r<01>|j||<04>}||k\s<01>5|j |<04><00>G|S)z<>
Find memories similar to the given entry.
Uses simple text similarity based on name, description, and content.
)rr<>r@<00> _similarityrU)rr3r<><00>similar<61>otherr<72>s r<00> find_similarzMemoryDirectory.find_similar<61>se<00><00> <15><07><19>^<5E>^<5E>*<2A>*<2A>,<2C> &<26>E<EFBFBD><14>x<EFBFBD>x<EFBFBD>5<EFBFBD>8<EFBFBD>8<EFBFBD>#<23><18><18>$<24>$<24>U<EFBFBD>E<EFBFBD>2<>E<EFBFBD><14> <09>!<21><17><0E><0E>u<EFBFBD>%<25>  &<26><17>r <00>a<>bc<00>^<00>dtdttfd<03>}||jdz|jzdz|jddz<00>}||jdz|jzdz|jddz<00>}|r|syt ||z<00>}t ||z<00>}|dkDr||z SdS) z4Calculate similarity between two memories (0.0-1.0).r<>r.c<00>B<00>td<01>|j<00>D<00><00>S)Nc3<00>ZK<00>|]#}t|<01>dkDs<01>|j<00><00><01><00>%y<01>w)<02>N)<02>lenr<6E>)r9<00>ws rr;zAMemoryDirectory._similarity.<locals>.get_words.<locals>.<genexpr><3E>s <00><00><><00>E<>Q<EFBFBD>#<23>a<EFBFBD>&<26>1<EFBFBD>*<2A>q<EFBFBD>w<EFBFBD>w<EFBFBD>y<EFBFBD>E<>s<00>+<01>+)r<><00>split)r<>s r<00> get_wordsz.MemoryDirectory._similarity.<locals>.get_words<64>s<00><00><16>E<>$<24>*<2A>*<2A>,<2C>E<>E<> Er <00> Ni<4E><00>r)rwr r><00> descriptionrXr<>)rr<>r<>r<><00>a_words<64>b_words<64> intersection<6F>unions rr<>zMemoryDirectory._similarity<74>s<><00><00> F<01>C<EFBFBD> F<01>C<EFBFBD><03>H<EFBFBD> F<01><1C>A<EFBFBD>F<EFBFBD>F<EFBFBD>S<EFBFBD>L<EFBFBD>1<EFBFBD>=<3D>=<3D>8<>3<EFBFBD>><3E><11><19><19>4<EFBFBD>C<EFBFBD><1F>P<>Q<><07><1B>A<EFBFBD>F<EFBFBD>F<EFBFBD>S<EFBFBD>L<EFBFBD>1<EFBFBD>=<3D>=<3D>8<>3<EFBFBD>><3E><11><19><19>4<EFBFBD>C<EFBFBD><1F>P<>Q<><07><16>g<EFBFBD><16><1A>7<EFBFBD>W<EFBFBD>,<2C>-<2D> <0C><13>G<EFBFBD>g<EFBFBD>%<25>&<26><05>',<2C>q<EFBFBD>y<EFBFBD>|<7C>e<EFBFBD>#<23>9<>c<EFBFBD>9r <00>dry_runc<00>f<00>g}t<00>}t|jj<00><00>}t |<04>D<00>]r\}}|j
|vr<01>||dzdD<00>]Q}|j
|vr<01>|j ||<07>}||jk\s<01>5|s<>|j||<07>|_ tt|j|jz<00><00>|_
t|j<00>t|j<00>kDr|j|_ t|j|j<00>|_tj <00>|_|j%|<06>|j'|j
<00>|j)||f<02>|j+|j
<00><00><01>T<00><01>u|S)z<>
Consolidate similar memories by merging them.
Returns:
List of merged (old, new) pairs
r<>N)r<>rrr<><00> enumerater@r<><00>CONSOLIDATION_THRESHOLD<4C>_merge_contentrXr<>r<>r<><00>max<61>
confidencerr^r_rdrqrU<00>add) rr<><00>merged<65> to_delete<74>entries<65>ir3r<><00>
similaritys r<00> consolidatezMemoryDirectory.consolidate<74>si<00><00><14><06><17>E<EFBFBD> <09><16>t<EFBFBD>~<7E>~<7E>,<2C>,<2C>.<2E>/<2F><07>!<21>'<27>*<2A> ,<2C>H<EFBFBD>A<EFBFBD>u<EFBFBD><14>x<EFBFBD>x<EFBFBD>9<EFBFBD>$<24><18> <20><11>1<EFBFBD><13><14><1D> ,<2C><05><18>8<EFBFBD>8<EFBFBD>y<EFBFBD>(<28><1C>!<21>-<2D>-<2D>e<EFBFBD>U<EFBFBD>;<3B>
<EFBFBD><1D><14>!=<3D>!=<3D>=<3D>"<22>(,<2C>(;<3B>(;<3B>E<EFBFBD>5<EFBFBD>(I<><05> <0A>%)<29>#<23>e<EFBFBD>j<EFBFBD>j<EFBFBD>5<EFBFBD>:<3A>:<3A>.E<>*F<>%G<><05>
<EFBFBD><1E>u<EFBFBD>0<>0<>1<>C<EFBFBD><05>8I<38>8I<38>4J<34>J<>05<30>0A<30>0A<30>E<EFBFBD>-<2D>+.<2E>u<EFBFBD>/?<3F>/?<3F><15>AQ<41>AQ<41>+R<><05>(<28>,4<>O<EFBFBD>O<EFBFBD>,=<3D><05>)<29><1D> <09> <09>%<25>(<28><1D> <0B> <0B>E<EFBFBD>H<EFBFBD>H<EFBFBD>-<2D><1A>M<EFBFBD>M<EFBFBD>5<EFBFBD>%<25>.<2E>1<><1D>M<EFBFBD>M<EFBFBD>%<25>(<28>(<28>+<2B>7 ,<2C>  ,<2C>B<16> r c<00>R<00>|j|jk(r |jSt|jj<00>jd<01><00>}t|jj<00>jd<01><00>}t ||z<00>}dj |<05>S)z.Merge content from two memories intelligently.<2E>
)rXr<><00>stripr<70>rr=)rr<>r<><00>a_lines<65>b_linesr<73>s rr<>zMemoryDirectory._merge_content+s|<00><00> <0C>9<EFBFBD>9<EFBFBD><01> <09> <09> !<21><14>9<EFBFBD>9<EFBFBD> <1C><16>a<EFBFBD>i<EFBFBD>i<EFBFBD>o<EFBFBD>o<EFBFBD>'<27>-<2D>-<2D>d<EFBFBD>3<>4<><07><15>a<EFBFBD>i<EFBFBD>i<EFBFBD>o<EFBFBD>o<EFBFBD>'<27>-<2D>-<2D>d<EFBFBD>3<>4<><07><15>g<EFBFBD><07>'<27>(<28><06><13>y<EFBFBD>y<EFBFBD><16> <20> r <00> max_age_daysc<00><><00>tj<00>j<00>|dzz
}g}|jj <00>D]1}|j
j<00>|ks<01>!|j |<04><00>3|S)z*Get memories older than the specified age.<2E><>Q)rr^<00> timestamprr<><00>
created_atrU)rr<><00>cutoff<66>staler3s r<00>get_stale_memoriesz"MemoryDirectory.get_stale_memories7sl<00><00><19><1F><1F>"<22>,<2C>,<2C>.<2E>,<2C><15>2F<32>G<><06><12><05><19>^<5E>^<5E>*<2A>*<2A>,<2C> $<24>E<EFBFBD><14><1F><1F>)<29>)<29>+<2B>f<EFBFBD>4<><15> <0C> <0C>U<EFBFBD>#<23> $<24><15> r c<00>~<00>|jdz }|j<00>sytj<00>j <00>|dzz
}d}|j d<04>D]7} |j <00>j}||kr|j<00>|dz }<04>9|S#t$r}td|<05>d|<07><00><04>Yd}~<07>[d}~wwxYw) z<>
Permanently delete archived memories older than max_age_days.
Returns:
Number of memories deleted
r&rr<>rDr<>zWarning: Failed to delete rHN) rrMrr^r<>rN<00>stat<61>st_mtimerjrQrR)rr<>rzr<><00>deletedrW<00>mtimerYs r<00>cleanup_archivezMemoryDirectory.cleanup_archiveBs<><00><00><1B>m<EFBFBD>m<EFBFBD>i<EFBFBD>/<2F> <0B><1A>!<21>!<21>#<23><14><19><1F><1F>"<22>,<2C>,<2C>.<2E>,<2C><15>2F<32>G<><06><13><07>$<24>)<29>)<29>&<26>1<> E<01>I<EFBFBD> E<01>!<21><0E><0E>(<28>1<>1<><05><18>6<EFBFBD>><3E><1D>$<24>$<24>&<26><1B>q<EFBFBD>L<EFBFBD>G<EFBFBD><47>  E<01><17><0E><><1D> E<01><15>2<>9<EFBFBD>+<2B>R<EFBFBD><01>s<EFBFBD>C<>D<>D<><44> E<01>s<00> 4B<02> B<<05>!B7<05>7B<c
<00><><00> <09>|jdz }g}|jj<00>D]{}|js<01>|jj |j<00>}|j t |j||j|j|j<00><02><00><00>}|jd<03>d<04><05>ddg}|j d<08>|j d<07>|j d <09>|j d<07>|d
|jD]!}|j |j<00><00><00>#t|<02>|jkDr+|j d t|<02>|jz
<00>d <0C><03>|j d<07>|j d <0A>|j d<07>tD]P<00> t!<00> fd<0E>|jj<00>D<00><00>}|j d<0F> j"<00>d|<07>d<11><05><00>Rdj%|<05>}t|<08>|j&kDr.|d
|j&}|dt|<08><00>d|j&<00>d<15>z }|j)|d<16><17>y
)z Update the MEMORY.md index file.z MEMORY.md)r>rWr<>r?r<>c<00><00>|jSr)r<>r<>s rr<>z/MemoryDirectory._update_index.<locals>.<lambda>ms
<00><00>1<EFBFBD><<3C><<3C>r Tr<54>z"# AP Knowledge Base - Memory Indexr5zBThis is an auto-generated index of memories. Do not edit manually.z## Recent MemoriesNz
... and z more memoriesz## Memory Typesc3<00>B<00>K<00>|]}|j<00>k(s<01>d<00><01><00>y<01>w)r<>N)r?)r9rYr-s <20>rr;z0MemoryDirectory._update_index.<locals>.<genexpr><3E>s<00><><00><><00>Q<>a<EFBFBD>a<EFBFBD>f<EFBFBD>f<EFBFBD><08>>P<><01>Q<>s<00><01>z- **z**: z memoriesr<73>z
> WARNING: Index truncated (z bytes, limit: <20>)rErF)rrr<>rW<00> relative_torUrr>r<>r?r<>r<><00>MAX_INDEX_LINES<45>to_liner<65>r<00>sumr1r=<00>MAX_INDEX_BYTESra)
r<00>
index_pathr<EFBFBD>r3rZ<00>lines<65>idx<64>countrXr-s
@rrczMemoryDirectory._update_index[s&<00><><00><19>]<5D>]<5D>[<5B>0<>
<EFBFBD><15><07><19>^<5E>^<5E>*<2A>*<2A>,<2C> <13>E<EFBFBD><14><EFBFBD><EFBFBD> <20>?<3F>?<3F>6<>6<>t<EFBFBD>}<7D>}<7D>E<><08><17><0E><0E>{<7B><1E><1A><1A>&<26> %<25> 1<> 1<><1E><1A><1A>$<24>/<2F>/<2F>  <12><13> <13> <10> <0C> <0C>/<2F><14> <0C>><3E>6<>r<EFBFBD>:<3A><05> <0A> <0C> <0C>Y<>Z<> <0A> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>)<29>*<2A> <0A> <0C> <0C>R<EFBFBD><18><1A>0<>D<EFBFBD>0<>0<>1<> (<28>C<EFBFBD> <11>L<EFBFBD>L<EFBFBD><13><1B><1B><1D> '<27> (<28> <0F>w<EFBFBD><<3C>$<24>.<2E>.<2E> .<2E> <11>L<EFBFBD>L<EFBFBD>:<3A>c<EFBFBD>'<27>l<EFBFBD>T<EFBFBD>5I<35>5I<35>&I<>%J<>.<2E>Y<> Z<> <0A> <0C> <0C>R<EFBFBD><18> <0A> <0C> <0C>&<26>'<27> <0A> <0C> <0C>R<EFBFBD><18>"<22> F<01>H<EFBFBD><17>Q<>4<EFBFBD>><3E>><3E>#8<>#8<>#:<3A>Q<>Q<>E<EFBFBD> <11>L<EFBFBD>L<EFBFBD>4<EFBFBD><08><0E><0E>/<2F>t<EFBFBD>E<EFBFBD>7<EFBFBD>)<29>D<> E<> F<01><17>)<29>)<29>E<EFBFBD>"<22><07> <0F>w<EFBFBD><<3C>$<24>.<2E>.<2E> .<2E><1D>3<>t<EFBFBD>3<>3<>4<>G<EFBFBD> <13>9<>#<23>g<EFBFBD>,<2C><1E><EFBFBD>W[<5B>Wk<57>Wk<57>Vl<56>lm<6C>n<> n<>G<EFBFBD><12><1D><1D>g<EFBFBD><07><1D>8r c<00> <00>|jdz }g}|jj<00>D].\}}|D]$\}}|j|||jd<02><03><00>&<00>0|j t j|d<03><04>d<05><06>y)zSave relationships to disk.rI<00>rJrKr?r<>)<01>indentrErFN)rrrkrUr1rarS<00>dumps)rrZr[rJ<00>targetsrK<00>rel_types rrlz#MemoryDirectory._save_relationships<70>s<><00><00><17>=<3D>=<3D>#7<>7<><08><11><04>#<23>2<>2<>8<>8<>:<3A> <13>O<EFBFBD>F<EFBFBD>G<EFBFBD>$+<2B> <13> <20><06><08><14> <0B> <0B>$<24>$<24>$<24>N<EFBFBD>N<EFBFBD><12><13> <13> <13> <11><1B><1B>D<EFBFBD>J<EFBFBD>J<EFBFBD>t<EFBFBD>A<EFBFBD>6<><17><1B>Ir c <00><><00>t|j<00>iiitd<01>|jj <00>D<00><00>ddd<04>}d}d}|jj <00>D]<5D>}|j
j }|jj }|j}|dj|d<02>dz|d|<|dj|d<02>dz|d|<|dj|d<02>dz|d|<||j<00>z }||jz }<03><>|jr6|t|j<00>z |d <|t|j<00>z |d
<|S) z*Get statistics about the memory directory.c3<00>2K<00>|]}t|<01><00><01><00>y<00>wr)r<>)r9rps rr;z,MemoryDirectory.get_stats.<locals>.<genexpr><3E>s<00><00><><00>&T<>!<21>s<EFBFBD>1<EFBFBD>v<EFBFBD>&T<>s<00>rr<>)<07>total_memories<65>by_type<70>by_scope<70> by_source<63>total_relationships<70> avg_age_days<79>avg_confidencer<65>r<>r<>r<>r<>r<>) r<>rr<>rr<>r?r1<00>scoperJrgr<>r<>)r<00>stats<74> total_age<67>total_confidencer3ror0rms r<00> get_statszMemoryDirectory.get_stats<74>sf<00><00>"<22>$<24>.<2E>.<2E>1<><19><1A><1B>#&<26>&T<>t<EFBFBD>7J<37>7J<37>7Q<37>7Q<37>7S<37>&T<>#T<><1D>!<21>
<EFBFBD><05><16> <09><1E><18><19>^<5E>^<5E>*<2A>*<2A>,<2C>
1<>E<EFBFBD><15>
<EFBFBD>
<EFBFBD> <20> <20>A<EFBFBD><15> <0B> <0B>!<21>!<21>A<EFBFBD><17>,<2C>,<2C>C<EFBFBD>"'<27> <09>"2<>"6<>"6<>q<EFBFBD>!<21>"<<3C>q<EFBFBD>"@<40>E<EFBFBD>)<29> <1C>Q<EFBFBD> <1F>#(<28><1A>#4<>#8<>#8<><11>A<EFBFBD>#><3E><11>#B<>E<EFBFBD>*<2A> <1D>a<EFBFBD> <20>&+<2B>K<EFBFBD>&8<>&<<3C>&<<3C>S<EFBFBD>!<21>&D<>q<EFBFBD>&H<>E<EFBFBD>+<2B> <1E>s<EFBFBD> #<23> <15><15><1E><1E>)<29> )<29>I<EFBFBD> <1C><05> 0<> 0<> 0<> <1C>
1<> <10>><3E>><3E>$-<2D><03>D<EFBFBD>N<EFBFBD>N<EFBFBD>0C<30>$C<>E<EFBFBD>.<2E> !<21>&6<><13>T<EFBFBD>^<5E>^<5E>9L<39>&L<>E<EFBFBD>"<22> #<23><14> r c <00>`<00>|jj<00>D<00>cgc]}|j<00><00><02>c}|jj <00>D<00><02><03><04>cgc]\}}|D]\}}|||j
d<01><03><03><00>!c}}}}t j<00>j<00>dd<03>Scc}wcc}}}}w)z$Export all memories as a dictionary.r<>z1.0)<04>memories<65> relationships<70> exported_at<61>version) rr<>rbrrkr1rr^ry)rr3rmrn<00>tgtr\s r<00>
export_allzMemoryDirectory.export_all<6C>s<><00><00>>B<01>^<5E>^<5E>=R<>=R<>=T<>U<>E<EFBFBD><15>-<2D>-<2D>/<2F>U<>"&<26>!4<>!4<>!:<3A>!:<3A>!<<3C> <0E><0E> <1E>C<EFBFBD><14> $<24><0E><1D>C<EFBFBD><13> "<22>!<21><1F>I<EFBFBD>I<EFBFBD><12><0E><12><0E>$<24>?<3F>?<3F>,<2C>6<>6<>8<><1C> 
<EFBFBD>
<EFBFBD><EFBFBD>U<><55>s <00>B#<04>$B( r[<00> overwritec<00><><00>d}d}|jdg<00>D]N} tj|<05>}|j|jvr|s|dz }<04>9|j |<06>|dz }<03>P|jdg<00>D]4}|j|dj|dt|d <00>f<02><00>6|j<00>||fS#t $r}td|<07><00><02>|dz }Yd}~<07><>d}~wwxYw)
zz
Import memories from a dictionary.
Returns:
(imported_count, skipped_count)
rr<>r<>z"Warning: Failed to import memory: NrrJrKr?) rgr rPr@rrdrQrRrrUrrl) rr[r<00>imported<65>skipped<65>mem_textr3rYr\s r<00> import_datazMemoryDirectory.import_data<74>s<00><00><15><08><13><07><1C><08><08><1A>R<EFBFBD>0<> <1D>H<EFBFBD> <1D>#<23>4<>4<>X<EFBFBD>><3E><05><18>8<EFBFBD>8<EFBFBD>t<EFBFBD>~<7E>~<7E>-<2D>i<EFBFBD><1B>q<EFBFBD>L<EFBFBD>G<EFBFBD><1C><14> <09> <09>%<25> <20><18>A<EFBFBD> <0A><08> <1D><18>8<EFBFBD>8<EFBFBD>O<EFBFBD>R<EFBFBD>0<> <0E>C<EFBFBD> <10> <1F> <1F><03>H<EFBFBD> <0A> .<2E> 5<> 5<><14>X<EFBFBD><1D> 0<><13>V<EFBFBD><1B> =<3D>><3E> <0E> <0E>
<0A> <20> <20>"<22><17><17> <20> <20><><1D> <1D><15>:<3A>1<EFBFBD>#<23>><3E>?<3F><17>1<EFBFBD> <0C><07><> <1D>s<00>4C<02>C<02> C+<05>C&<05>&C+N)F)g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)<01>Z)im)*<2A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__r<5F>r<><00>MAX_MEMORY_FILESr<53>rrrrr2r rBrrdrwrrg<00>boolrqr&r rr<00>floatr<74>r<>r<>r<>r<>r<><00>intr<74>r<>rcrlrr<>rr
r<>r rrrs<><00><00> <08><1A>O<EFBFBD><1B>O<EFBFBD><1A><14>"<22><1B><19><14><19>C<01> 4<>*<2A>4<><14>4<>I<01>+<2B>I<01>$<24>I<01> E<01>:<1F>+<2B><1F>$<24><1F>0<15>S<EFBFBD><15>X<EFBFBD>k<EFBFBD>%:<3A><15><14><03><14><04><14>0<14><13><14><14><14>$%<25>K<EFBFBD>%<25>D<EFBFBD><15>{<7B>E<EFBFBD>7I<37>1J<31>,K<>%<25>@<17><14>c<EFBFBD><19><17>t<EFBFBD><17><04>[<5B>HY<48><17>"<17>+<2B><17>%<25><17>$<24>{<7B>J[<5B><17>$:<3A>[<5B>:<3A>[<5B>:<3A>U<EFBFBD>:<3A>"-<16>4<EFBFBD>-<16>D<EFBFBD><15>{<7B>K<EFBFBD>?W<>9X<39>4Y<34>-<16>^
!<21> <0B>
!<21> <0B>
!<21><03>
!<21> <15>s<EFBFBD> <15>D<EFBFBD><1B><M<> <15><17>C<EFBFBD><17>#<23><17>2/9<>b J<01><15>4<EFBFBD><15>B
<EFBFBD>D<EFBFBD>
<EFBFBD>" !<21><04> !<21><14> !<21>%<25><03>S<EFBFBD><08>/<2F> !r r)r<00>osrSru<00>pathlibrr<00>typingrrrrr r
<00> collectionsr <00>fnmatch<63> memory_typesr r rrrrrr<>r r<00><module>rs=<00><01><04>
<EFBFBD> <0B> <0A><18><1D>=<3D>=<3D>#<23><0E><02><02> V!<21>V!r