memorio 4.7.3 → 4.9.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/SUMMARY.md CHANGED
@@ -12,6 +12,7 @@
12
12
  * [Store](markdown/STORE.md) - Persistent localStorage management
13
13
  * [Session](markdown/SESSION.md) - Temporary sessionStorage management
14
14
  * [IDB](markdown/IDB.md) - IndexedDB for large data storage
15
+ * [SQLite](markdown/SQLITE.md) - SQLite in the browser via sql.js (WASM)
15
16
 
16
17
  ## Typed & Validated
17
18
 
@@ -26,6 +27,8 @@
26
27
  ## Memory System
27
28
 
28
29
  * [Memory](markdown/MEMORY.md) - Semantic memory layer with TTL, confidence, scopes
30
+ * [Node Attachment](markdown/MEMORY-ATTACHMENT.md) - Dynamic node attachment system
31
+ * [Synchronization](markdown/SYNC.md) - Local-first sync, journal, conflict resolution, multi-device evolution
29
32
 
30
33
  ## Platform & Compatibility
31
34
 
package/index.cjs CHANGED
@@ -2,8 +2,10 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var x=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=x(()=>{});var m,Ot,Je;exports.propertyName = void 0;exports.internal = void 0;var O=x(()=>{a();m={debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null,mutations:[],undoStack:[],redoStack:[],maxHistory:100,historyEnabled:false},Ot={get debug(){return m.debug},set debug(e){m.debug=e;},get tracking(){return m.tracking},set tracking(e){m.tracking=e;},get trackedPaths(){return m.trackedPaths},clearTrackedPaths(){m.trackedPaths.clear();},get locked(){return m.locked},set locked(e){m.locked=e;},get lastAccessedPath(){return m.lastAccessedPath},set lastAccessedPath(e){m.lastAccessedPath=e;},get stateVersion(){return m.stateVersion},bumpStateVersion(){return m.stateVersion=(m.stateVersion||0)+1,m.stateVersion},get currentContext(){return m.currentContext},set currentContext(e){m.currentContext=e;},get mutations(){return m.mutations},get undoStack(){return m.undoStack},get redoStack(){return m.redoStack},get maxHistory(){return m.maxHistory},set maxHistory(e){m.maxHistory=e;},get historyEnabled(){return m.historyEnabled},set historyEnabled(e){m.historyEnabled=e;},recordMutation(e){m.historyEnabled&&(m.mutations.push(e),m.mutations.length>m.maxHistory&&m.mutations.shift(),m.undoStack.push(e),m.undoStack.length>m.maxHistory&&m.undoStack.shift(),m.redoStack=[]);},popUndo(){let e=m.undoStack.pop();return e&&m.redoStack.push(e),e},popRedo(){let e=m.redoStack.pop();return e&&m.undoStack.push(e),e},canUndo(){return m.undoStack.length>0},canRedo(){return m.redoStack.length>0},clearHistory(){m.mutations=[],m.undoStack=[],m.redoStack=[];},clearRedo(){m.redoStack=[];}},Je=["list","state","store","idb","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],exports.propertyName=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),exports.internal=Ot;});exports.message = void 0;var c,v=x(()=>{a();O();exports.message=(...e)=>{exports.internal.debug===true&&console.debug(...e);},c=exports.message;});function X(){let e=globalThis;if(typeof e.crypto<"u"&&e.crypto.randomUUID)return e.crypto.randomUUID();if(typeof e.crypto<"u"&&e.crypto.getRandomValues){let t=new Uint8Array(16);return e.crypto.getRandomValues(t),Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}return `session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`}function K(){let e=globalThis;return e.Deno&&e.Deno.version?"deno":typeof process<"u"&&process.versions&&process.versions.node?"node":typeof globalThis<"u"&&typeof globalThis.ServiceWorkerGlobalScope<"u"?"edge":typeof window<"u"&&typeof document<"u"?"browser":"unknown"}function ae(){return K()==="browser"}function le(){return K()==="node"}function ce(){return K()==="deno"}function ue(){return K()==="edge"}function me(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function de(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function fe(){return typeof indexedDB<"u"}function $t(){return typeof globalThis.dispatchEvent=="function"}function q(){let e=K(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:me()!==null,hasLocalStorage:de()!==null,hasIndexedDB:fe(),hasDispatchEvent:$t(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:X()}}function Qe(){let e=q(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(n,o={}){this.type=n,this.detail=o;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,n){z.has(r)||z.set(r,[]),z.get(r).push(n);},t.removeEventListener=function(r,n){let o=z.get(r);if(o){let s=o.indexOf(n);s>-1&&o.splice(s,1);}},t.dispatchEvent=function(r){let n=z.get(r.type);return n&&n.forEach(o=>{try{o(r);}catch(s){console.error("Event listener error:",s);}}),true});}function F(e){let t=e||`context_${X()}`;be(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return pe.set(t,r),{id:t,state:r.state,store:{get:n=>{let o=r.store.get(n);return o?JSON.parse(o):null},set:(n,o)=>{r.store.set(n,JSON.stringify(o));},remove:n=>r.store.delete(n),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:n=>{let o=r.session.get(n);return o?JSON.parse(o):null},set:(n,o)=>{r.session.set(n,JSON.stringify(o));},remove:n=>r.session.delete(n),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:n=>r.cache.get(n),set:(n,o)=>r.cache.set(n,o),remove:n=>r.cache.delete(n),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function ge(){return Array.from(pe.keys())}function ye(e){return pe.delete(e)}function be(e){exports.internal.currentContext=e;}var z,pe,J=x(()=>{a();O();z=new Map;pe=new Map;});var It={};var Ze=x(()=>{a();w();v();exports.idb.db.create=(e,t=1)=>new Promise((r,n)=>{if(!exports.idb.db.support())return n(new Error("IndexedDB not supported"));let o=globalThis.indexedDB.open(e,t);o.onerror=()=>{c(`IndexedDB error: ${o.error?.message}`),n(o.error);},o.onsuccess=()=>{c(`Database ${e} connected successfully`),r(o.result);},o.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var Nt={};var et=x(()=>{a();w();exports.idb.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await exports.idb.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Vt={};var tt=x(()=>{a();w();exports.idb.db.exist=e=>idbases?.some(t=>t.name===e);});var Bt={};var rt=x(()=>{a();w();exports.idb.db.quota=()=>navigator.storage.estimate();});var Lt={};var ot=x(()=>{a();w();v();exports.idb.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let o=indexedDB.deleteDatabase(e);o.onsuccess=()=>{c(`${e} database removed successfully`),exports.idb.db.list(),t();},o.onerror=()=>{console.error(`Error removing ${e}:`,o.error),r(o.error);},o.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var Ht={};var nt=x(()=>{a();w();v();exports.idb.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await exports.idb.db.create(t.name,t.version),n=Array.from(r.objectStoreNames),o=0;for(let s of n){let i=await exports.idb.table.size(r,s);o+=i;}t.size=o,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var Ut={};var st=x(()=>{a();w();exports.idb.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var Jt={};var it=x(()=>{a();w();v();exports.idb.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var zt={};var at=x(()=>{a();w();v();exports.idb.table.create=(e,t)=>new Promise((r,n)=>{try{let s=(Number(exports.idb.db.version(e))||0)+1,i=indexedDB.open(e,s);i.onupgradeneeded=d=>{let f=d.target.result;if(!f.objectStoreNames.contains(t)){let g=f.createObjectStore(t,{keyPath:"id",autoIncrement:!0});g.createIndex("id","id",{unique:!0}),g.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),exports.idb.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),n(i.error);};}catch(o){console.error("Critical error in table.create:",o),n(o);}});});var Kt={};var lt=x(()=>{a();w();v();exports.idb.table.size=(e,t)=>new Promise((r,n)=>{if(!e)return n(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let o=0,s=0,f=e.transaction([t],"readonly").objectStore(t).openCursor();f.onsuccess=async g=>{let y=g.target.result;if(y){try{let T=y.value;o+=JSON.stringify(T).length;}catch(T){c(`Error stringifying IDB value tracking size:${T}`);}s++,s%200===0&&await new Promise(T=>setTimeout(T,0)),y.continue();}else r(o);},f.onerror=()=>{n(f.error);};});});var qt={};var ct=x(()=>{a();w();v();exports.idb.data.delete=(e,t,r)=>new Promise((n,o)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let g=i.transaction(t,"readwrite").objectStore(t).delete(r);g.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),n();},g.onerror=()=>{i.close(),o(g.error);};},s.onerror=()=>o(s.error);});exports.idb.data.delete.all=(e,t)=>new Promise((r,n)=>{let o=indexedDB.open(e);o.onsuccess=s=>{let i=s.target.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} not found`));let g=i.transaction(t,"readwrite").objectStore(t).clear();g.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},g.onerror=()=>{i.close(),n(g.error);};},o.onerror=()=>n(o.error);});});var Ft={};var ut=x(()=>{a();w();v();exports.idb.data.set=(e,t,r)=>new Promise((n,o)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} does not exist in ${e}`));let g=i.transaction(t,"readwrite").objectStore(t).put(r);g.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),n(g.result);},g.onerror=y=>{i.close(),c(`Database insert error: ${g.error?.message}`),o(g.error);};},s.onerror=()=>{o(s.error);};});});var Wt={};var mt=x(()=>{a();w();exports.idb.data.get=(e,t,r)=>new Promise((n,o)=>{let s=indexedDB.open(e);s.onsuccess=i=>{let d=i.target.result;if(!d.objectStoreNames.contains(t))return d.close(),o(new Error(`Table ${t} not found in ${e}`));let y=d.transaction(t,"readonly").objectStore(t).get(r);y.onsuccess=()=>{d.close(),n(y.result);},y.onerror=()=>{d.close(),o(y.error);};},s.onerror=()=>{o(s.error);};});});var Gt;exports.idb = void 0;var w=x(()=>{a();J();Gt=fe(),exports.idb={db:{},table:{},data:{}};Gt?(async()=>(Object.defineProperty(exports.idb,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(Ze(),It)),Promise.resolve().then(()=>(et(),Nt)),Promise.resolve().then(()=>(tt(),Vt)),Promise.resolve().then(()=>(rt(),Bt)),Promise.resolve().then(()=>(ot(),Lt)),Promise.resolve().then(()=>(nt(),Ht)),Promise.resolve().then(()=>(st(),Ut)),Promise.resolve().then(()=>(it(),Jt)),Promise.resolve().then(()=>(at(),zt)),Promise.resolve().then(()=>(lt(),Kt)),Promise.resolve().then(()=>(ct(),qt)),Promise.resolve().then(()=>(ut(),Ft)),Promise.resolve().then(()=>(mt(),Wt))]),Object.preventExtensions(exports.idb),Object.seal(exports.idb),Object.freeze(exports.idb)))():(exports.idb._disabled=true,exports.idb._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});a();a();O();v();a();var h={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let n=t?o=>{let s=o;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(s)):Promise.resolve().then(()=>t(s))}:void 0;n&&globalThis.addEventListener(e,n),n&&(globalThis.events[e]=n);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};a();v();var U=new Map,ze=(e,t,r)=>{let n=[];if(t.type&&t.type!=="any"){let o=Array.isArray(e)?"array":typeof e;if(o!==t.type)return n.push(`${r}: expected ${t.type}, got ${o}`),{valid:false,errors:n}}if(t.enum&&!t.enum.includes(e)&&n.push(`${r}: value must be one of [${t.enum.map(String).join(", ")}]`),t.validator){let o=t.validator(e);o!==true&&n.push(`${r}: ${typeof o=="string"?o:"validation failed"}`);}if(typeof e=="number"&&(t.min!==void 0&&e<t.min&&n.push(`${r}: value ${e} is less than minimum ${t.min}`),t.max!==void 0&&e>t.max&&n.push(`${r}: value ${e} exceeds maximum ${t.max}`)),typeof e=="string"&&(t.min!==void 0&&e.length<t.min&&n.push(`${r}: string length ${e.length} is less than minimum ${t.min}`),t.max!==void 0&&e.length>t.max&&n.push(`${r}: string length ${e.length} exceeds maximum ${t.max}`),t.pattern&&!t.pattern.test(e)&&n.push(`${r}: string does not match required pattern`)),t.type==="object"&&e&&typeof e=="object"&&!Array.isArray(e)){if(t.required)for(let o of t.required)o in e||n.push(`${r}: missing required property '${o}'`);if(t.properties){for(let[o,s]of Object.entries(t.properties))if(o in e&&e[o]!==void 0){let i=ze(e[o],s,`${r}.${o}`);i.valid||n.push(...i.errors||[]);}}}return n.length===0?{valid:true}:{valid:false,errors:n}},Ke=(e,t)=>{let r=U.get(e);return r?ze(t,r,e):{valid:true}},qe=(e,t)=>{typeof t=="function"?U.set(e,{validator:t}):U.set(e,t),c(`[memorio schema] Registered schema for '${e}'`);},Fe=e=>U.delete(e),We=()=>Array.from(U.keys()),Ct=e=>U.get(e),M={register:qe,validate:Ke,unregister:Fe,list:We,get:Ct};var Y=Symbol("memorio.target"),Ge=new WeakMap,R=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[Y]!==void 0)return R(e[Y],t);if(t){if(t.has(e))return e;t.add(e);}let r=e.constructor?.name;if(r!=="Object"&&r!=="Array")return e;let n=Array.isArray(e)?[]:{};for(let o of Reflect.ownKeys(e))n[o]=R(e[o],t);return n},Ye=(e,t,r=".")=>t.concat(e).join(r),Xe=(e,t,r=[])=>{let n=o=>{try{h.set(o,{detail:{name:o}});}catch{}};return new Proxy(e,{get(o,s){if(s==="__path")return r.length>0?"state."+r.join("."):"state";if(s===Y||o[Y]!==void 0)return o;if(s==="list")return c('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(o));if(typeof s=="string"){let i=r.length>0?"state."+r.concat(s).join("."):"state."+s;exports.internal.lastAccessedPath=i,exports.internal.tracking&&exports.internal.trackedPaths.add(i);}if(s==="_lastPath")return exports.internal.lastAccessedPath;if(s==="remove")return i=>(delete o[i],true);if(s==="removeAll")return ()=>{try{for(let i in o)typeof o[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete o[i];}catch(i){console.error(i);}};if(Object.isFrozen(o[s]))return o[s];if(s==="lock"||s==="unlock"){let i=Reflect.get(o,s);if(i)return i}try{let i=Reflect.get(o,s);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let d=Ge.get(i);return d||(d=Xe(i,t,r.concat(s)),Ge.set(i,d)),d}return i}catch(i){console.error("Error: ",i);return}},set(o,s,i){if(exports.internal.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(Je.includes(s))return console.error("key "+s+" is protected"),false;if(o[s]&&typeof o[s]=="object"&&Object.isFrozen(o[s]))return console.error(`Error: state '${s}' is locked`),false;if(o[s]&&typeof o[s]=="object"&&o[s].__locked)return console.error(`Error: state '${s}' is locked. Use state.${s}.unlock() to enable modifications.`),false;try{let d=Ye(s,r),f=R(i),g=M.validate(d,f);if(!g.valid)return exports.internal.debug&&console.error(`[memorio schema] Validation failed for '${d}':`,g.errors),c(`[memorio schema] Validation failed for '${d}': `+(g.errors?.join(", ")||"unknown error")),!1;if(t({action:"set",path:d,target:o,newValue:f,previousValue:Reflect.get(o,s)}),n("state."+d),Reflect.set(o,s,f),exports.internal.bumpStateVersion(),o[s]&&typeof o[s]=="object"){let y=o[s];if(y&&typeof y=="object")try{Object.defineProperty(y,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(y,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(y,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${s}' is now locked.`);}}),Object.defineProperty(y,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(y,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${s}' is now unlocked.`);}});}catch{}}return !0}catch(d){return console.error("Error in set trap:",d),false}},deleteProperty(o,s){try{let i=Ye(s,r),d=Reflect.get(o,s);return t({action:"delete",path:i,target:o,previousValue:d}),Reflect.deleteProperty(o,s)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(o){return Reflect.ownKeys(o)},getOwnPropertyDescriptor(o,s){return Reflect.getOwnPropertyDescriptor(o,s)}})},b=Xe({},e=>{exports.internal.historyEnabled&&exports.internal.recordMutation({path:e.path,action:e.action,newValue:e.newValue,previousValue:e.previousValue,timestamp:Date.now()});});b.lock=()=>{exports.internal.locked=true,c("State is now locked. All modifications are blocked.");};b.unlock=()=>{exports.internal.locked=false,c("State is now unlocked. Modifications are allowed.");};a();J();O();v();var k=de(),he=new Map;function N(){let t=exports.internal.currentContext||""||"default";return he.has(t)||he.set(t,new Map),he.get(t)}var I=k!==null;function j(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_store_"}function ve(e){return !e||typeof e!="string"?(console.warn("[memorio store] key is empty or not a string - operation aborted"),""):e.length>512?(console.warn(`[memorio store] key "${e}" exceeds 512 chars - operation aborted`),""):j()+e}function _t(e){let t=I?k.getItem(e):N().get(e);return t&&JSON.parse(t)}function Dt(e,t){let r=JSON.stringify(t);I?k.setItem(e,r):N().set(e,r);}function Rt(e){if(I){if(k.getItem(e))return k.removeItem(e),true}else if(N().has(e))return N().delete(e),true;return false}var S=new Proxy({},{});Object.defineProperty(globalThis,"store",{value:S,enumerable:false,configurable:true});Object.defineProperties(S,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key - returning null"),null;try{return _t(ve(e))}catch(t){exports.message(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let n=S.get(r);n&&(t[r]=n);}catch(n){console.debug(`[memorio store] getMultiple error for key "${r}":`,n);}return t}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio store] store.set() called with empty or null key - write aborted"),false;let r=ve(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable - write aborted for key: "+e),exports.message("Storing functions is not secure and is blocked for safety."),false;try{Dt(r,t);}catch(n){return exports.message(`Error setting store item '${e}': ${n}`),false}return true}},remove:{value:e=>{if(!e)return console.debug("[memorio store] store.remove() called with empty or null key - returning false"),false;let t=ve(e);if(!t)return false;try{return Rt(t)}catch(r){exports.message(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>S.remove(e)},removeAll:{value:()=>{if(I){let e=[];for(let t=0;t<k.length;t++){let r=k.key(t);r?.startsWith(j())&&e.push(r);}e.forEach(t=>k.removeItem(t));}else N().clear();return true}},clearAll:{value:()=>(S.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return I?Object.keys(k).forEach(t=>{if(t.startsWith(j())){let r=k.getItem(t);r&&(e+=r.length);}}):N().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>I},list:{value:()=>{let e={};try{if(I)for(let t=0;t<k.length;t++){let r=k.key(t);if(r?.startsWith(j())){let n=r.replace(j(),""),o=k.getItem(r);if(o!==null)try{e[n]=JSON.parse(o);}catch{e[n]=o;}}}else N().forEach((t,r)=>{if(r.startsWith(j())){let n=r.replace(j(),"");try{e[n]=JSON.parse(t);}catch{e[n]=t;}}});}catch(t){exports.message(`Error listing store items: ${t}`);}return e}}});Object.freeze(S);a();J();O();v();var P=me(),xe=new Map;function L(){let t=exports.internal.currentContext||""||"default";return xe.has(t)||xe.set(t,new Map),xe.get(t)}var B=P!==null;function V(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_session_"}function Se(e){return !e||typeof e!="string"?(console.warn("[memorio session] key is empty or not a string - operation aborted"),""):e.length>512?(console.warn(`[memorio session] key "${e}" exceeds 512 chars - operation aborted`),""):V()+e}function Mt(e){let t=B?P.getItem(e):L().get(e);return t&&JSON.parse(t)}function At(e,t){let r=JSON.stringify(t);B?P.setItem(e,r):L().set(e,r);}function jt(e){if(B){if(P.getItem(e))return P.removeItem(e),true}else if(L().has(e))return L().delete(e),true;return false}var C=new Proxy({},{});Object.defineProperty(globalThis,"session",{value:C,enumerable:false,configurable:true});Object.defineProperties(C,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key - returning null"),null;try{return Mt(Se(e))}catch(t){exports.message(`Error parsing session item '${e}':${t}`);}return null}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio session] session.set() called with empty or null key - write aborted"),false;let r=Se(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable - write aborted for key: "+e),exports.message("It's not secure to session functions."),false;try{At(r,t);}catch(n){return exports.message(`Error setting session item '${e}': ${n}`),false}return true}},remove:{value:e=>{if(!e)return console.warn("[memorio session] session.remove() called with empty or null key - returning false"),false;let t=Se(e);if(!t)return false;try{return jt(t)}catch(r){exports.message(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>C.remove(e)},removeAll:{value:()=>{if(B){let e=[];for(let t=0;t<P.length;t++){let r=P.key(t);r?.startsWith(V())&&e.push(r);}e.forEach(t=>P.removeItem(t));}else L().clear();return true}},clearAll:{value:()=>(C.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return B?Object.keys(P).forEach(t=>{if(t.startsWith(V())){let r=P.getItem(t);r&&(e+=r.length);}}):L().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>B},list:{value:()=>{let e={};try{if(B)for(let t=0;t<P.length;t++){let r=P.key(t);if(r?.startsWith(V())){let n=r.replace(V(),""),o=P.getItem(r);if(o!==null)try{e[n]=JSON.parse(o);}catch{e[n]=o;}}}else L().forEach((t,r)=>{if(r.startsWith(V())){let n=r.replace(V(),"");try{e[n]=JSON.parse(t);}catch{e[n]=t;}}});}catch(t){exports.message(`Error listing session items: ${t}`);}return e}}});Object.freeze(C);a();var _={},Q=new Proxy({},{get(e,t){let r=t;return r==="get"?n=>_[n]:r==="set"?(n,o)=>{_[n]=o;}:r==="remove"?n=>(delete _[n],true):r==="removeAll"?()=>(Object.keys(_).forEach(n=>delete _[n]),true):r==="clear"?()=>(Object.keys(_).forEach(n=>delete _[n]),true):r==="list"?()=>({..._}):_[r]},set(e,t,r){return _[t]=r,true},deleteProperty(e,t){return delete _[t],true}});Object.freeze(Q);w();a();v();var dt=false,Yt=(e,t=null,r=true)=>{dt||(console.warn('DEPRECATED: "observer" is deprecated and will be removed in future versions. Please use "useObserver" instead.'),dt=true);let n=s=>typeof s=="string"?s:s&&typeof s=="object"&&s.__path?s.__path:null,o=n(e);if(!e&&!t){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&t){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(o){let s=o.split(".");if(s[0]!=="state"&&s[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${o}' string is incorrect!`);return}}if(e&&!t){let s=n(e);if(!s)return;globalThis.observer?.list?.[s]&&h.remove(s),c(`called: ${s}`);return}if(e&&t){let s=n(e);if(!s)return;if(typeof e!="string"&&!(e&&typeof e=="object")){console.error("Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value");return}let i=Array.isArray(t)?t:[t];globalThis.observer?.list?.[s]&&h.remove(s),i.forEach(f=>{typeof f=="function"&&h.listen(s,f,r);});return}},Z=Yt;Object.defineProperties(Z,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(h.remove(e),delete globalThis.events[e]);}},removeAll:{get:()=>{let e=globalThis.observer,t=e?.list;return t&&Object.keys(t).forEach(r=>{e?.remove?.(r);}),true}},has:{value:e=>!!globalThis.observer?.list?.[e]}});a();v();O();globalThis.useObserver||(globalThis.useObserver=null);Object.defineProperty(globalThis,"useObserver",{value:null,writable:true,enumerable:false,configurable:true});var ee=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],n=Array.isArray(t)&&!t.__path?t:[t];try{return n.forEach(o=>{let s="";if(typeof o=="function"){let i=exports.propertyName(o);i&&(s=i);}else typeof o=="object"&&o!==null&&(s=o.__path||(typeof o.toString=="function"&&o.toString()!=="[object Object]"?o.toString():""));if(s){s=s.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=s.startsWith("store.")||s.startsWith("state.")?s:"state."+s;h.listen(i,()=>e()),r.push(i);}else {exports.internal.clearTrackedPaths(),exports.internal.tracking=!0;try{e();}catch{}exports.internal.tracking=!1,exports.internal.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),h.listen(i,()=>e()),r.push(i));});}}),r.length>0?c(`useObserver: Monitoring ${r.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{r.forEach(o=>{typeof h.remove=="function"&&(h.remove(o),c(`useObserver: Stopped monitoring "${o}"`));});}}catch(o){return c(`useObserver Error: ${o}`),()=>{}}});globalThis.useObserver=ee;Object.freeze(globalThis.useObserver);v();a();O();function Xt(){return exports.internal.debug===true}function ft(){if(!globalThis.store)return {};let e={},t=globalThis.store;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let n=t.get(r);n!=null&&(e[r]=n);}catch{}}return e}function pt(){if(!globalThis.session)return {};let e={},t=globalThis.session;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let n=t.get(r);n!=null&&(e[r]=n);}catch{}}return e}var Qt=()=>{if(Xt()){if(globalThis.state){let e=globalThis.state.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.state,console.table(t);}if(globalThis.store&&console.table(ft()),globalThis.session&&console.table(pt()),globalThis.cache){let e=globalThis.cache.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=globalThis.cache,console.table(t);}}},Zt=()=>{let e=t=>{if(!t)return 0;if(typeof t.list=="function")try{let r=t.list();return Object.keys(r).length}catch{}return Object.keys(t).length};return {stateKeys:e(globalThis.state),storeKeys:e(globalThis.store),sessionKeys:e(globalThis.session),cacheKeys:e(globalThis.cache),idbDatabases:0,lastUpdate:new Date().toISOString()}},W=e=>{globalThis[e]&&typeof globalThis[e].clear=="function"?globalThis[e].clear():console.error(`Module ${e} not found or does not support clear()`);},er=()=>{W("state"),W("store"),W("session"),W("cache");},tr=()=>{let e=()=>{if(globalThis.state)try{return typeof globalThis.state.list=="function"?globalThis.state.list():globalThis.state}catch{return}},t=()=>ft(),r=()=>pt(),n=()=>{if(globalThis.cache)try{return typeof globalThis.cache.list=="function"?globalThis.cache.list():globalThis.cache}catch{return}},o={state:e(),store:t(),session:r(),cache:n(),exportedAt:new Date().toISOString()};return JSON.stringify(o,null,2)},rr=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,n])=>{globalThis.state&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(globalThis.state[r]=n);}),t.store&&globalThis.store&&typeof globalThis.store.set=="function"&&Object.entries(t.store).forEach(([r,n])=>{globalThis.store.set(r,n);}),t.session&&globalThis.session&&typeof globalThis.session.set=="function"&&Object.entries(t.session).forEach(([r,n])=>{globalThis.session.set(r,n);}),t.cache&&globalThis.cache&&Object.entries(t.cache).forEach(([r,n])=>{globalThis.cache&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(globalThis.cache[r]=n);});}catch(t){console.error("%c\u2717 Import failed:","color: #F44336",t);}},or=(e,t)=>{if(!globalThis[e]){console.error(`Module ${e} not found`);return}let r=globalThis[e],n=r[t];if(console.debug(`\u{1F441} Watching ${e}.${t} (initial: ${JSON.stringify(n)})`),e==="state"&&globalThis.memorio?.dispatch){let o=s=>{s.detail?.name?.includes(t)&&console.debug(`\u{1F441} Change: ${e}.${t} =`,s.detail.value);};r.addEventListener?.("memorio-change",o);}},nr=()=>{console.debug(`
6
- \u{1F9E0} Memorio DevTools Help
5
+ var v=(e,t)=>()=>(e&&(t=e(e=0)),t);var a=v(()=>{});exports.DEV = void 0;exports.PROD = void 0;var L=v(()=>{a();exports.DEV=!(typeof process<"u"),exports.PROD=!exports.DEV;});var qe,y,Vr,Ct;exports.propertyName = void 0;exports.internal = void 0;var j=v(()=>{a();qe="__memorio_internal_state",y=globalThis[qe]||{debug:false,tracking:false,trackedPaths:new Set,locked:false,lastAccessedPath:"",stateVersion:0,currentContext:null,mutations:[],undoStack:[],redoStack:[],maxHistory:100,historyEnabled:false};globalThis[qe]||(globalThis[qe]=y);Vr={get debug(){return y.debug},set debug(e){y.debug=e;},get tracking(){return y.tracking},set tracking(e){y.tracking=e;},get trackedPaths(){return y.trackedPaths},clearTrackedPaths(){y.trackedPaths.clear();},get locked(){return y.locked},set locked(e){y.locked=e;},get lastAccessedPath(){return y.lastAccessedPath},set lastAccessedPath(e){y.lastAccessedPath=e;},get stateVersion(){return y.stateVersion},bumpStateVersion(){return y.stateVersion=(y.stateVersion||0)+1,y.stateVersion},get currentContext(){return y.currentContext},set currentContext(e){y.currentContext=e;},get mutations(){return y.mutations},get undoStack(){return y.undoStack},get redoStack(){return y.redoStack},get maxHistory(){return y.maxHistory},set maxHistory(e){y.maxHistory=e;},get historyEnabled(){return y.historyEnabled},set historyEnabled(e){y.historyEnabled=e;},recordMutation(e){y.historyEnabled&&(y.mutations.push(e),y.mutations.length>y.maxHistory&&y.mutations.shift(),y.undoStack.push(e),y.undoStack.length>y.maxHistory&&y.undoStack.shift(),y.redoStack=[]);},popUndo(){let e=y.undoStack.pop();return e&&y.redoStack.push(e),e},popRedo(){let e=y.redoStack.pop();return e&&y.undoStack.push(e),e},canUndo(){return y.undoStack.length>0},canRedo(){return y.redoStack.length>0},clearHistory(){y.mutations=[],y.undoStack=[],y.redoStack=[];},clearRedo(){y.redoStack=[];}},Ct=["list","state","store","idb","sqlite","observer","useObserver","remove","removeAll","_platform","_capabilities","_sessionId"],exports.propertyName=(e,t)=>String(t!==void 0?t:e).replace("() => ",""),exports.internal=Vr;});exports.message = void 0;var c,S=v(()=>{a();j();L();exports.message=(...e)=>{exports.DEV&&exports.internal.debug===true&&console.debug(...e);},c=exports.message;});function ve(){let e=globalThis;if(typeof e.crypto<"u"&&e.crypto.randomUUID)return e.crypto.randomUUID();if(typeof e.crypto<"u"&&e.crypto.getRandomValues){let t=new Uint8Array(16);return e.crypto.getRandomValues(t),Array.from(t,r=>r.toString(16).padStart(2,"0")).join("")}return `session_${Date.now()}_${Math.random().toString(36).substring(2,15)}`}function ue(){let e=globalThis;return e.Deno&&e.Deno.version?"deno":typeof process<"u"&&process.versions&&process.versions.node?"node":typeof globalThis<"u"&&typeof globalThis.ServiceWorkerGlobalScope<"u"?"edge":typeof window<"u"&&typeof document<"u"?"browser":"unknown"}function Le(){return ue()==="browser"}function Ne(){return ue()==="node"}function Ve(){return ue()==="deno"}function He(){return ue()==="edge"}function Ue(){try{if(typeof sessionStorage<"u"){let e="__memorio_test__";return sessionStorage.setItem(e,"1"),sessionStorage.removeItem(e),sessionStorage}}catch{}return null}function Je(){try{if(typeof localStorage<"u"){let e="__memorio_test__";return localStorage.setItem(e,"1"),localStorage.removeItem(e),localStorage}}catch{}return null}function Be(){return typeof indexedDB<"u"}function de(){let e=globalThis;return typeof e.WebAssembly>"u"||typeof e.WebAssembly.instantiate!="function"?false:typeof e.window<"u"}function Ur(){return typeof globalThis.dispatchEvent=="function"}function fe(){let e=ue(),t=typeof globalThis.isSecureContext<"u"?globalThis.isSecureContext:e==="browser";return {platform:e,hasSessionStorage:Ue()!==null,hasLocalStorage:Je()!==null,hasIndexedDB:Be(),hasSqlJs:de(),hasDispatchEvent:Ur(),hasNavigator:typeof navigator<"u",hasProcess:typeof process<"u",isSecureContext:t,sessionId:ve()}}function It(){let e=fe(),t=globalThis;e.hasDispatchEvent||(t.dispatchEvent=function(r){return true},typeof CustomEvent>"u"&&(t.CustomEvent=class{type;detail;constructor(o,n={}){this.type=o,this.detail=n;}})),typeof t.addEventListener!="function"&&(t.addEventListener=function(r,o){ce.has(r)||ce.set(r,[]),ce.get(r).push(o);},t.removeEventListener=function(r,o){let n=ce.get(r);if(n){let s=n.indexOf(o);s>-1&&n.splice(s,1);}},t.dispatchEvent=function(r){let o=ce.get(r.type);return o&&o.forEach(n=>{try{n(r);}catch(s){console.error("Event listener error:",s);}}),true});}function me(e){let t=e||`context_${ve()}`;Qe(t);let r={state:{},store:new Map,session:new Map,cache:new Map};return xe.set(t,r),{id:t,state:r.state,store:{get:o=>{let n=r.store.get(o);return n?JSON.parse(n):null},set:(o,n)=>{r.store.set(o,JSON.stringify(n));},remove:o=>r.store.delete(o),removeAll:()=>r.store.clear(),clearAll:()=>r.store.clear(),size:()=>r.store.size,isPersistent:false},session:{get:o=>{let n=r.session.get(o);return n?JSON.parse(n):null},set:(o,n)=>{r.session.set(o,JSON.stringify(n));},remove:o=>r.session.delete(o),removeAll:()=>r.session.clear(),clearAll:()=>r.session.clear(),size:()=>r.session.size,isPersistent:false},cache:{get:o=>r.cache.get(o),set:(o,n)=>r.cache.set(o,n),remove:o=>r.cache.delete(o),removeAll:()=>r.cache.clear(),clear:()=>r.cache.clear()}}}function ze(){return Array.from(xe.keys())}function Ke(e){return xe.delete(e)}function Qe(e){exports.internal.currentContext=e;}var ce,Ie,xe,K=v(()=>{a();j();ce=new Map;Ie="__memorio_contexts__",xe=globalThis[Ie]||new Map;globalThis[Ie]||(globalThis[Ie]=xe);});function X(){let t=exports.internal.currentContext||""||"default";return Fe.has(t)||Fe.set(t,new Map),Fe.get(t)}function Y(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_store_"}function We(e){return !e||typeof e!="string"?(console.warn("[memorio store] key is empty or not a string - operation aborted"),""):e.length>512?(console.warn(`[memorio store] key "${e}" exceeds 512 chars - operation aborted`),""):Y()+e}function Jr(e){let t=G?A.getItem(e):X().get(e);return t&&JSON.parse(t)}function Br(e,t){let r=JSON.stringify(t);G?A.setItem(e,r):X().set(e,r);}function zr(e){if(G){if(A.getItem(e))return A.removeItem(e),true}else if(X().has(e))return X().delete(e),true;return false}var A,Fe,G,Ye;exports.store = void 0;var ne=v(()=>{a();K();j();S();A=Je(),Fe=new Map;G=A!==null;Ye="__memorio_store_instance__";globalThis[Ye]?exports.store=globalThis[Ye]:(exports.store=new Proxy({},{}),Object.defineProperties(exports.store,{get:{value:e=>{if(!e)return console.warn("[memorio store] store.get() called with empty or null key - returning null"),null;try{return Jr(We(e))}catch(t){exports.message(`Error parsing store item '${e}': ${t}`);}return null}},getMultiple:{value:e=>{let t={};for(let r of e)try{let o=exports.store.get(r);o&&(t[r]=o);}catch(o){console.debug(`[memorio store] getMultiple error for key "${r}":`,o);}return t}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio store] store.set() called with empty or null key - write aborted"),false;let r=We(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio store] functions are not storable - write aborted for key: "+e),exports.message("Storing functions is not secure and is blocked for safety."),false;try{Br(r,t);}catch(o){return exports.message(`Error setting store item '${e}': ${o}`),false}return true}},remove:{value:e=>{if(!e)return console.debug("[memorio store] store.remove() called with empty or null key - returning false"),false;let t=We(e);if(!t)return false;try{return zr(t)}catch(r){exports.message(`Error removing store item '${e}': ${r}`);}return false}},delete:{value:e=>exports.store.remove(e)},removeAll:{value:()=>{if(G){let e=[];for(let t=0;t<A.length;t++){let r=A.key(t);r?.startsWith(Y())&&e.push(r);}e.forEach(t=>A.removeItem(t));}else X().clear();return true}},clearAll:{value:()=>(exports.store.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return G?Object.keys(A).forEach(t=>{if(t.startsWith(Y())){let r=A.getItem(t);r&&(e+=r.length);}}):X().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>G},list:{value:()=>{let e={};try{if(G)for(let t=0;t<A.length;t++){let r=A.key(t);if(r?.startsWith(Y())){let o=r.replace(Y(),""),n=A.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else X().forEach((t,r)=>{if(r.startsWith(Y())){let o=r.replace(Y(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){exports.message(`Error listing store items: ${t}`);}return e}}}),Object.freeze(exports.store),globalThis[Ye]=exports.store);});var Wr={};var Lt=v(()=>{a();T();S();exports.idb.db.create=(e,t=1)=>new Promise((r,o)=>{if(!exports.idb.db.support())return o(new Error("IndexedDB not supported"));let n=globalThis.indexedDB.open(e,t);n.onerror=()=>{c(`IndexedDB error: ${n.error?.message}`),o(n.error);},n.onsuccess=()=>{c(`Database ${e} connected successfully`),r(n.result);},n.onupgradeneeded=()=>{c(`Database ${e} upgrade/creation initiated`);};});});var Yr={};var Nt=v(()=>{a();T();exports.idb.db.list=async()=>{if(!("indexedDB"in globalThis)||!indexedDB.databases)return [];try{let e=await indexedDB.databases();return globalThis.idbases=e||[],await exports.idb.db.size(),globalThis.idbases}catch(e){return console.error("Error listing databases:",e),[]}};});var Gr={};var Vt=v(()=>{a();T();exports.idb.db.exist=e=>idbases?.some(t=>t.name===e);});var Xr={};var Ht=v(()=>{a();T();exports.idb.db.quota=()=>navigator.storage.estimate();});var Zr={};var Ut=v(()=>{a();T();S();exports.idb.db.delete=e=>new Promise((t,r)=>{c(`Removing database ${e}...`),(()=>{let n=indexedDB.deleteDatabase(e);n.onsuccess=()=>{c(`${e} database removed successfully`),exports.idb.db.list(),t();},n.onerror=()=>{console.error(`Error removing ${e}:`,n.error),r(n.error);},n.onblocked=()=>{console.warn(`Deletion of ${e} is blocked. Please close other tabs.`);};})();});});var eo={};var Jt=v(()=>{a();T();S();exports.idb.db.size=async()=>{if(!(!idbases||idbases.length===0))for(let e=0;e<idbases.length;e++){let t=idbases[e];try{let r=await exports.idb.db.create(t.name,t.version),o=Array.from(r.objectStoreNames),n=0;for(let s of o){let i=await exports.idb.table.size(r,s);n+=i;}t.size=n,r.close();}catch(r){c(`Could not calculate size for ${t.name}:${r}`);}}};});var to={};var Bt=v(()=>{a();T();exports.idb.db.version=e=>{let t=0;for(let r of idbases){r.name===e&&(t=r.version);break}return t};});var ro={};var zt=v(()=>{a();T();S();exports.idb.db.support=()=>{let e="indexedDB"in globalThis;return e||c("Your environment doesn't support IndexedDB"),e};});var oo={};var Kt=v(()=>{a();T();S();exports.idb.table.create=(e,t)=>new Promise((r,o)=>{try{let s=(Number(exports.idb.db.version(e))||0)+1,i=indexedDB.open(e,s);i.onupgradeneeded=l=>{let f=l.target.result;if(!f.objectStoreNames.contains(t)){let g=f.createObjectStore(t,{keyPath:"id",autoIncrement:!0});g.createIndex("id","id",{unique:!0}),g.createIndex("data","data",{unique:!1}),c(`Table ${t} created in ${e}`);}},i.onsuccess=()=>{i.result.close(),exports.idb.db.list(),r();},i.onerror=()=>{console.error(`Error creating table ${t}:`,i.error),o(i.error);};}catch(n){console.error("Critical error in table.create:",n),o(n);}});});var no={};var Qt=v(()=>{a();T();S();exports.idb.table.size=(e,t)=>new Promise((r,o)=>{if(!e)return o(new Error("Database instance is required"));if(!e.objectStoreNames.contains(t))return r(0);let n=0,s=0,f=e.transaction([t],"readonly").objectStore(t).openCursor();f.onsuccess=async g=>{let b=g.target.result;if(b){try{let P=b.value;n+=JSON.stringify(P).length;}catch(P){c(`Error stringifying IDB value tracking size:${P}`);}s++,s%200===0&&await new Promise(P=>setTimeout(P,0)),b.continue();}else r(n);},f.onerror=()=>{o(f.error);};});});var so={};var Ft=v(()=>{a();T();S();exports.idb.data.delete=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} not found`));let g=i.transaction(t,"readwrite").objectStore(t).delete(r);g.onsuccess=()=>{i.close(),c(`Record ${r} deleted from ${t}`),o();},g.onerror=()=>{i.close(),n(g.error);};},s.onerror=()=>n(s.error);});exports.idb.data.delete.all=(e,t)=>new Promise((r,o)=>{let n=indexedDB.open(e);n.onsuccess=s=>{let i=s.target.result;if(!i.objectStoreNames.contains(t))return i.close(),o(new Error(`Table ${t} not found`));let g=i.transaction(t,"readwrite").objectStore(t).clear();g.onsuccess=()=>{i.close(),c(`All data cleared from ${t}`),r();},g.onerror=()=>{i.close(),o(g.error);};},n.onerror=()=>o(n.error);});});var io={};var Wt=v(()=>{a();T();S();exports.idb.data.set=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=()=>{let i=s.result;if(!i.objectStoreNames.contains(t))return i.close(),n(new Error(`Table ${t} does not exist in ${e}`));let g=i.transaction(t,"readwrite").objectStore(t).put(r);g.onsuccess=()=>{i.close(),c(`Data saved in ${e}.${t}`),o(g.result);},g.onerror=b=>{i.close(),c(`Database insert error: ${g.error?.message}`),n(g.error);};},s.onerror=()=>{n(s.error);};});});var ao={};var Yt=v(()=>{a();T();exports.idb.data.get=(e,t,r)=>new Promise((o,n)=>{let s=indexedDB.open(e);s.onsuccess=i=>{let l=i.target.result;if(!l.objectStoreNames.contains(t))return l.close(),n(new Error(`Table ${t} not found in ${e}`));let b=l.transaction(t,"readonly").objectStore(t).get(r);b.onsuccess=()=>{l.close(),o(b.result);},b.onerror=()=>{l.close(),n(b.error);};},s.onerror=()=>{n(s.error);};});});var lo;exports.idb = void 0;var T=v(()=>{a();K();L();lo=Be(),exports.idb={db:{},table:{},data:{}};lo?(async()=>(Object.defineProperty(exports.idb,"db",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"table",{value:{},writable:true,configurable:true}),Object.defineProperty(exports.idb,"data",{value:{},writable:true,configurable:true}),Object.defineProperty(globalThis,"idbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(Lt(),Wr)),Promise.resolve().then(()=>(Nt(),Yr)),Promise.resolve().then(()=>(Vt(),Gr)),Promise.resolve().then(()=>(Ht(),Xr)),Promise.resolve().then(()=>(Ut(),Zr)),Promise.resolve().then(()=>(Jt(),eo)),Promise.resolve().then(()=>(Bt(),to)),Promise.resolve().then(()=>(zt(),ro)),Promise.resolve().then(()=>(Kt(),oo)),Promise.resolve().then(()=>(Qt(),no)),Promise.resolve().then(()=>(Ft(),so)),Promise.resolve().then(()=>(Wt(),io)),Promise.resolve().then(()=>(Yt(),ao))]),Object.preventExtensions(exports.idb),Object.seal(exports.idb),Object.freeze(exports.idb)))():(exports.idb._disabled=true,exports.idb._warning="IndexedDB is not available in this environment (Node.js/Deno). Use store or session for persistence.",exports.DEV&&console.warn("Memorio IDB: IndexedDB is not available in this environment. Use store or session for data persistence."));});var yo={};function fo(){let e=globalThis;return typeof e.document<"u"&&typeof e.document.createElement=="function"}function mo(e){let t=globalThis;return t.__memorioSqlJsScript===e?Promise.resolve():(et||(et=new Promise((r,o)=>{if(t.initSqlJs&&typeof t.initSqlJs=="function"){t.__memorioSqlJsScript=e,r();return}if(!fo()){o(new Error("memorio sqlite: no document available to load sql.js"));return}let n=t.document.createElement("script");n.src=e,n.async=true,n.onload=()=>{t.__memorioSqlJsScript=e,r();},n.onerror=()=>o(new Error(`memorio sqlite: failed to load sql.js from ${e}`)),t.document.head.appendChild(n);})),et)}var we,_e,Gt,co,uo,et,po,Xt=v(()=>{a();D();K();S();we=null,_e=null,Gt="https://cdn.jsdelivr.net/npm/sql.js/dist/sql-wasm-browser.js",co=Gt.replace(/sql-wasm-browser\.js$/,""),uo=e=>(globalThis.sqliteWasmBase||co)+e,et=null;po=async()=>{let e=globalThis;return typeof e.initSqlJs=="function"?e.initSqlJs:(await mo(Gt),e.initSqlJs||e)};exports.sqlite.db.support=()=>de();exports.sqlite.db.getSQL=async()=>{if(_e)return _e;if(we)return we;let e=globalThis,t=e.sqliteConfig||{},r=(async()=>{if(typeof t.loader=="function")return await t.loader();let o=await po(),s=await(typeof o=="function"?o:o&&(o.default||o))({locateFile:t.locateFile||uo});return e.sqliteVersion=s?.version||"sql.js",c("Memorio SQLite: sql.js engine loaded"),s})();we=r;try{return _e=await r,_e}catch(o){try{exports.sqlite._disabled=!0;}catch{}try{exports.sqlite._warning="Memorio SQLite: sql.js could not be loaded. Install sql.js (npm i sql.js) and pass a loader via sqlite.config({ loader: () => <your sql.js import>() }).";}catch{}throw console.warn("Memorio SQLite: failed to load sql.js",o),o}finally{we=null;}};exports.sqlite.db.version=()=>globalThis.sqliteVersion||null;});function go(){let e=N.sqliteConfig||{};return e.namespace?`ns:${e.namespace}`:"default"}function tt(e){return `memorio:sqlite:db:${go()}:${e}`}function bo(e){let t=e instanceof Uint8Array?e:new Uint8Array(e),r="",o=t.byteLength;for(let n=0;n<o;n++)r+=String.fromCharCode(t[n]);return typeof btoa=="function"?btoa(r):typeof Buffer<"u"?Buffer.from(t).toString("base64"):""}function ho(e){if(typeof Buffer<"u")return new Uint8Array(Buffer.from(e,"base64"));if(typeof atob!="function")throw new Error("memorio sqlite: no base64 decoder available");let t=atob(e),r=t.length,o=new Uint8Array(r);for(let n=0;n<r;n++)o[n]=t.charCodeAt(n);return o}function Ee(e){return new Promise(t=>{let r=N.__sqliteDbs&&N.__sqliteDbs[e];if(!r||typeof r.export!="function"){t(false);return}try{let o=r.export();exports.store.set(tt(e),bo(o)),c(`Memorio SQLite: persisted '${e}' to store`),t(!0);}catch(o){console.warn("Memorio SQLite: persist snapshot failed",o),t(false);}})}function rt(e){let t=exports.store.get(tt(e));if(!t)return null;try{return ho(t)}catch{return null}}function vo(e){exports.store.remove(tt(e));}function er(e,t){if(!(!t||typeof t.updateHook!="function")){Zt[e]=true;try{t.updateHook(()=>{re[e]&&clearTimeout(re[e]),re[e]=setTimeout(()=>{re[e]=null,Ee(e);},250);});}catch(r){console.warn("Memorio SQLite: could not attach updateHook",r);}}}var N,Zt,re,tr=v(()=>{a();D();ne();S();N=globalThis,Zt={},re={};exports.sqlite.db.persist=async(e="memorio")=>Ee(e);exports.sqlite.db.download=async(e="memorio",t=`${e}.sqlite`)=>{let r=globalThis;if(!(r.__sqliteDbs&&r.__sqliteDbs[e]))return console.warn(`Memorio SQLite: cannot download '${e}' - database not found. Create it with sqlite.db.create('${e}').`),false;let n;try{n=await exports.sqlite.db.export(e);}catch(f){return console.warn("Memorio SQLite: export failed during download",f),false}if(!n)return false;if(typeof r.document>"u"||typeof r.Blob>"u")return console.warn("Memorio SQLite: sqlite.db.download() requires a browser environment."),false;let s=r.URL||r.webkitURL;if(!s||typeof s.createObjectURL!="function")return false;let i=s.createObjectURL(new Blob([n],{type:"application/x-sqlite3"})),l=r.document.createElement("a");return l.style.display="none",l.href=i,l.download=t,r.document.body.appendChild(l),l.click(),setTimeout(()=>{try{s.revokeObjectURL(i);}catch{}l.remove();},1e3),true};exports.sqlite.db.close=async(e="memorio")=>{let t=N.__sqliteDbs&&N.__sqliteDbs[e];if(t&&typeof t.close=="function"){try{await Ee(e);}catch{}try{t.close();}catch(r){console.warn("Memorio SQLite: close failed",r);}}if(N.__sqliteDbs&&delete N.__sqliteDbs[e],N.sqlbases){let r=N.sqlbases.findIndex(o=>o&&o.name===e);r>-1&&N.sqlbases.splice(r,1);}delete Zt[e],re[e]&&(clearTimeout(re[e]),re[e]=null),vo(e);};exports.sqlite.db.loadSnapshot=rt;exports.sqlite.db.saveSnapshot=Ee;});var xo={};var rr=v(()=>{a();D();S();tr();exports.sqlite.db.create=async(e="memorio",t={})=>{let r=await exports.sqlite.db.getSQL(),o=globalThis,n=!!(t&&t.persistence)||!!(o.sqliteConfig&&o.sqliteConfig.persistence),s;if(n&&!t.data){let b=rt(e);b&&(s=b);}let i=t&&t.data||s,l;i&&typeof i.byteLength=="number"?(l=new r.Database(i),c(`Memorio SQLite: database '${e}' opened (persistence=${n})`)):(l=new r.Database,c(`Memorio SQLite: database '${e}' created (persistence=${n})`));let f={...t,persistence:n};o.__sqliteDbs||(o.__sqliteDbs={}),o.__sqliteDbs[e]=l,o.sqlbases||(o.sqlbases=[]);let g=o.sqlbases.findIndex(b=>b&&b.name===e);return g>-1?o.sqlbases[g]={name:e,db:l,persistence:f.persistence}:o.sqlbases.push({name:e,db:l,persistence:f.persistence}),n&&er(e,l),l};});var So={};var or=v(()=>{a();D();exports.sqlite.db.get=(e="memorio")=>{let t=globalThis.__sqliteDbs;if(!t||!t[e])throw new Error(`SQLite database '${e}' does not exist. Create it with sqlite.db.create('${e}').`);return t[e]};});var wo={};var nr=v(()=>{a();D();S();exports.sqlite.db.delete=e=>{let t=globalThis.__sqliteDbs;if(!t||!t[e])return false;try{t[e].close();}catch{}delete t[e];let r=globalThis;return r.sqlbases&&(r.sqlbases=r.sqlbases.filter(o=>o&&o.name!==e)),c(`Memorio SQLite: database '${e}' deleted`),true};});var _o={};var sr=v(()=>{a();D();exports.sqlite.db.list=()=>{let e=globalThis.__sqliteDbs;return e?Object.keys(e):[]};});var Eo={};var ir=v(()=>{a();D();exports.sqlite.db.size=async e=>{let t=globalThis.__sqliteDbs;if(!t)return 0;let r=n=>n&&(n.byteLength||n.length)||0;if(e){let n=exports.sqlite.db.get(e);return r(n.export())}let o=0;for(let n of Object.keys(t))try{o+=r(t[n].export());}catch{}return o};});var ko={};var ar=v(()=>{a();D();exports.sqlite.db.export=async(e="memorio")=>exports.sqlite.db.get(e).export();});var Po={};var lr=v(()=>{a();D();exports.sqlite.db.import=async(e,t)=>exports.sqlite.db.create(e,{data:t});});var To={};var cr=v(()=>{a();D();S();exports.sqlite.query.run=async(e="memorio",t,r=[])=>{let o=exports.sqlite.db.get(e);return c(`Memorio SQLite: run -> ${t}`),o.run(t,r),o.getRowsModified()};});var Co={};var ur=v(()=>{a();D();exports.sqlite.query.select=async(e="memorio",t,r=[])=>{let n=exports.sqlite.db.get(e).prepare(t,r),s=[];try{for(;n.step();)s.push(n.getAsObject());}finally{try{n.free();}catch{}}return s};});var Do={};var dr=v(()=>{a();D();exports.sqlite.data.set=async(e="memorio",t,r=[])=>exports.sqlite.query.run(e,t,r);});var $o={};var fr=v(()=>{a();D();exports.sqlite.data.get=async(e="memorio",t,r=[])=>{let o=await exports.sqlite.query.select(e,t,r);return o.length?o[0]:null};});var Oo;exports.sqlite = void 0;var D=v(()=>{a();K();L();Oo=de(),exports.sqlite={db:{},query:{},data:{}};exports.sqlite.config=e=>{let t=globalThis;return t.sqliteConfig={...t.sqliteConfig,...e},e&&e.wasmUrl&&(t.sqliteWasmBase=e.wasmUrl.endsWith("/")?e.wasmUrl:e.wasmUrl+"/"),exports.sqlite};Object.defineProperty(exports.sqlite,"ready",{enumerable:false,configurable:false,get:()=>{let e=globalThis;return e.sqliteReady||(e.sqliteReady=typeof exports.sqlite.db.getSQL=="function"?exports.sqlite.db.getSQL().then(()=>{}).catch(()=>{}):Promise.resolve()),e.sqliteReady}});Oo?(async()=>(Object.defineProperty(exports.sqlite,"db",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(exports.sqlite,"query",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(exports.sqlite,"data",{value:{},writable:false,configurable:true,enumerable:true}),Object.defineProperty(globalThis,"sqlbases",{value:[],writable:true,configurable:true,enumerable:false}),await Promise.all([Promise.resolve().then(()=>(Xt(),yo)),Promise.resolve().then(()=>(rr(),xo)),Promise.resolve().then(()=>(or(),So)),Promise.resolve().then(()=>(nr(),wo)),Promise.resolve().then(()=>(sr(),_o)),Promise.resolve().then(()=>(ir(),Eo)),Promise.resolve().then(()=>(ar(),ko)),Promise.resolve().then(()=>(lr(),Po)),Promise.resolve().then(()=>(cr(),To)),Promise.resolve().then(()=>(ur(),Co)),Promise.resolve().then(()=>(dr(),Do)),Promise.resolve().then(()=>(fr(),$o))])))():(exports.sqlite._disabled=true,exports.sqlite._warning='SQLite (sql.js) is not available in this environment. It requires a browser with WebAssembly support. Install the optional "sql.js" package to enable it.',exports.DEV&&(globalThis.sqliteDisabled=true,globalThis.sqliteWarning=exports.sqlite._warning,console.warn("Memorio SQLite: sql.js is not available in this environment (requires browser + WebAssembly). Use store or session for persistence.")));});a();L();a();j();S();a();var w={set:(e,t={})=>{globalThis.dispatchEvent(new CustomEvent(String(e),t));},listen:(e,t=null,r)=>{if(globalThis.events?.[e])return;let o=t?n=>{let s=n;return globalThis.queueMicrotask?globalThis.queueMicrotask(()=>t(s)):Promise.resolve().then(()=>t(s))}:void 0;o&&globalThis.addEventListener(e,o),o&&(globalThis.events[e]=o);},remove:e=>{let t=globalThis.events?.[e];t&&(globalThis.removeEventListener(e,t),delete globalThis.events[e]);}};a();S();var oe=new Map,Dt=(e,t,r)=>{let o=[];if(t.type&&t.type!=="any"){let n=Array.isArray(e)?"array":typeof e;if(n!==t.type)return o.push(`${r}: expected ${t.type}, got ${n}`),{valid:false,errors:o}}if(t.enum&&!t.enum.includes(e)&&o.push(`${r}: value must be one of [${t.enum.map(String).join(", ")}]`),t.validator){let n=t.validator(e);n!==true&&o.push(`${r}: ${typeof n=="string"?n:"validation failed"}`);}if(typeof e=="number"&&(t.min!==void 0&&e<t.min&&o.push(`${r}: value ${e} is less than minimum ${t.min}`),t.max!==void 0&&e>t.max&&o.push(`${r}: value ${e} exceeds maximum ${t.max}`)),typeof e=="string"&&(t.min!==void 0&&e.length<t.min&&o.push(`${r}: string length ${e.length} is less than minimum ${t.min}`),t.max!==void 0&&e.length>t.max&&o.push(`${r}: string length ${e.length} exceeds maximum ${t.max}`),t.pattern&&!t.pattern.test(e)&&o.push(`${r}: string does not match required pattern`)),t.type==="object"&&e&&typeof e=="object"&&!Array.isArray(e)){if(t.required)for(let n of t.required)n in e||o.push(`${r}: missing required property '${n}'`);if(t.properties){for(let[n,s]of Object.entries(t.properties))if(n in e&&e[n]!==void 0){let i=Dt(e[n],s,`${r}.${n}`);i.valid||o.push(...i.errors||[]);}}}return o.length===0?{valid:true}:{valid:false,errors:o}},$t=(e,t)=>{let r=oe.get(e);return r?Dt(t,r,e):{valid:true}},Ot=(e,t)=>{typeof t=="function"?oe.set(e,{validator:t}):oe.set(e,t),c(`[memorio schema] Registered schema for '${e}'`);},At=e=>oe.delete(e),Mt=()=>Array.from(oe.keys()),Hr=e=>oe.get(e),z={register:Ot,validate:$t,unregister:At,list:Mt,get:Hr};L();var he=Symbol("memorio.target"),qt=new WeakMap,H=(e,t=null)=>{if(e===null||typeof e!="object")return e;if(e[he]!==void 0)return H(e[he],t);if(t){if(t.has(e))return e;t.add(e);}let r=e.constructor?.name;if(r!=="Object"&&r!=="Array")return e;let o=Array.isArray(e)?[]:{};for(let n of Reflect.ownKeys(e))o[n]=H(e[n],t);return o},jt=(e,t,r=".")=>t.concat(e).join(r),Rt=(e,t,r=[])=>{let o=n=>{try{w.set(n,{detail:{name:n}});}catch{}};return new Proxy(e,{get(n,s){if(s==="__path")return r.length>0?"state."+r.join("."):"state";if(s===he||n[he]!==void 0)return n;if(s==="list")return c('Some state could be hidden when you use "state.list". Use "state" to see the complete list '),JSON.parse(JSON.stringify(n));if(typeof s=="string"){let i=r.length>0?"state."+r.concat(s).join("."):"state."+s;exports.internal.lastAccessedPath=i,exports.internal.tracking&&exports.internal.trackedPaths.add(i);}if(s==="_lastPath")return exports.internal.lastAccessedPath;if(s==="remove")return i=>(delete n[i],true);if(s==="removeAll")return ()=>{try{for(let i in n)typeof n[i]!="function"&&!["list","remove","removeAll","lock","unlock"].includes(i)&&delete n[i];}catch(i){console.error(i);}};if(Object.isFrozen(n[s]))return n[s];if(s==="lock"||s==="unlock"){let i=Reflect.get(n,s);if(i)return i}try{let i=Reflect.get(n,s);if(i&&typeof i=="object"&&["Array","Object"].includes(i.constructor.name)){let l=qt.get(i);return l||(l=Rt(i,t,r.concat(s)),qt.set(i,l)),l}return i}catch(i){console.error("Error: ",i);return}},set(n,s,i){if(exports.internal.locked)return console.error("Error: state is locked. Use state.unlock() to enable modifications."),false;if(Ct.includes(s))return console.error("key "+s+" is protected"),false;if(n[s]&&typeof n[s]=="object"&&Object.isFrozen(n[s]))return console.error(`Error: state '${s}' is locked`),false;if(n[s]&&typeof n[s]=="object"&&n[s].__locked)return console.error(`Error: state '${s}' is locked. Use state.${s}.unlock() to enable modifications.`),false;try{let l=jt(s,r),f=H(i),g=z.validate(l,f);if(!g.valid)return exports.DEV&&exports.internal.debug&&console.error(`[memorio schema] Validation failed for '${l}':`,g.errors),c(`[memorio schema] Validation failed for '${l}': `+(g.errors?.join(", ")||"unknown error")),!1;if(t({action:"set",path:l,target:n,newValue:f,previousValue:Reflect.get(n,s)}),o("state."+l),Reflect.set(n,s,f),exports.internal.bumpStateVersion(),n[s]&&typeof n[s]=="object"){let b=n[s];if(b&&typeof b=="object")try{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),Object.defineProperty(b,"lock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!0}),c(`State '${s}' is now locked.`);}}),Object.defineProperty(b,"unlock",{writable:!1,enumerable:!1,configurable:!1,value:()=>{Object.defineProperty(b,"__locked",{writable:!0,enumerable:!1,configurable:!1,value:!1}),c(`State '${s}' is now unlocked.`);}});}catch{}}return !0}catch(l){return console.error("Error in set trap:",l),false}},deleteProperty(n,s){try{let i=jt(s,r),l=Reflect.get(n,s);return t({action:"delete",path:i,target:n,previousValue:l}),Reflect.deleteProperty(n,s)}catch(i){return console.error("Error in deleteProperty trap:",i),false}},ownKeys(n){return Reflect.ownKeys(n)},getOwnPropertyDescriptor(n,s){return Reflect.getOwnPropertyDescriptor(n,s)}})},Re="__memorio_state_instance__";exports.state = void 0;globalThis[Re]?exports.state=globalThis[Re]:(exports.state=Rt({},e=>{exports.internal.historyEnabled&&exports.internal.recordMutation({path:e.path,action:e.action,newValue:e.newValue,previousValue:e.previousValue,timestamp:Date.now()});}),exports.state.lock=()=>{exports.internal.locked=true,c("State is now locked. All modifications are blocked.");},exports.state.unlock=()=>{exports.internal.locked=false,c("State is now unlocked. Modifications are allowed.");},globalThis[Re]=exports.state);ne();a();K();j();S();var M=Ue(),Ge=new Map;function te(){let t=exports.internal.currentContext||""||"default";return Ge.has(t)||Ge.set(t,new Map),Ge.get(t)}var ee=M!==null;function Z(){let e=exports.internal.currentContext||"";return e?`${e}-`:"memorio_session_"}function Xe(e){return !e||typeof e!="string"?(console.warn("[memorio session] key is empty or not a string - operation aborted"),""):e.length>512?(console.warn(`[memorio session] key "${e}" exceeds 512 chars - operation aborted`),""):Z()+e}function Kr(e){let t=ee?M.getItem(e):te().get(e);return t&&JSON.parse(t)}function Qr(e,t){let r=JSON.stringify(t);ee?M.setItem(e,r):te().set(e,r);}function Fr(e){if(ee){if(M.getItem(e))return M.removeItem(e),true}else if(te().has(e))return te().delete(e),true;return false}var Ze="__memorio_session_instance__";exports.session = void 0;globalThis[Ze]?exports.session=globalThis[Ze]:(exports.session=new Proxy({},{}),Object.defineProperties(exports.session,{get:{value:e=>{if(!e)return console.warn("[memorio session] session.get() called with empty or null key - returning null"),null;try{return Kr(Xe(e))}catch(t){exports.message(`Error parsing session item '${e}':${t}`);}return null}},set:{value:(e,t)=>{if(!e)return console.warn("[memorio session] session.set() called with empty or null key - write aborted"),false;let r=Xe(e);if(!r)return false;if(typeof t=="function")return console.warn("[memorio session] functions are not storable - write aborted for key: "+e),exports.message("It's not secure to session functions."),false;try{Qr(r,t);}catch(o){return exports.message(`Error setting session item '${e}': ${o}`),false}return true}},remove:{value:e=>{if(!e)return console.warn("[memorio session] session.remove() called with empty or null key - returning false"),false;let t=Xe(e);if(!t)return false;try{return Fr(t)}catch(r){exports.message(`Error removing session item '${e}': ${r}`);}return false}},delete:{value:e=>exports.session.remove(e)},removeAll:{value:()=>{if(ee){let e=[];for(let t=0;t<M.length;t++){let r=M.key(t);r?.startsWith(Z())&&e.push(r);}e.forEach(t=>M.removeItem(t));}else te().clear();return true}},clearAll:{value:()=>(exports.session.removeAll(),true)},quota:{value:async()=>[0,0]},size:{value:()=>{let e=0;return ee?Object.keys(M).forEach(t=>{if(t.startsWith(Z())){let r=M.getItem(t);r&&(e+=r.length);}}):te().forEach(t=>{e+=t.length;}),e}},isPersistent:{get:()=>ee},list:{value:()=>{let e={};try{if(ee)for(let t=0;t<M.length;t++){let r=M.key(t);if(r?.startsWith(Z())){let o=r.replace(Z(),""),n=M.getItem(r);if(n!==null)try{e[o]=JSON.parse(n);}catch{e[o]=n;}}}else te().forEach((t,r)=>{if(r.startsWith(Z())){let o=r.replace(Z(),"");try{e[o]=JSON.parse(t);}catch{e[o]=t;}}});}catch(t){exports.message(`Error listing session items: ${t}`);}return e}}}),Object.freeze(exports.session),globalThis[Ze]=exports.session);a();var Se="__memorio_cache_instance__",I={},se=globalThis[Se]?globalThis[Se]:new Proxy({},{get(e,t){let r=t;return r==="get"?o=>I[o]:r==="set"?(o,n)=>{I[o]=n;}:r==="remove"?o=>(delete I[o],true):r==="removeAll"?()=>(Object.keys(I).forEach(o=>delete I[o]),true):r==="clear"?()=>(Object.keys(I).forEach(o=>delete I[o]),true):r==="list"?()=>({...I}):I[r]},set(e,t,r){return I[t]=r,true},deleteProperty(e,t){return delete I[t],true}});globalThis[Se]||(globalThis[Se]=se,Object.isFrozen(se)||Object.freeze(se));T();D();a();S();var Ao=(e,t=null,r=true)=>{let o=s=>typeof s=="string"?s:s&&typeof s=="object"&&s.__path?s.__path:null,n=o(e);if(!e&&!t){console.error("Observer Error: You need to setup observer correctly, Some parameters are missed!");return}if(!e&&t){console.error("Observer Error: You need to declare what state need to be monitored as string like 'state.test'.");return}if(n){let s=n.split(".");if(s[0]!=="state"&&s[0]!=="store"){console.error(`Observer Error: You need to declare 'state.' or 'store.'. The '${n}' string is incorrect!`);return}}if(e&&!t){let s=o(e);if(!s)return;globalThis.observer?.list?.[s]&&w.remove(s),c(`called: ${s}`);return}if(e&&t){let s=o(e);if(!s)return;if(typeof e!="string"&&!(e&&typeof e=="object")){console.error("Observer Error: name of state need to be a 'string' like 'state.test' or a direct state value");return}let i=Array.isArray(t)?t:[t];globalThis.observer?.list?.[s]&&w.remove(s),i.forEach(f=>{typeof f=="function"&&w.listen(s,f,r);});return}},ke=Ao;Object.defineProperties(ke,{list:{get:()=>globalThis.events},remove:{value:e=>{e&&(w.remove(e),delete globalThis.events[e]);}},removeAll:{get:()=>{let e=globalThis.observer,t=e?.list;return t&&Object.keys(t).forEach(r=>{e?.remove?.(r);}),true}},has:{value:e=>!!globalThis.observer?.list?.[e]}});a();S();j();L();var Pe=((e,t=[])=>{if(!t||typeof e!="function")return ()=>{};let r=[],o=Array.isArray(t)&&!t.__path?t:[t];try{return o.forEach(n=>{let s="";if(typeof n=="function"){let i=exports.propertyName(n);i&&(s=i);}else typeof n=="object"&&n!==null&&(s=n.__path||(typeof n.toString=="function"&&n.toString()!=="[object Object]"?n.toString():""));if(s){s=s.replace(/^(\(\)\s*=>\s*)/,"").replace(/^globalThis\./,"").replace(/^state\./,"");let i=s.startsWith("store.")||s.startsWith("state.")?s:"state."+s;w.listen(i,()=>e()),r.push(i);}else {exports.internal.clearTrackedPaths(),exports.internal.tracking=!0;try{e();}catch{}exports.internal.tracking=!1,exports.internal.trackedPaths.forEach(i=>{r.includes(i)||(c(`useObserver: [Auto-Discovery] -> "${i}"`),w.listen(i,()=>e()),r.push(i));});}}),r.length>0?c(`useObserver: Monitoring ${r.length} paths.`):console.warn("useObserver: No paths resolved for monitoring. Check your dependencies!"),()=>{r.forEach(n=>{typeof w.remove=="function"&&(w.remove(n),c(`useObserver: Stopped monitoring "${n}"`));});}}catch(n){return c(`useObserver Error: ${n}`),()=>{}}});exports.DEV&&!("useObserver"in globalThis)&&(globalThis.useObserver||(globalThis.useObserver=null),Object.defineProperty(globalThis,"useObserver",{value:Pe,writable:true,enumerable:false,configurable:true}),Object.freeze(globalThis.useObserver));S();a();j();S();L();var Mo={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function qo(){return exports.DEV&&exports.internal.debug===true}var V={...Mo},Q=[],jo=e=>{V={...V,...e};},Ro=()=>{V.enabled=true;},Io=()=>{V.enabled=false;},mr=e=>V.enabled&&V.modules.includes(e),Lo=(e,t,r,o,n)=>{if(!mr(e))return;let s={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:o,previousValue:n};if(Q.push(s),Q.length>V.maxEntries&&Q.shift(),V.logToConsole&&qo()){let i=`[Memorio:${e.toUpperCase()}]`,l=No(e);c(`%c${i}%c ${t} ${r},
6
+ color: ${l}; font-weight: bold,
7
+ color: inherit`),o!==void 0&&c(` \u2192 value:${o}`),n!==void 0&&c(` \u2190 previous:${n}`);}V.customHandler&&V.customHandler(s);},No=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",Vo=()=>[...Q],Ho=()=>{Q.length=0;},Uo=()=>{let e={total:Q.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of Q)if(t){let r=t.module,o=t.action;r&&typeof e[r]=="number"&&e[r]++,o&&typeof e[o]=="number"&&e[o]++;}return e},Jo=()=>JSON.stringify(Q,null,2),ot={configure:jo,enable:Ro,disable:Io,isEnabled:mr,log:Lo,getHistory:Vo,clearHistory:Ho,getStats:Uo,exportLogs:Jo};a();j();L();var R=globalThis.__memorio_state_instance__,U=globalThis.__memorio_store_instance__,J=globalThis.__memorio_session_instance__,q=globalThis.__memorio_cache_instance__;function Bo(){return exports.DEV&&exports.internal.debug===true}function pr(){if(!U)return {};let e={},t=U;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let o=t.get(r);o!=null&&(e[r]=o);}catch{}}return e}function yr(){if(!J)return {};let e={},t=J;if(typeof t.list=="function")try{return t.list()}catch{}if(typeof t.get=="function"){for(let r of Object.keys(t))if(!["get","set","remove","delete","removeAll","clearAll","size","isPersistent","list"].includes(r))try{let o=t.get(r);o!=null&&(e[r]=o);}catch{}}return e}var zo=()=>{if(Bo()){if(R){let e=R.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=R,console.table(t);}if(U&&console.table(pr()),J&&console.table(yr()),q){let e=q.list,t;typeof e=="function"?t=e():typeof e=="object"&&e!==null?t=e:t=q,console.table(t);}}},Ko=()=>{let e=t=>{if(!t)return 0;if(typeof t.list=="function")try{let r=t.list();return Object.keys(r).length}catch{}return Object.keys(t).length};return {stateKeys:e(R),storeKeys:e(U),sessionKeys:e(J),cacheKeys:e(q),idbDatabases:0,sqliteDbCount:0,lastUpdate:new Date().toISOString()}},pe=e=>{let r={state:R,store:U,session:J,cache:q}[e];r&&typeof r.clear=="function"?r.clear():r&&typeof r.removeAll=="function"?r.removeAll():console.debug(`Module ${e} not found or does not support clear()/removeAll()`);},Qo=()=>{pe("state"),pe("store"),pe("session"),pe("cache");},Fo=()=>{let e=()=>{if(R)try{return typeof R.list=="function"?R.list():R}catch{return}},t=()=>pr(),r=()=>yr(),o=()=>{if(q)try{return typeof q.list=="function"?q.list():q}catch{return}},n={state:e(),store:t(),session:r(),cache:o(),exportedAt:new Date().toISOString()};return JSON.stringify(n,null,2)},Wo=e=>{try{let t=JSON.parse(e);t.state&&Object.entries(t.state).forEach(([r,o])=>{R&&r!=="list"&&r!=="remove"&&r!=="removeAll"&&(R[r]=o);}),t.store&&U&&typeof U.set=="function"&&Object.entries(t.store).forEach(([r,o])=>{U.set(r,o);}),t.session&&J&&typeof J.set=="function"&&Object.entries(t.session).forEach(([r,o])=>{J.set(r,o);}),t.cache&&q&&Object.entries(t.cache).forEach(([r,o])=>{q&&r!=="get"&&r!=="set"&&r!=="remove"&&r!=="clear"&&(q[r]=o);});}catch(t){console.debug("Import failed:",t);}},Yo=(e,t)=>{let o={state:R,store:U,session:J,cache:q}[e];if(!o){console.debug(`Module ${e} not found`);return}let n=o[t];if(console.debug(`Watching ${e}.${t} (initial: ${JSON.stringify(n)})`),e==="state"&&globalThis.memorio?.dispatch){let s=i=>{i.detail?.name?.includes(t)&&console.debug(`Change: ${e}.${t} =`,i.detail.value);};o.addEventListener?.("memorio-change",s);}},Go=()=>{console.debug(`
8
+ Memorio DevTools Help
7
9
 
8
10
  Available commands:
9
11
  memorio.devtools.inspect() - Inspect all state modules
@@ -15,93 +17,42 @@ Available commands:
15
17
  memorio.devtools.watch(module, path) - Watch a path for changes
16
18
  memorio.devtools.help() - Show this help
17
19
 
18
- Shortcuts:
19
- state - globalThis.state
20
- store - globalThis.store
21
- session - globalThis.session
22
- cache - globalThis.cache
23
- `);},we={inspect:Qt,stats:Zt,clear:W,clearAll:er,exportData:tr,importData:rr,watch:or,help:nr};a();O();v();var sr={enabled:true,logToConsole:true,modules:["state","store","session","cache","idb"],maxEntries:1e3};function ir(){return exports.internal.debug===true}var D={...sr},A=[],ar=e=>{D={...D,...e};},lr=()=>{D.enabled=true;},cr=()=>{D.enabled=false;},gt=e=>D.enabled&&D.modules.includes(e),ur=(e,t,r,n,o)=>{if(!gt(e))return;let s={timestamp:new Date().toISOString(),module:e,action:t,path:r,value:n,previousValue:o};if(A.push(s),A.length>D.maxEntries&&A.shift(),D.logToConsole&&ir()){let i=`[Memorio:${e.toUpperCase()}]`,d=mr(e);c(`%c${i}%c ${t} ${r},
24
- color: ${d}; font-weight: bold,
25
- color: inherit`),n!==void 0&&c(` \u2192 value:${n}`),o!==void 0&&c(` \u2190 previous:${o}`);}D.customHandler&&D.customHandler(s);},mr=e=>({state:"#4CAF50",store:"#2196F3",session:"#FF9800",cache:"#9C27B0",idb:"#F44336"})[e]||"#888888",dr=()=>[...A],fr=()=>{A.length=0;},pr=()=>{let e={total:A.length,state:0,store:0,session:0,cache:0,idb:0,set:0,get:0,delete:0,clear:0};for(let t of A)if(t){let r=t.module,n=t.action;r&&typeof e[r]=="number"&&e[r]++,n&&typeof e[n]=="number"&&e[n]++;}return e},gr=()=>JSON.stringify(A,null,2),Ee={configure:ar,enable:lr,disable:cr,isEnabled:gt,log:ur,getHistory:dr,clearHistory:fr,getStats:pr,exportLogs:gr};O();J();a();J();O();var te={version:"4.7.3"};w();v();a();function Te(){return b}a();O();v();function yt(e){if(e===null||typeof e!="object")return e;let t=e.constructor?.name;if(t!=="Object"&&t!=="Array")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}var Pe=()=>yt(R(b)),Oe=e=>{let t=[],r=(n,o,s)=>{let i=n?Object.keys(n):[],d=o?Object.keys(o):[];for(let f of d){let g=s?`${s}.${f}`:f,y=n?n[f]:void 0,T=o[f];y!==T&&(typeof y!==typeof T||y===void 0?t.push({path:g,oldValue:y,newValue:T}):y&&typeof y=="object"?r(y,T,g):y!==T&&t.push({path:g,oldValue:y,newValue:T}));}for(let f of i)if(!(f in(o||{}))){let g=s?`${s}.${f}`:f;t.push({path:g,oldValue:n[f],newValue:void 0});}};return r(e,R(b),""),t},Ce=(e=true)=>{exports.internal.historyEnabled=e,c(`[memorio history] Tracking ${e?"enabled":"disabled"}`);};var $e=()=>[...exports.internal.mutations],_e=()=>exports.internal.canUndo(),De=()=>exports.internal.canRedo(),Re=()=>{if(!exports.internal.historyEnabled){c("[memorio history] History is not enabled");return}let e=exports.internal.popUndo();if(e)return br(e),c(`[memorio history] Undid: ${e.action} ${e.path}`),e},Me=()=>{if(!exports.internal.historyEnabled){c("[memorio history] History is not enabled");return}let e=exports.internal.popRedo();if(e)return hr(e),c(`[memorio history] Redid: ${e.action} ${e.path}`),e};function br(e){let t=exports.internal.historyEnabled;exports.internal.historyEnabled=false;try{e.action==="set"?e.previousValue===void 0?bt(e.path):ke(e.path,e.previousValue):e.action==="delete"&&e.previousValue!==void 0&&ke(e.path,e.previousValue);}finally{exports.internal.historyEnabled=t;}}function hr(e){let t=exports.internal.historyEnabled;exports.internal.historyEnabled=false;try{e.action==="set"?ke(e.path,e.newValue):e.action==="delete"&&bt(e.path);}finally{exports.internal.historyEnabled=t;}}function ke(e,t){let r=e.split("."),n=b;for(let o=0;o<r.length-1;o++){let s=r[o];n[s]===void 0&&(n[s]={}),n=n[s];}n[r[r.length-1]]=t;}function bt(e){let t=e.split(".");if(t.length===1){b.remove(t[0]);return}let r=b;for(let n=0;n<t.length-1;n++){let o=t[n];if(r[o]===void 0)return;r=r[o];}delete r[t[t.length-1]];}var Ae=e=>{b.removeAll();for(let t of Object.keys(e))b[t]=yt(e[t]);exports.internal.clearHistory(),c("[memorio history] State rolled back to snapshot");},je=()=>{exports.internal.clearHistory(),c("[memorio history] History cleared");},Ie=()=>{exports.internal.clearRedo();};a();var Ne=()=>{let e=R(b);return Object.keys(e).filter(t=>!["list","remove","removeAll","lock","unlock"].includes(t))},Ve=e=>{if(!e||typeof e!="string")return false;let t=e.replace(/^state\./,"").split("."),r=b;for(let n of t){if(r==null)return false;r=r[n];}return r!==void 0},Be=e=>{let[t,r]=ht(e);return !t||r===void 0?"undefined":Array.isArray(r)?"array":typeof r},Le=e=>{let[t,r]=ht(e);if(!(!t||r===void 0))return vr(r)},He=()=>{let e=[],t=(r,n)=>{if(r===null||typeof r!="object"||Array.isArray(r))return;let o=Object.keys(r).filter(s=>!["list","remove","removeAll","lock","unlock"].includes(s));for(let s of o){let i=n?`${n}.${s}`:s,d=r[s],f=d!==void 0,g=f?Array.isArray(d)?"array":typeof d:"undefined";e.push({path:i,type:g,defined:f}),f&&typeof d=="object"&&!Array.isArray(d)&&d.constructor?.name==="Object"&&t(d,i);}};return t(R(b),""),e};function ht(e){if(!e||typeof e!="string")return [false,void 0];let t=e.replace(/^state\./,"").split("."),r=b;for(let n of t){if(r==null)return [false,void 0];r=r[n];}return [r!==void 0,r]}function vr(e){if(e===null||typeof e!="object")return e;let t=e.constructor?.name;if(t!=="Object"&&t!=="Array")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}a();w();var oe="__memorio_memory_index__",vt="__memorio_superseded__";function Ue(e){return e.startsWith(vt)?e:`${vt}${e}`}function xt(e){return e?Array.isArray(e)?e:[e]:[]}function xr(e,t){if(t.scope)return t.scope;let r=JSON.stringify(e).length;return r>1e6?"durable":("local")}function $(){return Date.now()}function ne(e){return e.ttl===null||e.ttl===void 0?false:$()-e.createdAt>e.ttl}function Sr(e,t){return e.status==="obsolete"||e.status==="superseded"||ne(e)?t.includeObsolete??false:!(t.type&&!(Array.isArray(t.type)?t.type:[t.type]).includes(e.type)||t.minConfidence!==void 0&&e.confidence<t.minConfidence)}function wr(e,t){return !(e.status!=="active"||ne(e)||t.tags&&!(Array.isArray(t.tags)?t.tags:[t.tags]).some(o=>e.tags.includes(o))||t.types&&!(Array.isArray(t.types)?t.types:[t.types]).includes(e.type)||t.minConfidence!==void 0&&e.confidence<t.minConfidence||t.scopes&&!t.scopes.includes(e.scope))}function Er(e){let t=($()-e.createdAt)/36e5,r=Math.max(.1,1/(1+t*.5)),n=e.confidence,o=1+e.tags.length*.1,s={decision:1.5,context:1.3,preference:1.2,task:1,fact:.8},i={hot:1.5,session:1.2,local:1,durable:.8};return r*n*o*s[e.type]*i[e.scope]}function wt(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),n=e;for(let o of r){if(n==null)return;n=n[o];}return n}function Et(e,t,r){if(!t||typeof t!="string")return;let n=t.replace(/^state\./,"").split("."),o=e;for(let s=0;s<n.length-1;s++){let i=n[s];(o[i]===void 0||o[i]===null)&&(o[i]={}),o=o[i];}o[n[n.length-1]]=r;}async function H(e){let t=e.status==="superseded"?Ue(e.id||e.key):e.key,r=JSON.stringify(e);switch(e.scope){case "hot":Et(b,t,e.value);break;case "session":C.set(t,r);break;case "local":S.set(t,r);break;case "durable":await exports.idb.set("memories",t,r);break}await Tr(e.id||e.key,e.scope,e.status==="superseded");}async function Tt(e,t,r=false){let n=r?Ue(e):e,o;switch(t){case "hot":{let s=wt(b,n);return s===void 0?null:kt(e,s,t)}case "session":o=C.get(n);break;case "local":o=S.get(n);break;case "durable":o=await exports.idb.get("memories",n);break}if(!o)return null;try{let s=JSON.parse(o);return s.id=s.id||e,s}catch{return null}}function kt(e,t,r){return {id:e,key:e,value:t,type:"fact",confidence:1,scope:r,ttl:null,tags:[],status:"active",createdAt:$(),lastConfirmedAt:$(),supersededId:null}}async function St(e,t,r=false){let n=r?Ue(e):e;switch(t){case "hot":Et(b,n,void 0);break;case "session":C.remove(n);break;case "local":S.remove(n);break;case "durable":await exports.idb.deleteKey("memories",n);break}await kr(e,r);}async function G(){try{let e=S.get(oe);return e?JSON.parse(e):{}}catch{return {}}}async function Tr(e,t,r=false){let n=await G();n[e]={scope:t,superseded:r},S.set(oe,JSON.stringify(n));}async function kr(e,t=false){let r=await G(),n=r[e];n&&(t&&n.superseded||!t&&!n.superseded)&&delete r[e],S.set(oe,JSON.stringify(r));}async function re(){let e=await G(),t=[];for(let[r,n]of Object.entries(e)){let o=await Tt(r,n.scope,n.superseded);o&&(o.id=o.id||r,o.supersededId=o.supersededId??null,t.push(o));}return t}async function Pr(){let e=await re(),t=0;for(let r of e)ne(r)&&r.status==="active"&&(r.status="obsolete",await H(r),t++);return t}var se={async remember(e,t,r={}){let n=await this._getEntry(e);if(n&&n.status==="active"){let d=`${n.id}__v${Date.now()}`,f={...n,id:d,key:n.key,status:"superseded",supersededId:null,lastConfirmedAt:$()};await H(f);}let o=xr(t,r),s=xt(r.tags),i={id:r.id||e,key:e,value:t,type:r.type||"fact",confidence:r.confidence??1,scope:o,ttl:r.ttl??null,tags:s,source:r.source,status:"active",createdAt:$(),lastConfirmedAt:$(),supersededId:n?n.id:null};await H(i),h.set("memorio:memory:remembered",{key:e,scope:o,entryId:i.id});},async recall(e,t={}){let r=await this._getEntry(e);return !r||!Sr(r,t)?null:(r.lastConfirmedAt=$(),await H(r),h.set("memorio:memory:recalled",{key:e}),r.value)},async context(e={}){return (await re()).filter(o=>wr(o,e)).map(o=>({entry:o,score:Er(o)})).sort((o,s)=>s.score-o.score).slice(0,e.maxEntries??25).map(({entry:o})=>({key:o.key,value:o.value,type:o.type,confidence:o.confidence,scope:o.scope,tags:o.tags,age:$()-o.createdAt,accessCount:o.tags.length+1,lastAccessedAt:o.lastConfirmedAt}))},async forget(e){let t=await this._getEntry(e);t&&(await St(t.id||e,t.scope,t.status==="superseded"),h.set("memorio:memory:forgotten",{key:e}));},async update(e,t,r={}){let n=await this._getEntry(e);if(!n){await this.remember(e,t,r);return}let o=`${n.id}__v${$()}`,s={...n,id:o,key:n.key,status:"superseded",supersededId:null,lastConfirmedAt:$()};await H(s);let i={...n,value:t,lastConfirmedAt:$(),...r.scope?{scope:r.scope}:{},...r.ttl!==void 0?{ttl:r.ttl}:{},...r.type?{type:r.type}:{},...r.confidence!==void 0?{confidence:r.confidence}:{},...r.tags!==void 0?{tags:xt(r.tags)}:{},...r.source?{source:r.source}:{}};await H(i),h.set("memorio:memory:updated",{key:e,entryId:i.id});},async stats(){let e=await re(),t={hot:0,session:0,local:0,durable:0},r={},n=0;for(let o of e)t[o.scope]=(t[o.scope]||0)+1,ne(o)&&n++,r[o.type]=(r[o.type]||0)+1;return {total:e.length,byScope:t,byType:r,expired:n}},async forgetExpired(){return Pr()},async clear(){let e=await G();for(let[t,r]of Object.entries(e))await St(t,r.scope,r.superseded);S.remove(oe);},async _getEntry(e){let r=(await G())[e];if(!r){let n=wt(b,e);return n!==void 0?kt(e,n,"hot"):null}return Tt(e,r.scope,r.superseded)},async _loadAll(){return re()},async _save(e){await H(e);}};Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:h,message:exports.message,devtools:we,logger:Ee,setDescription:()=>{}},writable:false,configurable:true,enumerable:false});Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false});typeof globalThis.addEventListener=="function"&&h.listen("memorio:memory:cleanup",async()=>se.forgetExpired?.());Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:te.version});Object.defineProperty(memorio,"debug",{get:()=>exports.internal.debug,set:e=>{exports.internal.debug=e;},enumerable:false});var Pt=q();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:Pt.platform});Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:Pt});Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:X()});Qe();memorio.isBrowser=ae;memorio.isNode=le;memorio.isDeno=ce;memorio.isEdge=ue;memorio.getCapabilities=q;memorio.createContext=F;memorio.listContexts=ge;memorio.deleteContext=ye;memorio.isolate=e=>F(e);memorio.registerSchema=M.register;memorio.validate=M.validate;memorio.unregisterSchema=M.unregister;memorio.listSchemas=M.list;memorio.typed=Te;memorio.snapshot=Pe;memorio.diff=Oe;memorio.undo=Re;memorio.redo=Me;memorio.canUndo=_e;memorio.canRedo=De;memorio.rollback=Ae;memorio.trace=$e;memorio.enableHistory=Ce;memorio.clearHistory=je;memorio.clearRedo=Ie;memorio.stateKeys=Ne;memorio.pathExists=Ve;memorio.stateType=Be;memorio.stateGet=Le;memorio.stateSchema=He;memorio.memory=se;Object.defineProperty(globalThis,"state",{value:b,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"store",{value:S,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"session",{value:C,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"cache",{value:Q,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"idb",{value:exports.idb,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"observer",{value:Z,writable:true,enumerable:false,configurable:true});Object.defineProperty(globalThis,"useObserver",{value:ee,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"dispatch",{value:h,writable:true,enumerable:false,configurable:true});Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:e=>be(e)});Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>exports.internal.currentContext});Object.defineProperty(globalThis,"$state",{get:()=>globalThis.state,configurable:true});Object.defineProperty(globalThis,"$store",{get:()=>globalThis.store,configurable:true});Object.defineProperty(globalThis,"$session",{get:()=>globalThis.session,configurable:true});Object.defineProperty(globalThis,"$cache",{get:()=>globalThis.cache,configurable:true});memorio.help=function(){console.debug(`
26
- \u{1F9E0} Memorio ${te.version} - Help
27
-
28
- Core Modules:
29
- state - Reactive state management
20
+ Shortcuts (dev only):
21
+ state - global state proxy
22
+ store - localStorage wrapper
23
+ session - sessionStorage wrapper
24
+ cache - in-memory cache
25
+ `);},Te={inspect:zo,stats:Ko,clear:pe,clearAll:Qo,exportData:Fo,importData:Wo,watch:Yo,help:Go};a();var gr="__memorio_hlc_node";function st(){if(typeof globalThis>"u")return "node";try{if(typeof sessionStorage<"u"&&sessionStorage){let e=sessionStorage.getItem(gr);return e||(e=br(),sessionStorage.setItem(gr,e)),e}}catch{}return globalThis.__memorioHlcNodeId||(globalThis.__memorioHlcNodeId=br()),globalThis.__memorioHlcNodeId}function br(){return typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID().slice(0,8):Math.random().toString(36).slice(2,10)}var nt="__memorio_hlc_local",$=globalThis[nt]||{physical:0,logical:0,node:st()};globalThis[nt]||(globalThis[nt]=$);function Xo(e){let t=Date.now(),r=$.physical,o,n;return t>r?(o=t,n=0):(o=r,n=$.logical+1),$.physical=o,$.logical=n,{physical:o,logical:n,node:$.node}}function Zo(e){let t=Date.now();return e.physical>$.physical?($.physical=e.physical>t?e.physical:t,$.logical=1):e.physical===$.physical&&($.logical=Math.max($.logical,e.logical)+1),$.node=st(),{...$}}function hr(e,t){return e.physical!==t.physical?e.physical<t.physical?-1:1:e.logical!==t.logical?e.logical<t.logical?-1:1:e.node!==t.node?e.node<t.node?-1:1:0}function en(e,t){return hr(e,t)<0}function tn(e){return `hlc:${e.physical}:${e.logical}:${e.node}`}function rn(e){if(!e.startsWith("hlc:"))return null;let t=e.split(":");if(t.length!==4)return null;let r=parseInt(t[1],10),o=parseInt(t[2],10),n=t[3];return isNaN(r)||isNaN(o)?null:{physical:r,logical:o,node:n}}var _={tick:Xo,receive:Zo,compare:hr,happenedBefore:en,serialize:tn,parse:rn,getNodeId:st};a();function ye(e,t,r=2){if(e!==null&&t!==null&&e>=t)throw new Error(`left (${e}) must be < right (${t})`);return e===null&&t===null?"a":e===null?on(t,r):t===null?it(e,r):nn(e,t,r)}function on(e,t){let o=e.split(".")[0],n=o.charCodeAt(0);if(n>97){let s=String.fromCharCode(n-1),i=o.slice(1);return i===""?at(s,t):s+i}if(o[0]==="a"){let s=0;for(;s<o.length&&o[s]==="a";)s++;if(s===o.length)return ".z."+".z".repeat(Math.floor(t/2)+1);let i=o.charCodeAt(s),l=String.fromCharCode(i-1);return l>="a"?l+o.slice(s+1):"a"+l+o.slice(s+1)}return ".z."+".z".repeat(Math.floor(t/2)+1)}function it(e,t){let o=e.split(".")[0],n=o.charCodeAt(0),s=String.fromCharCode(n+1);if(s<="z"){let l=o.slice(1);return l===""?sn(s,t):s+l}if(o.length>1){let l=o[o.length-1];if(l<"z")return o.slice(0,-1)+String.fromCharCode(l.charCodeAt(0)+1)}let i=xr(o,0);return i!==null?i+at("a",t):"b"+at("a",t)}function xr(e,t){if(t>=e.length)return null;let r=e.charCodeAt(t);return r<122?e.slice(0,t)+String.fromCharCode(r+1):xr(e,t+1)}function nn(e,t,r){let o=e.split("."),n=t.split("."),s=Math.max(o.length,n.length),i=vr(o,s),l=vr(n,s),f=[];for(let g=0;g<s;g++){let b=i[g]||"a",P=l[g]||"z";if(b===P)f.push(b);else {let Ae=b.charCodeAt(0);if(P.charCodeAt(0)-Ae>1){for(f.push(String.fromCharCode(Ae+1));f.length<r;)f.push("a");return f.join(".")}return f.push(b),f.push(it(b,r)),f.join(".")}}return it(e,r)}function vr(e,t){for(;e.length<t;)e.push("a");return e}function at(e,t){let r=e;for(;r.length<t;)r="a"+r;return r}function sn(e,t){let r=e;for(;r.length<t;)r=r+"a";return r}function an(){return ye(null,null)}function Sr(e){return ye(e,null)}function wr(e){return ye(null,e)}function _r(e,t){return ye(e,t)}function ln(e,t,r){if(t===r)return e.map(s=>s.key);let o=[...e],[n]=o.splice(t,1);return o.splice(r,0,n),o.map(s=>s.key)}function cn(e){if(e.length===0)return e;let t=[],r=null;for(let o=0;o<e.length;o++){let n=o<e.length-1?e[o+1].key:null,s={...e[o]};r===null?s.key=wr(e[0].key):n===null?s.key=Sr(r):s.key=_r(r,n),t.push(s),r=s.key;}return t}var un={generateBetween:ye,firstKey:an,after:Sr,before:wr,between:_r,reorder:ln,reindex:cn};j();K();a();K();j();var lt={version:"4.9.5"};L();ne();T();D();S();a();function ct(){return exports.state}a();j();S();function Er(e){if(e===null||typeof e!="object")return e;let t=e.constructor?.name;if(t!=="Object"&&t!=="Array")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}var dt=()=>Er(H(exports.state)),ft=e=>{let t=[],r=(o,n,s)=>{let i=o?Object.keys(o):[],l=n?Object.keys(n):[];for(let f of l){let g=s?`${s}.${f}`:f,b=o?o[f]:void 0,P=n[f];b!==P&&(typeof b!==typeof P||b===void 0?t.push({path:g,oldValue:b,newValue:P}):b&&typeof b=="object"?r(b,P,g):b!==P&&t.push({path:g,oldValue:b,newValue:P}));}for(let f of i)if(!(f in(n||{}))){let g=s?`${s}.${f}`:f;t.push({path:g,oldValue:o[f],newValue:void 0});}};return r(e,H(exports.state),""),t},mt=(e=true)=>{exports.internal.historyEnabled=e,c(`[memorio history] Tracking ${e?"enabled":"disabled"}`);};var pt=()=>[...exports.internal.mutations],yt=()=>exports.internal.canUndo(),gt=()=>exports.internal.canRedo(),bt=()=>{if(!exports.internal.historyEnabled){c("[memorio history] History is not enabled");return}let e=exports.internal.popUndo();if(e)return fn(e),c(`[memorio history] Undid: ${e.action} ${e.path}`),e},ht=()=>{if(!exports.internal.historyEnabled){c("[memorio history] History is not enabled");return}let e=exports.internal.popRedo();if(e)return mn(e),c(`[memorio history] Redid: ${e.action} ${e.path}`),e};function fn(e){let t=exports.internal.historyEnabled;exports.internal.historyEnabled=false;try{e.action==="set"?e.previousValue===void 0?kr(e.path):ut(e.path,e.previousValue):e.action==="delete"&&e.previousValue!==void 0&&ut(e.path,e.previousValue);}finally{exports.internal.historyEnabled=t;}}function mn(e){let t=exports.internal.historyEnabled;exports.internal.historyEnabled=false;try{e.action==="set"?ut(e.path,e.newValue):e.action==="delete"&&kr(e.path);}finally{exports.internal.historyEnabled=t;}}function ut(e,t){let r=e.split("."),o=exports.state;for(let n=0;n<r.length-1;n++){let s=r[n];o[s]===void 0&&(o[s]={}),o=o[s];}o[r[r.length-1]]=t;}function kr(e){let t=e.split(".");if(t.length===1){exports.state.remove(t[0]);return}let r=exports.state;for(let o=0;o<t.length-1;o++){let n=t[o];if(r[n]===void 0)return;r=r[n];}delete r[t[t.length-1]];}var vt=e=>{exports.state.removeAll();for(let t of Object.keys(e))exports.state[t]=Er(e[t]);exports.internal.clearHistory(),c("[memorio history] State rolled back to snapshot");},xt=()=>{exports.internal.clearHistory(),c("[memorio history] History cleared");},St=()=>{exports.internal.clearRedo();};a();ne();T();a();ne();var B=globalThis;function ge(){let e=B.memorioSyncConfig;if(e&&typeof e.namespace=="string"&&e.namespace)return `ns:${e.namespace}`;let t=B.memorio?B.memorio._currentContext:void 0,r=typeof t=="string"&&t?t:"";return r?`ctx:${r}`:"default"}function Pr(){return !!B.memorioSyncConfig}var ae=e=>`memorio:sync:${e}:`,ie=e=>`${ae(e)}index`;function wt(e){try{return typeof e=="string"?JSON.parse(e):e}catch{return null}}var _t={async append(e,t){let r=ge(),o={...e,operation:t,updatedAt:e.updatedAt||Date.now(),version:e.version||1,sync:"pending",hlc:e.hlc||_.serialize(_.tick())},n=`${ae(r)}${o.id}`;exports.store.set(n,o);let s=exports.store.get(ie(r))||[];return s.includes(o.id)||s.push(o.id),exports.store.set(ie(r),s),o},async pending(){let e=ge(),t=[],r=exports.store.get(ie(e))||[];for(let o of r){let n=exports.store.get(`${ae(e)}${o}`);if(!n)continue;let s=wt(n);s&&s.sync!=="synced"&&t.push(s);}return t.sort((o,n)=>{if(o.hlc&&n.hlc){let s=_.parse(o.hlc),i=_.parse(n.hlc);if(s&&i)return _.compare(s,i)}return (o.updatedAt||0)-(n.updatedAt||0)}),t},async markSynced(e){if(!e.length)return 0;let t=ge(),r=0,o=exports.store.get(ie(t))||[];for(let n of o){if(!e.includes(n))continue;let s=`${ae(t)}${n}`,i=exports.store.get(s);if(!i)continue;let l=wt(i);!l||l.sync==="synced"||(l.sync="synced",exports.store.set(s,l),r++);}return r},async get(e){let t=ge(),r=exports.store.get(`${ae(t)}${e}`);return wt(r??"")},async clear(){let e=ge(),t=exports.store.get(ie(e))||[];for(let r of t)exports.store.remove(`${ae(e)}${r}`);exports.store.remove(ie(e));},async replay(){let e={synced:[],resolved:[]};if(!Pr())return e;let r=(B.memorioSyncConfig||{}).provider;if(!r||typeof r.push!="function")return e;let o=await this.pending();if(o.length)try{let n=await r.push(o);e.synced=n?.synced||[],e.conflicts=n?.conflicts,e.error=n?.error,e.synced.length&&await this.markSynced(e.synced);}catch(n){e.error=String(n);}if(typeof r.pull=="function")try{let n=o.length?Math.min(...o.map(i=>i.updatedAt||0)):0,s=await r.pull(n);for(let i of s||[]){if(i.hlc){let f=_.parse(i.hlc);f&&_.receive(f);}let l=await this.get(i.id);if(l&&i.hlc&&l.hlc){let f=_.parse(l.hlc),g=_.parse(i.hlc);if(f&&g){let b=_.compare(f,g);if(b===0){let P=typeof r.resolveConflict=="function"?await r.resolveConflict(l,i):"remote";if(e.resolved?.push({id:i.id,resolution:P}),P==="local")continue}else if(b>0)continue}}await this.append(i,i.operation||"confirm"),await this.markSynced([i.id]);}}catch{}return e},status(){return Promise.resolve("store")}};function Tr(e){let t=B.memorioSyncConfig||{};return B.memorioSyncConfig={...t,...e},_t}if(typeof B.addEventListener=="function"){let e=false;B.addEventListener("focus",()=>{e||!Pr()||(e=true,_t.replay().finally(()=>{e=false;}));});}var Et=_t;var $e="__memorio_memory_index__",Cr="__memorio_superseded__";function le(){return !!globalThis.memorioSyncConfig}async function F(e,t){if(le()&&e.scope!=="hot")try{await Et.append(e,t);}catch{}}function kt(e){return e.startsWith(Cr)?e:`${Cr}${e}`}function Dr(e){return e?Array.isArray(e)?e:[e]:[]}function pn(e,t){if(t.scope)return t.scope;let r=JSON.stringify(e).length;return r>1e6?"durable":("local")}function E(){return Date.now()}function De(e){return e.ttl===null||e.ttl===void 0?false:E()-e.createdAt>e.ttl}function yn(e,t){return e.status==="obsolete"||e.status==="superseded"||De(e)?t.includeObsolete??false:!(t.type&&!(Array.isArray(t.type)?t.type:[t.type]).includes(e.type)||t.minConfidence!==void 0&&e.confidence<t.minConfidence)}function gn(e,t){return !(e.status!=="active"||De(e)||t.tags&&!(Array.isArray(t.tags)?t.tags:[t.tags]).some(n=>e.tags.includes(n))||t.types&&!(Array.isArray(t.types)?t.types:[t.types]).includes(e.type)||t.minConfidence!==void 0&&e.confidence<t.minConfidence||t.scopes&&!t.scopes.includes(e.scope))}function bn(e){let t=(E()-e.createdAt)/36e5,r=Math.max(.1,1/(1+t*.5)),o=e.confidence,n=1+e.tags.length*.1,s={decision:1.5,context:1.3,preference:1.2,task:1,fact:.8},i={hot:1.5,session:1.2,local:1,durable:.8};return r*o*n*s[e.type]*i[e.scope]}function Or(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),o=e;for(let n of r){if(o==null)return;o=o[n];}return o}function Pt(e,t,r){if(!t||typeof t!="string")return;let o=t.replace(/^state\./,"").split("."),n=e;for(let s=0;s<o.length-1;s++){let i=o[s];(n[i]===void 0||n[i]===null)&&(n[i]={}),n=n[i];}n[o[o.length-1]]=r;}function hn(e,t){if(!t||typeof t!="string")return;let r=t.replace(/^state\./,"").split("."),o=e;for(let n=0;n<r.length-1;n++){let s=r[n];if(o[s]===void 0||o[s]===null)return;o=o[s];}delete o[r[r.length-1]];}async function W(e){let t=e.status==="superseded"?kt(e.id||e.key):e.key,r=JSON.stringify(e);switch(e.scope){case "hot":Pt(exports.state,t,e.value);break;case "session":exports.session.set(t,r);break;case "local":exports.store.set(t,r);break;case "durable":await exports.idb.set("memories",t,r);break}await vn(e.id||e.key,e.scope,e.status==="superseded");}async function Ar(e,t,r=false){let o=r?kt(e):e,n;switch(t){case "hot":{let s=Or(exports.state,o);return s===void 0?null:Mr(e,s,t)}case "session":n=exports.session.get(o);break;case "local":n=exports.store.get(o);break;case "durable":n=await exports.idb.get("memories",o);break}if(!n)return null;try{let s=JSON.parse(n);return s.id=s.id||e,s}catch{return null}}function Mr(e,t,r){return {id:e,key:e,value:t,type:"fact",confidence:1,scope:r,ttl:null,tags:[],status:"active",createdAt:E(),lastConfirmedAt:E(),supersededId:null}}async function $r(e,t,r=false){let o=r?kt(e):e;switch(t){case "hot":Pt(exports.state,o,void 0);break;case "session":exports.session.remove(o);break;case "local":exports.store.remove(o);break;case "durable":await exports.idb.deleteKey("memories",o);break}await xn(e,r);}async function be(){try{let e=exports.store.get($e);return e?JSON.parse(e):{}}catch{return {}}}async function vn(e,t,r=false){let o=await be();o[e]={scope:t,superseded:r},exports.store.set($e,JSON.stringify(o));}async function xn(e,t=false){let r=await be(),o=r[e];o&&(t&&o.superseded||!t&&!o.superseded)&&delete r[e],exports.store.set($e,JSON.stringify(r));}async function Ce(){let e=await be(),t=[];for(let[r,o]of Object.entries(e)){let n=await Ar(r,o.scope,o.superseded);n&&(n.id=n.id||r,n.supersededId=n.supersededId??null,t.push(n));}return t}var Oe={async remember(e,t,r={}){let o=await this._getEntry(e);if(o&&o.status==="active"){let l=`${o.id}__v${Date.now()}`,f={...o,id:l,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:E()};await W(f),await F(f,"supersede");}let n=pn(t,r),s=Dr(r.tags),i={id:r.id||e,key:e,value:t,type:r.type||"fact",confidence:r.confidence??1,scope:n,ttl:r.ttl??null,tags:s,source:r.source,status:"active",createdAt:E(),lastConfirmedAt:E(),updatedAt:E(),version:o&&o.version?o.version+1:1,sync:le()?"pending":void 0,supersededId:o?o.id:null,hlc:_.serialize(_.tick())};await W(i),await F(i,"remember"),w.set("memorio:memory:remembered",{key:e,scope:n,entryId:i.id});},async recall(e,t={}){let r=await this._getEntry(e);return !r||!yn(r,t)?null:(r.lastConfirmedAt=E(),await W(r),w.set("memorio:memory:recalled",{key:e}),r.value)},async context(e={}){return (await Ce()).filter(n=>gn(n,e)).map(n=>({entry:n,score:bn(n)})).sort((n,s)=>s.score-n.score).slice(0,e.maxEntries??25).map(({entry:n})=>({key:n.key,value:n.value,type:n.type,confidence:n.confidence,scope:n.scope,tags:n.tags,age:E()-n.createdAt,accessCount:n.tags.length+1,lastAccessedAt:n.lastConfirmedAt}))},async forget(e){let t=await this._getEntry(e);if(!t){let o={id:e,key:e,value:null,type:"fact",confidence:1,scope:"local",ttl:null,tags:[],status:"obsolete",operation:"delete",createdAt:E(),lastConfirmedAt:E(),updatedAt:E(),version:1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick())};await F(o,"delete");return}await $r(t.id||e,t.scope,t.status==="superseded");let r={...t,value:null,status:"obsolete",operation:"delete",updatedAt:E(),version:(t.version?t.version:0)+1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick())};await F(r,"delete"),w.set("memorio:memory:forgotten",{key:e});},async update(e,t,r={}){let o=await this._getEntry(e);if(!o){await this.remember(e,t,r);return}let n=`${o.id}__v${E()}`,s={...o,id:n,key:o.key,status:"superseded",supersededId:null,lastConfirmedAt:E()};await W(s),await F(s,"supersede");let i={...o,value:t,lastConfirmedAt:E(),updatedAt:E(),version:(o.version?o.version:0)+1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick()),...r.scope?{scope:r.scope}:{},...r.ttl!==void 0?{ttl:r.ttl}:{},...r.type?{type:r.type}:{},...r.confidence!==void 0?{confidence:r.confidence}:{},...r.tags!==void 0?{tags:Dr(r.tags)}:{},...r.source?{source:r.source}:{}};await W(i),await F(i,"update"),w.set("memorio:memory:updated",{key:e,entryId:i.id});},async stats(){let e=await Ce(),t={hot:0,session:0,local:0,durable:0},r={},o=0;for(let n of e)t[n.scope]=(t[n.scope]||0)+1,De(n)&&o++,r[n.type]=(r[n.type]||0)+1;return {total:e.length,byScope:t,byType:r,expired:o}},async forgetExpired(){let e=await Ce(),t=0;for(let r of e)De(r)&&r.status==="active"&&(r.status="obsolete",r.updatedAt=E(),r.operation="expire",await W(r),await F(r,"expire"),t++);return t},async clear(){let e=await be();for(let[t,r]of Object.entries(e))await $r(t,r.scope,r.superseded);exports.store.remove($e);},async _getEntry(e){let r=(await be())[e];if(!r){let o=Or(exports.state,e);return o!==void 0?Mr(e,o,"hot"):null}return Ar(e,r.scope,r.superseded)},async _loadAll(){return Ce()},async _save(e){await W(e);},async patch(e,t){let r=await this._getEntry(e);if(!r)return;let o=false;for(let s of t)s.op==="set"?(Pt({[r.key]:r.value},s.path.replace(/^[^.]+\./,""),s.value),o=true):s.op==="delete"&&(hn({[r.key]:r.value},s.path.replace(/^[^.]+\./,"")),o=true);if(!o)return;let n={...r,updatedAt:E(),lastConfirmedAt:E(),version:(r.version?r.version:0)+1,sync:le()?"pending":void 0,hlc:_.serialize(_.tick()),patches:t,path:t[0]?.path};await W(n),await F(n,"patch"),w.set("memorio:memory:patched",{key:e,patches:t});},journal:Et,configure(e){return Tr(e),this}};a();var Tt=()=>{let e=H(exports.state);return Object.keys(e).filter(t=>!["list","remove","removeAll","lock","unlock"].includes(t))},qr=e=>{if(!e||typeof e!="string")return false;let t=e.replace(/^state\./,"").split("."),r=exports.state;for(let o of t){if(r==null)return false;r=r[o];}return r!==void 0},jr=e=>{let[t,r]=Lr(e);return !t||r===void 0?"undefined":Array.isArray(r)?"array":typeof r},Rr=e=>{let[t,r]=Lr(e);if(!(!t||r===void 0))return Sn(r)},Ir=()=>{let e=[],t=(r,o)=>{if(r===null||typeof r!="object"||Array.isArray(r))return;let n=Object.keys(r).filter(s=>!["list","remove","removeAll","lock","unlock"].includes(s));for(let s of n){let i=o?`${o}.${s}`:s,l=r[s],f=l!==void 0,g=f?Array.isArray(l)?"array":typeof l:"undefined";e.push({path:i,type:g,defined:f}),f&&typeof l=="object"&&!Array.isArray(l)&&l.constructor?.name==="Object"&&t(l,i);}};return t(H(exports.state),""),e};function Lr(e){if(!e||typeof e!="string")return [false,void 0];let t=e.replace(/^state\./,"").split("."),r=exports.state;for(let o of t){if(r==null)return [false,void 0];r=r[o];}return [r!==void 0,r]}function Sn(e){if(e===null||typeof e!="object")return e;let t=e.constructor?.name;if(t!=="Object"&&t!=="Array")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}if(!("memorio"in globalThis)){Object.defineProperty(globalThis,"memorio",{value:{setProps:()=>{},obj:{},array:[],dispatch:w,message:exports.message,setDescription:()=>{}},writable:false,configurable:true,enumerable:false}),Object.defineProperty(globalThis,"events",{value:{},writable:true,enumerable:false}),typeof globalThis.addEventListener=="function"&&w.listen("memorio:memory:cleanup",async()=>Oe.forgetExpired?.()),Object.defineProperty(memorio,"version",{writable:false,enumerable:false,value:lt.version}),memorio.memory=Oe,It(),memorio.isBrowser=Le,memorio.isNode=Ne,memorio.isDeno=Ve,memorio.isEdge=He,memorio.getCapabilities=fe,memorio.createContext=me,memorio.listContexts=ze,memorio.deleteContext=Ke,memorio.isolate=t=>me(t),Object.defineProperty(memorio,"setContext",{writable:false,enumerable:false,value:t=>Qe(t)}),Object.defineProperty(memorio,"getContext",{writable:false,enumerable:false,value:()=>exports.internal.currentContext}),memorio.registerSchema=z.register,memorio.validate=z.validate,memorio.unregisterSchema=z.unregister,memorio.listSchemas=z.list,memorio.typed=ct,memorio.snapshot=dt,memorio.diff=ft,memorio.undo=bt,memorio.redo=ht,memorio.canUndo=yt,memorio.canRedo=gt,memorio.rollback=vt,memorio.trace=pt,memorio.enableHistory=mt,memorio.clearHistory=xt,memorio.clearRedo=St,Object.defineProperty(memorio,"dispatch",{value:w,writable:true,enumerable:false,configurable:true});let e=exports.DEV;if(memorio.env={isDev:e,isProd:exports.PROD},memorio.global=function(){let t={state:exports.state,store:exports.store,session:exports.session,cache:se,idb:exports.idb,sqlite:exports.sqlite,observer:ke,useObserver:Pe};for(let r of Object.keys(t))r in globalThis||Object.defineProperty(globalThis,r,{value:t[r],writable:true,enumerable:false,configurable:true});},e&&memorio.global(),exports.DEV){Object.defineProperty(memorio,"debug",{get:()=>exports.internal.debug,set:r=>{exports.internal.debug=r;},enumerable:false});let t=fe();Object.defineProperty(memorio,"_platform",{writable:false,enumerable:false,value:t.platform}),Object.defineProperty(memorio,"_capabilities",{writable:false,enumerable:false,value:t}),Object.defineProperty(memorio,"_sessionId",{writable:false,enumerable:false,value:ve()}),memorio.logger=ot,"$state"in globalThis||Object.defineProperty(globalThis,"$state",{get:()=>globalThis.state,configurable:true}),"$store"in globalThis||Object.defineProperty(globalThis,"$store",{get:()=>globalThis.store,configurable:true}),"$session"in globalThis||Object.defineProperty(globalThis,"$session",{get:()=>globalThis.session,configurable:true}),"$cache"in globalThis||Object.defineProperty(globalThis,"$cache",{get:()=>globalThis.cache,configurable:true}),memorio.devtools=Te,memorio.inspect=Tt,memorio.stateKeys=Tt,memorio.pathExists=qr,memorio.stateType=jr,memorio.stateGet=Rr,memorio.stateSchema=Ir,memorio.help=function(){console.debug(`
26
+ \u{1F9E0} Memorio ${lt.version} - Help
27
+
28
+ Core Modules (runtime):
29
+ state - Reactive state management (DEV global)
30
30
  store - Persistent storage (localStorage/Map)
31
31
  session - Session storage (sessionStorage/Map)
32
32
  cache - In-memory cache
33
33
  idb - IndexedDB (browser only)
34
-
35
- API:
36
- memorio.typed<T>() - Type-safe view of global state (compile-time only)
37
- memorio.registerSchema() - Register a validator for a state path
38
- memorio.validate() - Manually validate a value
39
- memorio.unregisterSchema() - Remove a registered schema
40
- memorio.listSchemas() - List all registered schema paths
41
-
42
- Context Management:
43
- memorio.isolate(name) - Create isolated context
44
- memorio.listContexts() - List all contexts
45
- memorio.deleteContext(id) - Delete a context
34
+ sqlite - SQLite in browser (sql.js, optional)
46
35
 
47
36
  Platform Detection:
48
- memorio.isBrowser() - Browser environment
49
- memorio.isNode() - Node.js environment
50
- memorio.isDeno() - Deno environment
51
- memorio.isEdge() - Edge/Worker environment
37
+ memorio.isBrowser() - Browser environment
38
+ memorio.isNode() - Node.js environment
39
+ memorio.isDeno() - Deno environment
40
+ memorio.isEdge() - Edge/Worker environment
52
41
  memorio.getCapabilities() - Full capabilities object
53
42
 
54
- DevTools:
55
- memorio.devtools.inspect() - Inspect all modules
56
- memorio.devtools.stats() - Show statistics
57
- memorio.devtools.watch() - Watch a path
58
- memorio.devtools.exportData() - Export as JSON
59
- memorio.devtools.importData() - Import from JSON
60
- memorio.devtools.clear() - Clear specific module
61
- memorio.devtools.clearAll() - Clear all modules
62
-
63
- Memory System:
64
- memorio.memory.remember(key, value, opts) - Store a memory with type, confidence, scope, TTL, tags
65
- memorio.memory.recall(key, opts) - Retrieve a memory with filtering
66
- memorio.memory.update(key, value, opts) - Update an existing memory
67
- memorio.memory.forget(key) - Delete a specific memory
68
- memorio.memory.context(opts) - Get ranked relevant memories (semantic context for AI)
69
- memorio.memory.stats() - Memory usage statistics
70
- memorio.memory.forgetExpired() - Remove all expired entries
71
- memorio.memory.clear() - Wipe all memories
72
-
73
- Scopes:
74
- hot - In-memory reactive state (volatile, fastest)
75
- session - sessionStorage (persists across page reloads, cleared on tab close)
76
- local - localStorage (persistent, survives browser restart)
77
- durable - IndexedDB (large datasets, async)
78
-
79
- TTL options:
80
- ttl: number (milliseconds) or null (never expires)
81
-
82
- Memory types:
83
- fact, preference, decision, task, context
84
-
85
- Shortcuts:
86
- state, store, session, cache, idb - direct access to modules
87
- `);};memorio.help=function(){console.debug(`
88
- \u{1F9E0} Memorio ${te.version} - Help
89
-
90
- Core Modules:
91
- state - Reactive state management
92
- store - Persistent storage (localStorage/Map)
93
- session - Session storage (sessionStorage/Map)
94
- cache - In-memory cache
95
- idb - IndexedDB (browser only)
43
+ Context Management:
44
+ memorio.isolate(name) - Create isolated context
45
+ memorio.listContexts() - List all contexts
46
+ memorio.deleteContext(id) - Delete a context
96
47
 
97
- API:
98
- memorio.typed<T>() - Type-safe view of global state (compile-time only)
48
+ Schema Validation (runtime):
99
49
  memorio.registerSchema() - Register a validator for a state path
100
50
  memorio.validate() - Manually validate a value
101
51
  memorio.unregisterSchema() - Remove a registered schema
102
52
  memorio.listSchemas() - List all registered schema paths
53
+ memorio.typed<T>() - Type-safe view of global state (compile-time only)
103
54
 
104
- History & Time Travel:
55
+ History & Time Travel (runtime):
105
56
  memorio.snapshot() - Capture a deep snapshot of state
106
57
  memorio.diff(snap) - Diff snapshot against current state
107
58
  memorio.undo() / redo() - Undo / redo the last mutation
@@ -111,26 +62,7 @@ History & Time Travel:
111
62
  memorio.enableHistory() - Enable/disable mutation tracking
112
63
  memorio.clearHistory() - Clear undo/redo stacks and trace log
113
64
 
114
- Introspection:
115
- memorio.stateKeys() - List top-level state keys
116
- memorio.pathExists(path) - Check if a state path exists
117
- memorio.stateType(path) - Get runtime type of a state value
118
- memorio.stateGet(path) - Get a deep-cloned value at a path
119
- memorio.stateSchema() - Get a schema report of all state paths
120
-
121
- Context Management:
122
- memorio.isolate(name) - Create isolated context
123
- memorio.listContexts() - List all contexts
124
- memorio.deleteContext(id) - Delete a context
125
-
126
- Platform Detection:
127
- memorio.isBrowser() - Browser environment
128
- memorio.isNode() - Node.js environment
129
- memorio.isDeno() - Deno environment
130
- memorio.isEdge() - Edge/Worker environment
131
- memorio.getCapabilities() - Full capabilities object
132
-
133
- DevTools:
65
+ DevTools (development-only):
134
66
  memorio.devtools.inspect() - Inspect all modules
135
67
  memorio.devtools.stats() - Show statistics
136
68
  memorio.devtools.watch() - Watch a path
@@ -139,7 +71,17 @@ DevTools:
139
71
  memorio.devtools.clear() - Clear specific module
140
72
  memorio.devtools.clearAll() - Clear all modules
141
73
 
142
- Memory System:
74
+ Introspection (development-only):
75
+ memorio.stateKeys() - List top-level state keys
76
+ memorio.pathExists(path) - Check if a state path exists
77
+ memorio.stateType(path) - Get runtime type of a state value
78
+ memorio.stateGet(path) - Get a deep-cloned value at a path
79
+ memorio.stateSchema() - Get a schema report of all state paths
80
+
81
+ Debug:
82
+ memorio.debug = true - Enable debug output (DEV only)
83
+
84
+ Memory System (runtime):
143
85
  memorio.memory.remember(key, value, opts) - Store a memory with type, confidence, scope, TTL, tags
144
86
  memorio.memory.recall(key, opts) - Retrieve a memory with filtering
145
87
  memorio.memory.update(key, value, opts) - Update an existing memory
@@ -148,12 +90,15 @@ Memory System:
148
90
  memorio.memory.stats() - Memory usage statistics
149
91
  memorio.memory.forgetExpired() - Remove all expired entries
150
92
  memorio.memory.clear() - Wipe all memories
93
+ memorio.memory.configure({ sync }) - Optional cloud-sync provider + namespace
94
+ memorio.memory.journal.pending() - Local op journal (SQLite/store)
151
95
 
152
96
  Scopes:
153
97
  hot - In-memory reactive state (volatile, fastest)
154
98
  session - sessionStorage (persists across page reloads, cleared on tab close)
155
99
  local - localStorage (persistent, survives browser restart)
156
100
  durable - IndexedDB (large datasets, async)
101
+ sql - SQLite / sql.js (browser, optional, full SQL)
157
102
 
158
103
  TTL options:
159
104
  ttl: number (milliseconds) or null (never expires)
@@ -161,54 +106,49 @@ TTL options:
161
106
  Memory types:
162
107
  fact, preference, decision, task, context
163
108
 
164
- Shortcuts:
165
- state, store, session, cache, idb - direct access to modules
166
- `);};var Or=globalThis.memorio,ms=globalThis.events,ds=e=>F(e),fs=globalThis.memorio?.help,ps=e=>exports.internal.currentContext=e,gs=()=>exports.internal.currentContext,ys=Or;
167
-
168
- exports.cache = Q;
169
- exports.canRedo = De;
170
- exports.canUndo = _e;
171
- exports.clearHistory = je;
172
- exports.clearRedo = Ie;
173
- exports.createContext = F;
174
- exports.default = ys;
175
- exports.deleteContext = ye;
176
- exports.devtools = we;
177
- exports.diff = Oe;
178
- exports.dispatch = h;
179
- exports.enableHistory = Ce;
180
- exports.events = ms;
181
- exports.getCapabilities = q;
182
- exports.getContext = gs;
183
- exports.help = fs;
184
- exports.isBrowser = ae;
185
- exports.isDeno = ce;
186
- exports.isEdge = ue;
187
- exports.isNode = le;
188
- exports.isolate = ds;
189
- exports.listContexts = ge;
190
- exports.listSchemas = We;
191
- exports.logger = Ee;
192
- exports.memorio = Or;
193
- exports.memory = se;
194
- exports.observer = Z;
195
- exports.pathExists = Ve;
196
- exports.redo = Me;
197
- exports.registerSchema = qe;
198
- exports.rollback = Ae;
199
- exports.schema = M;
200
- exports.session = C;
201
- exports.setContext = ps;
202
- exports.snapshot = Pe;
203
- exports.state = b;
204
- exports.stateGet = Le;
205
- exports.stateKeys = Ne;
206
- exports.stateSchema = He;
207
- exports.stateType = Be;
208
- exports.store = S;
209
- exports.trace = $e;
210
- exports.typed = Te;
211
- exports.undo = Re;
212
- exports.unregisterSchema = Fe;
213
- exports.useObserver = ee;
214
- exports.validate = Ke;
109
+ Console shortcuts (DEV only):
110
+ state, store, session, cache, idb, sqlite - direct access to modules
111
+ $state, $store, $session, $cache - aliases for the above
112
+ `);};}}var dl=exports.DEV?Te:void 0,wn=globalThis.memorio,fl=globalThis.events,ml=e=>me(e),pl=globalThis.memorio?.help,yl=e=>exports.internal.currentContext=e,gl=()=>exports.internal.currentContext,bl=wn;
113
+
114
+ exports.cache = se;
115
+ exports.canRedo = gt;
116
+ exports.canUndo = yt;
117
+ exports.clearHistory = xt;
118
+ exports.clearRedo = St;
119
+ exports.createContext = me;
120
+ exports.default = bl;
121
+ exports.deleteContext = Ke;
122
+ exports.devtools = dl;
123
+ exports.diff = ft;
124
+ exports.dispatch = w;
125
+ exports.enableHistory = mt;
126
+ exports.events = fl;
127
+ exports.fractional = un;
128
+ exports.getCapabilities = fe;
129
+ exports.getContext = gl;
130
+ exports.help = pl;
131
+ exports.hlc = _;
132
+ exports.isBrowser = Le;
133
+ exports.isDeno = Ve;
134
+ exports.isEdge = He;
135
+ exports.isNode = Ne;
136
+ exports.isolate = ml;
137
+ exports.listContexts = ze;
138
+ exports.listSchemas = Mt;
139
+ exports.logger = ot;
140
+ exports.memorio = wn;
141
+ exports.memory = Oe;
142
+ exports.observer = ke;
143
+ exports.redo = ht;
144
+ exports.registerSchema = Ot;
145
+ exports.rollback = vt;
146
+ exports.schema = z;
147
+ exports.setContext = yl;
148
+ exports.snapshot = dt;
149
+ exports.trace = pt;
150
+ exports.typed = ct;
151
+ exports.undo = bt;
152
+ exports.unregisterSchema = At;
153
+ exports.useObserver = Pe;
154
+ exports.validate = $t;
package/index.d.ts CHANGED
@@ -16,6 +16,7 @@
16
16
  /// <reference path="./types/store.d.ts" />
17
17
  /// <reference path="./types/cache.d.ts" />
18
18
  /// <reference path="./types/idb.d.ts" />
19
+ /// <reference path="./types/sqlite.d.ts" />
19
20
 
20
21
  export * from './types/exports'
21
22
  export { default } from './types/exports'