open-mem 0.7.3 → 0.9.0

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/dist/daemon.js CHANGED
@@ -144,7 +144,7 @@ Respond with EXACTLY this XML format:
144
144
  </instructions>
145
145
  </entity_extraction>`}var TJ={"claude-sonnet-4-20250514":"us.anthropic.claude-sonnet-4-20250514-v1:0","claude-opus-4-20250514":"us.anthropic.claude-opus-4-20250514-v1:0","claude-3-5-sonnet-20241022":"us.anthropic.claude-3-5-sonnet-20241022-v2:0","claude-3-5-haiku-20241022":"us.anthropic.claude-3-5-haiku-20241022-v1:0","claude-3-haiku-20240307":"anthropic.claude-3-haiku-20240307-v1:0"};function qJ(J){if(J.includes("."))return J;return TJ[J]||`us.anthropic.${J}-v1:0`}function M(J){switch(J.provider){case"anthropic":{let{createAnthropic:X}=S("@ai-sdk/anthropic");return X({apiKey:J.apiKey})(J.model)}case"bedrock":{let{createAmazonBedrock:X}=S("@ai-sdk/amazon-bedrock");return X()(qJ(J.model))}case"openai":{let{createOpenAI:X}=S("@ai-sdk/openai");return X({apiKey:J.apiKey})(J.model)}case"google":{let{createGoogleGenerativeAI:X}=S("@ai-sdk/google");return X({apiKey:J.apiKey})(J.model)}default:throw Error(`Unknown provider: ${J.provider}. Supported: anthropic, bedrock, openai, google`)}}function QJ(J){try{switch(J.provider){case"google":{let{createGoogleGenerativeAI:X}=S("@ai-sdk/google");return X({apiKey:J.apiKey}).embedding("text-embedding-004")}case"openai":{let{createOpenAI:X}=S("@ai-sdk/openai");return X({apiKey:J.apiKey}).embedding("text-embedding-3-small")}case"bedrock":{let{createAmazonBedrock:X}=S("@ai-sdk/amazon-bedrock");return X().embedding("amazon.titan-embed-text-v2:0")}case"anthropic":return null;default:return null}}catch{return null}}var PJ={"gemini-2.5-flash-lite":10,"gemini-2.5-flash":10,"gemini-2.5-pro":5,"gemini-2.0-flash":15,"gemini-2.0-flash-lite":30,"gemini-3-flash":5},ZJ=0;async function A(J,X){if(!X)return;let $=PJ[J]||5,Q=Math.ceil(60000/$)+100,H=Date.now()-ZJ;if(H<Q){let W=Q-H;await new Promise((Y)=>setTimeout(Y,W))}ZJ=Date.now()}class O{model;config;_generate=xJ;constructor(J){this.config=J,this.model=null;let X=J.provider!=="bedrock";if(J.compressionEnabled&&(!X||J.apiKey))try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}static MAX_INPUT_LENGTH=50000;async compress(J,X,$){if(!this.config.compressionEnabled||!this.model)return null;if(X.length<this.config.minOutputLength)return null;let Q=E(X),Z=X.length>O.MAX_INPUT_LENGTH?`${X.substring(0,O.MAX_INPUT_LENGTH)}
146
146
 
147
- [... truncated ...]`:X,H=e(J,Z,$),W=2;for(let Y=0;Y<=W;Y++)try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:K}=await this._generate({model:this.model,maxOutputTokens:this.config.maxTokensPerCompression,prompt:H}),V=r(K);if(V)V.discoveryTokens=Q;return V}catch(K){if(fJ(K)&&Y<W){let V=2**Y*1000;await WJ(V);continue}return null}return null}async compressBatch(J){let X=new Map;for(let $=0;$<J.length;$++){let Q=J[$],Z=await this.compress(Q.toolName,Q.toolOutput,Q.sessionContext);if(X.set(Q.callId,Z),$<J.length-1)await WJ(200)}return X}createFallbackObservation(J,X){let $=yJ(X),Q=IJ[J]??"discovery";return{type:Q,title:`${J} execution`,subtitle:X.substring(0,100).replace(/\n/g," "),facts:[],narrative:`Tool ${J} was executed. Output length: ${X.length} chars.`,concepts:[],filesRead:Q==="discovery"?$:[],filesModified:Q==="change"?$:[],discoveryTokens:E(X),importance:2}}async isAvailable(){if(!this.model)return!1;try{return await this._generate({model:this.model,maxOutputTokens:10,prompt:"ping"}),!0}catch{return!1}}}var IJ={Read:"discovery",Write:"change",Edit:"change",Bash:"change",Glob:"discovery",Grep:"discovery"},hJ=/(?:^|\s)((?:\.\/|\/|src\/|tests\/|lib\/)\S+\.\w+)/gm;function yJ(J){let X=[];for(let $ of J.matchAll(hJ))X.push($[1]);return[...new Set(X)]}function fJ(J){if(typeof J!=="object"||J===null)return!1;let X=J,$=X.status;if($===429||$===500||$===503)return!0;let Q=X.error;if(typeof Q==="object"&&Q!==null&&Q.type==="overloaded_error")return!0;return!1}function WJ(J){return new Promise((X)=>setTimeout(X,J))}import{generateText as wJ}from"ai";class x{model;config;_generate=wJ;constructor(J){if(this.config=J,this.model=null,J.provider==="bedrock"||J.apiKey)try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}async evaluate(J,X){if(!this.model||X.length===0)return null;let $=XJ(J,X),Q=2;for(let Z=0;Z<=Q;Z++)try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:H}=await this._generate({model:this.model,maxOutputTokens:512,prompt:$});return o(H)}catch(H){if(vJ(H)&&Z<Q){let W=2**Z*1000;await bJ(W);continue}return null}return null}}function vJ(J){if(typeof J!=="object"||J===null)return!1;let X=J,$=X.status;if($===429||$===500||$===503)return!0;let Q=X.error;if(typeof Q==="object"&&Q!==null&&Q.type==="overloaded_error")return!0;return!1}function bJ(J){return new Promise((X)=>setTimeout(X,J))}import{generateText as uJ}from"ai";class I{model;config;_generate=uJ;constructor(J){if(this.config=J,this.model=null,J.provider==="bedrock"||J.apiKey)try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}async extract(J){if(!this.model)return null;let X=$J(J),$=2;for(let Q=0;Q<=$;Q++)try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:Z}=await this._generate({model:this.model,maxOutputTokens:1024,prompt:X});return t(Z)}catch(Z){if(gJ(Z)&&Q<$){let H=2**Q*1000;await mJ(H);continue}return null}return null}}function gJ(J){if(typeof J!=="object"||J===null)return!1;let X=J,$=X.status;if($===429||$===500||$===503)return!0;let Q=X.error;if(typeof Q==="object"&&Q!==null&&Q.type==="overloaded_error")return!0;return!1}function mJ(J){return new Promise((X)=>setTimeout(X,J))}import{generateText as pJ}from"ai";class h{model;config;_generate=pJ;constructor(J){this.config=J,this.model=null;let X=J.provider!=="bedrock";if(J.compressionEnabled&&(!X||J.apiKey))try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}async summarize(J,X){if(X.length===0)return null;if(!this.config.compressionEnabled||!this.model)return this.createFallbackSummary(X);let $=JJ(X.map((Q)=>({type:Q.type,title:Q.title,narrative:Q.narrative})),J);try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:Q}=await this._generate({model:this.model,maxOutputTokens:this.config.maxTokensPerCompression,prompt:$}),Z=a(Q);if(!Z)return this.createFallbackSummary(X);return Z}catch{return this.createFallbackSummary(X)}}createFallbackSummary(J){let X=new Set,$=new Set,Q=[];for(let Y of J){for(let K of Y.filesModified)X.add(K);for(let K of Y.concepts)$.add(K);if(Y.type==="decision")Q.push(Y.title)}let Z=new Map;for(let Y of J)Z.set(Y.type,(Z.get(Y.type)??0)+1);let H=Array.from(Z.entries()).map(([Y,K])=>`${K} ${Y}${K>1?"s":""}`).join(", "),W=Array.from($).slice(0,5).join(", ");return{summary:`Session with ${J.length} observations: ${H}. Files modified: ${X.size}. Key concepts: ${W}.`,keyDecisions:Q.slice(0,5),filesModified:Array.from(X),concepts:Array.from($)}}shouldSummarize(J){return J>=2}}import{existsSync as lJ,readFileSync as cJ}from"fs";var dJ={dbPath:".open-mem/memory.db",provider:"google",apiKey:void 0,model:"gemini-2.5-flash-lite",maxTokensPerCompression:1024,compressionEnabled:!0,contextInjectionEnabled:!0,maxContextTokens:4000,batchSize:5,batchIntervalMs:30000,ignoredTools:[],minOutputLength:50,maxIndexEntries:20,sensitivePatterns:[],retentionDays:90,maxDatabaseSizeMb:500,logLevel:"warn",contextShowTokenCosts:!0,contextObservationTypes:"all",contextFullObservationCount:3,maxObservations:50,contextShowLastSummary:!0,rateLimitingEnabled:!0,folderContextEnabled:!0,folderContextMaxDepth:5,daemonEnabled:!1,dashboardEnabled:!1,dashboardPort:3737,platformOpenCodeEnabled:!0,platformClaudeCodeEnabled:!1,platformCursorEnabled:!1,mcpCompatibilityMode:"strict",mcpProtocolVersion:"2024-11-05",mcpSupportedProtocolVersions:["2024-11-05"],embeddingDimension:void 0,conflictResolutionEnabled:!1,conflictSimilarityBandLow:0.7,conflictSimilarityBandHigh:0.92,userMemoryEnabled:!1,userMemoryDbPath:"~/.config/open-mem/user-memory.db",userMemoryMaxContextTokens:1000,rerankingEnabled:!1,rerankingMaxCandidates:20,entityExtractionEnabled:!1};function nJ(){let J={};if(process.env.OPEN_MEM_DB_PATH)J.dbPath=process.env.OPEN_MEM_DB_PATH;if(process.env.OPEN_MEM_PROVIDER)J.provider=process.env.OPEN_MEM_PROVIDER;if(process.env.OPEN_MEM_MODEL)J.model=process.env.OPEN_MEM_MODEL;if(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS)J.maxContextTokens=Number.parseInt(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS,10);if(process.env.OPEN_MEM_COMPRESSION==="false")J.compressionEnabled=!1;if(process.env.OPEN_MEM_CONTEXT_INJECTION==="false")J.contextInjectionEnabled=!1;if(process.env.OPEN_MEM_IGNORED_TOOLS)J.ignoredTools=process.env.OPEN_MEM_IGNORED_TOOLS.split(",").map((X)=>X.trim());if(process.env.OPEN_MEM_BATCH_SIZE)J.batchSize=Number.parseInt(process.env.OPEN_MEM_BATCH_SIZE,10);if(process.env.OPEN_MEM_RETENTION_DAYS)J.retentionDays=Number.parseInt(process.env.OPEN_MEM_RETENTION_DAYS,10);if(process.env.OPEN_MEM_LOG_LEVEL)J.logLevel=process.env.OPEN_MEM_LOG_LEVEL;if(process.env.OPEN_MEM_CONTEXT_SHOW_TOKEN_COSTS==="false")J.contextShowTokenCosts=!1;if(process.env.OPEN_MEM_CONTEXT_TYPES)J.contextObservationTypes=process.env.OPEN_MEM_CONTEXT_TYPES==="all"?"all":process.env.OPEN_MEM_CONTEXT_TYPES.split(",").map((X)=>X.trim());if(process.env.OPEN_MEM_CONTEXT_FULL_COUNT)J.contextFullObservationCount=Number.parseInt(process.env.OPEN_MEM_CONTEXT_FULL_COUNT,10);if(process.env.OPEN_MEM_MAX_OBSERVATIONS)J.maxObservations=Number.parseInt(process.env.OPEN_MEM_MAX_OBSERVATIONS,10);if(process.env.OPEN_MEM_CONTEXT_SHOW_LAST_SUMMARY==="false")J.contextShowLastSummary=!1;if(process.env.OPEN_MEM_RATE_LIMITING==="false")J.rateLimitingEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT==="false")J.folderContextEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH)J.folderContextMaxDepth=Number.parseInt(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH,10);if(process.env.OPEN_MEM_DAEMON==="true")J.daemonEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD==="true")J.dashboardEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD_PORT)J.dashboardPort=Number.parseInt(process.env.OPEN_MEM_DASHBOARD_PORT,10);if(process.env.OPEN_MEM_PLATFORM_OPENCODE==="false")J.platformOpenCodeEnabled=!1;if(process.env.OPEN_MEM_PLATFORM_CLAUDE_CODE==="true")J.platformClaudeCodeEnabled=!0;if(process.env.OPEN_MEM_PLATFORM_CURSOR==="true")J.platformCursorEnabled=!0;if(process.env.OPEN_MEM_MCP_COMPAT_MODE)J.mcpCompatibilityMode=process.env.OPEN_MEM_MCP_COMPAT_MODE;if(process.env.OPEN_MEM_MCP_PROTOCOL_VERSION)J.mcpProtocolVersion=process.env.OPEN_MEM_MCP_PROTOCOL_VERSION;if(process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS)J.mcpSupportedProtocolVersions=process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS.split(",").map((X)=>X.trim()).filter(Boolean);if(process.env.OPEN_MEM_EMBEDDING_DIMENSION)J.embeddingDimension=Number.parseInt(process.env.OPEN_MEM_EMBEDDING_DIMENSION,10);if(process.env.OPEN_MEM_CONFLICT_RESOLUTION==="true")J.conflictResolutionEnabled=!0;if(process.env.OPEN_MEM_CONFLICT_BAND_LOW){let X=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_LOW);if(!Number.isNaN(X))J.conflictSimilarityBandLow=X}if(process.env.OPEN_MEM_CONFLICT_BAND_HIGH){let X=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_HIGH);if(!Number.isNaN(X))J.conflictSimilarityBandHigh=X}if(process.env.OPEN_MEM_USER_MEMORY==="true")J.userMemoryEnabled=!0;if(process.env.OPEN_MEM_USER_MEMORY_DB_PATH)J.userMemoryDbPath=process.env.OPEN_MEM_USER_MEMORY_DB_PATH;if(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS)J.userMemoryMaxContextTokens=Number.parseInt(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS,10);if(process.env.OPEN_MEM_RERANKING==="true")J.rerankingEnabled=!0;if(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES)J.rerankingMaxCandidates=Number.parseInt(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES,10);if(process.env.OPEN_MEM_ENTITY_EXTRACTION==="true")J.entityExtractionEnabled=!0;return J}function sJ(J){let X=`${J}/.open-mem/config.json`;if(!lJ(X))return{};try{let $=cJ(X,"utf-8"),Q=JSON.parse($);if(!Q||typeof Q!=="object"||Array.isArray(Q))return{};return Q}catch{return{}}}function iJ(J){switch(J){case"google":return 768;case"openai":return 1536;case"bedrock":return 1024;case"anthropic":return 0;default:return 768}}function HJ(J,X){let $=sJ(J),Q=nJ(),Z={...dJ,...$,...Q,...X};if(!Z.dbPath.startsWith("/"))Z.dbPath=`${J}/${Z.dbPath}`;if(!process.env.OPEN_MEM_PROVIDER&&!X?.provider){if(process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY)Z.provider="google";else if(process.env.ANTHROPIC_API_KEY)Z.provider="anthropic";else if(process.env.AWS_BEARER_TOKEN_BEDROCK||process.env.AWS_ACCESS_KEY_ID||process.env.AWS_PROFILE)Z.provider="bedrock"}if(!Z.apiKey)switch(Z.provider){case"google":Z.apiKey=process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY;break;case"anthropic":Z.apiKey=process.env.ANTHROPIC_API_KEY;break;case"openai":Z.apiKey=process.env.OPENAI_API_KEY;break;case"bedrock":break}if(Z.embeddingDimension===void 0)Z.embeddingDimension=iJ(Z.provider);return Z}import{existsSync as J2,mkdirSync as rJ,readFileSync as X2,unlinkSync as aJ,writeFileSync as oJ}from"fs";function YJ(J){let X=J.lastIndexOf("/");if(X>0){let $=J.substring(0,X);rJ($,{recursive:!0})}oJ(J,String(process.pid),"utf-8")}function KJ(J){try{aJ(J)}catch{}}function VJ(J){let X=J.lastIndexOf("/");if(X>=0)return`${J.substring(0,X)}/worker.pid`;return"worker.pid"}class y{queueProcessor;pollIntervalMs;timer=null;lastActiveAt=Date.now();processing=!1;constructor(J){this.queueProcessor=J.queueProcessor,this.pollIntervalMs=J.pollIntervalMs}start(){if(this.timer)return;this.lastActiveAt=Date.now(),this.timer=setInterval(async()=>{if(this.processing)return;this.processing=!0;try{if(await this.queueProcessor.processBatch()>0)this.lastActiveAt=Date.now()}catch{}finally{this.processing=!1}},this.pollIntervalMs)}stop(){if(this.timer)clearInterval(this.timer),this.timer=null}get isRunning(){return this.timer!==null}get idleMs(){return Date.now()-this.lastActiveAt}get shouldAutoExit(){return this.idleMs>=60000&&!process.send}handleMessage(J){if(J==="SHUTDOWN")this.stop();else if(J==="PROCESS_NOW"){if(!this.processing)this.processing=!0,this.queueProcessor.processBatch().then((X)=>{if(X>0)this.lastActiveAt=Date.now()}).catch(()=>{}).finally(()=>{this.processing=!1})}}}import{Database as zJ}from"bun:sqlite";import{existsSync as f,mkdirSync as tJ,unlinkSync as BJ}from"fs";import*as GJ from"sqlite-vec";class q{db;dbPath;_hasVectorExtension=!1;static enableExtensionSupport(){let J=["/opt/homebrew/opt/sqlite/lib/libsqlite3.dylib","/usr/local/opt/sqlite/lib/libsqlite3.dylib"];for(let X of J)try{if(f(X))return zJ.setCustomSQLite(X),!0}catch{return!1}return!1}constructor(J){this.dbPath=J,this.db=this.open(J),this.configure()}open(J){let X=J.lastIndexOf("/");if(X>0){let $=J.substring(0,X);tJ($,{recursive:!0})}return new zJ(J,{create:!0})}configure(){try{this.applyPragmas(),this.loadExtensions()}catch(J){console.warn("[open-mem] Database configure failed, attempting recovery by removing WAL/SHM files:",J.message);try{this.db.close()}catch{}this.deleteSidecarFiles();try{this.db=this.open(this.dbPath),this.applyPragmas(),this.loadExtensions(),console.warn("[open-mem] Recovery successful after removing WAL/SHM files");return}catch(X){console.warn("[open-mem] WAL/SHM cleanup insufficient, recreating database from scratch:",X.message);try{this.db.close()}catch{}this.deleteDatabaseFiles();try{this.db=this.open(this.dbPath),this.applyPragmas(),this.loadExtensions(),console.warn("[open-mem] Recovery successful after full database recreation");return}catch($){throw console.warn("[open-mem] All recovery attempts failed, filesystem may be broken:",$.message),J}}}}applyPragmas(){this.db.exec("PRAGMA journal_mode = WAL"),this.db.exec("PRAGMA synchronous = NORMAL"),this.db.exec("PRAGMA foreign_keys = ON"),this.db.exec("PRAGMA busy_timeout = 5000")}loadExtensions(){try{GJ.load(this.db),this._hasVectorExtension=!0}catch{this._hasVectorExtension=!1}}get hasVectorExtension(){return this._hasVectorExtension}deleteSidecarFiles(){for(let J of["-wal","-shm"]){let X=this.dbPath+J;try{if(f(X))BJ(X)}catch{}}}deleteDatabaseFiles(){this.deleteSidecarFiles();try{if(f(this.dbPath))BJ(this.dbPath)}catch{}}ensureMigrationTable(){this.db.exec(`
147
+ [... truncated ...]`:X,H=e(J,Z,$),W=2;for(let Y=0;Y<=W;Y++)try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:K}=await this._generate({model:this.model,maxOutputTokens:this.config.maxTokensPerCompression,prompt:H}),V=r(K);if(V)V.discoveryTokens=Q;return V}catch(K){if(fJ(K)&&Y<W){let V=2**Y*1000;await WJ(V);continue}return null}return null}async compressBatch(J){let X=new Map;for(let $=0;$<J.length;$++){let Q=J[$],Z=await this.compress(Q.toolName,Q.toolOutput,Q.sessionContext);if(X.set(Q.callId,Z),$<J.length-1)await WJ(200)}return X}createFallbackObservation(J,X){let $=yJ(X),Q=IJ[J]??"discovery";return{type:Q,title:`${J} execution`,subtitle:X.substring(0,100).replace(/\n/g," "),facts:[],narrative:`Tool ${J} was executed. Output length: ${X.length} chars.`,concepts:[],filesRead:Q==="discovery"?$:[],filesModified:Q==="change"?$:[],discoveryTokens:E(X),importance:2}}async isAvailable(){if(!this.model)return!1;try{return await this._generate({model:this.model,maxOutputTokens:10,prompt:"ping"}),!0}catch{return!1}}}var IJ={Read:"discovery",Write:"change",Edit:"change",Bash:"change",Glob:"discovery",Grep:"discovery"},hJ=/(?:^|\s)((?:\.\/|\/|src\/|tests\/|lib\/)\S+\.\w+)/gm;function yJ(J){let X=[];for(let $ of J.matchAll(hJ))X.push($[1]);return[...new Set(X)]}function fJ(J){if(typeof J!=="object"||J===null)return!1;let X=J,$=X.status;if($===429||$===500||$===503)return!0;let Q=X.error;if(typeof Q==="object"&&Q!==null&&Q.type==="overloaded_error")return!0;return!1}function WJ(J){return new Promise((X)=>setTimeout(X,J))}import{generateText as wJ}from"ai";class x{model;config;_generate=wJ;constructor(J){if(this.config=J,this.model=null,J.provider==="bedrock"||J.apiKey)try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}async evaluate(J,X){if(!this.model||X.length===0)return null;let $=XJ(J,X),Q=2;for(let Z=0;Z<=Q;Z++)try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:H}=await this._generate({model:this.model,maxOutputTokens:512,prompt:$});return o(H)}catch(H){if(vJ(H)&&Z<Q){let W=2**Z*1000;await bJ(W);continue}return null}return null}}function vJ(J){if(typeof J!=="object"||J===null)return!1;let X=J,$=X.status;if($===429||$===500||$===503)return!0;let Q=X.error;if(typeof Q==="object"&&Q!==null&&Q.type==="overloaded_error")return!0;return!1}function bJ(J){return new Promise((X)=>setTimeout(X,J))}import{generateText as uJ}from"ai";class I{model;config;_generate=uJ;constructor(J){if(this.config=J,this.model=null,J.provider==="bedrock"||J.apiKey)try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}async extract(J){if(!this.model)return null;let X=$J(J),$=2;for(let Q=0;Q<=$;Q++)try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:Z}=await this._generate({model:this.model,maxOutputTokens:1024,prompt:X});return t(Z)}catch(Z){if(gJ(Z)&&Q<$){let H=2**Q*1000;await mJ(H);continue}return null}return null}}function gJ(J){if(typeof J!=="object"||J===null)return!1;let X=J,$=X.status;if($===429||$===500||$===503)return!0;let Q=X.error;if(typeof Q==="object"&&Q!==null&&Q.type==="overloaded_error")return!0;return!1}function mJ(J){return new Promise((X)=>setTimeout(X,J))}import{generateText as pJ}from"ai";class h{model;config;_generate=pJ;constructor(J){this.config=J,this.model=null;let X=J.provider!=="bedrock";if(J.compressionEnabled&&(!X||J.apiKey))try{this.model=M({provider:J.provider,model:J.model,apiKey:J.apiKey})}catch{}}async summarize(J,X){if(X.length===0)return null;if(!this.config.compressionEnabled||!this.model)return this.createFallbackSummary(X);let $=JJ(X.map((Q)=>({type:Q.type,title:Q.title,narrative:Q.narrative})),J);try{if(this.config.provider==="google")await A(this.config.model,this.config.rateLimitingEnabled);let{text:Q}=await this._generate({model:this.model,maxOutputTokens:this.config.maxTokensPerCompression,prompt:$}),Z=a(Q);if(!Z)return this.createFallbackSummary(X);return Z}catch{return this.createFallbackSummary(X)}}createFallbackSummary(J){let X=new Set,$=new Set,Q=[];for(let Y of J){for(let K of Y.filesModified)X.add(K);for(let K of Y.concepts)$.add(K);if(Y.type==="decision")Q.push(Y.title)}let Z=new Map;for(let Y of J)Z.set(Y.type,(Z.get(Y.type)??0)+1);let H=Array.from(Z.entries()).map(([Y,K])=>`${K} ${Y}${K>1?"s":""}`).join(", "),W=Array.from($).slice(0,5).join(", ");return{summary:`Session with ${J.length} observations: ${H}. Files modified: ${X.size}. Key concepts: ${W}.`,keyDecisions:Q.slice(0,5),filesModified:Array.from(X),concepts:Array.from($)}}shouldSummarize(J){return J>=2}}import{existsSync as lJ,readFileSync as cJ}from"fs";var dJ={dbPath:".open-mem/memory.db",provider:"google",apiKey:void 0,model:"gemini-2.5-flash-lite",maxTokensPerCompression:1024,compressionEnabled:!0,contextInjectionEnabled:!0,maxContextTokens:4000,batchSize:5,batchIntervalMs:30000,ignoredTools:[],minOutputLength:50,maxIndexEntries:20,sensitivePatterns:[],retentionDays:90,maxDatabaseSizeMb:500,logLevel:"warn",contextShowTokenCosts:!0,contextObservationTypes:"all",contextFullObservationCount:3,maxObservations:50,contextShowLastSummary:!0,rateLimitingEnabled:!0,folderContextEnabled:!0,folderContextMaxDepth:5,folderContextMode:"dispersed",folderContextFilename:"AGENTS.md",daemonEnabled:!1,dashboardEnabled:!1,dashboardPort:3737,platformOpenCodeEnabled:!0,platformClaudeCodeEnabled:!1,platformCursorEnabled:!1,mcpCompatibilityMode:"strict",mcpProtocolVersion:"2024-11-05",mcpSupportedProtocolVersions:["2024-11-05"],embeddingDimension:void 0,conflictResolutionEnabled:!1,conflictSimilarityBandLow:0.7,conflictSimilarityBandHigh:0.92,userMemoryEnabled:!1,userMemoryDbPath:"~/.config/open-mem/user-memory.db",userMemoryMaxContextTokens:1000,rerankingEnabled:!1,rerankingMaxCandidates:20,entityExtractionEnabled:!1};function nJ(){let J={};if(process.env.OPEN_MEM_DB_PATH)J.dbPath=process.env.OPEN_MEM_DB_PATH;if(process.env.OPEN_MEM_PROVIDER)J.provider=process.env.OPEN_MEM_PROVIDER;if(process.env.OPEN_MEM_MODEL)J.model=process.env.OPEN_MEM_MODEL;if(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS)J.maxContextTokens=Number.parseInt(process.env.OPEN_MEM_MAX_CONTEXT_TOKENS,10);if(process.env.OPEN_MEM_COMPRESSION==="false")J.compressionEnabled=!1;if(process.env.OPEN_MEM_CONTEXT_INJECTION==="false")J.contextInjectionEnabled=!1;if(process.env.OPEN_MEM_IGNORED_TOOLS)J.ignoredTools=process.env.OPEN_MEM_IGNORED_TOOLS.split(",").map((X)=>X.trim());if(process.env.OPEN_MEM_BATCH_SIZE)J.batchSize=Number.parseInt(process.env.OPEN_MEM_BATCH_SIZE,10);if(process.env.OPEN_MEM_RETENTION_DAYS)J.retentionDays=Number.parseInt(process.env.OPEN_MEM_RETENTION_DAYS,10);if(process.env.OPEN_MEM_LOG_LEVEL)J.logLevel=process.env.OPEN_MEM_LOG_LEVEL;if(process.env.OPEN_MEM_CONTEXT_SHOW_TOKEN_COSTS==="false")J.contextShowTokenCosts=!1;if(process.env.OPEN_MEM_CONTEXT_TYPES)J.contextObservationTypes=process.env.OPEN_MEM_CONTEXT_TYPES==="all"?"all":process.env.OPEN_MEM_CONTEXT_TYPES.split(",").map((X)=>X.trim());if(process.env.OPEN_MEM_CONTEXT_FULL_COUNT)J.contextFullObservationCount=Number.parseInt(process.env.OPEN_MEM_CONTEXT_FULL_COUNT,10);if(process.env.OPEN_MEM_MAX_OBSERVATIONS)J.maxObservations=Number.parseInt(process.env.OPEN_MEM_MAX_OBSERVATIONS,10);if(process.env.OPEN_MEM_CONTEXT_SHOW_LAST_SUMMARY==="false")J.contextShowLastSummary=!1;if(process.env.OPEN_MEM_RATE_LIMITING==="false")J.rateLimitingEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT==="false")J.folderContextEnabled=!1;if(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH)J.folderContextMaxDepth=Number.parseInt(process.env.OPEN_MEM_FOLDER_CONTEXT_MAX_DEPTH,10);if(process.env.OPEN_MEM_FOLDER_CONTEXT_MODE==="single")J.folderContextMode="single";if(process.env.OPEN_MEM_FOLDER_CONTEXT_MODE==="dispersed")J.folderContextMode="dispersed";if(process.env.OPEN_MEM_FOLDER_CONTEXT_FILENAME)J.folderContextFilename=process.env.OPEN_MEM_FOLDER_CONTEXT_FILENAME;if(process.env.OPEN_MEM_DAEMON==="true")J.daemonEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD==="true")J.dashboardEnabled=!0;if(process.env.OPEN_MEM_DASHBOARD_PORT)J.dashboardPort=Number.parseInt(process.env.OPEN_MEM_DASHBOARD_PORT,10);if(process.env.OPEN_MEM_PLATFORM_OPENCODE==="false")J.platformOpenCodeEnabled=!1;if(process.env.OPEN_MEM_PLATFORM_CLAUDE_CODE==="true")J.platformClaudeCodeEnabled=!0;if(process.env.OPEN_MEM_PLATFORM_CURSOR==="true")J.platformCursorEnabled=!0;if(process.env.OPEN_MEM_MCP_COMPAT_MODE)J.mcpCompatibilityMode=process.env.OPEN_MEM_MCP_COMPAT_MODE;if(process.env.OPEN_MEM_MCP_PROTOCOL_VERSION)J.mcpProtocolVersion=process.env.OPEN_MEM_MCP_PROTOCOL_VERSION;if(process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS)J.mcpSupportedProtocolVersions=process.env.OPEN_MEM_MCP_SUPPORTED_PROTOCOLS.split(",").map((X)=>X.trim()).filter(Boolean);if(process.env.OPEN_MEM_EMBEDDING_DIMENSION)J.embeddingDimension=Number.parseInt(process.env.OPEN_MEM_EMBEDDING_DIMENSION,10);if(process.env.OPEN_MEM_CONFLICT_RESOLUTION==="true")J.conflictResolutionEnabled=!0;if(process.env.OPEN_MEM_CONFLICT_BAND_LOW){let X=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_LOW);if(!Number.isNaN(X))J.conflictSimilarityBandLow=X}if(process.env.OPEN_MEM_CONFLICT_BAND_HIGH){let X=Number.parseFloat(process.env.OPEN_MEM_CONFLICT_BAND_HIGH);if(!Number.isNaN(X))J.conflictSimilarityBandHigh=X}if(process.env.OPEN_MEM_USER_MEMORY==="true")J.userMemoryEnabled=!0;if(process.env.OPEN_MEM_USER_MEMORY_DB_PATH)J.userMemoryDbPath=process.env.OPEN_MEM_USER_MEMORY_DB_PATH;if(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS)J.userMemoryMaxContextTokens=Number.parseInt(process.env.OPEN_MEM_USER_MEMORY_MAX_TOKENS,10);if(process.env.OPEN_MEM_RERANKING==="true")J.rerankingEnabled=!0;if(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES)J.rerankingMaxCandidates=Number.parseInt(process.env.OPEN_MEM_RERANKING_MAX_CANDIDATES,10);if(process.env.OPEN_MEM_ENTITY_EXTRACTION==="true")J.entityExtractionEnabled=!0;return J}function sJ(J){let X=`${J}/.open-mem/config.json`;if(!lJ(X))return{};try{let $=cJ(X,"utf-8"),Q=JSON.parse($);if(!Q||typeof Q!=="object"||Array.isArray(Q))return{};return Q}catch{return{}}}function iJ(J){switch(J){case"google":return 768;case"openai":return 1536;case"bedrock":return 1024;case"anthropic":return 0;default:return 768}}function HJ(J,X){let $=sJ(J),Q=nJ(),Z={...dJ,...$,...Q,...X};if(!Z.dbPath.startsWith("/"))Z.dbPath=`${J}/${Z.dbPath}`;if(!process.env.OPEN_MEM_PROVIDER&&!X?.provider){if(process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY)Z.provider="google";else if(process.env.ANTHROPIC_API_KEY)Z.provider="anthropic";else if(process.env.AWS_BEARER_TOKEN_BEDROCK||process.env.AWS_ACCESS_KEY_ID||process.env.AWS_PROFILE)Z.provider="bedrock"}if(!Z.apiKey)switch(Z.provider){case"google":Z.apiKey=process.env.GOOGLE_GENERATIVE_AI_API_KEY||process.env.GEMINI_API_KEY;break;case"anthropic":Z.apiKey=process.env.ANTHROPIC_API_KEY;break;case"openai":Z.apiKey=process.env.OPENAI_API_KEY;break;case"bedrock":break}if(Z.embeddingDimension===void 0)Z.embeddingDimension=iJ(Z.provider);return Z}import{existsSync as J2,mkdirSync as rJ,readFileSync as X2,unlinkSync as aJ,writeFileSync as oJ}from"fs";function YJ(J){let X=J.lastIndexOf("/");if(X>0){let $=J.substring(0,X);rJ($,{recursive:!0})}oJ(J,String(process.pid),"utf-8")}function KJ(J){try{aJ(J)}catch{}}function VJ(J){let X=J.lastIndexOf("/");if(X>=0)return`${J.substring(0,X)}/worker.pid`;return"worker.pid"}class y{queueProcessor;pollIntervalMs;timer=null;lastActiveAt=Date.now();processing=!1;constructor(J){this.queueProcessor=J.queueProcessor,this.pollIntervalMs=J.pollIntervalMs}start(){if(this.timer)return;this.lastActiveAt=Date.now(),this.timer=setInterval(async()=>{if(this.processing)return;this.processing=!0;try{if(await this.queueProcessor.processBatch()>0)this.lastActiveAt=Date.now()}catch{}finally{this.processing=!1}},this.pollIntervalMs)}stop(){if(this.timer)clearInterval(this.timer),this.timer=null}get isRunning(){return this.timer!==null}get idleMs(){return Date.now()-this.lastActiveAt}get shouldAutoExit(){return this.idleMs>=60000&&!process.send}handleMessage(J){if(J==="SHUTDOWN")this.stop();else if(J==="PROCESS_NOW"){if(!this.processing)this.processing=!0,this.queueProcessor.processBatch().then((X)=>{if(X>0)this.lastActiveAt=Date.now()}).catch(()=>{}).finally(()=>{this.processing=!1})}}}import{Database as zJ}from"bun:sqlite";import{existsSync as f,mkdirSync as tJ,unlinkSync as BJ}from"fs";import*as GJ from"sqlite-vec";class q{db;dbPath;_hasVectorExtension=!1;static enableExtensionSupport(){let J=["/opt/homebrew/opt/sqlite/lib/libsqlite3.dylib","/usr/local/opt/sqlite/lib/libsqlite3.dylib"];for(let X of J)try{if(f(X))return zJ.setCustomSQLite(X),!0}catch{return!1}return!1}constructor(J){this.dbPath=J,this.db=this.open(J),this.configure()}open(J){let X=J.lastIndexOf("/");if(X>0){let $=J.substring(0,X);tJ($,{recursive:!0})}return new zJ(J,{create:!0})}configure(){try{this.applyPragmas(),this.loadExtensions()}catch(J){console.warn("[open-mem] Database configure failed, attempting recovery by removing WAL/SHM files:",J.message);try{this.db.close()}catch{}this.deleteSidecarFiles();try{this.db=this.open(this.dbPath),this.applyPragmas(),this.loadExtensions(),console.warn("[open-mem] Recovery successful after removing WAL/SHM files");return}catch(X){console.warn("[open-mem] WAL/SHM cleanup insufficient, recreating database from scratch:",X.message);try{this.db.close()}catch{}this.deleteDatabaseFiles();try{this.db=this.open(this.dbPath),this.applyPragmas(),this.loadExtensions(),console.warn("[open-mem] Recovery successful after full database recreation");return}catch($){throw console.warn("[open-mem] All recovery attempts failed, filesystem may be broken:",$.message),J}}}}applyPragmas(){this.db.exec("PRAGMA journal_mode = WAL"),this.db.exec("PRAGMA synchronous = NORMAL"),this.db.exec("PRAGMA foreign_keys = ON"),this.db.exec("PRAGMA busy_timeout = 5000")}loadExtensions(){try{GJ.load(this.db),this._hasVectorExtension=!0}catch{this._hasVectorExtension=!1}}get hasVectorExtension(){return this._hasVectorExtension}deleteSidecarFiles(){for(let J of["-wal","-shm"]){let X=this.dbPath+J;try{if(f(X))BJ(X)}catch{}}}deleteDatabaseFiles(){this.deleteSidecarFiles();try{if(f(this.dbPath))BJ(this.dbPath)}catch{}}ensureMigrationTable(){this.db.exec(`
148
148
  CREATE TABLE IF NOT EXISTS _migrations (
149
149
  version INTEGER PRIMARY KEY,
150
150
  name TEXT NOT NULL,
@@ -214,7 +214,7 @@ Respond with EXACTLY this XML format:
214
214
  FROM observation_embeddings
215
215
  WHERE embedding MATCH ? AND k = ?`,[$,X]).map((Q)=>({observationId:Q.observation_id,distance:Q.distance}))}catch{return[]}}searchVecSubset(J,X,$){if(X.length===0)return[];try{let Q=new Float32Array(J),Z=Math.max($*5,X.length),H=this.db.all(`SELECT observation_id, distance
216
216
  FROM observation_embeddings
217
- WHERE embedding MATCH ? AND k = ?`,[Q,Z]),W=new Set(X);return H.filter((Y)=>W.has(Y.observation_id)).slice(0,$).map((Y)=>({observationId:Y.observation_id,distance:Y.distance}))}catch{return[]}}update(J,X){let $=this.getById(J);if(!$)return null;if(Object.keys(X).length===0)return $;let Q=this.create({sessionId:$.sessionId,scope:$.scope??"project",type:X.type??$.type,title:X.title??$.title,subtitle:X.subtitle??$.subtitle,facts:X.facts??$.facts,narrative:X.narrative??$.narrative,concepts:X.concepts??$.concepts,filesRead:X.filesRead??$.filesRead,filesModified:X.filesModified??$.filesModified,rawToolOutput:$.rawToolOutput,toolName:"memory.revise",tokenCount:$.tokenCount,discoveryTokens:$.discoveryTokens,importance:X.importance??$.importance});return this.db.run("UPDATE observations SET revision_of = ? WHERE id = ?",[J,Q.id]),this.supersede(J,Q.id),this.getById(Q.id)}supersede(J,X){let $=new Date().toISOString();this.db.run("UPDATE observations SET superseded_by = ?, superseded_at = ? WHERE id = ?",[X,$,J])}delete(J){if(this.db.all("SELECT id FROM observations WHERE id = ?",[J]).length===0)return!1;let $=new Date().toISOString();return this.db.run("UPDATE observations SET deleted_at = ? WHERE id = ?",[$,J]),this.deleteEmbeddingsForObservations([J]),!0}getLineage(J){let X=this.getByIdIncludingArchived(J);if(!X)return[];let $=new Set([X.id]),Q=[X];while(Q[0].revisionOf){let Z=this.getByIdIncludingArchived(Q[0].revisionOf);if(!Z||$.has(Z.id))break;Q.unshift(Z),$.add(Z.id)}while(Q[Q.length-1].supersededBy){let Z=Q[Q.length-1].supersededBy;if(!Z)break;let H=this.getByIdIncludingArchived(Z);if(!H||$.has(H.id))break;Q.push(H),$.add(H.id)}return Q}deleteOlderThan(J){return this.db.all(`DELETE FROM observations
217
+ WHERE embedding MATCH ? AND k = ?`,[Q,Z]),W=new Set(X);return H.filter((Y)=>W.has(Y.observation_id)).slice(0,$).map((Y)=>({observationId:Y.observation_id,distance:Y.distance}))}catch{return[]}}update(J,X){let $=this.getById(J);if(!$)return null;if(Object.keys(X).length===0)return $;let Q=this.create({sessionId:$.sessionId,scope:$.scope??"project",type:X.type??$.type,title:X.title??$.title,subtitle:X.subtitle??$.subtitle,facts:X.facts??$.facts,narrative:X.narrative??$.narrative,concepts:X.concepts??$.concepts,filesRead:X.filesRead??$.filesRead,filesModified:X.filesModified??$.filesModified,rawToolOutput:$.rawToolOutput,toolName:"mem-revise",tokenCount:$.tokenCount,discoveryTokens:$.discoveryTokens,importance:X.importance??$.importance});return this.db.run("UPDATE observations SET revision_of = ? WHERE id = ?",[J,Q.id]),this.supersede(J,Q.id),this.getById(Q.id)}supersede(J,X){let $=new Date().toISOString();this.db.run("UPDATE observations SET superseded_by = ?, superseded_at = ? WHERE id = ?",[X,$,J])}delete(J){if(this.db.all("SELECT id FROM observations WHERE id = ?",[J]).length===0)return!1;let $=new Date().toISOString();return this.db.run("UPDATE observations SET deleted_at = ? WHERE id = ?",[$,J]),this.deleteEmbeddingsForObservations([J]),!0}getLineage(J){let X=this.getByIdIncludingArchived(J);if(!X)return[];let $=new Set([X.id]),Q=[X];while(Q[0].revisionOf){let Z=this.getByIdIncludingArchived(Q[0].revisionOf);if(!Z||$.has(Z.id))break;Q.unshift(Z),$.add(Z.id)}while(Q[Q.length-1].supersededBy){let Z=Q[Q.length-1].supersededBy;if(!Z)break;let H=this.getByIdIncludingArchived(Z);if(!H||$.has(H.id))break;Q.push(H),$.add(H.id)}return Q}deleteOlderThan(J){return this.db.all(`DELETE FROM observations
218
218
  WHERE (created_at < datetime('now', '-' || ? || ' days') OR deleted_at IS NOT NULL)
219
219
  AND session_id NOT IN (SELECT id FROM sessions WHERE status != 'completed')
220
220
  RETURNING id`,[J]).length}deleteEmbeddingsForObservations(J){if(J.length===0)return;let X=J.map(()=>"?").join(",");try{this.db.run(`DELETE FROM observation_embeddings WHERE observation_id IN (${X})`,J)}catch{}this.db.run(`UPDATE observations SET embedding = NULL WHERE id IN (${X})`,J)}mapRow(J){return{id:J.id,sessionId:J.session_id,scope:J.scope??"project",type:J.type,title:J.title,subtitle:J.subtitle,facts:JSON.parse(J.facts),narrative:J.narrative,concepts:JSON.parse(J.concepts),filesRead:JSON.parse(J.files_read),filesModified:JSON.parse(J.files_modified),rawToolOutput:J.raw_tool_output,toolName:J.tool_name,createdAt:J.created_at,tokenCount:J.token_count,discoveryTokens:J.discovery_tokens??0,importance:J.importance??3,revisionOf:J.revision_of??null,deletedAt:J.deleted_at??null,supersededBy:J.superseded_by??null,supersededAt:J.superseded_at??null}}}import{randomUUID as $X}from"crypto";class g{db;constructor(J){this.db=J}create(J){let X=$X(),$=new Date().toISOString();return this.db.run(`INSERT INTO pending_messages
@@ -1 +1 @@
1
- {"version":3,"file":"observations.d.ts","sourceRoot":"","sources":["../../src/db/observations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observations.d.ts","sourceRoot":"","sources":["../../src/db/observations.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../src/hooks/session-events.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,qBAAqB,CAAC;IACpC,eAAe,EAAE,wBAAwB,CAAC;CAC1C;AAED,MAAM,MAAM,yBAAyB,GAClC,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,eAAe,CAAC;AAEnB,wBAAsB,2BAA2B,CAChD,IAAI,EAAE,oBAAoB,EAC1B,SAAS,EAAE,yBAAyB,EACpC,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAuCf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,qBAAqB,EACnC,eAAe,EAAE,wBAAwB,IAE3B,OAAO;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAqB7D"}
1
+ {"version":3,"file":"session-events.d.ts","sourceRoot":"","sources":["../../src/hooks/session-events.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAI7D,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,YAAY,EAAE,qBAAqB,CAAC;IACpC,eAAe,EAAE,wBAAwB,CAAC;CAC1C;AAED,MAAM,MAAM,yBAAyB,GAClC,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,eAAe,CAAC;AAEnB,wBAAsB,2BAA2B,CAChD,IAAI,EAAE,oBAAoB,EAC1B,SAAS,EAAE,yBAAyB,EACpC,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,aAAa,EACrB,YAAY,EAAE,qBAAqB,EACnC,eAAe,EAAE,wBAAwB,IAE3B,OAAO;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,KAAG,OAAO,CAAC,IAAI,CAAC,CAqB7D"}