char-slop/berry
multipurpose self-modifiable agentic harness
git clone https://git.t4t.associates/char-slop/berry
3d23fd2
main
1let database :Promise < IDBDatabase > | undefined ; 2 3function open () :Promise < IDBDatabase > { 4return database ??= new Promise (( resolve , reject ) => { 5if ( typeof indexedDB === "undefined" ) { 6return reject ( new Error ( "Your browser cannot save image drafts" )); 7} 8const request = indexedDB . open ( "berry.drafts" , 1 ); 9request . onupgradeneeded = () => request . result . createObjectStore ( "images" ); 10request . onerror = () => reject ( request . error ); 11request . onblocked = () => reject ( new Error ( "Close other berry tabs to enable image drafts" )); 12request . onsuccess = () => { 13request . result . onversionchange = () => request . result . close (); 14resolve ( request . result ); 15}; 16}); 17} 18 19/** Browser-local drafts, sharing a store with the original image drafts. */ 20export async function storedDraft < T > ( key :string , value ?:readonly T []) :Promise < T []> { 21const db = await open (); 22return await new Promise (( resolve , reject ) => { 23const transaction = db . transaction ( "images" , value === undefined ?"readonly" :"readwrite" ); 24const store = transaction . objectStore ( "images" ); 25const request = value === undefined 26 ?store . get ( key ) 27 :value . length === 0 28 ?store . delete ( key ) 29 :store . put ( value , key ); 30transaction . oncomplete = () => resolve ( value === undefined ?request . result ?? [] :[]); 31transaction . onabort = () => 32reject ( transaction . error ?? new Error ( "Image draft storage failed" )); 33}); 34}