claude-mem 10.0.8 → 10.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "10.0.8",
3
+ "version": "10.1.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "keywords": [
6
6
  "claude",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "10.0.8",
3
+ "version": "10.1.0",
4
4
  "description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-plugin",
3
- "version": "10.0.8",
3
+ "version": "10.1.0",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for claude-mem bundled hooks",
6
6
  "type": "module",
@@ -1,12 +1,12 @@
1
- "use strict";var ut=Object.create;var U=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var ft=(r,e)=>{for(var t in e)U(r,t,{get:e[t],enumerable:!0})},se=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Et(e))!gt.call(r,n)&&n!==t&&U(r,n,{get:()=>e[n],enumerable:!(s=lt(e,n))||s.enumerable});return r};var v=(r,e,t)=>(t=r!=null?ut(Tt(r)):{},se(e||!r||!r.__esModule?U(t,"default",{value:r,enumerable:!0}):t,r)),St=r=>se(U({},"__esModule",{value:!0}),r);var xt={};ft(xt,{generateContext:()=>te});module.exports=St(xt);var ct=v(require("path"),1),mt=require("os"),_t=require("fs");var le=require("bun:sqlite");var b=require("path"),de=require("os"),pe=require("fs");var ce=require("url");var C=require("fs"),w=require("path"),oe=require("os");var re="bugfix,feature,refactor,discovery,decision,change",ne="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var A=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,w.join)((0,oe.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:re,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:ne,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let t=this.get(e);return parseInt(t,10)}static getBool(e){let t=this.get(e);return t==="true"||t===!0}static applyEnvOverrides(e){let t={...e};for(let s of Object.keys(this.DEFAULTS))process.env[s]!==void 0&&(t[s]=process.env[s]);return t}static loadFromFile(e){try{if(!(0,C.existsSync)(e)){let i=this.getAllDefaults();try{let a=(0,w.dirname)(e);(0,C.existsSync)(a)||(0,C.mkdirSync)(a,{recursive:!0}),(0,C.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,a)}return this.applyEnvOverrides(i)}let t=(0,C.readFileSync)(e,"utf-8"),s=JSON.parse(t),n=s;if(s.env&&typeof s.env=="object"){n=s.env;try{(0,C.writeFileSync)(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,i)}}let o={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))n[i]!==void 0&&(o[i]=n[i]);return this.applyEnvOverrides(o)}catch(t){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,t),this.applyEnvOverrides(this.getAllDefaults())}}};var I=require("fs"),M=require("path"),ae=require("os"),H=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(H||{}),ie=(0,M.join)((0,ae.homedir)(),".claude-mem"),W=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=(0,M.join)(ie,"logs");(0,I.existsSync)(e)||(0,I.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,M.join)(e,`claude-mem-${t}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=(0,M.join)(ie,"settings.json");if((0,I.existsSync)(e)){let t=(0,I.readFileSync)(e,"utf-8"),n=(JSON.parse(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=H[n]??1}else this.level=1}catch{this.level=1}return this.level}correlationId(e,t){return`obs-${e}-${t}`}sessionId(e){return`session-${e}`}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
1
+ "use strict";var lt=Object.create;var U=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var ft=(r,e)=>{for(var t in e)U(r,t,{get:e[t],enumerable:!0})},se=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Et(e))!gt.call(r,n)&&n!==t&&U(r,n,{get:()=>e[n],enumerable:!(s=ut(e,n))||s.enumerable});return r};var v=(r,e,t)=>(t=r!=null?lt(Tt(r)):{},se(e||!r||!r.__esModule?U(t,"default",{value:r,enumerable:!0}):t,r)),St=r=>se(U({},"__esModule",{value:!0}),r);var xt={};ft(xt,{generateContext:()=>te});module.exports=St(xt);var ct=v(require("path"),1),mt=require("os"),_t=require("fs");var ue=require("bun:sqlite");var b=require("path"),de=require("os"),pe=require("fs");var ce=require("url");var C=require("fs"),w=require("path"),oe=require("os");var re="bugfix,feature,refactor,discovery,decision,change",ne="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var A=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,w.join)((0,oe.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:re,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:ne,CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let t=this.get(e);return parseInt(t,10)}static getBool(e){let t=this.get(e);return t==="true"||t===!0}static applyEnvOverrides(e){let t={...e};for(let s of Object.keys(this.DEFAULTS))process.env[s]!==void 0&&(t[s]=process.env[s]);return t}static loadFromFile(e){try{if(!(0,C.existsSync)(e)){let i=this.getAllDefaults();try{let a=(0,w.dirname)(e);(0,C.existsSync)(a)||(0,C.mkdirSync)(a,{recursive:!0}),(0,C.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,a)}return this.applyEnvOverrides(i)}let t=(0,C.readFileSync)(e,"utf-8"),s=JSON.parse(t),n=s;if(s.env&&typeof s.env=="object"){n=s.env;try{(0,C.writeFileSync)(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,i)}}let o={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))n[i]!==void 0&&(o[i]=n[i]);return this.applyEnvOverrides(o)}catch(t){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,t),this.applyEnvOverrides(this.getAllDefaults())}}};var I=require("fs"),M=require("path"),ae=require("os"),H=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(H||{}),ie=(0,M.join)((0,ae.homedir)(),".claude-mem"),W=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=(0,M.join)(ie,"logs");(0,I.existsSync)(e)||(0,I.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,M.join)(e,`claude-mem-${t}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=(0,M.join)(ie,"settings.json");if((0,I.existsSync)(e)){let t=(0,I.readFileSync)(e,"utf-8"),n=(JSON.parse(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=H[n]??1}else this.level=1}catch{this.level=1}return this.level}correlationId(e,t){return`obs-${e}-${t}`}sessionId(e){return`session-${e}`}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
2
2
  ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?JSON.stringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let s=t;if(typeof t=="string")try{s=JSON.parse(t)}catch{s=t}if(e==="Bash"&&s.command)return`${e}(${s.command})`;if(s.file_path)return`${e}(${s.file_path})`;if(s.notebook_path)return`${e}(${s.notebook_path})`;if(e==="Glob"&&s.pattern)return`${e}(${s.pattern})`;if(e==="Grep"&&s.pattern)return`${e}(${s.pattern})`;if(s.url)return`${e}(${s.url})`;if(s.query)return`${e}(${s.query})`;if(e==="Task"){if(s.subagent_type)return`${e}(${s.subagent_type})`;if(s.description)return`${e}(${s.description})`}return e==="Skill"&&s.skill?`${e}(${s.skill})`:e==="LSP"&&s.operation?`${e}(${s.operation})`:e}formatTimestamp(e){let t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),d=String(e.getMilliseconds()).padStart(3,"0");return`${t}-${s}-${n} ${o}:${i}:${a}.${d}`}log(e,t,s,n,o){if(e<this.getLevel())return;this.ensureLogFileInitialized();let i=this.formatTimestamp(new Date),a=H[e].padEnd(5),d=t.padEnd(6),c="";n?.correlationId?c=`[${n.correlationId}] `:n?.sessionId&&(c=`[session-${n.sessionId}] `);let _="";o!=null&&(o instanceof Error?_=this.getLevel()===0?`
3
3
  ${o.message}
4
4
  ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
5
- `+JSON.stringify(o,null,2):_=" "+this.formatData(o));let u="";if(n){let{sessionId:E,memorySessionId:g,correlationId:h,...l}=n;Object.keys(l).length>0&&(u=` {${Object.entries(l).map(([f,R])=>`${f}=${R}`).join(", ")}}`)}let T=`[${i}] [${a}] [${d}] ${c}${s}${u}${_}`;if(this.logFilePath)try{(0,I.appendFileSync)(this.logFilePath,T+`
5
+ `+JSON.stringify(o,null,2):_=" "+this.formatData(o));let l="";if(n){let{sessionId:E,memorySessionId:g,correlationId:h,...u}=n;Object.keys(u).length>0&&(l=` {${Object.entries(u).map(([f,R])=>`${f}=${R}`).join(", ")}}`)}let T=`[${i}] [${a}] [${d}] ${c}${s}${l}${_}`;if(this.logFilePath)try{(0,I.appendFileSync)(this.logFilePath,T+`
6
6
  `,"utf8")}catch(E){process.stderr.write(`[LOGGER] Failed to write to log file: ${E}
7
7
  `)}else process.stderr.write(T+`
8
8
  `)}debug(e,t,s,n){this.log(0,e,t,s,n)}info(e,t,s,n){this.log(1,e,t,s,n)}warn(e,t,s,n){this.log(2,e,t,s,n)}error(e,t,s,n){this.log(3,e,t,s,n)}dataIn(e,t,s,n){this.info(e,`\u2192 ${t}`,s,n)}dataOut(e,t,s,n){this.info(e,`\u2190 ${t}`,s,n)}success(e,t,s,n){this.info(e,`\u2713 ${t}`,s,n)}failure(e,t,s,n){this.error(e,`\u2717 ${t}`,s,n)}timing(e,t,s,n){this.info(e,`\u23F1 ${t}`,n,{duration:`${s}ms`})}happyPathError(e,t,s,n,o=""){let c=((new Error().stack||"").split(`
9
- `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),_=c?`${c[1].split("/").pop()}:${c[2]}`:"unknown",u={...s,location:_};return this.warn(e,`[HAPPY-PATH] ${t}`,u,n),o}},m=new W;var Ot={};function bt(){return typeof __dirname<"u"?__dirname:(0,b.dirname)((0,ce.fileURLToPath)(Ot.url))}var ht=bt(),N=A.get("CLAUDE_MEM_DATA_DIR"),y=process.env.CLAUDE_CONFIG_DIR||(0,b.join)((0,de.homedir)(),".claude"),Bt=(0,b.join)(y,"plugins","marketplaces","thedotmack"),Ht=(0,b.join)(N,"archives"),Wt=(0,b.join)(N,"logs"),Yt=(0,b.join)(N,"trash"),Vt=(0,b.join)(N,"backups"),qt=(0,b.join)(N,"modes"),Kt=(0,b.join)(N,"settings.json"),me=(0,b.join)(N,"claude-mem.db"),Jt=(0,b.join)(N,"vector-db"),zt=(0,b.join)(N,"observer-sessions"),Qt=(0,b.join)(y,"settings.json"),Zt=(0,b.join)(y,"commands"),es=(0,b.join)(y,"CLAUDE.md");function _e(r){(0,pe.mkdirSync)(r,{recursive:!0})}function ue(){return(0,b.join)(ht,"..")}var $=class{db;constructor(e=me){e!==":memory:"&&_e(N),this.db=new le.Database(e),this.db.run("PRAGMA journal_mode = WAL"),this.db.run("PRAGMA synchronous = NORMAL"),this.db.run("PRAGMA foreign_keys = ON"),this.initializeSchema(),this.ensureWorkerPortColumn(),this.ensurePromptTrackingColumns(),this.removeSessionSummariesUniqueConstraint(),this.addObservationHierarchicalFields(),this.makeObservationsTextNullable(),this.createUserPromptsTable(),this.ensureDiscoveryTokensColumn(),this.createPendingMessagesTable(),this.renameSessionIdColumns(),this.repairSessionIdColumnRename(),this.addFailedAtEpochColumn(),this.addOnUpdateCascadeToForeignKeys()}initializeSchema(){this.db.run(`
9
+ `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),_=c?`${c[1].split("/").pop()}:${c[2]}`:"unknown",l={...s,location:_};return this.warn(e,`[HAPPY-PATH] ${t}`,l,n),o}},m=new W;var Ot={};function bt(){return typeof __dirname<"u"?__dirname:(0,b.dirname)((0,ce.fileURLToPath)(Ot.url))}var ht=bt(),N=A.get("CLAUDE_MEM_DATA_DIR"),y=process.env.CLAUDE_CONFIG_DIR||(0,b.join)((0,de.homedir)(),".claude"),Bt=(0,b.join)(y,"plugins","marketplaces","thedotmack"),Ht=(0,b.join)(N,"archives"),Wt=(0,b.join)(N,"logs"),Yt=(0,b.join)(N,"trash"),Vt=(0,b.join)(N,"backups"),qt=(0,b.join)(N,"modes"),Kt=(0,b.join)(N,"settings.json"),me=(0,b.join)(N,"claude-mem.db"),Jt=(0,b.join)(N,"vector-db"),zt=(0,b.join)(N,"observer-sessions"),Qt=(0,b.join)(y,"settings.json"),Zt=(0,b.join)(y,"commands"),es=(0,b.join)(y,"CLAUDE.md");function _e(r){(0,pe.mkdirSync)(r,{recursive:!0})}function le(){return(0,b.join)(ht,"..")}var $=class{db;constructor(e=me){e!==":memory:"&&_e(N),this.db=new ue.Database(e),this.db.run("PRAGMA journal_mode = WAL"),this.db.run("PRAGMA synchronous = NORMAL"),this.db.run("PRAGMA foreign_keys = ON"),this.initializeSchema(),this.ensureWorkerPortColumn(),this.ensurePromptTrackingColumns(),this.removeSessionSummariesUniqueConstraint(),this.addObservationHierarchicalFields(),this.makeObservationsTextNullable(),this.createUserPromptsTable(),this.ensureDiscoveryTokensColumn(),this.createPendingMessagesTable(),this.renameSessionIdColumns(),this.repairSessionIdColumnRename(),this.addFailedAtEpochColumn(),this.addOnUpdateCascadeToForeignKeys()}initializeSchema(){this.db.run(`
10
10
  CREATE TABLE IF NOT EXISTS schema_versions (
11
11
  id INTEGER PRIMARY KEY,
12
12
  version INTEGER UNIQUE NOT NULL,
@@ -382,7 +382,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
382
382
  SELECT *
383
383
  FROM observations
384
384
  WHERE id = ?
385
- `).get(e)||null}getObservationsByIds(e,t={}){if(e.length===0)return[];let{orderBy:s="date_desc",limit:n,project:o,type:i,concepts:a,files:d}=t,c=s==="date_asc"?"ASC":"DESC",_=n?`LIMIT ${n}`:"",u=e.map(()=>"?").join(","),T=[...e],E=[];if(o&&(E.push("project = ?"),T.push(o)),i)if(Array.isArray(i)){let l=i.map(()=>"?").join(",");E.push(`type IN (${l})`),T.push(...i)}else E.push("type = ?"),T.push(i);if(a){let l=Array.isArray(a)?a:[a],S=l.map(()=>"EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)");T.push(...l),E.push(`(${S.join(" OR ")})`)}if(d){let l=Array.isArray(d)?d:[d],S=l.map(()=>"(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))");l.forEach(f=>{T.push(`%${f}%`,`%${f}%`)}),E.push(`(${S.join(" OR ")})`)}let g=E.length>0?`WHERE id IN (${u}) AND ${E.join(" AND ")}`:`WHERE id IN (${u})`;return this.db.prepare(`
385
+ `).get(e)||null}getObservationsByIds(e,t={}){if(e.length===0)return[];let{orderBy:s="date_desc",limit:n,project:o,type:i,concepts:a,files:d}=t,c=s==="date_asc"?"ASC":"DESC",_=n?`LIMIT ${n}`:"",l=e.map(()=>"?").join(","),T=[...e],E=[];if(o&&(E.push("project = ?"),T.push(o)),i)if(Array.isArray(i)){let u=i.map(()=>"?").join(",");E.push(`type IN (${u})`),T.push(...i)}else E.push("type = ?"),T.push(i);if(a){let u=Array.isArray(a)?a:[a],S=u.map(()=>"EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)");T.push(...u),E.push(`(${S.join(" OR ")})`)}if(d){let u=Array.isArray(d)?d:[d],S=u.map(()=>"(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))");u.forEach(f=>{T.push(`%${f}%`,`%${f}%`)}),E.push(`(${S.join(" OR ")})`)}let g=E.length>0?`WHERE id IN (${l}) AND ${E.join(" AND ")}`:`WHERE id IN (${l})`;return this.db.prepare(`
386
386
  SELECT *
387
387
  FROM observations
388
388
  ${g}
@@ -442,27 +442,27 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
442
442
  (memory_session_id, project, request, investigated, learned, completed,
443
443
  next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch)
444
444
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
445
- `).run(e,t,s.request,s.investigated,s.learned,s.completed,s.next_steps,s.notes,n||null,o,d,a);return{id:Number(_.lastInsertRowid),createdAtEpoch:a}}storeObservations(e,t,s,n,o,i=0,a){let d=a??Date.now(),c=new Date(d).toISOString();return this.db.transaction(()=>{let u=[],T=this.db.prepare(`
445
+ `).run(e,t,s.request,s.investigated,s.learned,s.completed,s.next_steps,s.notes,n||null,o,d,a);return{id:Number(_.lastInsertRowid),createdAtEpoch:a}}storeObservations(e,t,s,n,o,i=0,a){let d=a??Date.now(),c=new Date(d).toISOString();return this.db.transaction(()=>{let l=[],T=this.db.prepare(`
446
446
  INSERT INTO observations
447
447
  (memory_session_id, project, type, title, subtitle, facts, narrative, concepts,
448
448
  files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch)
449
449
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
450
- `);for(let g of s){let h=T.run(e,t,g.type,g.title,g.subtitle,JSON.stringify(g.facts),g.narrative,JSON.stringify(g.concepts),JSON.stringify(g.files_read),JSON.stringify(g.files_modified),o||null,i,c,d);u.push(Number(h.lastInsertRowid))}let E=null;if(n){let h=this.db.prepare(`
450
+ `);for(let g of s){let h=T.run(e,t,g.type,g.title,g.subtitle,JSON.stringify(g.facts),g.narrative,JSON.stringify(g.concepts),JSON.stringify(g.files_read),JSON.stringify(g.files_modified),o||null,i,c,d);l.push(Number(h.lastInsertRowid))}let E=null;if(n){let h=this.db.prepare(`
451
451
  INSERT INTO session_summaries
452
452
  (memory_session_id, project, request, investigated, learned, completed,
453
453
  next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch)
454
454
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
455
- `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,o||null,i,c,d);E=Number(h.lastInsertRowid)}return{observationIds:u,summaryId:E,createdAtEpoch:d}})()}storeObservationsAndMarkComplete(e,t,s,n,o,i,a,d=0,c){let _=c??Date.now(),u=new Date(_).toISOString();return this.db.transaction(()=>{let E=[],g=this.db.prepare(`
455
+ `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,o||null,i,c,d);E=Number(h.lastInsertRowid)}return{observationIds:l,summaryId:E,createdAtEpoch:d}})()}storeObservationsAndMarkComplete(e,t,s,n,o,i,a,d=0,c){let _=c??Date.now(),l=new Date(_).toISOString();return this.db.transaction(()=>{let E=[],g=this.db.prepare(`
456
456
  INSERT INTO observations
457
457
  (memory_session_id, project, type, title, subtitle, facts, narrative, concepts,
458
458
  files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch)
459
459
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
460
- `);for(let S of s){let f=g.run(e,t,S.type,S.title,S.subtitle,JSON.stringify(S.facts),S.narrative,JSON.stringify(S.concepts),JSON.stringify(S.files_read),JSON.stringify(S.files_modified),a||null,d,u,_);E.push(Number(f.lastInsertRowid))}let h;if(n){let f=this.db.prepare(`
460
+ `);for(let S of s){let f=g.run(e,t,S.type,S.title,S.subtitle,JSON.stringify(S.facts),S.narrative,JSON.stringify(S.concepts),JSON.stringify(S.files_read),JSON.stringify(S.files_modified),a||null,d,l,_);E.push(Number(f.lastInsertRowid))}let h;if(n){let f=this.db.prepare(`
461
461
  INSERT INTO session_summaries
462
462
  (memory_session_id, project, request, investigated, learned, completed,
463
463
  next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch)
464
464
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
465
- `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,a||null,d,u,_);h=Number(f.lastInsertRowid)}return this.db.prepare(`
465
+ `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,a||null,d,l,_);h=Number(f.lastInsertRowid)}return this.db.prepare(`
466
466
  UPDATE pending_messages
467
467
  SET
468
468
  status = 'processed',
@@ -485,7 +485,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
485
485
  WHERE up.id IN (${d}) ${_}
486
486
  ORDER BY up.created_at_epoch ${i}
487
487
  ${a}
488
- `).all(...c)}getTimelineAroundTimestamp(e,t=10,s=10,n){return this.getTimelineAroundObservation(null,e,t,s,n)}getTimelineAroundObservation(e,t,s=10,n=10,o){let i=o?"AND project = ?":"",a=o?[o]:[],d,c;if(e!==null){let l=`
488
+ `).all(...c)}getTimelineAroundTimestamp(e,t=10,s=10,n){return this.getTimelineAroundObservation(null,e,t,s,n)}getTimelineAroundObservation(e,t,s=10,n=10,o){let i=o?"AND project = ?":"",a=o?[o]:[],d,c;if(e!==null){let u=`
489
489
  SELECT id, created_at_epoch
490
490
  FROM observations
491
491
  WHERE id <= ? ${i}
@@ -497,7 +497,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
497
497
  WHERE id >= ? ${i}
498
498
  ORDER BY id ASC
499
499
  LIMIT ?
500
- `;try{let f=this.db.prepare(l).all(e,...a,s+1),R=this.db.prepare(S).all(e,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary observations",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}else{let l=`
500
+ `;try{let f=this.db.prepare(u).all(e,...a,s+1),R=this.db.prepare(S).all(e,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary observations",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}else{let u=`
501
501
  SELECT created_at_epoch
502
502
  FROM observations
503
503
  WHERE created_at_epoch <= ? ${i}
@@ -509,12 +509,12 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
509
509
  WHERE created_at_epoch >= ? ${i}
510
510
  ORDER BY created_at_epoch ASC
511
511
  LIMIT ?
512
- `;try{let f=this.db.prepare(l).all(t,...a,s),R=this.db.prepare(S).all(t,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary timestamps",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}let _=`
512
+ `;try{let f=this.db.prepare(u).all(t,...a,s),R=this.db.prepare(S).all(t,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary timestamps",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}let _=`
513
513
  SELECT *
514
514
  FROM observations
515
515
  WHERE created_at_epoch >= ? AND created_at_epoch <= ? ${i}
516
516
  ORDER BY created_at_epoch ASC
517
- `,u=`
517
+ `,l=`
518
518
  SELECT *
519
519
  FROM session_summaries
520
520
  WHERE created_at_epoch >= ? AND created_at_epoch <= ? ${i}
@@ -525,7 +525,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
525
525
  JOIN sdk_sessions s ON up.content_session_id = s.content_session_id
526
526
  WHERE up.created_at_epoch >= ? AND up.created_at_epoch <= ? ${i.replace("project","s.project")}
527
527
  ORDER BY up.created_at_epoch ASC
528
- `,E=this.db.prepare(_).all(d,c,...a),g=this.db.prepare(u).all(d,c,...a),h=this.db.prepare(T).all(d,c,...a);return{observations:E,sessions:g.map(l=>({id:l.id,memory_session_id:l.memory_session_id,project:l.project,request:l.request,completed:l.completed,next_steps:l.next_steps,created_at:l.created_at,created_at_epoch:l.created_at_epoch})),prompts:h.map(l=>({id:l.id,content_session_id:l.content_session_id,prompt_number:l.prompt_number,prompt_text:l.prompt_text,project:l.project,created_at:l.created_at,created_at_epoch:l.created_at_epoch}))}}getPromptById(e){return this.db.prepare(`
528
+ `,E=this.db.prepare(_).all(d,c,...a),g=this.db.prepare(l).all(d,c,...a),h=this.db.prepare(T).all(d,c,...a);return{observations:E,sessions:g.map(u=>({id:u.id,memory_session_id:u.memory_session_id,project:u.project,request:u.request,completed:u.completed,next_steps:u.next_steps,created_at:u.created_at,created_at_epoch:u.created_at_epoch})),prompts:h.map(u=>({id:u.id,content_session_id:u.content_session_id,prompt_number:u.prompt_number,prompt_text:u.prompt_text,project:u.project,created_at:u.created_at,created_at_epoch:u.created_at_epoch}))}}getPromptById(e){return this.db.prepare(`
529
529
  SELECT
530
530
  p.id,
531
531
  p.content_session_id,
@@ -597,7 +597,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
597
597
  content_session_id, prompt_number, prompt_text,
598
598
  created_at, created_at_epoch
599
599
  ) VALUES (?, ?, ?, ?, ?)
600
- `).run(e.content_session_id,e.prompt_number,e.prompt_text,e.created_at,e.created_at_epoch).lastInsertRowid}}};var Ee=v(require("path"),1);function Te(r){if(!r||r.trim()==="")return m.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),"unknown-project";let e=Ee.default.basename(r);if(e===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return m.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return m.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),"unknown-project"}return e}var ge=v(require("path"),1),fe=require("os");var D=require("fs"),F=require("path");var O=class r{static instance=null;activeMode=null;modesDir;constructor(){let e=ue(),t=[(0,F.join)(e,"modes"),(0,F.join)(e,"..","plugin","modes")],s=t.find(n=>(0,D.existsSync)(n));this.modesDir=s||t[0]}static getInstance(){return r.instance||(r.instance=new r),r.instance}parseInheritance(e){let t=e.split("--");if(t.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(t.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:t[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,t){let s={...e};for(let n in t){let o=t[n],i=e[n];this.isPlainObject(o)&&this.isPlainObject(i)?s[n]=this.deepMerge(i,o):s[n]=o}return s}loadModeFile(e){let t=(0,F.join)(this.modesDir,`${e}.json`);if(!(0,D.existsSync)(t))throw new Error(`Mode file not found: ${t}`);let s=(0,D.readFileSync)(t,"utf-8");return JSON.parse(s)}loadMode(e){let t=this.parseInheritance(e);if(!t.hasParent)try{let d=this.loadModeFile(e);return this.activeMode=d,m.debug("SYSTEM",`Loaded mode: ${d.name} (${e})`,void 0,{types:d.observation_types.map(c=>c.id),concepts:d.observation_concepts.map(c=>c.id)}),d}catch{if(m.warn("SYSTEM",`Mode file not found: ${e}, falling back to 'code'`),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:s,overrideId:n}=t,o;try{o=this.loadMode(s)}catch{m.warn("SYSTEM",`Parent mode '${s}' not found for ${e}, falling back to 'code'`),o=this.loadMode("code")}let i;try{i=this.loadModeFile(n),m.debug("SYSTEM",`Loaded override file: ${n} for parent ${s}`)}catch{return m.warn("SYSTEM",`Override file '${n}' not found, using parent mode '${s}' only`),this.activeMode=o,o}if(!i)return m.warn("SYSTEM",`Invalid override file: ${n}, using parent mode '${s}' only`),this.activeMode=o,o;let a=this.deepMerge(o,i);return this.activeMode=a,m.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${s} + ${n})`,void 0,{parent:s,override:n,types:a.observation_types.map(d=>d.id),concepts:a.observation_concepts.map(d=>d.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getObservationTypes(){return this.getActiveMode().observation_types}getObservationConcepts(){return this.getActiveMode().observation_concepts}getTypeIcon(e){return this.getObservationTypes().find(s=>s.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(s=>s.id===e)?.work_emoji||"\u{1F4DD}"}validateType(e){return this.getObservationTypes().some(t=>t.id===e)}getTypeLabel(e){return this.getObservationTypes().find(s=>s.id===e)?.label||e}};function Y(){let r=ge.default.join((0,fe.homedir)(),".claude-mem","settings.json"),e=A.loadFromFile(r),t=e.CLAUDE_MEM_MODE,s=t==="code"||t.startsWith("code--"),n,o;if(s)n=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES.split(",").map(i=>i.trim()).filter(Boolean)),o=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS.split(",").map(i=>i.trim()).filter(Boolean));else{let i=O.getInstance().getActiveMode();n=new Set(i.observation_types.map(a=>a.id)),o=new Set(i.observation_concepts.map(a=>a.id))}return{totalObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10),fullObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_FULL_COUNT,10),sessionCount:parseInt(e.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10),showReadTokens:e.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",showWorkTokens:e.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",showSavingsAmount:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",showSavingsPercent:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT==="true",observationTypes:n,observationConcepts:o,fullObservationField:e.CLAUDE_MEM_CONTEXT_FULL_FIELD,showLastSummary:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",showLastMessage:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true"}}var p={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",cyan:"\x1B[36m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",gray:"\x1B[90m",red:"\x1B[31m"},Se=4,V=1;function q(r){let e=(r.title?.length||0)+(r.subtitle?.length||0)+(r.narrative?.length||0)+JSON.stringify(r.facts||[]).length;return Math.ceil(e/Se)}function K(r){let e=r.length,t=r.reduce((i,a)=>i+q(a),0),s=r.reduce((i,a)=>i+(a.discovery_tokens||0),0),n=s-t,o=s>0?Math.round(n/s*100):0;return{totalObservations:e,totalReadTokens:t,totalDiscoveryTokens:s,savings:n,savingsPercent:o}}function Rt(r){return O.getInstance().getWorkEmoji(r)}function L(r,e){let t=q(r),s=r.discovery_tokens||0,n=Rt(r.type),o=s>0?`${n} ${s.toLocaleString()}`:"-";return{readTokens:t,discoveryTokens:s,discoveryDisplay:o,workEmoji:n}}function P(r){return r.showReadTokens||r.showWorkTokens||r.showSavingsAmount||r.showSavingsPercent}var be=v(require("path"),1),X=require("fs");function J(r,e,t){let s=Array.from(t.observationTypes),n=s.map(()=>"?").join(","),o=Array.from(t.observationConcepts),i=o.map(()=>"?").join(",");return r.db.prepare(`
600
+ `).run(e.content_session_id,e.prompt_number,e.prompt_text,e.created_at,e.created_at_epoch).lastInsertRowid}}};var Ee=v(require("path"),1);function Te(r){if(!r||r.trim()==="")return m.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),"unknown-project";let e=Ee.default.basename(r);if(e===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return m.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return m.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),"unknown-project"}return e}var ge=v(require("path"),1),fe=require("os");var D=require("fs"),F=require("path");var O=class r{static instance=null;activeMode=null;modesDir;constructor(){let e=le(),t=[(0,F.join)(e,"modes"),(0,F.join)(e,"..","plugin","modes")],s=t.find(n=>(0,D.existsSync)(n));this.modesDir=s||t[0]}static getInstance(){return r.instance||(r.instance=new r),r.instance}parseInheritance(e){let t=e.split("--");if(t.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(t.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:t[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,t){let s={...e};for(let n in t){let o=t[n],i=e[n];this.isPlainObject(o)&&this.isPlainObject(i)?s[n]=this.deepMerge(i,o):s[n]=o}return s}loadModeFile(e){let t=(0,F.join)(this.modesDir,`${e}.json`);if(!(0,D.existsSync)(t))throw new Error(`Mode file not found: ${t}`);let s=(0,D.readFileSync)(t,"utf-8");return JSON.parse(s)}loadMode(e){let t=this.parseInheritance(e);if(!t.hasParent)try{let d=this.loadModeFile(e);return this.activeMode=d,m.debug("SYSTEM",`Loaded mode: ${d.name} (${e})`,void 0,{types:d.observation_types.map(c=>c.id),concepts:d.observation_concepts.map(c=>c.id)}),d}catch{if(m.warn("SYSTEM",`Mode file not found: ${e}, falling back to 'code'`),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:s,overrideId:n}=t,o;try{o=this.loadMode(s)}catch{m.warn("SYSTEM",`Parent mode '${s}' not found for ${e}, falling back to 'code'`),o=this.loadMode("code")}let i;try{i=this.loadModeFile(n),m.debug("SYSTEM",`Loaded override file: ${n} for parent ${s}`)}catch{return m.warn("SYSTEM",`Override file '${n}' not found, using parent mode '${s}' only`),this.activeMode=o,o}if(!i)return m.warn("SYSTEM",`Invalid override file: ${n}, using parent mode '${s}' only`),this.activeMode=o,o;let a=this.deepMerge(o,i);return this.activeMode=a,m.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${s} + ${n})`,void 0,{parent:s,override:n,types:a.observation_types.map(d=>d.id),concepts:a.observation_concepts.map(d=>d.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getObservationTypes(){return this.getActiveMode().observation_types}getObservationConcepts(){return this.getActiveMode().observation_concepts}getTypeIcon(e){return this.getObservationTypes().find(s=>s.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(s=>s.id===e)?.work_emoji||"\u{1F4DD}"}validateType(e){return this.getObservationTypes().some(t=>t.id===e)}getTypeLabel(e){return this.getObservationTypes().find(s=>s.id===e)?.label||e}};function Y(){let r=ge.default.join((0,fe.homedir)(),".claude-mem","settings.json"),e=A.loadFromFile(r),t=e.CLAUDE_MEM_MODE,s=t==="code"||t.startsWith("code--"),n,o;if(s)n=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES.split(",").map(i=>i.trim()).filter(Boolean)),o=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS.split(",").map(i=>i.trim()).filter(Boolean));else{let i=O.getInstance().getActiveMode();n=new Set(i.observation_types.map(a=>a.id)),o=new Set(i.observation_concepts.map(a=>a.id))}return{totalObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10),fullObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_FULL_COUNT,10),sessionCount:parseInt(e.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10),showReadTokens:e.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",showWorkTokens:e.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",showSavingsAmount:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",showSavingsPercent:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT==="true",observationTypes:n,observationConcepts:o,fullObservationField:e.CLAUDE_MEM_CONTEXT_FULL_FIELD,showLastSummary:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",showLastMessage:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true"}}var p={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",cyan:"\x1B[36m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",gray:"\x1B[90m",red:"\x1B[31m"},Se=4,V=1;function q(r){let e=(r.title?.length||0)+(r.subtitle?.length||0)+(r.narrative?.length||0)+JSON.stringify(r.facts||[]).length;return Math.ceil(e/Se)}function K(r){let e=r.length,t=r.reduce((i,a)=>i+q(a),0),s=r.reduce((i,a)=>i+(a.discovery_tokens||0),0),n=s-t,o=s>0?Math.round(n/s*100):0;return{totalObservations:e,totalReadTokens:t,totalDiscoveryTokens:s,savings:n,savingsPercent:o}}function Rt(r){return O.getInstance().getWorkEmoji(r)}function L(r,e){let t=q(r),s=r.discovery_tokens||0,n=Rt(r.type),o=s>0?`${n} ${s.toLocaleString()}`:"-";return{readTokens:t,discoveryTokens:s,discoveryDisplay:o,workEmoji:n}}function P(r){return r.showReadTokens||r.showWorkTokens||r.showSavingsAmount||r.showSavingsPercent}var be=v(require("path"),1),X=require("fs");function J(r,e,t){let s=Array.from(t.observationTypes),n=s.map(()=>"?").join(","),o=Array.from(t.observationConcepts),i=o.map(()=>"?").join(",");return r.db.prepare(`
601
601
  SELECT
602
602
  id, memory_session_id, type, title, subtitle, narrative,
603
603
  facts, concepts, files_read, files_modified, discovery_tokens,
@@ -640,11 +640,11 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=`
640
640
  `).all(...e,t.sessionCount+V)}function Nt(r){return r.replace(/\//g,"-")}function Ct(r){try{if(!(0,X.existsSync)(r))return{userMessage:"",assistantMessage:""};let e=(0,X.readFileSync)(r,"utf-8").trim();if(!e)return{userMessage:"",assistantMessage:""};let t=e.split(`
641
641
  `).filter(n=>n.trim()),s="";for(let n=t.length-1;n>=0;n--)try{let o=t[n];if(!o.includes('"type":"assistant"'))continue;let i=JSON.parse(o);if(i.type==="assistant"&&i.message?.content&&Array.isArray(i.message.content)){let a="";for(let d of i.message.content)d.type==="text"&&(a+=d.text);if(a=a.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g,"").trim(),a){s=a;break}}}catch(o){m.debug("PARSER","Skipping malformed transcript line",{lineIndex:n},o);continue}return{userMessage:"",assistantMessage:s}}catch(e){return m.failure("WORKER","Failed to extract prior messages from transcript",{transcriptPath:r},e),{userMessage:"",assistantMessage:""}}}function Q(r,e,t,s){if(!e.showLastMessage||r.length===0)return{userMessage:"",assistantMessage:""};let n=r.find(d=>d.memory_session_id!==t);if(!n)return{userMessage:"",assistantMessage:""};let o=n.memory_session_id,i=Nt(s),a=be.default.join(y,"projects",i,`${o}.jsonl`);return Ct(a)}function Re(r,e){let t=e[0]?.id;return r.map((s,n)=>{let o=n===0?null:e[n+1];return{...s,displayEpoch:o?o.created_at_epoch:s.created_at_epoch,displayTime:o?o.created_at:s.created_at,shouldShowLink:s.id!==t}})}function Z(r,e){let t=[...r.map(s=>({type:"observation",data:s})),...e.map(s=>({type:"summary",data:s}))];return t.sort((s,n)=>{let o=s.type==="observation"?s.data.created_at_epoch:s.data.displayEpoch,i=n.type==="observation"?n.data.created_at_epoch:n.data.displayEpoch;return o-i}),t}function Ne(r,e){return new Set(r.slice(0,e).map(t=>t.id))}function Ce(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Ie(r){return[`# [${r}] recent context, ${Ce()}`,""]}function Ae(){return[`**Legend:** session-request | ${O.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ")}`,""]}function ye(){return["**Column Key**:","- **Read**: Tokens to read this observation (cost to learn it now)","- **Work**: Tokens spent on work that produced this record ( research, building, deciding)",""]}function Le(){return["**Context Index:** This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.","","When you need implementation details, rationale, or debugging context:","- Use MCP tools (search, get_observations) to fetch full observations on-demand","- Critical types ( bugfix, decision) often need detailed fetching","- Trust this index over re-reading code for past decisions and learnings",""]}function ve(r,e){let t=[];if(t.push("**Context Economics**:"),t.push(`- Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)`),t.push(`- Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s="- Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(s)}return t.push(""),t}function Me(r){return[`### ${r}`,""]}function De(r){return[`**${r}**`,"| ID | Time | T | Title | Read | Work |","|----|------|---|-------|------|------|"]}function xe(r,e,t){let s=r.title||"Untitled",n=O.getInstance().getTypeIcon(r.type),{readTokens:o,discoveryDisplay:i}=L(r,t),a=t.showReadTokens?`~${o}`:"",d=t.showWorkTokens?i:"";return`| #${r.id} | ${e||'"'} | ${n} | ${s} | ${a} | ${d} |`}function ke(r,e,t,s){let n=[],o=r.title||"Untitled",i=O.getInstance().getTypeIcon(r.type),{readTokens:a,discoveryDisplay:d}=L(r,s);n.push(`**#${r.id}** ${e||'"'} ${i} **${o}**`),t&&(n.push(""),n.push(t),n.push(""));let c=[];return s.showReadTokens&&c.push(`Read: ~${a}`),s.showWorkTokens&&c.push(`Work: ${d}`),c.length>0&&n.push(c.join(", ")),n.push(""),n}function Ue(r,e){let t=`${r.request||"Session started"} (${e})`;return[`**#S${r.id}** ${t}`,""]}function x(r,e){return e?[`**${r}**: ${e}`,""]:[]}function we(r){return r.assistantMessage?["","---","","**Previously**","",`A: ${r.assistantMessage}`,""]:[]}function $e(r,e){return["",`Access ${Math.round(r/1e3)}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use MCP search tools to access memories by ID.`]}function Fe(r){return`# [${r}] recent context, ${Ce()}
642
642
 
643
- No previous sessions found for this project yet.`}function Pe(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Xe(r){return["",`${p.bright}${p.cyan}[${r}] recent context, ${Pe()}${p.reset}`,`${p.gray}${"\u2500".repeat(60)}${p.reset}`,""]}function je(){let e=O.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ");return[`${p.dim}Legend: session-request | ${e}${p.reset}`,""]}function Ge(){return[`${p.bright}Column Key${p.reset}`,`${p.dim} Read: Tokens to read this observation (cost to learn it now)${p.reset}`,`${p.dim} Work: Tokens spent on work that produced this record ( research, building, deciding)${p.reset}`,""]}function Be(){return[`${p.dim}Context Index: This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.${p.reset}`,"",`${p.dim}When you need implementation details, rationale, or debugging context:${p.reset}`,`${p.dim} - Use MCP tools (search, get_observations) to fetch full observations on-demand${p.reset}`,`${p.dim} - Critical types ( bugfix, decision) often need detailed fetching${p.reset}`,`${p.dim} - Trust this index over re-reading code for past decisions and learnings${p.reset}`,""]}function He(r,e){let t=[];if(t.push(`${p.bright}${p.cyan}Context Economics${p.reset}`),t.push(`${p.dim} Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)${p.reset}`),t.push(`${p.dim} Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions${p.reset}`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s=" Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(`${p.green}${s}${p.reset}`)}return t.push(""),t}function We(r){return[`${p.bright}${p.cyan}${r}${p.reset}`,""]}function Ye(r){return[`${p.dim}${r}${p.reset}`]}function Ve(r,e,t,s){let n=r.title||"Untitled",o=O.getInstance().getTypeIcon(r.type),{readTokens:i,discoveryTokens:a,workEmoji:d}=L(r,s),c=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),_=s.showReadTokens&&i>0?`${p.dim}(~${i}t)${p.reset}`:"",u=s.showWorkTokens&&a>0?`${p.dim}(${d} ${a.toLocaleString()}t)${p.reset}`:"";return` ${p.dim}#${r.id}${p.reset} ${c} ${o} ${n} ${_} ${u}`}function qe(r,e,t,s,n){let o=[],i=r.title||"Untitled",a=O.getInstance().getTypeIcon(r.type),{readTokens:d,discoveryTokens:c,workEmoji:_}=L(r,n),u=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),T=n.showReadTokens&&d>0?`${p.dim}(~${d}t)${p.reset}`:"",E=n.showWorkTokens&&c>0?`${p.dim}(${_} ${c.toLocaleString()}t)${p.reset}`:"";return o.push(` ${p.dim}#${r.id}${p.reset} ${u} ${a} ${p.bright}${i}${p.reset}`),s&&o.push(` ${p.dim}${s}${p.reset}`),(T||E)&&o.push(` ${T} ${E}`),o.push(""),o}function Ke(r,e){let t=`${r.request||"Session started"} (${e})`;return[`${p.yellow}#S${r.id}${p.reset} ${t}`,""]}function k(r,e,t){return e?[`${t}${r}:${p.reset} ${e}`,""]:[]}function Je(r){return r.assistantMessage?["","---","",`${p.bright}${p.magenta}Previously${p.reset}`,"",`${p.dim}A: ${r.assistantMessage}${p.reset}`,""]:[]}function ze(r,e){let t=Math.round(r/1e3);return["",`${p.dim}Access ${t}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use MCP search tools to access memories by ID.${p.reset}`]}function Qe(r){return`
643
+ No previous sessions found for this project yet.`}function Pe(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Xe(r){return["",`${p.bright}${p.cyan}[${r}] recent context, ${Pe()}${p.reset}`,`${p.gray}${"\u2500".repeat(60)}${p.reset}`,""]}function je(){let e=O.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ");return[`${p.dim}Legend: session-request | ${e}${p.reset}`,""]}function Ge(){return[`${p.bright}Column Key${p.reset}`,`${p.dim} Read: Tokens to read this observation (cost to learn it now)${p.reset}`,`${p.dim} Work: Tokens spent on work that produced this record ( research, building, deciding)${p.reset}`,""]}function Be(){return[`${p.dim}Context Index: This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.${p.reset}`,"",`${p.dim}When you need implementation details, rationale, or debugging context:${p.reset}`,`${p.dim} - Use MCP tools (search, get_observations) to fetch full observations on-demand${p.reset}`,`${p.dim} - Critical types ( bugfix, decision) often need detailed fetching${p.reset}`,`${p.dim} - Trust this index over re-reading code for past decisions and learnings${p.reset}`,""]}function He(r,e){let t=[];if(t.push(`${p.bright}${p.cyan}Context Economics${p.reset}`),t.push(`${p.dim} Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)${p.reset}`),t.push(`${p.dim} Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions${p.reset}`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s=" Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(`${p.green}${s}${p.reset}`)}return t.push(""),t}function We(r){return[`${p.bright}${p.cyan}${r}${p.reset}`,""]}function Ye(r){return[`${p.dim}${r}${p.reset}`]}function Ve(r,e,t,s){let n=r.title||"Untitled",o=O.getInstance().getTypeIcon(r.type),{readTokens:i,discoveryTokens:a,workEmoji:d}=L(r,s),c=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),_=s.showReadTokens&&i>0?`${p.dim}(~${i}t)${p.reset}`:"",l=s.showWorkTokens&&a>0?`${p.dim}(${d} ${a.toLocaleString()}t)${p.reset}`:"";return` ${p.dim}#${r.id}${p.reset} ${c} ${o} ${n} ${_} ${l}`}function qe(r,e,t,s,n){let o=[],i=r.title||"Untitled",a=O.getInstance().getTypeIcon(r.type),{readTokens:d,discoveryTokens:c,workEmoji:_}=L(r,n),l=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),T=n.showReadTokens&&d>0?`${p.dim}(~${d}t)${p.reset}`:"",E=n.showWorkTokens&&c>0?`${p.dim}(${_} ${c.toLocaleString()}t)${p.reset}`:"";return o.push(` ${p.dim}#${r.id}${p.reset} ${l} ${a} ${p.bright}${i}${p.reset}`),s&&o.push(` ${p.dim}${s}${p.reset}`),(T||E)&&o.push(` ${T} ${E}`),o.push(""),o}function Ke(r,e){let t=`${r.request||"Session started"} (${e})`;return[`${p.yellow}#S${r.id}${p.reset} ${t}`,""]}function k(r,e,t){return e?[`${t}${r}:${p.reset} ${e}`,""]:[]}function Je(r){return r.assistantMessage?["","---","",`${p.bright}${p.magenta}Previously${p.reset}`,"",`${p.dim}A: ${r.assistantMessage}${p.reset}`,""]:[]}function ze(r,e){let t=Math.round(r/1e3);return["",`${p.dim}Access ${t}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use MCP search tools to access memories by ID.${p.reset}`]}function Qe(r){return`
644
644
  ${p.bright}${p.cyan}[${r}] recent context, ${Pe()}${p.reset}
645
645
  ${p.gray}${"\u2500".repeat(60)}${p.reset}
646
646
 
647
647
  ${p.dim}No previous sessions found for this project yet.${p.reset}
648
648
  `}function Ze(r,e,t,s){let n=[];return s?n.push(...Xe(r)):n.push(...Ie(r)),s?n.push(...je()):n.push(...Ae()),s?n.push(...Ge()):n.push(...ye()),s?n.push(...Be()):n.push(...Le()),P(t)&&(s?n.push(...He(e,t)):n.push(...ve(e,t))),n}var ee=v(require("path"),1);function B(r){if(!r)return[];try{let e=JSON.parse(r);return Array.isArray(e)?e:[]}catch(e){return m.debug("PARSER","Failed to parse JSON array, using empty fallback",{preview:r?.substring(0,50)},e),[]}}function tt(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}function st(r){return new Date(r).toLocaleString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0})}function rt(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric"})}function et(r,e){return ee.default.isAbsolute(r)?ee.default.relative(e,r):r}function nt(r,e,t){let s=B(r);if(s.length>0)return et(s[0],e);if(t){let n=B(t);if(n.length>0)return et(n[0],e)}return"General"}function It(r){let e=new Map;for(let s of r){let n=s.type==="observation"?s.data.created_at:s.data.displayTime,o=rt(n);e.has(o)||e.set(o,[]),e.get(o).push(s)}let t=Array.from(e.entries()).sort((s,n)=>{let o=new Date(s[0]).getTime(),i=new Date(n[0]).getTime();return o-i});return new Map(t)}function At(r,e){return e.fullObservationField==="narrative"?r.narrative:r.facts?B(r.facts).join(`
649
- `):null}function yt(r,e,t,s,n,o){let i=[];o?i.push(...We(r)):i.push(...Me(r));let a=null,d="",c=!1;for(let _ of e)if(_.type==="summary"){c&&(i.push(""),c=!1,a=null,d="");let u=_.data,T=tt(u.displayTime);o?i.push(...Ke(u,T)):i.push(...Ue(u,T))}else{let u=_.data,T=nt(u.files_modified,n,u.files_read),E=st(u.created_at),g=E!==d,h=g?E:"";d=E;let l=t.has(u.id);if(T!==a&&(c&&i.push(""),o?i.push(...Ye(T)):i.push(...De(T)),a=T,c=!0),l){let S=At(u,s);o?i.push(...qe(u,E,g,S,s)):(c&&!o&&(i.push(""),c=!1),i.push(...ke(u,h,S,s)),a=null)}else o?i.push(Ve(u,E,g,s)):i.push(xe(u,h,s))}return c&&i.push(""),i}function ot(r,e,t,s,n){let o=[],i=It(r);for(let[a,d]of i)o.push(...yt(a,d,e,t,s,n));return o}function it(r,e,t){return!(!r.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||t&&e.created_at_epoch<=t.created_at_epoch)}function at(r,e){let t=[];return e?(t.push(...k("Investigated",r.investigated,p.blue)),t.push(...k("Learned",r.learned,p.yellow)),t.push(...k("Completed",r.completed,p.green)),t.push(...k("Next Steps",r.next_steps,p.magenta))):(t.push(...x("Investigated",r.investigated)),t.push(...x("Learned",r.learned)),t.push(...x("Completed",r.completed)),t.push(...x("Next Steps",r.next_steps))),t}function dt(r,e){return e?Je(r):we(r)}function pt(r,e,t){return!P(e)||r.totalDiscoveryTokens<=0||r.savings<=0?[]:t?ze(r.totalDiscoveryTokens,r.totalReadTokens):$e(r.totalDiscoveryTokens,r.totalReadTokens)}var Lt=ct.default.join((0,mt.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version");function vt(){try{return new $}catch(r){if(r.code==="ERR_DLOPEN_FAILED"){try{(0,_t.unlinkSync)(Lt)}catch(e){m.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return m.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw r}}function Mt(r,e){return e?Qe(r):Fe(r)}function Dt(r,e,t,s,n,o,i){let a=[],d=K(e);a.push(...Ze(r,d,s,i));let c=t.slice(0,s.sessionCount),_=Re(c,t),u=Z(e,_),T=Ne(e,s.fullObservationCount);a.push(...ot(u,T,s,n,i));let E=t[0],g=e[0];it(s,E,g)&&a.push(...at(E,i));let h=Q(e,s,o,n);return a.push(...dt(h,i)),a.push(...pt(d,s,i)),a.join(`
649
+ `):null}function yt(r,e,t,s,n,o){let i=[];o?i.push(...We(r)):i.push(...Me(r));let a=null,d="",c=!1;for(let _ of e)if(_.type==="summary"){c&&(i.push(""),c=!1,a=null,d="");let l=_.data,T=tt(l.displayTime);o?i.push(...Ke(l,T)):i.push(...Ue(l,T))}else{let l=_.data,T=nt(l.files_modified,n,l.files_read),E=st(l.created_at),g=E!==d,h=g?E:"";d=E;let u=t.has(l.id);if(T!==a&&(c&&i.push(""),o?i.push(...Ye(T)):i.push(...De(T)),a=T,c=!0),u){let S=At(l,s);o?i.push(...qe(l,E,g,S,s)):(c&&!o&&(i.push(""),c=!1),i.push(...ke(l,h,S,s)),a=null)}else o?i.push(Ve(l,E,g,s)):i.push(xe(l,h,s))}return c&&i.push(""),i}function ot(r,e,t,s,n){let o=[],i=It(r);for(let[a,d]of i)o.push(...yt(a,d,e,t,s,n));return o}function it(r,e,t){return!(!r.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||t&&e.created_at_epoch<=t.created_at_epoch)}function at(r,e){let t=[];return e?(t.push(...k("Investigated",r.investigated,p.blue)),t.push(...k("Learned",r.learned,p.yellow)),t.push(...k("Completed",r.completed,p.green)),t.push(...k("Next Steps",r.next_steps,p.magenta))):(t.push(...x("Investigated",r.investigated)),t.push(...x("Learned",r.learned)),t.push(...x("Completed",r.completed)),t.push(...x("Next Steps",r.next_steps))),t}function dt(r,e){return e?Je(r):we(r)}function pt(r,e,t){return!P(e)||r.totalDiscoveryTokens<=0||r.savings<=0?[]:t?ze(r.totalDiscoveryTokens,r.totalReadTokens):$e(r.totalDiscoveryTokens,r.totalReadTokens)}var Lt=ct.default.join((0,mt.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version");function vt(){try{return new $}catch(r){if(r.code==="ERR_DLOPEN_FAILED"){try{(0,_t.unlinkSync)(Lt)}catch(e){m.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return m.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw r}}function Mt(r,e){return e?Qe(r):Fe(r)}function Dt(r,e,t,s,n,o,i){let a=[],d=K(e);a.push(...Ze(r,d,s,i));let c=t.slice(0,s.sessionCount),_=Re(c,t),l=Z(e,_),T=Ne(e,s.fullObservationCount);a.push(...ot(l,T,s,n,i));let E=t[0],g=e[0];it(s,E,g)&&a.push(...at(E,i));let h=Q(e,s,o,n);return a.push(...dt(h,i)),a.push(...pt(d,s,i)),a.join(`
650
650
  `).trimEnd()}async function te(r,e=!1){let t=Y(),s=r?.cwd??process.cwd(),n=Te(s),o=r?.projects||[n],i=vt();if(!i)return"";try{let a=o.length>1?he(i,o,t):J(i,n,t),d=o.length>1?Oe(i,o,t):z(i,n,t);return a.length===0&&d.length===0?Mt(n,e):Dt(n,a,d,t,s,r?.session_id,e)}finally{i.close()}}0&&(module.exports={generateContext});
@@ -54,7 +54,7 @@ ${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?l=`
54
54
 
55
55
  Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let a of t.seen.entries()){let s=a[1];if(e===a[0]){i(a);continue}if(t.external){let u=t.external.registry.get(a[0])?.id;if(e!==a[0]&&u){i(a);continue}}if(t.metadataRegistry.get(a[0])?.id){i(a);continue}if(s.cycle){i(a);continue}if(s.count>1&&t.reused==="ref"){i(a);continue}}}function Yi(t,e){let r=t.seen.get(e);if(!r)throw new Error("Unprocessed schema. This is a bug in Zod.");let n=a=>{let s=t.seen.get(a);if(s.ref===null)return;let c=s.def??s.schema,u={...c},l=s.ref;if(s.ref=null,l){n(l);let m=t.seen.get(l),f=m.schema;if(f.$ref&&(t.target==="draft-07"||t.target==="draft-04"||t.target==="openapi-3.0")?(c.allOf=c.allOf??[],c.allOf.push(f)):Object.assign(c,f),Object.assign(c,u),a._zod.parent===l)for(let v in c)v==="$ref"||v==="allOf"||v in u||delete c[v];if(f.$ref&&m.def)for(let v in c)v==="$ref"||v==="allOf"||v in m.def&&JSON.stringify(c[v])===JSON.stringify(m.def[v])&&delete c[v]}let d=a._zod.parent;if(d&&d!==l){n(d);let m=t.seen.get(d);if(m?.schema.$ref&&(c.$ref=m.schema.$ref,m.def))for(let f in c)f==="$ref"||f==="allOf"||f in m.def&&JSON.stringify(c[f])===JSON.stringify(m.def[f])&&delete c[f]}t.override({zodSchema:a,jsonSchema:c,path:s.path??[]})};for(let a of[...t.seen.entries()].reverse())n(a[0]);let o={};if(t.target==="draft-2020-12"?o.$schema="https://json-schema.org/draft/2020-12/schema":t.target==="draft-07"?o.$schema="http://json-schema.org/draft-07/schema#":t.target==="draft-04"?o.$schema="http://json-schema.org/draft-04/schema#":t.target,t.external?.uri){let a=t.external.registry.get(e)?.id;if(!a)throw new Error("Schema is missing an `id` property");o.$id=t.external.uri(a)}Object.assign(o,r.def??r.schema);let i=t.external?.defs??{};for(let a of t.seen.entries()){let s=a[1];s.def&&s.defId&&(i[s.defId]=s.def)}t.external||Object.keys(i).length>0&&(t.target==="draft-2020-12"?o.$defs=i:o.definitions=i);try{let a=JSON.parse(JSON.stringify(o));return Object.defineProperty(a,"~standard",{value:{...e["~standard"],jsonSchema:{input:mo(e,"input",t.processors),output:mo(e,"output",t.processors)}},enumerable:!1,writable:!1}),a}catch{throw new Error("Error converting schema to JSON.")}}function Ue(t,e){let r=e??{seen:new Set};if(r.seen.has(t))return!1;r.seen.add(t);let n=t._zod.def;if(n.type==="transform")return!0;if(n.type==="array")return Ue(n.element,r);if(n.type==="set")return Ue(n.valueType,r);if(n.type==="lazy")return Ue(n.getter(),r);if(n.type==="promise"||n.type==="optional"||n.type==="nonoptional"||n.type==="nullable"||n.type==="readonly"||n.type==="default"||n.type==="prefault")return Ue(n.innerType,r);if(n.type==="intersection")return Ue(n.left,r)||Ue(n.right,r);if(n.type==="record"||n.type==="map")return Ue(n.keyType,r)||Ue(n.valueType,r);if(n.type==="pipe")return Ue(n.in,r)||Ue(n.out,r);if(n.type==="object"){for(let o in n.shape)if(Ue(n.shape[o],r))return!0;return!1}if(n.type==="union"){for(let o of n.options)if(Ue(o,r))return!0;return!1}if(n.type==="tuple"){for(let o of n.items)if(Ue(o,r))return!0;return!!(n.rest&&Ue(n.rest,r))}return!1}var Nm=(t,e={})=>r=>{let n=Bi({...r,processors:e});return de(t,n),Xi(n,t),Yi(n,t)},mo=(t,e,r={})=>n=>{let{libraryOptions:o,target:i}=n??{},a=Bi({...o??{},target:i,io:e,processors:r});return de(t,a),Xi(a,t),Yi(a,t)};var Sb={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},Rm=(t,e,r,n)=>{let o=r;o.type="string";let{minimum:i,maximum:a,format:s,patterns:c,contentEncoding:u}=t._zod.bag;if(typeof i=="number"&&(o.minLength=i),typeof a=="number"&&(o.maxLength=a),s&&(o.format=Sb[s]??s,o.format===""&&delete o.format,s==="time"&&delete o.format),u&&(o.contentEncoding=u),c&&c.size>0){let l=[...c];l.length===1?o.pattern=l[0].source:l.length>1&&(o.allOf=[...l.map(d=>({...e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0"?{type:"string"}:{},pattern:d.source}))])}},Am=(t,e,r,n)=>{let o=r,{minimum:i,maximum:a,format:s,multipleOf:c,exclusiveMaximum:u,exclusiveMinimum:l}=t._zod.bag;typeof s=="string"&&s.includes("int")?o.type="integer":o.type="number",typeof l=="number"&&(e.target==="draft-04"||e.target==="openapi-3.0"?(o.minimum=l,o.exclusiveMinimum=!0):o.exclusiveMinimum=l),typeof i=="number"&&(o.minimum=i,typeof l=="number"&&e.target!=="draft-04"&&(l>=i?delete o.minimum:delete o.exclusiveMinimum)),typeof u=="number"&&(e.target==="draft-04"||e.target==="openapi-3.0"?(o.maximum=u,o.exclusiveMaximum=!0):o.exclusiveMaximum=u),typeof a=="number"&&(o.maximum=a,typeof u=="number"&&e.target!=="draft-04"&&(u<=a?delete o.maximum:delete o.exclusiveMaximum)),typeof c=="number"&&(o.multipleOf=c)},Um=(t,e,r,n)=>{r.type="boolean"},Zm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema")},Cm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema")},Mm=(t,e,r,n)=>{e.target==="openapi-3.0"?(r.type="string",r.nullable=!0,r.enum=[null]):r.type="null"},Lm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema")},qm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema")},Fm=(t,e,r,n)=>{r.not={}},Vm=(t,e,r,n)=>{},Jm=(t,e,r,n)=>{},Km=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema")},Hm=(t,e,r,n)=>{let o=t._zod.def,i=Rn(o.entries);i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),r.enum=i},Wm=(t,e,r,n)=>{let o=t._zod.def,i=[];for(let a of o.values)if(a===void 0){if(e.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof a=="bigint"){if(e.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");i.push(Number(a))}else i.push(a);if(i.length!==0)if(i.length===1){let a=i[0];r.type=a===null?"null":typeof a,e.target==="draft-04"||e.target==="openapi-3.0"?r.enum=[a]:r.const=a}else i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),i.every(a=>typeof a=="boolean")&&(r.type="boolean"),i.every(a=>a===null)&&(r.type="null"),r.enum=i},Gm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema")},Bm=(t,e,r,n)=>{let o=r,i=t._zod.pattern;if(!i)throw new Error("Pattern not found in template literal");o.type="string",o.pattern=i.source},Xm=(t,e,r,n)=>{let o=r,i={type:"string",format:"binary",contentEncoding:"binary"},{minimum:a,maximum:s,mime:c}=t._zod.bag;a!==void 0&&(i.minLength=a),s!==void 0&&(i.maxLength=s),c?c.length===1?(i.contentMediaType=c[0],Object.assign(o,i)):(Object.assign(o,i),o.anyOf=c.map(u=>({contentMediaType:u}))):Object.assign(o,i)},Ym=(t,e,r,n)=>{r.type="boolean"},Qm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},eh=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Function types cannot be represented in JSON Schema")},th=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},rh=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema")},nh=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema")},oh=(t,e,r,n)=>{let o=r,i=t._zod.def,{minimum:a,maximum:s}=t._zod.bag;typeof a=="number"&&(o.minItems=a),typeof s=="number"&&(o.maxItems=s),o.type="array",o.items=de(i.element,e,{...n,path:[...n.path,"items"]})},ih=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="object",o.properties={};let a=i.shape;for(let u in a)o.properties[u]=de(a[u],e,{...n,path:[...n.path,"properties",u]});let s=new Set(Object.keys(a)),c=new Set([...s].filter(u=>{let l=i.shape[u]._zod;return e.io==="input"?l.optin===void 0:l.optout===void 0}));c.size>0&&(o.required=Array.from(c)),i.catchall?._zod.def.type==="never"?o.additionalProperties=!1:i.catchall?i.catchall&&(o.additionalProperties=de(i.catchall,e,{...n,path:[...n.path,"additionalProperties"]})):e.io==="output"&&(o.additionalProperties=!1)},hl=(t,e,r,n)=>{let o=t._zod.def,i=o.inclusive===!1,a=o.options.map((s,c)=>de(s,e,{...n,path:[...n.path,i?"oneOf":"anyOf",c]}));i?r.oneOf=a:r.anyOf=a},ah=(t,e,r,n)=>{let o=t._zod.def,i=de(o.left,e,{...n,path:[...n.path,"allOf",0]}),a=de(o.right,e,{...n,path:[...n.path,"allOf",1]}),s=u=>"allOf"in u&&Object.keys(u).length===1,c=[...s(i)?i.allOf:[i],...s(a)?a.allOf:[a]];r.allOf=c},sh=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="array";let a=e.target==="draft-2020-12"?"prefixItems":"items",s=e.target==="draft-2020-12"||e.target==="openapi-3.0"?"items":"additionalItems",c=i.items.map((m,f)=>de(m,e,{...n,path:[...n.path,a,f]})),u=i.rest?de(i.rest,e,{...n,path:[...n.path,s,...e.target==="openapi-3.0"?[i.items.length]:[]]}):null;e.target==="draft-2020-12"?(o.prefixItems=c,u&&(o.items=u)):e.target==="openapi-3.0"?(o.items={anyOf:c},u&&o.items.anyOf.push(u),o.minItems=c.length,u||(o.maxItems=c.length)):(o.items=c,u&&(o.additionalItems=u));let{minimum:l,maximum:d}=t._zod.bag;typeof l=="number"&&(o.minItems=l),typeof d=="number"&&(o.maxItems=d)},ch=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="object";let a=i.keyType,c=a._zod.bag?.patterns;if(i.mode==="loose"&&c&&c.size>0){let l=de(i.valueType,e,{...n,path:[...n.path,"patternProperties","*"]});o.patternProperties={};for(let d of c)o.patternProperties[d.source]=l}else(e.target==="draft-07"||e.target==="draft-2020-12")&&(o.propertyNames=de(i.keyType,e,{...n,path:[...n.path,"propertyNames"]})),o.additionalProperties=de(i.valueType,e,{...n,path:[...n.path,"additionalProperties"]});let u=a._zod.values;if(u){let l=[...u].filter(d=>typeof d=="string"||typeof d=="number");l.length>0&&(o.required=l)}},uh=(t,e,r,n)=>{let o=t._zod.def,i=de(o.innerType,e,n),a=e.seen.get(t);e.target==="openapi-3.0"?(a.ref=o.innerType,r.nullable=!0):r.anyOf=[i,{type:"null"}]},lh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},dh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,r.default=JSON.parse(JSON.stringify(o.defaultValue))},ph=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,e.io==="input"&&(r._prefault=JSON.parse(JSON.stringify(o.defaultValue)))},fh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType;let a;try{a=o.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}r.default=a},mh=(t,e,r,n)=>{let o=t._zod.def,i=e.io==="input"?o.in._zod.def.type==="transform"?o.out:o.in:o.out;de(i,e,n);let a=e.seen.get(t);a.ref=i},hh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,r.readOnly=!0},gh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},gl=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},vh=(t,e,r,n)=>{let o=t._zod.innerType;de(o,e,n);let i=e.seen.get(t);i.ref=o};function Br(t){return!!t._zod}function Yt(t,e){return Br(t)?Jr(t,e):t.safeParse(e)}function Qi(t){if(!t)return;let e;if(Br(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function bh(t){if(Br(t)){let i=t._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let r=t._def;if(r){if(r.value!==void 0)return r.value;if(Array.isArray(r.values)&&r.values.length>0)return r.values[0]}let n=t.value;if(n!==void 0)return n}var ho={};$n(ho,{ZodAny:()=>Ch,ZodArray:()=>Fh,ZodBase64:()=>Ml,ZodBase64URL:()=>Ll,ZodBigInt:()=>ca,ZodBigIntFormat:()=>Vl,ZodBoolean:()=>sa,ZodCIDRv4:()=>Zl,ZodCIDRv6:()=>Cl,ZodCUID:()=>Ol,ZodCUID2:()=>jl,ZodCatch:()=>ug,ZodCodec:()=>Xl,ZodCustom:()=>fa,ZodCustomStringFormat:()=>vo,ZodDate:()=>Kl,ZodDefault:()=>ng,ZodDiscriminatedUnion:()=>Jh,ZodE164:()=>ql,ZodEmail:()=>El,ZodEmoji:()=>Tl,ZodEnum:()=>go,ZodExactOptional:()=>eg,ZodFile:()=>Yh,ZodFunction:()=>_g,ZodGUID:()=>ta,ZodIPv4:()=>Al,ZodIPv6:()=>Ul,ZodIntersection:()=>Kh,ZodJWT:()=>Fl,ZodKSUID:()=>Rl,ZodLazy:()=>hg,ZodLiteral:()=>Xh,ZodMAC:()=>Rh,ZodMap:()=>Gh,ZodNaN:()=>dg,ZodNanoID:()=>Pl,ZodNever:()=>Lh,ZodNonOptional:()=>Gl,ZodNull:()=>Zh,ZodNullable:()=>rg,ZodNumber:()=>aa,ZodNumberFormat:()=>Xr,ZodObject:()=>ua,ZodOptional:()=>Wl,ZodPipe:()=>Bl,ZodPrefault:()=>ig,ZodPromise:()=>vg,ZodReadonly:()=>pg,ZodRecord:()=>pa,ZodSet:()=>Bh,ZodString:()=>oa,ZodStringFormat:()=>ce,ZodSuccess:()=>cg,ZodSymbol:()=>Ah,ZodTemplateLiteral:()=>mg,ZodTransform:()=>Qh,ZodTuple:()=>Hh,ZodType:()=>F,ZodULID:()=>Dl,ZodURL:()=>ia,ZodUUID:()=>Rt,ZodUndefined:()=>Uh,ZodUnion:()=>la,ZodUnknown:()=>Mh,ZodVoid:()=>qh,ZodXID:()=>Nl,ZodXor:()=>Vh,_ZodString:()=>Il,_default:()=>og,_function:()=>qx,any:()=>Sx,array:()=>G,base64:()=>sx,base64url:()=>cx,bigint:()=>yx,boolean:()=>_e,catch:()=>lg,check:()=>Fx,cidrv4:()=>ix,cidrv6:()=>ax,codec:()=>Cx,cuid:()=>Xb,cuid2:()=>Yb,custom:()=>Yl,date:()=>zx,describe:()=>Vx,discriminatedUnion:()=>da,e164:()=>ux,email:()=>Lb,emoji:()=>Gb,enum:()=>Te,exactOptional:()=>tg,file:()=>Rx,float32:()=>hx,float64:()=>gx,function:()=>qx,guid:()=>qb,hash:()=>mx,hex:()=>fx,hostname:()=>px,httpUrl:()=>Wb,instanceof:()=>Kx,int:()=>zl,int32:()=>vx,int64:()=>$x,intersection:()=>yo,ipv4:()=>rx,ipv6:()=>ox,json:()=>Wx,jwt:()=>lx,keyof:()=>Ix,ksuid:()=>tx,lazy:()=>gg,literal:()=>T,looseObject:()=>Ee,looseRecord:()=>Ox,mac:()=>nx,map:()=>jx,meta:()=>Jx,nan:()=>Zx,nanoid:()=>Bb,nativeEnum:()=>Nx,never:()=>Jl,nonoptional:()=>sg,null:()=>_o,nullable:()=>ra,nullish:()=>Ax,number:()=>ne,object:()=>z,optional:()=>fe,partialRecord:()=>Px,pipe:()=>na,prefault:()=>ag,preprocess:()=>ma,promise:()=>Lx,readonly:()=>fg,record:()=>pe,refine:()=>yg,set:()=>Dx,strictObject:()=>Ex,string:()=>h,stringFormat:()=>dx,stringbool:()=>Hx,success:()=>Ux,superRefine:()=>$g,symbol:()=>xx,templateLiteral:()=>Mx,transform:()=>Hl,tuple:()=>Wh,uint32:()=>_x,uint64:()=>bx,ulid:()=>Qb,undefined:()=>kx,union:()=>ie,unknown:()=>ue,url:()=>Hb,uuid:()=>Fb,uuidv4:()=>Vb,uuidv6:()=>Jb,uuidv7:()=>Kb,void:()=>wx,xid:()=>ex,xor:()=>Tx});var ea={};$n(ea,{endsWith:()=>so,gt:()=>Dt,gte:()=>Ae,includes:()=>io,length:()=>Wr,lowercase:()=>no,lt:()=>jt,lte:()=>We,maxLength:()=>Hr,maxSize:()=>gr,mime:()=>co,minLength:()=>Xt,minSize:()=>Nt,multipleOf:()=>hr,negative:()=>ol,nonnegative:()=>al,nonpositive:()=>il,normalize:()=>uo,overwrite:()=>_t,positive:()=>nl,property:()=>sl,regex:()=>ro,size:()=>Kr,slugify:()=>Gi,startsWith:()=>ao,toLowerCase:()=>po,toUpperCase:()=>fo,trim:()=>lo,uppercase:()=>oo});var vr={};$n(vr,{ZodISODate:()=>$l,ZodISODateTime:()=>_l,ZodISODuration:()=>Sl,ZodISOTime:()=>xl,date:()=>bl,datetime:()=>yl,duration:()=>wl,time:()=>kl});var _l=p("ZodISODateTime",(t,e)=>{jc.init(t,e),ce.init(t,e)});function yl(t){return Nu(_l,t)}var $l=p("ZodISODate",(t,e)=>{Dc.init(t,e),ce.init(t,e)});function bl(t){return Ru($l,t)}var xl=p("ZodISOTime",(t,e)=>{Nc.init(t,e),ce.init(t,e)});function kl(t){return Au(xl,t)}var Sl=p("ZodISODuration",(t,e)=>{Rc.init(t,e),ce.init(t,e)});function wl(t){return Uu(Sl,t)}var xh=(t,e)=>{mi.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:r=>gi(t,r)},flatten:{value:r=>hi(t,r)},addIssue:{value:r=>{t.issues.push(r),t.message=JSON.stringify(t.issues,qr,2)}},addIssues:{value:r=>{t.issues.push(...r),t.message=JSON.stringify(t.issues,qr,2)}},isEmpty:{get(){return t.issues.length===0}}})},AN=p("ZodError",xh),Ge=p("ZodError",xh,{Parent:Error});var kh=Ln(Ge),Sh=Fn(Ge),wh=Jn(Ge),zh=Kn(Ge),Ih=Uf(Ge),Eh=Zf(Ge),Th=Cf(Ge),Ph=Mf(Ge),Oh=Lf(Ge),jh=qf(Ge),Dh=Ff(Ge),Nh=Vf(Ge);var F=p("ZodType",(t,e)=>(M.init(t,e),Object.assign(t["~standard"],{jsonSchema:{input:mo(t,"input"),output:mo(t,"output")}}),t.toJSONSchema=Nm(t,{}),t.def=e,t.type=e.type,Object.defineProperty(t,"_def",{value:e}),t.check=(...r)=>t.clone(y.mergeDefs(e,{checks:[...e.checks??[],...r.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]}),{parent:!0}),t.with=t.check,t.clone=(r,n)=>Ne(t,r,n),t.brand=()=>t,t.register=((r,n)=>(r.add(t,n),t)),t.parse=(r,n)=>kh(t,r,n,{callee:t.parse}),t.safeParse=(r,n)=>wh(t,r,n),t.parseAsync=async(r,n)=>Sh(t,r,n,{callee:t.parseAsync}),t.safeParseAsync=async(r,n)=>zh(t,r,n),t.spa=t.safeParseAsync,t.encode=(r,n)=>Ih(t,r,n),t.decode=(r,n)=>Eh(t,r,n),t.encodeAsync=async(r,n)=>Th(t,r,n),t.decodeAsync=async(r,n)=>Ph(t,r,n),t.safeEncode=(r,n)=>Oh(t,r,n),t.safeDecode=(r,n)=>jh(t,r,n),t.safeEncodeAsync=async(r,n)=>Dh(t,r,n),t.safeDecodeAsync=async(r,n)=>Nh(t,r,n),t.refine=(r,n)=>t.check(yg(r,n)),t.superRefine=r=>t.check($g(r)),t.overwrite=r=>t.check(_t(r)),t.optional=()=>fe(t),t.exactOptional=()=>tg(t),t.nullable=()=>ra(t),t.nullish=()=>fe(ra(t)),t.nonoptional=r=>sg(t,r),t.array=()=>G(t),t.or=r=>ie([t,r]),t.and=r=>yo(t,r),t.transform=r=>na(t,Hl(r)),t.default=r=>og(t,r),t.prefault=r=>ag(t,r),t.catch=r=>lg(t,r),t.pipe=r=>na(t,r),t.readonly=()=>fg(t),t.describe=r=>{let n=t.clone();return Re.add(n,{description:r}),n},Object.defineProperty(t,"description",{get(){return Re.get(t)?.description},configurable:!0}),t.meta=(...r)=>{if(r.length===0)return Re.get(t);let n=t.clone();return Re.add(n,r[0]),n},t.isOptional=()=>t.safeParse(void 0).success,t.isNullable=()=>t.safeParse(null).success,t.apply=r=>r(t),t)),Il=p("_ZodString",(t,e)=>{mr.init(t,e),F.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Rm(t,n,o,i);let r=t._zod.bag;t.format=r.format??null,t.minLength=r.minimum??null,t.maxLength=r.maximum??null,t.regex=(...n)=>t.check(ro(...n)),t.includes=(...n)=>t.check(io(...n)),t.startsWith=(...n)=>t.check(ao(...n)),t.endsWith=(...n)=>t.check(so(...n)),t.min=(...n)=>t.check(Xt(...n)),t.max=(...n)=>t.check(Hr(...n)),t.length=(...n)=>t.check(Wr(...n)),t.nonempty=(...n)=>t.check(Xt(1,...n)),t.lowercase=n=>t.check(no(n)),t.uppercase=n=>t.check(oo(n)),t.trim=()=>t.check(lo()),t.normalize=(...n)=>t.check(uo(...n)),t.toLowerCase=()=>t.check(po()),t.toUpperCase=()=>t.check(fo()),t.slugify=()=>t.check(Gi())}),oa=p("ZodString",(t,e)=>{mr.init(t,e),Il.init(t,e),t.email=r=>t.check(Ti(El,r)),t.url=r=>t.check(to(ia,r)),t.jwt=r=>t.check(Wi(Fl,r)),t.emoji=r=>t.check(Ni(Tl,r)),t.guid=r=>t.check(eo(ta,r)),t.uuid=r=>t.check(Pi(Rt,r)),t.uuidv4=r=>t.check(Oi(Rt,r)),t.uuidv6=r=>t.check(ji(Rt,r)),t.uuidv7=r=>t.check(Di(Rt,r)),t.nanoid=r=>t.check(Ri(Pl,r)),t.guid=r=>t.check(eo(ta,r)),t.cuid=r=>t.check(Ai(Ol,r)),t.cuid2=r=>t.check(Ui(jl,r)),t.ulid=r=>t.check(Zi(Dl,r)),t.base64=r=>t.check(Ji(Ml,r)),t.base64url=r=>t.check(Ki(Ll,r)),t.xid=r=>t.check(Ci(Nl,r)),t.ksuid=r=>t.check(Mi(Rl,r)),t.ipv4=r=>t.check(Li(Al,r)),t.ipv6=r=>t.check(qi(Ul,r)),t.cidrv4=r=>t.check(Fi(Zl,r)),t.cidrv6=r=>t.check(Vi(Cl,r)),t.e164=r=>t.check(Hi(ql,r)),t.datetime=r=>t.check(yl(r)),t.date=r=>t.check(bl(r)),t.time=r=>t.check(kl(r)),t.duration=r=>t.check(wl(r))});function h(t){return ju(oa,t)}var ce=p("ZodStringFormat",(t,e)=>{oe.init(t,e),Il.init(t,e)}),El=p("ZodEmail",(t,e)=>{kc.init(t,e),ce.init(t,e)});function Lb(t){return Ti(El,t)}var ta=p("ZodGUID",(t,e)=>{bc.init(t,e),ce.init(t,e)});function qb(t){return eo(ta,t)}var Rt=p("ZodUUID",(t,e)=>{xc.init(t,e),ce.init(t,e)});function Fb(t){return Pi(Rt,t)}function Vb(t){return Oi(Rt,t)}function Jb(t){return ji(Rt,t)}function Kb(t){return Di(Rt,t)}var ia=p("ZodURL",(t,e)=>{Sc.init(t,e),ce.init(t,e)});function Hb(t){return to(ia,t)}function Wb(t){return to(ia,{protocol:/^https?$/,hostname:Qe.domain,...y.normalizeParams(t)})}var Tl=p("ZodEmoji",(t,e)=>{wc.init(t,e),ce.init(t,e)});function Gb(t){return Ni(Tl,t)}var Pl=p("ZodNanoID",(t,e)=>{zc.init(t,e),ce.init(t,e)});function Bb(t){return Ri(Pl,t)}var Ol=p("ZodCUID",(t,e)=>{Ic.init(t,e),ce.init(t,e)});function Xb(t){return Ai(Ol,t)}var jl=p("ZodCUID2",(t,e)=>{Ec.init(t,e),ce.init(t,e)});function Yb(t){return Ui(jl,t)}var Dl=p("ZodULID",(t,e)=>{Tc.init(t,e),ce.init(t,e)});function Qb(t){return Zi(Dl,t)}var Nl=p("ZodXID",(t,e)=>{Pc.init(t,e),ce.init(t,e)});function ex(t){return Ci(Nl,t)}var Rl=p("ZodKSUID",(t,e)=>{Oc.init(t,e),ce.init(t,e)});function tx(t){return Mi(Rl,t)}var Al=p("ZodIPv4",(t,e)=>{Ac.init(t,e),ce.init(t,e)});function rx(t){return Li(Al,t)}var Rh=p("ZodMAC",(t,e)=>{Zc.init(t,e),ce.init(t,e)});function nx(t){return Du(Rh,t)}var Ul=p("ZodIPv6",(t,e)=>{Uc.init(t,e),ce.init(t,e)});function ox(t){return qi(Ul,t)}var Zl=p("ZodCIDRv4",(t,e)=>{Cc.init(t,e),ce.init(t,e)});function ix(t){return Fi(Zl,t)}var Cl=p("ZodCIDRv6",(t,e)=>{Mc.init(t,e),ce.init(t,e)});function ax(t){return Vi(Cl,t)}var Ml=p("ZodBase64",(t,e)=>{Lc.init(t,e),ce.init(t,e)});function sx(t){return Ji(Ml,t)}var Ll=p("ZodBase64URL",(t,e)=>{qc.init(t,e),ce.init(t,e)});function cx(t){return Ki(Ll,t)}var ql=p("ZodE164",(t,e)=>{Fc.init(t,e),ce.init(t,e)});function ux(t){return Hi(ql,t)}var Fl=p("ZodJWT",(t,e)=>{Vc.init(t,e),ce.init(t,e)});function lx(t){return Wi(Fl,t)}var vo=p("ZodCustomStringFormat",(t,e)=>{Jc.init(t,e),ce.init(t,e)});function dx(t,e,r={}){return Gr(vo,t,e,r)}function px(t){return Gr(vo,"hostname",Qe.hostname,t)}function fx(t){return Gr(vo,"hex",Qe.hex,t)}function mx(t,e){let r=e?.enc??"hex",n=`${t}_${r}`,o=Qe[n];if(!o)throw new Error(`Unrecognized hash format: ${n}`);return Gr(vo,n,o,e)}var aa=p("ZodNumber",(t,e)=>{wi.init(t,e),F.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Am(t,n,o,i),t.gt=(n,o)=>t.check(Dt(n,o)),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.lt=(n,o)=>t.check(jt(n,o)),t.lte=(n,o)=>t.check(We(n,o)),t.max=(n,o)=>t.check(We(n,o)),t.int=n=>t.check(zl(n)),t.safe=n=>t.check(zl(n)),t.positive=n=>t.check(Dt(0,n)),t.nonnegative=n=>t.check(Ae(0,n)),t.negative=n=>t.check(jt(0,n)),t.nonpositive=n=>t.check(We(0,n)),t.multipleOf=(n,o)=>t.check(hr(n,o)),t.step=(n,o)=>t.check(hr(n,o)),t.finite=()=>t;let r=t._zod.bag;t.minValue=Math.max(r.minimum??Number.NEGATIVE_INFINITY,r.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,t.maxValue=Math.min(r.maximum??Number.POSITIVE_INFINITY,r.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,t.isInt=(r.format??"").includes("int")||Number.isSafeInteger(r.multipleOf??.5),t.isFinite=!0,t.format=r.format??null});function ne(t){return Zu(aa,t)}var Xr=p("ZodNumberFormat",(t,e)=>{Kc.init(t,e),aa.init(t,e)});function zl(t){return Cu(Xr,t)}function hx(t){return Mu(Xr,t)}function gx(t){return Lu(Xr,t)}function vx(t){return qu(Xr,t)}function _x(t){return Fu(Xr,t)}var sa=p("ZodBoolean",(t,e)=>{Xn.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Um(t,r,n,o)});function _e(t){return Vu(sa,t)}var ca=p("ZodBigInt",(t,e)=>{zi.init(t,e),F.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Zm(t,n,o,i),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.gt=(n,o)=>t.check(Dt(n,o)),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.lt=(n,o)=>t.check(jt(n,o)),t.lte=(n,o)=>t.check(We(n,o)),t.max=(n,o)=>t.check(We(n,o)),t.positive=n=>t.check(Dt(BigInt(0),n)),t.negative=n=>t.check(jt(BigInt(0),n)),t.nonpositive=n=>t.check(We(BigInt(0),n)),t.nonnegative=n=>t.check(Ae(BigInt(0),n)),t.multipleOf=(n,o)=>t.check(hr(n,o));let r=t._zod.bag;t.minValue=r.minimum??null,t.maxValue=r.maximum??null,t.format=r.format??null});function yx(t){return Ju(ca,t)}var Vl=p("ZodBigIntFormat",(t,e)=>{Hc.init(t,e),ca.init(t,e)});function $x(t){return Ku(Vl,t)}function bx(t){return Hu(Vl,t)}var Ah=p("ZodSymbol",(t,e)=>{Wc.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Cm(t,r,n,o)});function xx(t){return Wu(Ah,t)}var Uh=p("ZodUndefined",(t,e)=>{Gc.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Lm(t,r,n,o)});function kx(t){return Gu(Uh,t)}var Zh=p("ZodNull",(t,e)=>{Bc.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Mm(t,r,n,o)});function _o(t){return Bu(Zh,t)}var Ch=p("ZodAny",(t,e)=>{Xc.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Vm(t,r,n,o)});function Sx(){return Xu(Ch)}var Mh=p("ZodUnknown",(t,e)=>{Yc.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Jm(t,r,n,o)});function ue(){return Yu(Mh)}var Lh=p("ZodNever",(t,e)=>{Qc.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Fm(t,r,n,o)});function Jl(t){return Qu(Lh,t)}var qh=p("ZodVoid",(t,e)=>{eu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>qm(t,r,n,o)});function wx(t){return el(qh,t)}var Kl=p("ZodDate",(t,e)=>{tu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Km(t,n,o,i),t.min=(n,o)=>t.check(Ae(n,o)),t.max=(n,o)=>t.check(We(n,o));let r=t._zod.bag;t.minDate=r.minimum?new Date(r.minimum):null,t.maxDate=r.maximum?new Date(r.maximum):null});function zx(t){return tl(Kl,t)}var Fh=p("ZodArray",(t,e)=>{ru.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>oh(t,r,n,o),t.element=e.element,t.min=(r,n)=>t.check(Xt(r,n)),t.nonempty=r=>t.check(Xt(1,r)),t.max=(r,n)=>t.check(Hr(r,n)),t.length=(r,n)=>t.check(Wr(r,n)),t.unwrap=()=>t.element});function G(t,e){return Dm(Fh,t,e)}function Ix(t){let e=t._zod.def.shape;return Te(Object.keys(e))}var ua=p("ZodObject",(t,e)=>{Om.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ih(t,r,n,o),y.defineLazy(t,"shape",()=>e.shape),t.keyof=()=>Te(Object.keys(t._zod.def.shape)),t.catchall=r=>t.clone({...t._zod.def,catchall:r}),t.passthrough=()=>t.clone({...t._zod.def,catchall:ue()}),t.loose=()=>t.clone({...t._zod.def,catchall:ue()}),t.strict=()=>t.clone({...t._zod.def,catchall:Jl()}),t.strip=()=>t.clone({...t._zod.def,catchall:void 0}),t.extend=r=>y.extend(t,r),t.safeExtend=r=>y.safeExtend(t,r),t.merge=r=>y.merge(t,r),t.pick=r=>y.pick(t,r),t.omit=r=>y.omit(t,r),t.partial=(...r)=>y.partial(Wl,t,r[0]),t.required=(...r)=>y.required(Gl,t,r[0])});function z(t,e){let r={type:"object",shape:t??{},...y.normalizeParams(e)};return new ua(r)}function Ex(t,e){return new ua({type:"object",shape:t,catchall:Jl(),...y.normalizeParams(e)})}function Ee(t,e){return new ua({type:"object",shape:t,catchall:ue(),...y.normalizeParams(e)})}var la=p("ZodUnion",(t,e)=>{Yn.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hl(t,r,n,o),t.options=e.options});function ie(t,e){return new la({type:"union",options:t,...y.normalizeParams(e)})}var Vh=p("ZodXor",(t,e)=>{la.init(t,e),nu.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hl(t,r,n,o),t.options=e.options});function Tx(t,e){return new Vh({type:"union",options:t,inclusive:!1,...y.normalizeParams(e)})}var Jh=p("ZodDiscriminatedUnion",(t,e)=>{la.init(t,e),ou.init(t,e)});function da(t,e,r){return new Jh({type:"union",options:e,discriminator:t,...y.normalizeParams(r)})}var Kh=p("ZodIntersection",(t,e)=>{iu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ah(t,r,n,o)});function yo(t,e){return new Kh({type:"intersection",left:t,right:e})}var Hh=p("ZodTuple",(t,e)=>{Ii.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>sh(t,r,n,o),t.rest=r=>t.clone({...t._zod.def,rest:r})});function Wh(t,e,r){let n=e instanceof M,o=n?r:e,i=n?e:null;return new Hh({type:"tuple",items:t,rest:i,...y.normalizeParams(o)})}var pa=p("ZodRecord",(t,e)=>{au.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ch(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType});function pe(t,e,r){return new pa({type:"record",keyType:t,valueType:e,...y.normalizeParams(r)})}function Px(t,e,r){let n=Ne(t);return n._zod.values=void 0,new pa({type:"record",keyType:n,valueType:e,...y.normalizeParams(r)})}function Ox(t,e,r){return new pa({type:"record",keyType:t,valueType:e,mode:"loose",...y.normalizeParams(r)})}var Gh=p("ZodMap",(t,e)=>{su.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>rh(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType,t.min=(...r)=>t.check(Nt(...r)),t.nonempty=r=>t.check(Nt(1,r)),t.max=(...r)=>t.check(gr(...r)),t.size=(...r)=>t.check(Kr(...r))});function jx(t,e,r){return new Gh({type:"map",keyType:t,valueType:e,...y.normalizeParams(r)})}var Bh=p("ZodSet",(t,e)=>{cu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>nh(t,r,n,o),t.min=(...r)=>t.check(Nt(...r)),t.nonempty=r=>t.check(Nt(1,r)),t.max=(...r)=>t.check(gr(...r)),t.size=(...r)=>t.check(Kr(...r))});function Dx(t,e){return new Bh({type:"set",valueType:t,...y.normalizeParams(e)})}var go=p("ZodEnum",(t,e)=>{uu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Hm(t,n,o,i),t.enum=e.entries,t.options=Object.values(e.entries);let r=new Set(Object.keys(e.entries));t.extract=(n,o)=>{let i={};for(let a of n)if(r.has(a))i[a]=e.entries[a];else throw new Error(`Key ${a} not found in enum`);return new go({...e,checks:[],...y.normalizeParams(o),entries:i})},t.exclude=(n,o)=>{let i={...e.entries};for(let a of n)if(r.has(a))delete i[a];else throw new Error(`Key ${a} not found in enum`);return new go({...e,checks:[],...y.normalizeParams(o),entries:i})}});function Te(t,e){let r=Array.isArray(t)?Object.fromEntries(t.map(n=>[n,n])):t;return new go({type:"enum",entries:r,...y.normalizeParams(e)})}function Nx(t,e){return new go({type:"enum",entries:t,...y.normalizeParams(e)})}var Xh=p("ZodLiteral",(t,e)=>{lu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Wm(t,r,n,o),t.values=new Set(e.values),Object.defineProperty(t,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function T(t,e){return new Xh({type:"literal",values:Array.isArray(t)?t:[t],...y.normalizeParams(e)})}var Yh=p("ZodFile",(t,e)=>{du.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Xm(t,r,n,o),t.min=(r,n)=>t.check(Nt(r,n)),t.max=(r,n)=>t.check(gr(r,n)),t.mime=(r,n)=>t.check(co(Array.isArray(r)?r:[r],n))});function Rx(t){return cl(Yh,t)}var Qh=p("ZodTransform",(t,e)=>{pu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>th(t,r,n,o),t._zod.parse=(r,n)=>{if(n.direction==="backward")throw new dr(t.constructor.name);r.addIssue=i=>{if(typeof i=="string")r.issues.push(y.issue(i,r.value,e));else{let a=i;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),a.input??(a.input=r.value),a.inst??(a.inst=t),r.issues.push(y.issue(a))}};let o=e.transform(r.value,r);return o instanceof Promise?o.then(i=>(r.value=i,r)):(r.value=o,r)}});function Hl(t){return new Qh({type:"transform",transform:t})}var Wl=p("ZodOptional",(t,e)=>{Ei.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>gl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function fe(t){return new Wl({type:"optional",innerType:t})}var eg=p("ZodExactOptional",(t,e)=>{fu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>gl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function tg(t){return new eg({type:"optional",innerType:t})}var rg=p("ZodNullable",(t,e)=>{mu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>uh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function ra(t){return new rg({type:"nullable",innerType:t})}function Ax(t){return fe(ra(t))}var ng=p("ZodDefault",(t,e)=>{hu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>dh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function og(t,e){return new ng({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var ig=p("ZodPrefault",(t,e)=>{gu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ph(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function ag(t,e){return new ig({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Gl=p("ZodNonOptional",(t,e)=>{vu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>lh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function sg(t,e){return new Gl({type:"nonoptional",innerType:t,...y.normalizeParams(e)})}var cg=p("ZodSuccess",(t,e)=>{_u.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Ym(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Ux(t){return new cg({type:"success",innerType:t})}var ug=p("ZodCatch",(t,e)=>{yu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>fh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeCatch=t.unwrap});function lg(t,e){return new ug({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var dg=p("ZodNaN",(t,e)=>{$u.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Gm(t,r,n,o)});function Zx(t){return rl(dg,t)}var Bl=p("ZodPipe",(t,e)=>{bu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>mh(t,r,n,o),t.in=e.in,t.out=e.out});function na(t,e){return new Bl({type:"pipe",in:t,out:e})}var Xl=p("ZodCodec",(t,e)=>{Bl.init(t,e),Qn.init(t,e)});function Cx(t,e,r){return new Xl({type:"pipe",in:t,out:e,transform:r.decode,reverseTransform:r.encode})}var pg=p("ZodReadonly",(t,e)=>{xu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function fg(t){return new pg({type:"readonly",innerType:t})}var mg=p("ZodTemplateLiteral",(t,e)=>{ku.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Bm(t,r,n,o)});function Mx(t,e){return new mg({type:"template_literal",parts:t,...y.normalizeParams(e)})}var hg=p("ZodLazy",(t,e)=>{zu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>vh(t,r,n,o),t.unwrap=()=>t._zod.def.getter()});function gg(t){return new hg({type:"lazy",getter:t})}var vg=p("ZodPromise",(t,e)=>{wu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>gh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Lx(t){return new vg({type:"promise",innerType:t})}var _g=p("ZodFunction",(t,e)=>{Su.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>eh(t,r,n,o)});function qx(t){return new _g({type:"function",input:Array.isArray(t?.input)?Wh(t?.input):t?.input??G(ue()),output:t?.output??ue()})}var fa=p("ZodCustom",(t,e)=>{Iu.init(t,e),F.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Qm(t,r,n,o)});function Fx(t){let e=new se({check:"custom"});return e._zod.check=t,e}function Yl(t,e){return ul(fa,t??(()=>!0),e)}function yg(t,e={}){return ll(fa,t,e)}function $g(t){return dl(t)}var Vx=pl,Jx=fl;function Kx(t,e={}){let r=new fa({type:"custom",check:"custom",fn:n=>n instanceof t,abort:!0,...y.normalizeParams(e)});return r._zod.bag.Class=t,r._zod.check=n=>{n.value instanceof t||n.issues.push({code:"invalid_type",expected:t.name,input:n.value,inst:r,path:[...r._zod.def.path??[]]})},r}var Hx=(...t)=>ml({Codec:Xl,Boolean:sa,String:oa},...t);function Wx(t){let e=gg(()=>ie([h(t),ne(),_e(),_o(),G(e),pe(h(),e)]));return e}function ma(t,e){return na(Hl(t),e)}var bg;bg||(bg={});var VN={...ho,...ea,iso:vr};ye(Eu());var ed="2025-11-25";var xg=[ed,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Qt="io.modelcontextprotocol/related-task",ga="2.0",be=Yl(t=>t!==null&&(typeof t=="object"||typeof t=="function")),kg=ie([h(),ne().int()]),Sg=h(),u4=Ee({ttl:ie([ne(),_o()]).optional(),pollInterval:ne().optional()}),Yx=z({ttl:ne().optional()}),Qx=z({taskId:h()}),td=Ee({progressToken:kg.optional(),[Qt]:Qx.optional()}),Be=z({_meta:td.optional()}),$o=Be.extend({task:Yx.optional()}),wg=t=>$o.safeParse(t).success,xe=z({method:h(),params:Be.loose().optional()}),et=z({_meta:td.optional()}),tt=z({method:h(),params:et.loose().optional()}),ke=Ee({_meta:td.optional()}),va=ie([h(),ne().int()]),zg=z({jsonrpc:T(ga),id:va,...xe.shape}).strict(),rd=t=>zg.safeParse(t).success,Ig=z({jsonrpc:T(ga),...tt.shape}).strict(),Eg=t=>Ig.safeParse(t).success,nd=z({jsonrpc:T(ga),id:va,result:ke}).strict(),bo=t=>nd.safeParse(t).success;var Y;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Y||(Y={}));var od=z({jsonrpc:T(ga),id:va.optional(),error:z({code:ne().int(),message:h(),data:ue().optional()})}).strict();var Tg=t=>od.safeParse(t).success;var Pg=ie([zg,Ig,nd,od]),l4=ie([nd,od]),_a=ke.strict(),ek=et.extend({requestId:va.optional(),reason:h().optional()}),ya=tt.extend({method:T("notifications/cancelled"),params:ek}),tk=z({src:h(),mimeType:h().optional(),sizes:G(h()).optional(),theme:Te(["light","dark"]).optional()}),xo=z({icons:G(tk).optional()}),Yr=z({name:h(),title:h().optional()}),Og=Yr.extend({...Yr.shape,...xo.shape,version:h(),websiteUrl:h().optional(),description:h().optional()}),rk=yo(z({applyDefaults:_e().optional()}),pe(h(),ue())),nk=ma(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,yo(z({form:rk.optional(),url:be.optional()}),pe(h(),ue()).optional())),ok=Ee({list:be.optional(),cancel:be.optional(),requests:Ee({sampling:Ee({createMessage:be.optional()}).optional(),elicitation:Ee({create:be.optional()}).optional()}).optional()}),ik=Ee({list:be.optional(),cancel:be.optional(),requests:Ee({tools:Ee({call:be.optional()}).optional()}).optional()}),ak=z({experimental:pe(h(),be).optional(),sampling:z({context:be.optional(),tools:be.optional()}).optional(),elicitation:nk.optional(),roots:z({listChanged:_e().optional()}).optional(),tasks:ok.optional()}),sk=Be.extend({protocolVersion:h(),capabilities:ak,clientInfo:Og}),id=xe.extend({method:T("initialize"),params:sk});var ck=z({experimental:pe(h(),be).optional(),logging:be.optional(),completions:be.optional(),prompts:z({listChanged:_e().optional()}).optional(),resources:z({subscribe:_e().optional(),listChanged:_e().optional()}).optional(),tools:z({listChanged:_e().optional()}).optional(),tasks:ik.optional()}),uk=ke.extend({protocolVersion:h(),capabilities:ck,serverInfo:Og,instructions:h().optional()}),ad=tt.extend({method:T("notifications/initialized"),params:et.optional()});var $a=xe.extend({method:T("ping"),params:Be.optional()}),lk=z({progress:ne(),total:fe(ne()),message:fe(h())}),dk=z({...et.shape,...lk.shape,progressToken:kg}),ba=tt.extend({method:T("notifications/progress"),params:dk}),pk=Be.extend({cursor:Sg.optional()}),ko=xe.extend({params:pk.optional()}),So=ke.extend({nextCursor:Sg.optional()}),fk=Te(["working","input_required","completed","failed","cancelled"]),wo=z({taskId:h(),status:fk,ttl:ie([ne(),_o()]),createdAt:h(),lastUpdatedAt:h(),pollInterval:fe(ne()),statusMessage:fe(h())}),Qr=ke.extend({task:wo}),mk=et.merge(wo),zo=tt.extend({method:T("notifications/tasks/status"),params:mk}),xa=xe.extend({method:T("tasks/get"),params:Be.extend({taskId:h()})}),ka=ke.merge(wo),Sa=xe.extend({method:T("tasks/result"),params:Be.extend({taskId:h()})}),d4=ke.loose(),wa=ko.extend({method:T("tasks/list")}),za=So.extend({tasks:G(wo)}),Ia=xe.extend({method:T("tasks/cancel"),params:Be.extend({taskId:h()})}),jg=ke.merge(wo),Dg=z({uri:h(),mimeType:fe(h()),_meta:pe(h(),ue()).optional()}),Ng=Dg.extend({text:h()}),sd=h().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),Rg=Dg.extend({blob:sd}),Io=Te(["user","assistant"]),en=z({audience:G(Io).optional(),priority:ne().min(0).max(1).optional(),lastModified:vr.datetime({offset:!0}).optional()}),Ag=z({...Yr.shape,...xo.shape,uri:h(),description:fe(h()),mimeType:fe(h()),annotations:en.optional(),_meta:fe(Ee({}))}),hk=z({...Yr.shape,...xo.shape,uriTemplate:h(),description:fe(h()),mimeType:fe(h()),annotations:en.optional(),_meta:fe(Ee({}))}),gk=ko.extend({method:T("resources/list")}),vk=So.extend({resources:G(Ag)}),_k=ko.extend({method:T("resources/templates/list")}),yk=So.extend({resourceTemplates:G(hk)}),cd=Be.extend({uri:h()}),$k=cd,bk=xe.extend({method:T("resources/read"),params:$k}),xk=ke.extend({contents:G(ie([Ng,Rg]))}),kk=tt.extend({method:T("notifications/resources/list_changed"),params:et.optional()}),Sk=cd,wk=xe.extend({method:T("resources/subscribe"),params:Sk}),zk=cd,Ik=xe.extend({method:T("resources/unsubscribe"),params:zk}),Ek=et.extend({uri:h()}),Tk=tt.extend({method:T("notifications/resources/updated"),params:Ek}),Pk=z({name:h(),description:fe(h()),required:fe(_e())}),Ok=z({...Yr.shape,...xo.shape,description:fe(h()),arguments:fe(G(Pk)),_meta:fe(Ee({}))}),jk=ko.extend({method:T("prompts/list")}),Dk=So.extend({prompts:G(Ok)}),Nk=Be.extend({name:h(),arguments:pe(h(),h()).optional()}),Rk=xe.extend({method:T("prompts/get"),params:Nk}),ud=z({type:T("text"),text:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),ld=z({type:T("image"),data:sd,mimeType:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),dd=z({type:T("audio"),data:sd,mimeType:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),Ak=z({type:T("tool_use"),name:h(),id:h(),input:pe(h(),ue()),_meta:pe(h(),ue()).optional()}),Uk=z({type:T("resource"),resource:ie([Ng,Rg]),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),Zk=Ag.extend({type:T("resource_link")}),pd=ie([ud,ld,dd,Zk,Uk]),Ck=z({role:Io,content:pd}),Mk=ke.extend({description:h().optional(),messages:G(Ck)}),Lk=tt.extend({method:T("notifications/prompts/list_changed"),params:et.optional()}),qk=z({title:h().optional(),readOnlyHint:_e().optional(),destructiveHint:_e().optional(),idempotentHint:_e().optional(),openWorldHint:_e().optional()}),Fk=z({taskSupport:Te(["required","optional","forbidden"]).optional()}),Ug=z({...Yr.shape,...xo.shape,description:h().optional(),inputSchema:z({type:T("object"),properties:pe(h(),be).optional(),required:G(h()).optional()}).catchall(ue()),outputSchema:z({type:T("object"),properties:pe(h(),be).optional(),required:G(h()).optional()}).catchall(ue()).optional(),annotations:qk.optional(),execution:Fk.optional(),_meta:pe(h(),ue()).optional()}),fd=ko.extend({method:T("tools/list")}),Vk=So.extend({tools:G(Ug)}),Ea=ke.extend({content:G(pd).default([]),structuredContent:pe(h(),ue()).optional(),isError:_e().optional()}),p4=Ea.or(ke.extend({toolResult:ue()})),Jk=$o.extend({name:h(),arguments:pe(h(),ue()).optional()}),Eo=xe.extend({method:T("tools/call"),params:Jk}),Kk=tt.extend({method:T("notifications/tools/list_changed"),params:et.optional()}),f4=z({autoRefresh:_e().default(!0),debounceMs:ne().int().nonnegative().default(300)}),To=Te(["debug","info","notice","warning","error","critical","alert","emergency"]),Hk=Be.extend({level:To}),md=xe.extend({method:T("logging/setLevel"),params:Hk}),Wk=et.extend({level:To,logger:h().optional(),data:ue()}),Gk=tt.extend({method:T("notifications/message"),params:Wk}),Bk=z({name:h().optional()}),Xk=z({hints:G(Bk).optional(),costPriority:ne().min(0).max(1).optional(),speedPriority:ne().min(0).max(1).optional(),intelligencePriority:ne().min(0).max(1).optional()}),Yk=z({mode:Te(["auto","required","none"]).optional()}),Qk=z({type:T("tool_result"),toolUseId:h().describe("The unique identifier for the corresponding tool call."),content:G(pd).default([]),structuredContent:z({}).loose().optional(),isError:_e().optional(),_meta:pe(h(),ue()).optional()}),eS=da("type",[ud,ld,dd]),ha=da("type",[ud,ld,dd,Ak,Qk]),tS=z({role:Io,content:ie([ha,G(ha)]),_meta:pe(h(),ue()).optional()}),rS=$o.extend({messages:G(tS),modelPreferences:Xk.optional(),systemPrompt:h().optional(),includeContext:Te(["none","thisServer","allServers"]).optional(),temperature:ne().optional(),maxTokens:ne().int(),stopSequences:G(h()).optional(),metadata:be.optional(),tools:G(Ug).optional(),toolChoice:Yk.optional()}),nS=xe.extend({method:T("sampling/createMessage"),params:rS}),hd=ke.extend({model:h(),stopReason:fe(Te(["endTurn","stopSequence","maxTokens"]).or(h())),role:Io,content:eS}),gd=ke.extend({model:h(),stopReason:fe(Te(["endTurn","stopSequence","maxTokens","toolUse"]).or(h())),role:Io,content:ie([ha,G(ha)])}),oS=z({type:T("boolean"),title:h().optional(),description:h().optional(),default:_e().optional()}),iS=z({type:T("string"),title:h().optional(),description:h().optional(),minLength:ne().optional(),maxLength:ne().optional(),format:Te(["email","uri","date","date-time"]).optional(),default:h().optional()}),aS=z({type:Te(["number","integer"]),title:h().optional(),description:h().optional(),minimum:ne().optional(),maximum:ne().optional(),default:ne().optional()}),sS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:G(h()),default:h().optional()}),cS=z({type:T("string"),title:h().optional(),description:h().optional(),oneOf:G(z({const:h(),title:h()})),default:h().optional()}),uS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:G(h()),enumNames:G(h()).optional(),default:h().optional()}),lS=ie([sS,cS]),dS=z({type:T("array"),title:h().optional(),description:h().optional(),minItems:ne().optional(),maxItems:ne().optional(),items:z({type:T("string"),enum:G(h())}),default:G(h()).optional()}),pS=z({type:T("array"),title:h().optional(),description:h().optional(),minItems:ne().optional(),maxItems:ne().optional(),items:z({anyOf:G(z({const:h(),title:h()}))}),default:G(h()).optional()}),fS=ie([dS,pS]),mS=ie([uS,lS,fS]),hS=ie([mS,oS,iS,aS]),gS=$o.extend({mode:T("form").optional(),message:h(),requestedSchema:z({type:T("object"),properties:pe(h(),hS),required:G(h()).optional()})}),vS=$o.extend({mode:T("url"),message:h(),elicitationId:h(),url:h().url()}),_S=ie([gS,vS]),yS=xe.extend({method:T("elicitation/create"),params:_S}),$S=et.extend({elicitationId:h()}),bS=tt.extend({method:T("notifications/elicitation/complete"),params:$S}),Ta=ke.extend({action:Te(["accept","decline","cancel"]),content:ma(t=>t===null?void 0:t,pe(h(),ie([h(),ne(),_e(),G(h())])).optional())}),xS=z({type:T("ref/resource"),uri:h()});var kS=z({type:T("ref/prompt"),name:h()}),SS=Be.extend({ref:ie([kS,xS]),argument:z({name:h(),value:h()}),context:z({arguments:pe(h(),h()).optional()}).optional()}),wS=xe.extend({method:T("completion/complete"),params:SS});var zS=ke.extend({completion:Ee({values:G(h()).max(100),total:fe(ne().int()),hasMore:fe(_e())})}),IS=z({uri:h().startsWith("file://"),name:h().optional(),_meta:pe(h(),ue()).optional()}),ES=xe.extend({method:T("roots/list"),params:Be.optional()}),vd=ke.extend({roots:G(IS)}),TS=tt.extend({method:T("notifications/roots/list_changed"),params:et.optional()}),m4=ie([$a,id,wS,md,Rk,jk,gk,_k,bk,wk,Ik,Eo,fd,xa,Sa,wa,Ia]),h4=ie([ya,ba,ad,TS,zo]),g4=ie([_a,hd,gd,Ta,vd,ka,za,Qr]),v4=ie([$a,nS,yS,ES,xa,Sa,wa,Ia]),_4=ie([ya,ba,Gk,Tk,kk,Kk,Lk,zo,bS]),y4=ie([_a,uk,zS,Mk,Dk,vk,yk,xk,Ea,Vk,ka,za,Qr]),V=class t extends Error{constructor(e,r,n){super(`MCP error ${e}: ${r}`),this.code=e,this.data=n,this.name="McpError"}static fromError(e,r,n){if(e===Y.UrlElicitationRequired&&n){let o=n;if(o.elicitations)return new Ql(o.elicitations,r)}return new t(e,r,n)}},Ql=class extends V{constructor(e,r=`URL elicitation${e.length>1?"s":""} required`){super(Y.UrlElicitationRequired,r,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function er(t){return t==="completed"||t==="failed"||t==="cancelled"}var Q4=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function _d(t){let r=Qi(t)?.method;if(!r)throw new Error("Schema is missing a method literal");let n=bh(r);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function yd(t,e){let r=Yt(t,e);if(!r.success)throw r.error;return r.data}var RS=6e4,Pa=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(ya,r=>{this._oncancel(r)}),this.setNotificationHandler(ba,r=>{this._onprogress(r)}),this.setRequestHandler($a,r=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(xa,async(r,n)=>{let o=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!o)throw new V(Y.InvalidParams,"Failed to retrieve task: Task not found");return{...o}}),this.setRequestHandler(Sa,async(r,n)=>{let o=async()=>{let i=r.params.taskId;if(this._taskMessageQueue){let s;for(;s=await this._taskMessageQueue.dequeue(i,n.sessionId);){if(s.type==="response"||s.type==="error"){let c=s.message,u=c.id,l=this._requestResolvers.get(u);if(l)if(this._requestResolvers.delete(u),s.type==="response")l(c);else{let d=c,m=new V(d.error.code,d.error.message,d.error.data);l(m)}else{let d=s.type==="response"?"Response":"Error";this._onerror(new Error(`${d} handler missing for request ${u}`))}continue}await this._transport?.send(s.message,{relatedRequestId:n.requestId})}}let a=await this._taskStore.getTask(i,n.sessionId);if(!a)throw new V(Y.InvalidParams,`Task not found: ${i}`);if(!er(a.status))return await this._waitForTaskUpdate(i,n.signal),await o();if(er(a.status)){let s=await this._taskStore.getTaskResult(i,n.sessionId);return this._clearTaskQueue(i),{...s,_meta:{...s._meta,[Qt]:{taskId:i}}}}return await o()};return await o()}),this.setRequestHandler(wa,async(r,n)=>{try{let{tasks:o,nextCursor:i}=await this._taskStore.listTasks(r.params?.cursor,n.sessionId);return{tasks:o,nextCursor:i,_meta:{}}}catch(o){throw new V(Y.InvalidParams,`Failed to list tasks: ${o instanceof Error?o.message:String(o)}`)}}),this.setRequestHandler(Ia,async(r,n)=>{try{let o=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!o)throw new V(Y.InvalidParams,`Task not found: ${r.params.taskId}`);if(er(o.status))throw new V(Y.InvalidParams,`Cannot cancel task in terminal status: ${o.status}`);await this._taskStore.updateTaskStatus(r.params.taskId,"cancelled","Client cancelled task execution.",n.sessionId),this._clearTaskQueue(r.params.taskId);let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new V(Y.InvalidParams,`Task not found after cancellation: ${r.params.taskId}`);return{_meta:{},...i}}catch(o){throw o instanceof V?o:new V(Y.InvalidRequest,`Failed to cancel task: ${o instanceof Error?o.message:String(o)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,r,n,o,i=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(o,r),startTime:Date.now(),timeout:r,maxTotalTimeout:n,resetTimeoutOnProgress:i,onTimeout:o})}_resetTimeout(e){let r=this._timeoutInfo.get(e);if(!r)return!1;let n=Date.now()-r.startTime;if(r.maxTotalTimeout&&n>=r.maxTotalTimeout)throw this._timeoutInfo.delete(e),V.fromError(Y.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:r.maxTotalTimeout,totalElapsed:n});return clearTimeout(r.timeoutId),r.timeoutId=setTimeout(r.onTimeout,r.timeout),!0}_cleanupTimeout(e){let r=this._timeoutInfo.get(e);r&&(clearTimeout(r.timeoutId),this._timeoutInfo.delete(e))}async connect(e){if(this._transport)throw new Error("Already connected to a transport. Call close() before connecting to a new transport, or use a separate Protocol instance per connection.");this._transport=e;let r=this.transport?.onclose;this._transport.onclose=()=>{r?.(),this._onclose()};let n=this.transport?.onerror;this._transport.onerror=i=>{n?.(i),this._onerror(i)};let o=this._transport?.onmessage;this._transport.onmessage=(i,a)=>{o?.(i,a),bo(i)||Tg(i)?this._onresponse(i):rd(i)?this._onrequest(i,a):Eg(i)?this._onnotification(i):this._onerror(new Error(`Unknown message type: ${JSON.stringify(i)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();for(let n of this._requestHandlerAbortControllers.values())n.abort();this._requestHandlerAbortControllers.clear();let r=V.fromError(Y.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let n of e.values())n(r)}_onerror(e){this.onerror?.(e)}_onnotification(e){let r=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;r!==void 0&&Promise.resolve().then(()=>r(e)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(e,r){let n=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,o=this._transport,i=e.params?._meta?.[Qt]?.taskId;if(n===void 0){let l={jsonrpc:"2.0",id:e.id,error:{code:Y.MethodNotFound,message:"Method not found"}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:"error",message:l,timestamp:Date.now()},o?.sessionId).catch(d=>this._onerror(new Error(`Failed to enqueue error response: ${d}`))):o?.send(l).catch(d=>this._onerror(new Error(`Failed to send an error response: ${d}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a);let s=wg(e.params)?e.params.task:void 0,c=this._taskStore?this.requestTaskStore(e,o?.sessionId):void 0,u={signal:a.signal,sessionId:o?.sessionId,_meta:e.params?._meta,sendNotification:async l=>{if(a.signal.aborted)return;let d={relatedRequestId:e.id};i&&(d.relatedTask={taskId:i}),await this.notification(l,d)},sendRequest:async(l,d,m)=>{if(a.signal.aborted)throw new V(Y.ConnectionClosed,"Request was cancelled");let f={...m,relatedRequestId:e.id};i&&!f.relatedTask&&(f.relatedTask={taskId:i});let g=f.relatedTask?.taskId??i;return g&&c&&await c.updateTaskStatus(g,"input_required"),await this.request(l,d,f)},authInfo:r?.authInfo,requestId:e.id,requestInfo:r?.requestInfo,taskId:i,taskStore:c,taskRequestedTtl:s?.ttl,closeSSEStream:r?.closeSSEStream,closeStandaloneSSEStream:r?.closeStandaloneSSEStream};Promise.resolve().then(()=>{s&&this.assertTaskHandlerCapability(e.method)}).then(()=>n(e,u)).then(async l=>{if(a.signal.aborted)return;let d={result:l,jsonrpc:"2.0",id:e.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"response",message:d,timestamp:Date.now()},o?.sessionId):await o?.send(d)},async l=>{if(a.signal.aborted)return;let d={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(l.code)?l.code:Y.InternalError,message:l.message??"Internal error",...l.data!==void 0&&{data:l.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"error",message:d,timestamp:Date.now()},o?.sessionId):await o?.send(d)}).catch(l=>this._onerror(new Error(`Failed to send response: ${l}`))).finally(()=>{this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:r,...n}=e.params,o=Number(r),i=this._progressHandlers.get(o);if(!i){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let a=this._responseHandlers.get(o),s=this._timeoutInfo.get(o);if(s&&a&&s.resetTimeoutOnProgress)try{this._resetTimeout(o)}catch(c){this._responseHandlers.delete(o),this._progressHandlers.delete(o),this._cleanupTimeout(o),a(c);return}i(n)}_onresponse(e){let r=Number(e.id),n=this._requestResolvers.get(r);if(n){if(this._requestResolvers.delete(r),bo(e))n(e);else{let a=new V(e.error.code,e.error.message,e.error.data);n(a)}return}let o=this._responseHandlers.get(r);if(o===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(r),this._cleanupTimeout(r);let i=!1;if(bo(e)&&e.result&&typeof e.result=="object"){let a=e.result;if(a.task&&typeof a.task=="object"){let s=a.task;typeof s.taskId=="string"&&(i=!0,this._taskProgressTokens.set(s.taskId,r))}}if(i||this._progressHandlers.delete(r),bo(e))o(e);else{let a=V.fromError(e.error.code,e.error.message,e.error.data);o(a)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,r,n){let{task:o}=n??{};if(!o){try{yield{type:"result",result:await this.request(e,r,n)}}catch(a){yield{type:"error",error:a instanceof V?a:new V(Y.InternalError,String(a))}}return}let i;try{let a=await this.request(e,Qr,n);if(a.task)i=a.task.taskId,yield{type:"taskCreated",task:a.task};else throw new V(Y.InternalError,"Task creation did not return a task");for(;;){let s=await this.getTask({taskId:i},n);if(yield{type:"taskStatus",task:s},er(s.status)){s.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:i},r,n)}:s.status==="failed"?yield{type:"error",error:new V(Y.InternalError,`Task ${i} failed`)}:s.status==="cancelled"&&(yield{type:"error",error:new V(Y.InternalError,`Task ${i} was cancelled`)});return}if(s.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:i},r,n)};return}let c=s.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(u=>setTimeout(u,c)),n?.signal?.throwIfAborted()}}catch(a){yield{type:"error",error:a instanceof V?a:new V(Y.InternalError,String(a))}}}request(e,r,n){let{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a,task:s,relatedTask:c}=n??{};return new Promise((u,l)=>{let d=O=>{l(O)};if(!this._transport){d(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),s&&this.assertTaskCapability(e.method)}catch(O){d(O);return}n?.signal?.throwIfAborted();let m=this._requestMessageId++,f={...e,jsonrpc:"2.0",id:m};n?.onprogress&&(this._progressHandlers.set(m,n.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:m}}),s&&(f.params={...f.params,task:s}),c&&(f.params={...f.params,_meta:{...f.params?._meta||{},[Qt]:c}});let g=O=>{this._responseHandlers.delete(m),this._progressHandlers.delete(m),this._cleanupTimeout(m),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:m,reason:String(O)}},{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a}).catch(Z=>this._onerror(new Error(`Failed to send cancellation: ${Z}`)));let I=O instanceof V?O:new V(Y.RequestTimeout,String(O));l(I)};this._responseHandlers.set(m,O=>{if(!n?.signal?.aborted){if(O instanceof Error)return l(O);try{let I=Yt(r,O.result);I.success?u(I.data):l(I.error)}catch(I){l(I)}}}),n?.signal?.addEventListener("abort",()=>{g(n?.signal?.reason)});let v=n?.timeout??RS,$=()=>g(V.fromError(Y.RequestTimeout,"Request timed out",{timeout:v}));this._setupTimeout(m,v,n?.maxTotalTimeout,$,n?.resetTimeoutOnProgress??!1);let k=c?.taskId;if(k){let O=I=>{let Z=this._responseHandlers.get(m);Z?Z(I):this._onerror(new Error(`Response handler missing for side-channeled request ${m}`))};this._requestResolvers.set(m,O),this._enqueueTaskMessage(k,{type:"request",message:f,timestamp:Date.now()}).catch(I=>{this._cleanupTimeout(m),l(I)})}else this._transport.send(f,{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a}).catch(O=>{this._cleanupTimeout(m),l(O)})})}async getTask(e,r){return this.request({method:"tasks/get",params:e},ka,r)}async getTaskResult(e,r,n){return this.request({method:"tasks/result",params:e},r,n)}async listTasks(e,r){return this.request({method:"tasks/list",params:e},za,r)}async cancelTask(e,r){return this.request({method:"tasks/cancel",params:e},jg,r)}async notification(e,r){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let n=r?.relatedTask?.taskId;if(n){let s={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[Qt]:r.relatedTask}}};await this._enqueueTaskMessage(n,{type:"notification",message:s,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!r?.relatedRequestId&&!r?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let s={...e,jsonrpc:"2.0"};r?.relatedTask&&(s={...s,params:{...s.params,_meta:{...s.params?._meta||{},[Qt]:r.relatedTask}}}),this._transport?.send(s,r).catch(c=>this._onerror(c))});return}let a={...e,jsonrpc:"2.0"};r?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[Qt]:r.relatedTask}}}),await this._transport.send(a,r)}setRequestHandler(e,r){let n=_d(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(o,i)=>{let a=yd(e,o);return Promise.resolve(r(a,i))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,r){let n=_d(e);this._notificationHandlers.set(n,o=>{let i=yd(e,o);return Promise.resolve(r(i))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let r=this._taskProgressTokens.get(e);r!==void 0&&(this._progressHandlers.delete(r),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,r,n){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let o=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,r,n,o)}async _clearTaskQueue(e,r){if(this._taskMessageQueue){let n=await this._taskMessageQueue.dequeueAll(e,r);for(let o of n)if(o.type==="request"&&rd(o.message)){let i=o.message.id,a=this._requestResolvers.get(i);a?(a(new V(Y.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(i)):this._onerror(new Error(`Resolver missing for request ${i} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,r){let n=this._options?.defaultTaskPollInterval??1e3;try{let o=await this._taskStore?.getTask(e);o?.pollInterval&&(n=o.pollInterval)}catch{}return new Promise((o,i)=>{if(r.aborted){i(new V(Y.InvalidRequest,"Request cancelled"));return}let a=setTimeout(o,n);r.addEventListener("abort",()=>{clearTimeout(a),i(new V(Y.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,r){let n=this._taskStore;if(!n)throw new Error("No task store configured");return{createTask:async o=>{if(!e)throw new Error("No request provided");return await n.createTask(o,e.id,{method:e.method,params:e.params},r)},getTask:async o=>{let i=await n.getTask(o,r);if(!i)throw new V(Y.InvalidParams,"Failed to retrieve task: Task not found");return i},storeTaskResult:async(o,i,a)=>{await n.storeTaskResult(o,i,a,r);let s=await n.getTask(o,r);if(s){let c=zo.parse({method:"notifications/tasks/status",params:s});await this.notification(c),er(s.status)&&this._cleanupTaskProgressHandler(o)}},getTaskResult:o=>n.getTaskResult(o,r),updateTaskStatus:async(o,i,a)=>{let s=await n.getTask(o,r);if(!s)throw new V(Y.InvalidParams,`Task "${o}" not found - it may have been cleaned up`);if(er(s.status))throw new V(Y.InvalidParams,`Cannot update task "${o}" from terminal status "${s.status}" to "${i}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(o,i,a,r);let c=await n.getTask(o,r);if(c){let u=zo.parse({method:"notifications/tasks/status",params:c});await this.notification(u),er(c.status)&&this._cleanupTaskProgressHandler(o)}},listTasks:o=>n.listTasks(o,r)}}};function Zg(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Cg(t,e){let r={...t};for(let n in e){let o=n,i=e[o];if(i===void 0)continue;let a=r[o];Zg(a)&&Zg(i)?r[o]={...a,...i}:r[o]=i}return r}var wy=si(of(),1),zy=si(Sy(),1);function zT(){let t=new wy.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,zy.default)(t),t}var ps=class{constructor(e){this._ajv=e??zT()}getValidator(e){let r="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return n=>r(n)?{valid:!0,data:n,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(r.errors)}}};var fs=class{constructor(e){this._server=e}requestStream(e,r,n){return this._server.requestStream(e,r,n)}async getTask(e,r){return this._server.getTask({taskId:e},r)}async getTaskResult(e,r,n){return this._server.getTaskResult({taskId:e},r,n)}async listTasks(e,r){return this._server.listTasks(e?{cursor:e}:void 0,r)}async cancelTask(e,r){return this._server.cancelTask({taskId:e},r)}};function Iy(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${r} does not support task creation for tools/call (required for ${e})`);break;default:break}}function Ey(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${r} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${r} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var ms=class extends Pa{constructor(e,r){super(r),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(To.options.map((n,o)=>[n,o])),this.isMessageIgnored=(n,o)=>{let i=this._loggingLevels.get(o);return i?this.LOG_LEVEL_SEVERITY.get(n)<this.LOG_LEVEL_SEVERITY.get(i):!1},this._capabilities=r?.capabilities??{},this._instructions=r?.instructions,this._jsonSchemaValidator=r?.jsonSchemaValidator??new ps,this.setRequestHandler(id,n=>this._oninitialize(n)),this.setNotificationHandler(ad,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(md,async(n,o)=>{let i=o.sessionId||o.requestInfo?.headers["mcp-session-id"]||void 0,{level:a}=n.params,s=To.safeParse(a);return s.success&&this._loggingLevels.set(i,s.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new fs(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Cg(this._capabilities,e)}setRequestHandler(e,r){let o=Qi(e)?.method;if(!o)throw new Error("Schema is missing a method literal");let i;if(Br(o)){let s=o;i=s._zod?.def?.value??s.value}else{let s=o;i=s._def?.value??s.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let s=async(c,u)=>{let l=Yt(Eo,c);if(!l.success){let g=l.error instanceof Error?l.error.message:String(l.error);throw new V(Y.InvalidParams,`Invalid tools/call request: ${g}`)}let{params:d}=l.data,m=await Promise.resolve(r(c,u));if(d.task){let g=Yt(Qr,m);if(!g.success){let v=g.error instanceof Error?g.error.message:String(g.error);throw new V(Y.InvalidParams,`Invalid task creation result: ${v}`)}return g.data}let f=Yt(Ea,m);if(!f.success){let g=f.error instanceof Error?f.error.message:String(f.error);throw new V(Y.InvalidParams,`Invalid tools/call result: ${g}`)}return f.data};return super.setRequestHandler(e,s)}return super.setRequestHandler(e,r)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){Ey(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&Iy(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let r=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:xg.includes(r)?r:ed,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},_a)}async createMessage(e,r){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let n=e.messages[e.messages.length-1],o=Array.isArray(n.content)?n.content:[n.content],i=o.some(u=>u.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,s=a?Array.isArray(a.content)?a.content:[a.content]:[],c=s.some(u=>u.type==="tool_use");if(i){if(o.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!c)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let u=new Set(s.filter(d=>d.type==="tool_use").map(d=>d.id)),l=new Set(o.filter(d=>d.type==="tool_result").map(d=>d.toolUseId));if(u.size!==l.size||![...u].every(d=>l.has(d)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},gd,r):this.request({method:"sampling/createMessage",params:e},hd,r)}async elicitInput(e,r){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let o=e;return this.request({method:"elicitation/create",params:o},Ta,r)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let o=e.mode==="form"?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:o},Ta,r);if(i.action==="accept"&&i.content&&o.requestedSchema)try{let s=this._jsonSchemaValidator.getValidator(o.requestedSchema)(i.content);if(!s.valid)throw new V(Y.InvalidParams,`Elicitation response content does not match requested schema: ${s.errorMessage}`)}catch(a){throw a instanceof V?a:new V(Y.InternalError,`Error validating elicitation response: ${a instanceof Error?a.message:String(a)}`)}return i}}}createElicitationCompletionNotifier(e,r){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},r)}async listRoots(e,r){return this.request({method:"roots/list",params:e},vd,r)}async sendLoggingMessage(e,r){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,r))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};var ff=si(require("node:process"),1);var hs=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(`
56
56
  `);if(e===-1)return null;let r=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),IT(r)}clear(){this._buffer=void 0}};function IT(t){return Pg.parse(JSON.parse(t))}function Ty(t){return JSON.stringify(t)+`
57
- `}var gs=class{constructor(e=ff.default.stdin,r=ff.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new hs,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=Ty(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var hf=si(require("path"),1);var mf={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Py(t){return process.platform==="win32"?Math.round(t*mf.WINDOWS_MULTIPLIER):t}var wt=require("fs"),vs=require("path"),Dy=require("os");var Oy="bugfix,feature,refactor,discovery,decision,change",jy="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var qt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,vs.join)((0,Dy.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:Oy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:jy,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,wt.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,vs.dirname)(e);(0,wt.existsSync)(s)||(0,wt.mkdirSync)(s,{recursive:!0}),(0,wt.writeFileSync)(e,JSON.stringify(a,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,s)}return this.applyEnvOverrides(a)}let r=(0,wt.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,wt.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a)}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}};var $e=require("path"),Ny=require("os");var Ry=require("url");var PT={};function ET(){return typeof __dirname<"u"?__dirname:(0,$e.dirname)((0,Ry.fileURLToPath)(PT.url))}var AZ=ET(),Ft=qt.get("CLAUDE_MEM_DATA_DIR"),_s=process.env.CLAUDE_CONFIG_DIR||(0,$e.join)((0,Ny.homedir)(),".claude"),TT=(0,$e.join)(_s,"plugins","marketplaces","thedotmack"),UZ=(0,$e.join)(Ft,"archives"),ZZ=(0,$e.join)(Ft,"logs"),CZ=(0,$e.join)(Ft,"trash"),MZ=(0,$e.join)(Ft,"backups"),LZ=(0,$e.join)(Ft,"modes"),qZ=(0,$e.join)(Ft,"settings.json"),FZ=(0,$e.join)(Ft,"claude-mem.db"),VZ=(0,$e.join)(Ft,"vector-db"),JZ=(0,$e.join)(Ft,"observer-sessions"),KZ=(0,$e.join)(_s,"settings.json"),HZ=(0,$e.join)(_s,"commands"),WZ=(0,$e.join)(_s,"CLAUDE.md");var eC=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;ve.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Py(mf.HEALTH_CHECK)})();var ys=null,$s=null;function Ay(){if(ys!==null)return ys;let t=hf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=qt.loadFromFile(t);return ys=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),ys}function Uy(){if($s!==null)return $s;let t=hf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $s=qt.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$s}var OT="10.0.8";console.log=(...t)=>{ve.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var jT=Ay(),DT=Uy(),ai=`http://${DT}:${jT}`,Zy={search:"/api/search",timeline:"/api/timeline"};async function Cy(t,e){ve.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});try{let r=new URLSearchParams;for(let[a,s]of Object.entries(e))s!=null&&r.append(a,String(s));let n=`${ai}${t}?${r}`,o=await fetch(n);if(!o.ok){let a=await o.text();throw new Error(`Worker API error (${o.status}): ${a}`)}let i=await o.json();return ve.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ve.error("SYSTEM","\u2190 Worker API error",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function My(t,e){ve.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ai}${t}`,n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){let i=await n.text();throw new Error(`Worker API error (${n.status}): ${i}`)}let o=await n.json();return ve.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ve.error("HTTP","Worker API error (POST)",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function NT(){try{return(await fetch(`${ai}/api/health`)).ok}catch(t){return ve.debug("SYSTEM","Worker health check failed",{},t),!1}}var Ly=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW):
57
+ `}var gs=class{constructor(e=ff.default.stdin,r=ff.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new hs,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=Ty(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var hf=si(require("path"),1);var mf={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Py(t){return process.platform==="win32"?Math.round(t*mf.WINDOWS_MULTIPLIER):t}var wt=require("fs"),vs=require("path"),Dy=require("os");var Oy="bugfix,feature,refactor,discovery,decision,change",jy="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var qt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,vs.join)((0,Dy.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:Oy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:jy,CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,wt.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,vs.dirname)(e);(0,wt.existsSync)(s)||(0,wt.mkdirSync)(s,{recursive:!0}),(0,wt.writeFileSync)(e,JSON.stringify(a,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,s)}return this.applyEnvOverrides(a)}let r=(0,wt.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,wt.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a)}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}};var $e=require("path"),Ny=require("os");var Ry=require("url");var PT={};function ET(){return typeof __dirname<"u"?__dirname:(0,$e.dirname)((0,Ry.fileURLToPath)(PT.url))}var AZ=ET(),Ft=qt.get("CLAUDE_MEM_DATA_DIR"),_s=process.env.CLAUDE_CONFIG_DIR||(0,$e.join)((0,Ny.homedir)(),".claude"),TT=(0,$e.join)(_s,"plugins","marketplaces","thedotmack"),UZ=(0,$e.join)(Ft,"archives"),ZZ=(0,$e.join)(Ft,"logs"),CZ=(0,$e.join)(Ft,"trash"),MZ=(0,$e.join)(Ft,"backups"),LZ=(0,$e.join)(Ft,"modes"),qZ=(0,$e.join)(Ft,"settings.json"),FZ=(0,$e.join)(Ft,"claude-mem.db"),VZ=(0,$e.join)(Ft,"vector-db"),JZ=(0,$e.join)(Ft,"observer-sessions"),KZ=(0,$e.join)(_s,"settings.json"),HZ=(0,$e.join)(_s,"commands"),WZ=(0,$e.join)(_s,"CLAUDE.md");var eC=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;ve.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Py(mf.HEALTH_CHECK)})();var ys=null,$s=null;function Ay(){if(ys!==null)return ys;let t=hf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=qt.loadFromFile(t);return ys=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),ys}function Uy(){if($s!==null)return $s;let t=hf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $s=qt.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$s}var OT="10.1.0";console.log=(...t)=>{ve.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var jT=Ay(),DT=Uy(),ai=`http://${DT}:${jT}`,Zy={search:"/api/search",timeline:"/api/timeline"};async function Cy(t,e){ve.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});try{let r=new URLSearchParams;for(let[a,s]of Object.entries(e))s!=null&&r.append(a,String(s));let n=`${ai}${t}?${r}`,o=await fetch(n);if(!o.ok){let a=await o.text();throw new Error(`Worker API error (${o.status}): ${a}`)}let i=await o.json();return ve.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ve.error("SYSTEM","\u2190 Worker API error",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function My(t,e){ve.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ai}${t}`,n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){let i=await n.text();throw new Error(`Worker API error (${n.status}): ${i}`)}let o=await n.json();return ve.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ve.error("HTTP","Worker API error (POST)",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function NT(){try{return(await fetch(`${ai}/api/health`)).ok}catch(t){return ve.debug("SYSTEM","Worker health check failed",{},t),!1}}var Ly=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW):
58
58
  1. search(query) \u2192 Get index with IDs (~50-100 tokens/result)
59
59
  2. timeline(anchor=ID) \u2192 Get context around interesting results
60
60
  3. get_observations([IDs]) \u2192 Fetch full details ONLY for filtered IDs
@@ -14,7 +14,7 @@ ${s.stack}`:` ${s.message}`:this.getLevel()===0&&typeof s=="object"?l=`
14
14
  `,"utf8")}catch(m){process.stderr.write(`[LOGGER] Failed to write to log file: ${m}
15
15
  `)}else process.stderr.write(p+`
16
16
  `)}debug(e,r,n,i){this.log(0,e,r,n,i)}info(e,r,n,i){this.log(1,e,r,n,i)}warn(e,r,n,i){this.log(2,e,r,n,i)}error(e,r,n,i){this.log(3,e,r,n,i)}dataIn(e,r,n,i){this.info(e,`\u2192 ${r}`,n,i)}dataOut(e,r,n,i){this.info(e,`\u2190 ${r}`,n,i)}success(e,r,n,i){this.info(e,`\u2713 ${r}`,n,i)}failure(e,r,n,i){this.error(e,`\u2717 ${r}`,n,i)}timing(e,r,n,i){this.info(e,`\u23F1 ${r}`,i,{duration:`${n}ms`})}happyPathError(e,r,n,i,s=""){let u=((new Error().stack||"").split(`
17
- `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),l=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",d={...n,location:l};return this.warn(e,`[HAPPY-PATH] ${r}`,d,i),s}},b=new y0});function fh(t){return process.platform==="win32"?Math.round(t*Lr.WINDOWS_MULTIPLIER):t}var Lr,pt,Pn=Ae(()=>{"use strict";Lr={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},pt={SUCCESS:0,FAILURE:1,BLOCKING_ERROR:2,USER_MESSAGE_ONLY:3}});var YA,QA,eN=Ae(()=>{"use strict";YA="bugfix,feature,refactor,discovery,decision,change",QA="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off"});var rN={};pn(rN,{SettingsDefaultsManager:()=>Re});var Ti,hh,tN,Re,sr=Ae(()=>{"use strict";Ti=require("fs"),hh=require("path"),tN=require("os");eN();Re=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,hh.join)((0,tN.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:YA,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:QA,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,Ti.existsSync)(e)){let o=this.getAllDefaults();try{let a=(0,hh.dirname)(e);(0,Ti.existsSync)(a)||(0,Ti.mkdirSync)(a,{recursive:!0}),(0,Ti.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,a)}return this.applyEnvOverrides(o)}let r=(0,Ti.readFileSync)(e,"utf-8"),n=JSON.parse(r),i=n;if(n.env&&typeof n.env=="object"){i=n.env;try{(0,Ti.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(o){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,o)}}let s={...this.DEFAULTS};for(let o of Object.keys(this.DEFAULTS))i[o]!==void 0&&(s[o]=i[o]);return this.applyEnvOverrides(s)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}}});var dN={};pn(dN,{ARCHIVES_DIR:()=>_0,BACKUPS_DIR:()=>uN,CLAUDE_COMMANDS_DIR:()=>lN,CLAUDE_CONFIG_DIR:()=>os,CLAUDE_MD_PATH:()=>wJ,CLAUDE_SETTINGS_PATH:()=>SJ,DATA_DIR:()=>or,DB_PATH:()=>gd,LOGS_DIR:()=>aN,MARKETPLACE_ROOT:()=>Ii,MODES_DIR:()=>b0,OBSERVER_SESSIONS_DIR:()=>gh,TRASH_DIR:()=>cN,USER_SETTINGS_PATH:()=>ar,VECTOR_DB_DIR:()=>xJ,createBackupFilename:()=>CJ,ensureAllClaudeDirs:()=>IJ,ensureAllDataDirs:()=>kJ,ensureDir:()=>Ir,ensureModesDir:()=>TJ,getCurrentProjectName:()=>OJ,getPackageCommandsDir:()=>RJ,getPackageRoot:()=>Qr,getProjectArchiveDir:()=>EJ,getWorkerSocketPath:()=>$J});function _J(){return typeof __dirname<"u"?__dirname:(0,Dt.dirname)((0,oN.fileURLToPath)(PJ.url))}function EJ(t){return(0,Dt.join)(_0,t)}function $J(t){return(0,Dt.join)(or,`worker-${t}.sock`)}function Ir(t){(0,iN.mkdirSync)(t,{recursive:!0})}function kJ(){Ir(or),Ir(_0),Ir(aN),Ir(cN),Ir(uN),Ir(b0)}function TJ(){Ir(b0)}function IJ(){Ir(os),Ir(lN)}function OJ(){try{let t=(0,sN.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),encoding:"utf8",stdio:["pipe","pipe","ignore"],windowsHide:!0}).trim();return(0,Dt.basename)(t)}catch(t){return b.debug("SYSTEM","Git root detection failed, using cwd basename",{cwd:process.cwd()},t),(0,Dt.basename)(process.cwd())}}function Qr(){return(0,Dt.join)(bJ,"..")}function RJ(){let t=Qr();return(0,Dt.join)(t,"commands")}function CJ(t){let e=new Date().toISOString().replace(/[:.]/g,"-").replace("T","_").slice(0,19);return`${t}.backup.${e}`}var Dt,nN,iN,sN,oN,PJ,bJ,or,os,Ii,_0,aN,cN,uN,b0,ar,gd,xJ,gh,SJ,lN,wJ,Wt=Ae(()=>{"use strict";Dt=require("path"),nN=require("os"),iN=require("fs"),sN=require("child_process"),oN=require("url");sr();he();PJ={};bJ=_J(),or=Re.get("CLAUDE_MEM_DATA_DIR"),os=process.env.CLAUDE_CONFIG_DIR||(0,Dt.join)((0,nN.homedir)(),".claude"),Ii=(0,Dt.join)(os,"plugins","marketplaces","thedotmack"),_0=(0,Dt.join)(or,"archives"),aN=(0,Dt.join)(or,"logs"),cN=(0,Dt.join)(or,"trash"),uN=(0,Dt.join)(or,"backups"),b0=(0,Dt.join)(or,"modes"),ar=(0,Dt.join)(or,"settings.json"),gd=(0,Dt.join)(or,"claude-mem.db"),xJ=(0,Dt.join)(or,"vector-db"),gh=(0,Dt.join)(or,"observer-sessions"),SJ=(0,Dt.join)(os,"settings.json"),lN=(0,Dt.join)(os,"commands"),wJ=(0,Dt.join)(os,"CLAUDE.md")});function yh(t,e={},r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(o=>{clearTimeout(s),n(o)},o=>{clearTimeout(s),i(o)})})}function gt(){if(vd!==null)return vd;let t=vh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=Re.loadFromFile(t);return vd=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),vd}function _h(){if(yd!==null)return yd;let t=vh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return yd=Re.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,yd}function fN(){vd=null,yd=null}async function AJ(){let t=gt();return(await yh(`http://127.0.0.1:${t}/api/health`,{},mN)).ok}function NJ(){try{let t=vh.default.join(Ii,"package.json");return JSON.parse((0,pN.readFileSync)(t,"utf-8")).version}catch(t){let e=t.code;if(e==="ENOENT"||e==="EBUSY")return b.debug("SYSTEM","Could not read plugin version (shutdown race)",{code:e}),"unknown";throw t}}async function MJ(){let t=gt(),e=await yh(`http://127.0.0.1:${t}/api/version`,{},mN);if(!e.ok)throw new Error(`Failed to get worker version: ${e.status}`);return(await e.json()).version}async function DJ(){try{let t=NJ();if(t==="unknown")return;let e=await MJ();if(e==="unknown")return;t!==e&&b.debug("SYSTEM","Version check",{pluginVersion:t,workerVersion:e,note:"Mismatch will be auto-restarted by worker-service start command"})}catch(t){b.debug("SYSTEM","Version check failed",{error:t instanceof Error?t.message:String(t)})}}async function en(){try{if(await AJ())return await DJ(),!0}catch(t){b.debug("SYSTEM","Worker health check failed",{error:t instanceof Error?t.message:String(t)})}return b.warn("SYSTEM","Worker not healthy, hook will proceed gracefully"),!1}var vh,pN,mN,vd,yd,qr=Ae(()=>{"use strict";vh=Ne(require("path"),1),pN=require("fs");he();Pn();sr();Wt();mN=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;b.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return fh(Lr.HEALTH_CHECK)})();vd=null,yd=null});var Ri=T((A1e,MN)=>{var VJ=require("path").relative;MN.exports=XJ;var GJ=process.cwd();function AN(t,e){for(var r=t.split(/[ ,]+/),n=String(e).toLowerCase(),i=0;i<r.length;i++){var s=r[i];if(s&&(s==="*"||s.toLowerCase()===n))return!0}return!1}function WJ(t,e,r){var n=Object.getOwnPropertyDescriptor(t,e),i=n.value;return n.get=function(){return i},n.writable&&(n.set=function(o){return i=o}),delete n.value,delete n.writable,Object.defineProperty(t,e,n),n}function KJ(t){for(var e="",r=0;r<t;r++)e+=", arg"+r;return e.substr(2)}function JJ(t){var e=this.name+": "+this.namespace;this.message&&(e+=" deprecated "+this.message);for(var r=0;r<t.length;r++)e+=`
17
+ `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),l=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",d={...n,location:l};return this.warn(e,`[HAPPY-PATH] ${r}`,d,i),s}},b=new y0});function fh(t){return process.platform==="win32"?Math.round(t*Lr.WINDOWS_MULTIPLIER):t}var Lr,pt,Pn=Ae(()=>{"use strict";Lr={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},pt={SUCCESS:0,FAILURE:1,BLOCKING_ERROR:2,USER_MESSAGE_ONLY:3}});var YA,QA,eN=Ae(()=>{"use strict";YA="bugfix,feature,refactor,discovery,decision,change",QA="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off"});var rN={};pn(rN,{SettingsDefaultsManager:()=>Re});var Ti,hh,tN,Re,sr=Ae(()=>{"use strict";Ti=require("fs"),hh=require("path"),tN=require("os");eN();Re=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,hh.join)((0,tN.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:YA,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:QA,CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,Ti.existsSync)(e)){let o=this.getAllDefaults();try{let a=(0,hh.dirname)(e);(0,Ti.existsSync)(a)||(0,Ti.mkdirSync)(a,{recursive:!0}),(0,Ti.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,a)}return this.applyEnvOverrides(o)}let r=(0,Ti.readFileSync)(e,"utf-8"),n=JSON.parse(r),i=n;if(n.env&&typeof n.env=="object"){i=n.env;try{(0,Ti.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(o){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,o)}}let s={...this.DEFAULTS};for(let o of Object.keys(this.DEFAULTS))i[o]!==void 0&&(s[o]=i[o]);return this.applyEnvOverrides(s)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}}});var dN={};pn(dN,{ARCHIVES_DIR:()=>_0,BACKUPS_DIR:()=>uN,CLAUDE_COMMANDS_DIR:()=>lN,CLAUDE_CONFIG_DIR:()=>os,CLAUDE_MD_PATH:()=>wJ,CLAUDE_SETTINGS_PATH:()=>SJ,DATA_DIR:()=>or,DB_PATH:()=>gd,LOGS_DIR:()=>aN,MARKETPLACE_ROOT:()=>Ii,MODES_DIR:()=>b0,OBSERVER_SESSIONS_DIR:()=>gh,TRASH_DIR:()=>cN,USER_SETTINGS_PATH:()=>ar,VECTOR_DB_DIR:()=>xJ,createBackupFilename:()=>CJ,ensureAllClaudeDirs:()=>IJ,ensureAllDataDirs:()=>kJ,ensureDir:()=>Ir,ensureModesDir:()=>TJ,getCurrentProjectName:()=>OJ,getPackageCommandsDir:()=>RJ,getPackageRoot:()=>Qr,getProjectArchiveDir:()=>EJ,getWorkerSocketPath:()=>$J});function _J(){return typeof __dirname<"u"?__dirname:(0,Dt.dirname)((0,oN.fileURLToPath)(PJ.url))}function EJ(t){return(0,Dt.join)(_0,t)}function $J(t){return(0,Dt.join)(or,`worker-${t}.sock`)}function Ir(t){(0,iN.mkdirSync)(t,{recursive:!0})}function kJ(){Ir(or),Ir(_0),Ir(aN),Ir(cN),Ir(uN),Ir(b0)}function TJ(){Ir(b0)}function IJ(){Ir(os),Ir(lN)}function OJ(){try{let t=(0,sN.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),encoding:"utf8",stdio:["pipe","pipe","ignore"],windowsHide:!0}).trim();return(0,Dt.basename)(t)}catch(t){return b.debug("SYSTEM","Git root detection failed, using cwd basename",{cwd:process.cwd()},t),(0,Dt.basename)(process.cwd())}}function Qr(){return(0,Dt.join)(bJ,"..")}function RJ(){let t=Qr();return(0,Dt.join)(t,"commands")}function CJ(t){let e=new Date().toISOString().replace(/[:.]/g,"-").replace("T","_").slice(0,19);return`${t}.backup.${e}`}var Dt,nN,iN,sN,oN,PJ,bJ,or,os,Ii,_0,aN,cN,uN,b0,ar,gd,xJ,gh,SJ,lN,wJ,Wt=Ae(()=>{"use strict";Dt=require("path"),nN=require("os"),iN=require("fs"),sN=require("child_process"),oN=require("url");sr();he();PJ={};bJ=_J(),or=Re.get("CLAUDE_MEM_DATA_DIR"),os=process.env.CLAUDE_CONFIG_DIR||(0,Dt.join)((0,nN.homedir)(),".claude"),Ii=(0,Dt.join)(os,"plugins","marketplaces","thedotmack"),_0=(0,Dt.join)(or,"archives"),aN=(0,Dt.join)(or,"logs"),cN=(0,Dt.join)(or,"trash"),uN=(0,Dt.join)(or,"backups"),b0=(0,Dt.join)(or,"modes"),ar=(0,Dt.join)(or,"settings.json"),gd=(0,Dt.join)(or,"claude-mem.db"),xJ=(0,Dt.join)(or,"vector-db"),gh=(0,Dt.join)(or,"observer-sessions"),SJ=(0,Dt.join)(os,"settings.json"),lN=(0,Dt.join)(os,"commands"),wJ=(0,Dt.join)(os,"CLAUDE.md")});function yh(t,e={},r){return new Promise((n,i)=>{let s=setTimeout(()=>i(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(o=>{clearTimeout(s),n(o)},o=>{clearTimeout(s),i(o)})})}function gt(){if(vd!==null)return vd;let t=vh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=Re.loadFromFile(t);return vd=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),vd}function _h(){if(yd!==null)return yd;let t=vh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return yd=Re.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,yd}function fN(){vd=null,yd=null}async function AJ(){let t=gt();return(await yh(`http://127.0.0.1:${t}/api/health`,{},mN)).ok}function NJ(){try{let t=vh.default.join(Ii,"package.json");return JSON.parse((0,pN.readFileSync)(t,"utf-8")).version}catch(t){let e=t.code;if(e==="ENOENT"||e==="EBUSY")return b.debug("SYSTEM","Could not read plugin version (shutdown race)",{code:e}),"unknown";throw t}}async function MJ(){let t=gt(),e=await yh(`http://127.0.0.1:${t}/api/version`,{},mN);if(!e.ok)throw new Error(`Failed to get worker version: ${e.status}`);return(await e.json()).version}async function DJ(){try{let t=NJ();if(t==="unknown")return;let e=await MJ();if(e==="unknown")return;t!==e&&b.debug("SYSTEM","Version check",{pluginVersion:t,workerVersion:e,note:"Mismatch will be auto-restarted by worker-service start command"})}catch(t){b.debug("SYSTEM","Version check failed",{error:t instanceof Error?t.message:String(t)})}}async function en(){try{if(await AJ())return await DJ(),!0}catch(t){b.debug("SYSTEM","Worker health check failed",{error:t instanceof Error?t.message:String(t)})}return b.warn("SYSTEM","Worker not healthy, hook will proceed gracefully"),!1}var vh,pN,mN,vd,yd,qr=Ae(()=>{"use strict";vh=Ne(require("path"),1),pN=require("fs");he();Pn();sr();Wt();mN=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;b.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return fh(Lr.HEALTH_CHECK)})();vd=null,yd=null});var Ri=T((A1e,MN)=>{var VJ=require("path").relative;MN.exports=XJ;var GJ=process.cwd();function AN(t,e){for(var r=t.split(/[ ,]+/),n=String(e).toLowerCase(),i=0;i<r.length;i++){var s=r[i];if(s&&(s==="*"||s.toLowerCase()===n))return!0}return!1}function WJ(t,e,r){var n=Object.getOwnPropertyDescriptor(t,e),i=n.value;return n.get=function(){return i},n.writable&&(n.set=function(o){return i=o}),delete n.value,delete n.writable,Object.defineProperty(t,e,n),n}function KJ(t){for(var e="",r=0;r<t;r++)e+=", arg"+r;return e.substr(2)}function JJ(t){var e=this.name+": "+this.namespace;this.message&&(e+=" deprecated "+this.message);for(var r=0;r<t.length;r++)e+=`
18
18
  at `+t[r].toString();return e}function XJ(t){if(!t)throw new TypeError("argument namespace is required");var e=$h(),r=dc(e[1]),n=r[0];function i(s){Eh.call(i,s)}return i._file=n,i._ignored=QJ(t),i._namespace=t,i._traced=eX(t),i._warned=Object.create(null),i.function=iX,i.property=sX,i}function YJ(t,e){var r=typeof t.listenerCount!="function"?t.listeners(e).length:t.listenerCount(e);return r>0}function QJ(t){if(process.noDeprecation)return!0;var e=process.env.NO_DEPRECATION||"";return AN(e,t)}function eX(t){if(process.traceDeprecation)return!0;var e=process.env.TRACE_DEPRECATION||"";return AN(e,t)}function Eh(t,e){var r=YJ(process,"deprecation");if(!(!r&&this._ignored)){var n,i,s,o,a=0,c=!1,u=$h(),l=this._file;for(e?(o=e,s=dc(u[1]),s.name=o.name,l=s[0]):(a=2,o=dc(u[a]),s=o);a<u.length;a++)if(n=dc(u[a]),i=n[0],i===l)c=!0;else if(i===this._file)l=this._file;else if(c)break;var d=n?o.join(":")+"__"+n.join(":"):void 0;if(!(d!==void 0&&d in this._warned)){this._warned[d]=!0;var p=t;if(p||(p=s===o||!s.name?PN(o):PN(s)),r){var m=NN(this._namespace,p,u.slice(a));process.emit("deprecation",m);return}var f=process.stderr.isTTY?rX:tX,h=f.call(this,p,n,u.slice(a));process.stderr.write(h+`
19
19
  `,"utf8")}}}function dc(t){var e=t.getFileName()||"<anonymous>",r=t.getLineNumber(),n=t.getColumnNumber();t.isEval()&&(e=t.getEvalOrigin()+", "+e);var i=[e,r,n];return i.callSite=t,i.name=t.getFunctionName(),i}function PN(t){var e=t.callSite,r=t.name;r||(r="<anonymous@"+O0(t)+">");var n=e.getThis(),i=n&&e.getTypeName();return i==="Object"&&(i=void 0),i==="Function"&&(i=n.name||i),i&&e.getMethodName()?i+"."+r:r}function tX(t,e,r){var n=new Date().toUTCString(),i=n+" "+this._namespace+" deprecated "+t;if(this._traced){for(var s=0;s<r.length;s++)i+=`
20
20
  at `+r[s].toString();return i}return e&&(i+=" at "+O0(e)),i}function rX(t,e,r){var n="\x1B[36;1m"+this._namespace+"\x1B[22;39m \x1B[33;1mdeprecated\x1B[22;39m \x1B[0m"+t+"\x1B[39m";if(this._traced){for(var i=0;i<r.length;i++)n+=`
@@ -800,7 +800,9 @@ ${Y.gray}${"\u2500".repeat(60)}${Y.reset}
800
800
  ${Y.dim}No previous sessions found for this project yet.${Y.reset}
801
801
  `}var Ru=Ae(()=>{"use strict";Qp();Hr();da()});function S9(t,e,r,n){let i=[];return n?i.push(...u9(t)):i.push(...KF(t)),n?i.push(...l9()):i.push(...JF()),n?i.push(...d9()):i.push(...XF()),n?i.push(...p9()):i.push(...YF()),Yv(r)&&(n?i.push(...m9(e,r)):i.push(...QF(e,r))),i}var w9=Ae(()=>{"use strict";da();Ou();Ru()});function gye(t){let e=new Map;for(let n of t){let i=n.type==="observation"?n.data.created_at:n.data.displayTime,s=ps(i);e.has(s)||e.set(s,[]),e.get(s).push(n)}let r=Array.from(e.entries()).sort((n,i)=>{let s=new Date(n[0]).getTime(),o=new Date(i[0]).getTime();return s-o});return new Map(r)}function vye(t,e){return e.fullObservationField==="narrative"?t.narrative:t.facts?nv(t.facts).join(`
802
802
  `):null}function yye(t,e,r,n,i,s){let o=[];s?o.push(...f9(t)):o.push(...e9(t));let a=null,c="",u=!1;for(let l of e)if(l.type==="summary"){u&&(o.push(""),u=!1,a=null,c="");let d=l.data,p=Fn(d.displayTime);s?o.push(...y9(d,p)):o.push(...i9(d,p))}else{let d=l.data,p=di(d.files_modified,i,d.files_read),m=_r(d.created_at),f=m!==c,h=f?m:"";c=m;let g=r.has(d.id);if(p!==a&&(u&&o.push(""),s?o.push(...h9(p)):o.push(...t9(p)),a=p,u=!0),g){let v=vye(d,n);s?o.push(...v9(d,m,f,v,n)):(u&&!s&&(o.push(""),u=!1),o.push(...n9(d,h,v,n)),a=null)}else s?o.push(g9(d,m,f,n)):o.push(r9(d,h,n))}return u&&o.push(""),o}function E9(t,e,r,n,i){let s=[],o=gye(t);for(let[a,c]of o)s.push(...yye(a,c,e,r,n,i));return s}var $9=Ae(()=>{"use strict";ta();Ou();Ru()});function k9(t,e,r){return!(!t.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||r&&e.created_at_epoch<=r.created_at_epoch)}function T9(t,e){let r=[];return e?(r.push(...tm("Investigated",t.investigated,Y.blue)),r.push(...tm("Learned",t.learned,Y.yellow)),r.push(...tm("Completed",t.completed,Y.green)),r.push(...tm("Next Steps",t.next_steps,Y.magenta))):(r.push(...em("Investigated",t.investigated)),r.push(...em("Learned",t.learned)),r.push(...em("Completed",t.completed)),r.push(...em("Next Steps",t.next_steps))),r}var I9=Ae(()=>{"use strict";Qp();Ou();Ru()});function O9(t,e){return e?_9(t):s9(t)}function R9(t,e,r){return!Yv(e)||t.totalDiscoveryTokens<=0||t.savings<=0?[]:r?b9(t.totalDiscoveryTokens,t.totalReadTokens):o9(t.totalDiscoveryTokens,t.totalReadTokens)}var C9=Ae(()=>{"use strict";da();Ou();Ru()});function bye(){try{return new Js}catch(t){if(t.code==="ERR_DLOPEN_FAILED"){try{(0,N9.unlinkSync)(_ye)}catch(e){b.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return b.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw t}}function xye(t,e){return e?x9(t):a9(t)}function Sye(t,e,r,n,i,s,o){let a=[],c=fT(e);a.push(...S9(t,c,n,o));let u=r.slice(0,n.sessionCount),l=VF(u,r),d=yT(e,l),p=GF(e,n.fullObservationCount);a.push(...E9(d,p,n,i,o));let m=r[0],f=e[0];k9(n,m,f)&&a.push(...T9(m,o));let h=vT(e,n,s,i);return a.push(...O9(h,o)),a.push(...R9(c,n,o)),a.join(`
803
- `).trimEnd()}async function bT(t,e=!1){let r=lT(),n=t?.cwd??process.cwd(),i=Yp(n),s=t?.projects||[i],o=bye();if(!o)return"";try{let a=s.length>1?HF(o,s,r):hT(o,i,r),c=s.length>1?BF(o,s,r):gT(o,i,r);return a.length===0&&c.length===0?xye(i,e):Sye(i,a,c,r,n,t?.session_id,e)}finally{o.close()}}var P9,A9,N9,_ye,M9=Ae(()=>{"use strict";P9=Ne(require("path"),1),A9=require("os"),N9=require("fs");Ag();he();Xv();dT();da();_T();w9();$9();I9();C9();Ou();Ru();_ye=P9.default.join((0,A9.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version")});var D9=Ae(()=>{"use strict";M9();dT();da();_T()});var xT={};pn(xT,{generateContext:()=>bT});var ST=Ae(()=>{"use strict";D9()});function Eye(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch{return!1}}function $ye(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch{return{success:!1}}}async function q9(){if(Eye())return new Promise((t,e)=>{let r="",n=!1,i=null,s=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},o=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),s(),t(l))},a=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),s(),e(l))},c=()=>{let l=$ye(r);return l.success?(o(l.value),!0):!1},u=setTimeout(()=>{n||c()||(r.trim()?a(new Error(`Incomplete JSON after ${L9}ms: ${r.slice(0,100)}...`)):o(void 0))},L9);try{process.stdin.on("data",l=>{r+=l,i&&(clearTimeout(i),i=null),!c()&&(i=setTimeout(()=>{c()},kye))}),process.stdin.on("end",()=>{n||c()||o((r.trim(),void 0))}),process.stdin.on("error",()=>{n||o(void 0)})}catch{n=!0,clearTimeout(u),s(),t(void 0)}})}var L9,kye,F9=Ae(()=>{"use strict";L9=3e4,kye=50});var Z9,H9=Ae(()=>{"use strict";Z9={normalizeInput(t){let e=t??{};return{sessionId:e.session_id,cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path}},formatOutput(t){return t.hookSpecificOutput?{hookSpecificOutput:t.hookSpecificOutput}:{continue:t.continue??!0,suppressOutput:t.suppressOutput??!0}}}});var B9,V9=Ae(()=>{"use strict";B9={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name;return{sessionId:e.conversation_id||e.generation_id,cwd:e.workspace_roots?.[0]??process.cwd(),prompt:e.prompt,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:void 0,filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}}});var G9,W9=Ae(()=>{"use strict";G9={normalizeInput(t){let e=t;return{sessionId:e.sessionId??e.session_id??"unknown",cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}}});function K9(t){switch(t){case"claude-code":return Z9;case"cursor":return B9;case"raw":return G9;default:throw new Error(`Unknown platform: ${t}`)}}var J9=Ae(()=>{"use strict";H9();V9();W9()});var TT,IT=Ae(()=>{"use strict";qr();Xv();Pn();he();TT={async execute(t){if(!await en())return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:pt.SUCCESS};let r=t.cwd??process.cwd(),n=UF(r),i=gt(),s=n.allProjects.join(","),o=`http://127.0.0.1:${i}/api/context/inject?projects=${encodeURIComponent(s)}`;try{let a=await fetch(o);return a.ok?{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:(await a.text()).trim()}}:(b.warn("HOOK","Context generation failed, returning empty",{status:a.status}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:pt.SUCCESS})}catch(a){return b.warn("HOOK","Context fetch error, returning empty",{error:a instanceof Error?a.message:String(a)}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:pt.SUCCESS}}}}});function Tye(t){let e=t.startsWith("~")?(0,X9.homedir)()+t.slice(1):t;e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${r}$`)}function uy(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),n=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of n)try{if(Tye(i).test(r))return!0}catch{continue}return!1}var X9,OT=Ae(()=>{"use strict";X9=require("os")});var RT,CT=Ae(()=>{"use strict";qr();Xv();he();Pn();OT();sr();Wt();RT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};let{sessionId:r,cwd:n,prompt:i}=t,s=Re.loadFromFile(ar);if(n&&uy(n,s.CLAUDE_MEM_EXCLUDED_PROJECTS))return b.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};let o=!i||!i.trim()?"[media prompt]":i,a=Yp(n),c=gt();b.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:r,project:a});let u=await fetch(`http://127.0.0.1:${c}/api/sessions/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,project:a,prompt:o})});if(!u.ok)return b.failure("HOOK",`Session initialization failed: ${u.status}`,{contentSessionId:r,project:a}),{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};let l=await u.json(),d=l.sessionDbId,p=l.promptNumber;if(b.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:d,promptNumber:p,skipped:l.skipped}),b.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${r} | prompt#=${p} | sessionDbId=${d}`),l.skipped&&l.reason==="private")return b.info("HOOK",`INIT_COMPLETE | sessionDbId=${d} | promptNumber=${p} | skipped=true | reason=private`,{sessionId:d}),{continue:!0,suppressOutput:!0};if(t.platform!=="cursor"&&d){let m=o.startsWith("/")?o.substring(1):o;b.debug("HOOK","session-init: Calling /sessions/{sessionDbId}/init",{sessionDbId:d,promptNumber:p});let f=await fetch(`http://127.0.0.1:${c}/sessions/${d}/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userPrompt:m,promptNumber:p})});f.ok||b.failure("HOOK",`SDK agent start failed: ${f.status}`,{sessionDbId:d,promptNumber:p})}else t.platform==="cursor"&&b.debug("HOOK","session-init: Skipping SDK agent init for Cursor platform",{sessionDbId:d,promptNumber:p});return b.info("HOOK",`INIT_COMPLETE | sessionDbId=${d} | promptNumber=${p} | project=${a}`,{sessionId:d}),{continue:!0,suppressOutput:!0}}}});var PT,AT=Ae(()=>{"use strict";qr();he();Pn();OT();sr();Wt();PT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};let{sessionId:r,cwd:n,toolName:i,toolInput:s,toolResponse:o}=t;if(!i)throw new Error("observationHandler requires toolName");let a=gt(),c=b.formatTool(i,s);if(b.dataIn("HOOK",`PostToolUse: ${c}`,{workerPort:a}),!n)throw new Error(`Missing cwd in PostToolUse hook input for session ${r}, tool ${i}`);let u=Re.loadFromFile(ar);if(uy(n,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return b.debug("HOOK","Project excluded from tracking, skipping observation",{cwd:n,toolName:i}),{continue:!0,suppressOutput:!0};try{let l=await fetch(`http://127.0.0.1:${a}/api/sessions/observations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,tool_name:i,tool_input:s,tool_response:o,cwd:n})});if(!l.ok)return b.warn("HOOK","Observation storage failed, skipping",{status:l.status,toolName:i}),{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};b.debug("HOOK","Observation sent successfully",{toolName:i})}catch(l){return b.warn("HOOK","Observation fetch error, skipping",{error:l instanceof Error?l.message:String(l)}),{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS}}return{continue:!0,suppressOutput:!0}}}});function Y9(t,e,r=!1){if(!t||!(0,ly.existsSync)(t))throw new Error(`Transcript path missing or file does not exist: ${t}`);let n=(0,ly.readFileSync)(t,"utf-8").trim();if(!n)throw new Error(`Transcript file exists but is empty: ${t}`);let i=n.split(`
803
+ `).trimEnd()}async function bT(t,e=!1){let r=lT(),n=t?.cwd??process.cwd(),i=Yp(n),s=t?.projects||[i],o=bye();if(!o)return"";try{let a=s.length>1?HF(o,s,r):hT(o,i,r),c=s.length>1?BF(o,s,r):gT(o,i,r);return a.length===0&&c.length===0?xye(i,e):Sye(i,a,c,r,n,t?.session_id,e)}finally{o.close()}}var P9,A9,N9,_ye,M9=Ae(()=>{"use strict";P9=Ne(require("path"),1),A9=require("os"),N9=require("fs");Ag();he();Xv();dT();da();_T();w9();$9();I9();C9();Ou();Ru();_ye=P9.default.join((0,A9.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version")});var D9=Ae(()=>{"use strict";M9();dT();da();_T()});var xT={};pn(xT,{generateContext:()=>bT});var ST=Ae(()=>{"use strict";D9()});function Eye(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch{return!1}}function $ye(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch{return{success:!1}}}async function q9(){if(Eye())return new Promise((t,e)=>{let r="",n=!1,i=null,s=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},o=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),s(),t(l))},a=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),s(),e(l))},c=()=>{let l=$ye(r);return l.success?(o(l.value),!0):!1},u=setTimeout(()=>{n||c()||(r.trim()?a(new Error(`Incomplete JSON after ${L9}ms: ${r.slice(0,100)}...`)):o(void 0))},L9);try{process.stdin.on("data",l=>{r+=l,i&&(clearTimeout(i),i=null),!c()&&(i=setTimeout(()=>{c()},kye))}),process.stdin.on("end",()=>{n||c()||o((r.trim(),void 0))}),process.stdin.on("error",()=>{n||o(void 0)})}catch{n=!0,clearTimeout(u),s(),t(void 0)}})}var L9,kye,F9=Ae(()=>{"use strict";L9=3e4,kye=50});var Z9,H9=Ae(()=>{"use strict";Z9={normalizeInput(t){let e=t??{};return{sessionId:e.session_id,cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path}},formatOutput(t){if(t.hookSpecificOutput){let e={hookSpecificOutput:t.hookSpecificOutput};return t.systemMessage&&(e.systemMessage=t.systemMessage),e}return{continue:t.continue??!0,suppressOutput:t.suppressOutput??!0}}}});var B9,V9=Ae(()=>{"use strict";B9={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name;return{sessionId:e.conversation_id||e.generation_id,cwd:e.workspace_roots?.[0]??process.cwd(),prompt:e.prompt,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:void 0,filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}}});var G9,W9=Ae(()=>{"use strict";G9={normalizeInput(t){let e=t;return{sessionId:e.sessionId??e.session_id??"unknown",cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}}});function K9(t){switch(t){case"claude-code":return Z9;case"cursor":return B9;case"raw":return G9;default:throw new Error(`Unknown platform: ${t}`)}}var J9=Ae(()=>{"use strict";H9();V9();W9()});var TT,IT=Ae(()=>{"use strict";qr();Xv();Pn();he();TT={async execute(t){if(!await en())return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:pt.SUCCESS};let r=t.cwd??process.cwd(),n=UF(r),i=gt(),s=n.allProjects.join(","),o=`http://127.0.0.1:${i}/api/context/inject?projects=${encodeURIComponent(s)}`;try{let a=`${o}&colors=true`,[c,u]=await Promise.all([fetch(o),fetch(a).catch(()=>null)]);if(!c.ok)return b.warn("HOOK","Context generation failed, returning empty",{status:c.status}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:pt.SUCCESS};let[l,d]=await Promise.all([c.text(),u?.ok?u.text():Promise.resolve("")]),p=l.trim(),m=d.trim(),f=m?`${m}
804
+
805
+ View Observations Live @ http://localhost:${i}`:void 0;return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:p},systemMessage:f}}catch(a){return b.warn("HOOK","Context fetch error, returning empty",{error:a instanceof Error?a.message:String(a)}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:pt.SUCCESS}}}}});function Tye(t){let e=t.startsWith("~")?(0,X9.homedir)()+t.slice(1):t;e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${r}$`)}function uy(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),n=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of n)try{if(Tye(i).test(r))return!0}catch{continue}return!1}var X9,OT=Ae(()=>{"use strict";X9=require("os")});var RT,CT=Ae(()=>{"use strict";qr();Xv();he();Pn();OT();sr();Wt();RT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};let{sessionId:r,cwd:n,prompt:i}=t,s=Re.loadFromFile(ar);if(n&&uy(n,s.CLAUDE_MEM_EXCLUDED_PROJECTS))return b.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};let o=!i||!i.trim()?"[media prompt]":i,a=Yp(n),c=gt();b.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:r,project:a});let u=await fetch(`http://127.0.0.1:${c}/api/sessions/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,project:a,prompt:o})});if(!u.ok)return b.failure("HOOK",`Session initialization failed: ${u.status}`,{contentSessionId:r,project:a}),{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};let l=await u.json(),d=l.sessionDbId,p=l.promptNumber;if(b.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:d,promptNumber:p,skipped:l.skipped}),b.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${r} | prompt#=${p} | sessionDbId=${d}`),l.skipped&&l.reason==="private")return b.info("HOOK",`INIT_COMPLETE | sessionDbId=${d} | promptNumber=${p} | skipped=true | reason=private`,{sessionId:d}),{continue:!0,suppressOutput:!0};if(t.platform!=="cursor"&&d){let m=o.startsWith("/")?o.substring(1):o;b.debug("HOOK","session-init: Calling /sessions/{sessionDbId}/init",{sessionDbId:d,promptNumber:p});let f=await fetch(`http://127.0.0.1:${c}/sessions/${d}/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userPrompt:m,promptNumber:p})});f.ok||b.failure("HOOK",`SDK agent start failed: ${f.status}`,{sessionDbId:d,promptNumber:p})}else t.platform==="cursor"&&b.debug("HOOK","session-init: Skipping SDK agent init for Cursor platform",{sessionDbId:d,promptNumber:p});return b.info("HOOK",`INIT_COMPLETE | sessionDbId=${d} | promptNumber=${p} | project=${a}`,{sessionId:d}),{continue:!0,suppressOutput:!0}}}});var PT,AT=Ae(()=>{"use strict";qr();he();Pn();OT();sr();Wt();PT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};let{sessionId:r,cwd:n,toolName:i,toolInput:s,toolResponse:o}=t;if(!i)throw new Error("observationHandler requires toolName");let a=gt(),c=b.formatTool(i,s);if(b.dataIn("HOOK",`PostToolUse: ${c}`,{workerPort:a}),!n)throw new Error(`Missing cwd in PostToolUse hook input for session ${r}, tool ${i}`);let u=Re.loadFromFile(ar);if(uy(n,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return b.debug("HOOK","Project excluded from tracking, skipping observation",{cwd:n,toolName:i}),{continue:!0,suppressOutput:!0};try{let l=await fetch(`http://127.0.0.1:${a}/api/sessions/observations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,tool_name:i,tool_input:s,tool_response:o,cwd:n})});if(!l.ok)return b.warn("HOOK","Observation storage failed, skipping",{status:l.status,toolName:i}),{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS};b.debug("HOOK","Observation sent successfully",{toolName:i})}catch(l){return b.warn("HOOK","Observation fetch error, skipping",{error:l instanceof Error?l.message:String(l)}),{continue:!0,suppressOutput:!0,exitCode:pt.SUCCESS}}return{continue:!0,suppressOutput:!0}}}});function Y9(t,e,r=!1){if(!t||!(0,ly.existsSync)(t))throw new Error(`Transcript path missing or file does not exist: ${t}`);let n=(0,ly.readFileSync)(t,"utf-8").trim();if(!n)throw new Error(`Transcript file exists but is empty: ${t}`);let i=n.split(`
804
806
  `),s=!1;for(let o=i.length-1;o>=0;o--){let a=JSON.parse(i[o]);if(a.type===e&&(s=!0,a.message?.content)){let c="",u=a.message.content;if(typeof u=="string")c=u;else if(Array.isArray(u))c=u.filter(l=>l.type==="text").map(l=>l.text).join(`
805
807
  `);else throw new Error(`Unknown message content format in transcript. Type: ${typeof u}`);return r&&(c=c.replace(/<system-reminder>[\s\S]*?<\/system-reminder>/g,""),c=c.replace(/\n{3,}/g,`
806
808
 
@@ -876,7 +878,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
876
878
  `)){let n=r.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i===-1)continue;let s=n.slice(0,i).trim(),o=n.slice(i+1).trim();(o.startsWith('"')&&o.endsWith('"')||o.startsWith("'")&&o.endsWith("'"))&&(o=o.slice(1,-1)),s&&(e[s]=o)}return e}function w0(){if(!(0,cc.existsSync)(x0))return{};try{let t=(0,cc.readFileSync)(x0,"utf-8"),e=UJ(t),r={};return e.ANTHROPIC_API_KEY&&(r.ANTHROPIC_API_KEY=e.ANTHROPIC_API_KEY),e.GEMINI_API_KEY&&(r.GEMINI_API_KEY=e.GEMINI_API_KEY),e.OPENROUTER_API_KEY&&(r.OPENROUTER_API_KEY=e.OPENROUTER_API_KEY),r}catch(t){return b.warn("ENV","Failed to load .env file",{path:x0},t),{}}}function gN(t=!0){let e={};for(let[r,n]of Object.entries(process.env))n!==void 0&&!zJ.includes(r)&&(e[r]=n);if(e.CLAUDE_CODE_ENTRYPOINT="sdk-ts",t){let r=w0();r.ANTHROPIC_API_KEY&&(e.ANTHROPIC_API_KEY=r.ANTHROPIC_API_KEY),r.GEMINI_API_KEY&&(e.GEMINI_API_KEY=r.GEMINI_API_KEY),r.OPENROUTER_API_KEY&&(e.OPENROUTER_API_KEY=r.OPENROUTER_API_KEY),!e.ANTHROPIC_API_KEY&&process.env.CLAUDE_CODE_OAUTH_TOKEN&&(e.CLAUDE_CODE_OAUTH_TOKEN=process.env.CLAUDE_CODE_OAUTH_TOKEN)}return e}function uc(t){return w0()[t]}function LJ(){return!!w0().ANTHROPIC_API_KEY}function bh(){return LJ()?"API key (from ~/.claude-mem/.env)":process.env.CLAUDE_CODE_OAUTH_TOKEN?"Claude Code OAuth token (from parent process)":"Claude Code CLI (subscription billing)"}he();var _d=require("child_process"),To=Ne(require("path"),1),E0=Ne(require("os"),1),Oi=Ne(require("fs"),1);he();var lc=class t{static instance=null;serverProcess=null;config;starting=!1;ready=!1;startPromise=null;constructor(e){this.config=e}static getInstance(e){if(!t.instance){let r={dataDir:To.default.join(E0.default.homedir(),".claude-mem","vector-db"),host:"127.0.0.1",port:8e3};t.instance=new t(e||r)}return t.instance}async start(e=6e4){if(this.ready)return b.debug("CHROMA_SERVER","Server already started or starting",{ready:this.ready,starting:this.starting}),!0;if(this.startPromise)return b.debug("CHROMA_SERVER","Awaiting existing startup",{host:this.config.host,port:this.config.port}),this.startPromise;this.starting=!0,this.startPromise=this.startInternal(e);try{return await this.startPromise}finally{this.startPromise=null,this.ready||(this.starting=!1)}}async startInternal(e){try{if((await fetch(`http://${this.config.host}:${this.config.port}/api/v2/heartbeat`,{signal:AbortSignal.timeout(3e3)})).ok)return b.info("CHROMA_SERVER","Existing server detected, reusing",{host:this.config.host,port:this.config.port}),this.ready=!0,this.starting=!1,!0}catch{}let r=process.platform==="win32",n,i;try{let a=To.default.dirname(require.resolve("chromadb/package.json")),c=To.default.join(a,"..",".bin",r?"chroma.cmd":"chroma"),u=To.default.join(a,"node_modules",".bin",r?"chroma.cmd":"chroma");(0,Oi.existsSync)(c)?n=c:(0,Oi.existsSync)(u)?n=u:n=r?"npx.cmd":"npx"}catch{n=r?"npx.cmd":"npx"}n.includes("npx")?i=["chroma","run","--path",this.config.dataDir,"--host",this.config.host,"--port",String(this.config.port)]:i=["run","--path",this.config.dataDir,"--host",this.config.host,"--port",String(this.config.port)],b.info("CHROMA_SERVER","Starting Chroma server",{command:n,args:i.join(" "),dataDir:this.config.dataDir});let s=this.getSpawnEnv(),o;try{o=To.default.dirname(require.resolve("chromadb/package.json"))}catch{}return this.serverProcess=(0,_d.spawn)(n,i,{stdio:["ignore","pipe","pipe"],detached:!r,windowsHide:!0,env:s,...o&&{cwd:o}}),this.serverProcess.stdout?.on("data",a=>{let c=a.toString().trim();c&&b.debug("CHROMA_SERVER",c)}),this.serverProcess.stderr?.on("data",a=>{let c=a.toString().trim();c&&(!c.includes("Chroma")||c.includes("error")||c.includes("Error"))&&b.debug("CHROMA_SERVER",c)}),this.serverProcess.on("error",a=>{b.error("CHROMA_SERVER","Server process error",{},a),this.ready=!1,this.starting=!1}),this.serverProcess.on("exit",(a,c)=>{b.info("CHROMA_SERVER","Server process exited",{code:a,signal:c}),this.ready=!1,this.starting=!1,this.serverProcess=null}),this.waitForReady(e)}async waitForReady(e=6e4){if(this.ready)return!0;let r=Date.now(),n=500;for(b.info("CHROMA_SERVER","Waiting for server to be ready",{host:this.config.host,port:this.config.port,timeoutMs:e});Date.now()-r<e;){try{if((await fetch(`http://${this.config.host}:${this.config.port}/api/v2/heartbeat`)).ok)return this.ready=!0,this.starting=!1,b.info("CHROMA_SERVER","Server ready",{host:this.config.host,port:this.config.port,startupTimeMs:Date.now()-r}),!0}catch{}await new Promise(i=>setTimeout(i,n))}return this.starting=!1,b.error("CHROMA_SERVER","Server failed to start within timeout",{timeoutMs:e,elapsedMs:Date.now()-r}),!1}isRunning(){return this.ready}async isServerReachable(){try{if((await fetch(`http://${this.config.host}:${this.config.port}/api/v2/heartbeat`)).ok)return this.ready=!0,!0}catch{}return!1}getUrl(){return`http://${this.config.host}:${this.config.port}`}getConfig(){return{...this.config}}async stop(){if(!this.serverProcess){b.debug("CHROMA_SERVER","No server process to stop");return}return b.info("CHROMA_SERVER","Stopping server",{pid:this.serverProcess.pid}),new Promise(e=>{let r=this.serverProcess,n=r.pid,i=()=>{this.serverProcess=null,this.ready=!1,this.starting=!1,this.startPromise=null,b.info("CHROMA_SERVER","Server stopped",{pid:n}),e()};if(r.once("exit",i),process.platform==="win32")r.kill("SIGTERM");else if(n!==void 0)try{process.kill(-n,"SIGTERM")}catch{r.kill("SIGTERM")}else r.kill("SIGTERM");setTimeout(()=>{if(this.serverProcess){b.warn("CHROMA_SERVER","Force killing server after timeout",{pid:n});try{r.kill("SIGKILL")}catch{}i()}},5e3)})}getCombinedCertPath(){let e=To.default.join(E0.default.homedir(),".claude-mem","combined_certs.pem");if(Oi.default.existsSync(e)){let r=Oi.default.statSync(e);if(Date.now()-r.mtimeMs<1440*60*1e3)return e}if(process.platform==="darwin")try{let r;try{r=(0,_d.execSync)('uvx --with certifi python -c "import certifi; print(certifi.where())"',{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:1e4}).trim()}catch{return}if(!r||!Oi.default.existsSync(r))return;let n="";try{n=(0,_d.execSync)('security find-certificate -a -c "Zscaler" -p /Library/Keychains/System.keychain',{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:5e3})}catch{return}if(!n||!n.includes("-----BEGIN CERTIFICATE-----")||!n.includes("-----END CERTIFICATE-----"))return;let i=Oi.default.readFileSync(r,"utf8"),s=e+".tmp";return Oi.default.writeFileSync(s,i+`
877
879
  `+n),Oi.default.renameSync(s,e),b.info("CHROMA_SERVER","Created combined SSL certificate bundle for Zscaler",{path:e}),e}catch(r){b.debug("CHROMA_SERVER","Could not create combined cert bundle",{},r);return}}getSpawnEnv(){let e=this.getCombinedCertPath();return e?(b.info("CHROMA_SERVER","Using combined SSL certificates for enterprise compatibility",{certPath:e}),{...process.env,SSL_CERT_FILE:e,REQUESTS_CA_BUNDLE:e,CURL_CA_BUNDLE:e,NODE_EXTRA_CA_CERTS:e}):process.env}static reset(){t.instance&&t.instance.stop().catch(()=>{}),t.instance=null}};var k0=Ne(require("path"),1),yN=require("os"),An=require("fs"),qs=require("child_process"),_N=require("util");he();Pn();var xh=(0,_N.promisify)(qs.exec),bN=k0.default.join((0,yN.homedir)(),".claude-mem"),Io=k0.default.join(bN,"worker.pid"),vN=["mcp-server.cjs","worker-service.cjs","chroma-mcp"],$0=30;function xN(t){(0,An.mkdirSync)(bN,{recursive:!0}),(0,An.writeFileSync)(Io,JSON.stringify(t,null,2))}function T0(){if(!(0,An.existsSync)(Io))return null;try{return JSON.parse((0,An.readFileSync)(Io,"utf-8"))}catch(t){return b.warn("SYSTEM","Failed to parse PID file",{path:Io},t),null}}function ni(){if((0,An.existsSync)(Io))try{(0,An.unlinkSync)(Io)}catch(t){b.warn("SYSTEM","Failed to remove PID file",{path:Io},t)}}function Oo(t){return process.platform==="win32"?Math.round(t*2):t}async function SN(t){if(process.platform!=="win32")return[];if(!Number.isInteger(t)||t<=0)return b.warn("SYSTEM","Invalid parent PID for child process enumeration",{parentPid:t}),[];try{let e=`powershell -NoProfile -NonInteractive -Command "Get-Process | Where-Object { $_.ParentProcessId -eq ${t} } | Select-Object -ExpandProperty Id"`,{stdout:r}=await xh(e,{timeout:Lr.POWERSHELL_COMMAND});return r.split(`
878
880
  `).map(n=>n.trim()).filter(n=>n.length>0&&/^\d+$/.test(n)).map(n=>parseInt(n,10)).filter(n=>n>0)}catch(e){return b.error("SYSTEM","Failed to enumerate child processes",{parentPid:t},e),[]}}async function wN(t){if(!Number.isInteger(t)||t<=0){b.warn("SYSTEM","Invalid PID for force kill",{pid:t});return}try{process.platform==="win32"?await xh(`taskkill /PID ${t} /T /F`,{timeout:Lr.POWERSHELL_COMMAND}):process.kill(t,"SIGKILL"),b.info("SYSTEM","Killed process",{pid:t})}catch(e){b.debug("SYSTEM","Process already exited during force kill",{pid:t},e)}}async function EN(t,e){let r=Date.now();for(;Date.now()-r<e;){let n=t.filter(i=>{try{return process.kill(i,0),!0}catch{return!1}});if(n.length===0){b.info("SYSTEM","All child processes exited");return}b.debug("SYSTEM","Waiting for processes to exit",{stillAlive:n}),await new Promise(i=>setTimeout(i,100))}b.warn("SYSTEM","Timeout waiting for child processes to exit")}function qJ(t){if(!t||t.trim()==="")return-1;let e=t.trim(),r=0,n=e.match(/^(\d+)-(\d+):(\d+):(\d+)$/);if(n)return r=parseInt(n[1],10)*24*60+parseInt(n[2],10)*60+parseInt(n[3],10),r;let i=e.match(/^(\d+):(\d+):(\d+)$/);if(i)return r=parseInt(i[1],10)*60+parseInt(i[2],10),r;let s=e.match(/^(\d+):(\d+)$/);return s?parseInt(s[1],10):-1}async function $N(){let t=process.platform==="win32",e=process.pid,r=[];try{if(t){let i=`powershell -NoProfile -NonInteractive -Command "Get-CimInstance Win32_Process | Where-Object { (${vN.map(u=>`$_.CommandLine -like '*${u}*'`).join(" -or ")}) -and $_.ProcessId -ne ${e} } | Select-Object ProcessId, CreationDate | ConvertTo-Json"`,{stdout:s}=await xh(i,{timeout:Lr.POWERSHELL_COMMAND});if(!s.trim()||s.trim()==="null"){b.debug("SYSTEM","No orphaned claude-mem processes found (Windows)");return}let o=JSON.parse(s),a=Array.isArray(o)?o:[o],c=Date.now();for(let u of a){let l=u.ProcessId;if(!Number.isInteger(l)||l<=0||l===e)continue;let d=u.CreationDate?.match(/\/Date\((\d+)\)\//);if(d){let p=parseInt(d[1],10),m=(c-p)/(1e3*60);m>=$0&&(r.push(l),b.debug("SYSTEM","Found orphaned process",{pid:l,ageMinutes:Math.round(m)}))}}}else{let n=vN.join("|"),{stdout:i}=await xh(`ps -eo pid,etime,command | grep -E "${n}" | grep -v grep || true`);if(!i.trim()){b.debug("SYSTEM","No orphaned claude-mem processes found (Unix)");return}let s=i.trim().split(`
879
- `);for(let o of s){let a=o.trim().match(/^(\d+)\s+(\S+)\s+(.*)$/);if(!a)continue;let c=parseInt(a[1],10),u=a[2];if(!Number.isInteger(c)||c<=0||c===e)continue;let l=qJ(u);l>=$0&&(r.push(c),b.debug("SYSTEM","Found orphaned process",{pid:c,ageMinutes:l,command:a[3].substring(0,80)}))}}}catch(n){b.error("SYSTEM","Failed to enumerate orphaned processes",{},n);return}if(r.length!==0){if(b.info("SYSTEM","Cleaning up orphaned claude-mem processes",{platform:t?"Windows":"Unix",count:r.length,pids:r,maxAgeMinutes:$0}),t)for(let n of r){if(!Number.isInteger(n)||n<=0){b.warn("SYSTEM","Skipping invalid PID",{pid:n});continue}try{(0,qs.execSync)(`taskkill /PID ${n} /T /F`,{timeout:Lr.POWERSHELL_COMMAND,stdio:"ignore"})}catch(i){b.debug("SYSTEM","Failed to kill process, may have already exited",{pid:n},i)}}else for(let n of r)try{process.kill(n,"SIGKILL")}catch(i){b.debug("SYSTEM","Process already exited",{pid:n},i)}b.info("SYSTEM","Orphaned processes cleaned up",{count:r.length})}}function I0(t,e,r={}){let n=process.platform==="win32",i={...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r};if(n){let u=`Start-Process -FilePath '${process.execPath}' -ArgumentList '${t}','--daemon' -WindowStyle Hidden`;try{return(0,qs.execSync)(`powershell -NoProfile -Command "${u}"`,{stdio:"ignore",windowsHide:!0,env:i}),0}catch{return}}let s="/usr/bin/setsid";if((0,An.existsSync)(s)){let a=(0,qs.spawn)(s,[process.execPath,t,"--daemon"],{detached:!0,stdio:"ignore",env:i});return a.pid===void 0?void 0:(a.unref(),a.pid)}let o=(0,qs.spawn)(process.execPath,[t,"--daemon"],{detached:!0,stdio:"ignore",env:i});if(o.pid!==void 0)return o.unref(),o.pid}function FJ(t){if(t===0)return!0;if(!Number.isInteger(t)||t<0)return!1;try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function kN(){let t=T0();t&&(FJ(t.pid)||(b.info("SYSTEM","Removing stale PID file (worker process is dead)",{pid:t.pid,port:t.port,startedAt:t.startedAt}),ni()))}function TN(t,e){return async r=>{if(e.value){b.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}e.value=!0,b.info("SYSTEM",`Received ${r}, shutting down...`);try{await t(),process.exit(0)}catch(n){b.error("SYSTEM","Error during shutdown",{},n),process.exit(0)}}}var IN=Ne(require("path"),1),ON=require("fs");he();Wt();async function bd(t){try{return(await fetch(`http://127.0.0.1:${t}/api/health`)).ok}catch{return!1}}async function xd(t,e=3e4){let r=Date.now();for(;Date.now()-r<e;){try{if((await fetch(`http://127.0.0.1:${t}/api/health`)).ok)return!0}catch(n){b.debug("SYSTEM","Service not ready yet, will retry",{port:t},n)}await new Promise(n=>setTimeout(n,500))}return!1}async function Sh(t,e=1e4){let r=Date.now();for(;Date.now()-r<e;){if(!await bd(t))return!0;await new Promise(n=>setTimeout(n,500))}return!1}async function wh(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/admin/shutdown`,{method:"POST"});return e.ok?!0:(b.warn("SYSTEM","Shutdown request returned error",{port:t,status:e.status}),!1)}catch(e){return e instanceof Error&&e.message?.includes("ECONNREFUSED")?(b.debug("SYSTEM","Worker already stopped",{port:t},e),!1):(b.error("SYSTEM","Shutdown request failed unexpectedly",{port:t},e),!1)}}function ZJ(){let t=IN.default.join(Ii,"package.json");return JSON.parse((0,ON.readFileSync)(t,"utf-8")).version}async function HJ(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/version`);return e.ok?(await e.json()).version:null}catch{return b.debug("SYSTEM","Could not fetch worker version",{port:t}),null}}async function RN(t){let e=ZJ(),r=await HJ(t);return r?{matches:e===r,pluginVersion:e,workerVersion:r}:{matches:!0,pluginVersion:e,workerVersion:r}}he();async function CN(t){b.info("SYSTEM","Shutdown initiated"),ni();let e=await SN(process.pid);if(b.info("SYSTEM","Found child processes",{count:e.length,pids:e}),t.server&&(await BJ(t.server),b.info("SYSTEM","HTTP server closed")),await t.sessionManager.shutdownAll(),t.mcpClient&&(await t.mcpClient.close(),b.info("SYSTEM","MCP client closed")),t.chromaServer&&(b.info("SHUTDOWN","Stopping Chroma server..."),await t.chromaServer.stop(),b.info("SHUTDOWN","Chroma server stopped")),t.dbManager&&await t.dbManager.close(),e.length>0){b.info("SYSTEM","Force killing remaining children");for(let r of e)await wN(r);await EN(e,5e3)}b.info("SYSTEM","Worker shutdown complete")}async function BJ(t){t.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{t.close(n=>n?r(n):e())}),process.platform==="win32"&&(await new Promise(e=>setTimeout(e,500)),b.info("SYSTEM","Waited for Windows port cleanup"))}var UU=Ne(Rg(),1),N$=Ne(require("fs"),1),M$=Ne(require("path"),1);he();var C$=Ne(Rg(),1),AU=Ne(PU(),1),NU=Ne(require("path"),1);Wt();he();function P$(t){let e=[];e.push(C$.default.json({limit:"50mb"})),e.push((0,AU.default)({origin:(i,s)=>{!i||i.startsWith("http://localhost:")||i.startsWith("http://127.0.0.1:")?s(null,!0):s(new Error("CORS not allowed"))},credentials:!1})),e.push((i,s,o)=>{let c=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(f=>i.path.endsWith(f)),u=i.path==="/api/logs";if(i.path.startsWith("/health")||i.path==="/"||c||u)return o();let l=Date.now(),d=`${i.method}-${Date.now()}`,p=t(i.method,i.path,i.body);b.info("HTTP",`\u2192 ${i.method} ${i.path}`,{requestId:d},p);let m=s.send.bind(s);s.send=function(f){let h=Date.now()-l;return b.info("HTTP",`\u2190 ${s.statusCode} ${i.path}`,{requestId:d,duration:`${h}ms`}),m(f)},o()});let r=Qr(),n=NU.default.join(r,"plugin","ui");return e.push(C$.default.static(n)),e}function Cg(t,e,r){let n=t.ip||t.connection.remoteAddress||"";if(!(n==="127.0.0.1"||n==="::1"||n==="::ffff:127.0.0.1"||n==="localhost")){b.warn("SECURITY","Admin endpoint access denied - not localhost",{endpoint:t.path,clientIp:n,method:t.method}),e.status(403).json({error:"Forbidden",message:"Admin endpoints are only accessible from localhost"});return}r()}function A$(t,e,r){if(!r||Object.keys(r).length===0||e.includes("/init"))return"";if(e.includes("/observations")){let n=r.tool_name||"?",i=r.tool_input;return`tool=${b.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}he();var zc=class extends Error{constructor(r,n=500,i,s){super(r);this.statusCode=n;this.code=i;this.details=s;this.name="AppError"}};function MU(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}var DU=(t,e,r,n)=>{let i=t instanceof zc?t.statusCode:500;b.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof zc?t.code:void 0},t);let s=MU(t.name||"Error",t.message,t instanceof zc?t.code:void 0,t instanceof zc?t.details:void 0);r.status(i).json(s)};function jU(t,e){e.status(404).json(MU("NotFound",`Cannot ${t.method} ${t.path}`))}var zU="10.0.8",Pg=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,UU.default)(),this.setupMiddleware(),this.setupCoreRoutes()}getHttpServer(){return this.server}async listen(e,r){return new Promise((n,i)=>{this.server=this.app.listen(e,r,()=>{b.info("SYSTEM","HTTP server started",{host:r,port:e,pid:process.pid}),n()}),this.server.on("error",i)})}async close(){this.server&&(this.server.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{this.server.close(n=>n?r(n):e())}),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),this.server=null,b.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(jU),this.app.use(DU)}setupMiddleware(){P$(A$).forEach(r=>this.app.use(r))}setupCoreRoutes(){this.app.get("/api/health",(e,r)=>{r.status(200).json({status:"ok",version:zU,workerPath:this.options.workerPath,uptime:Date.now()-this.startTime,managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.options.getInitializationComplete(),mcpReady:this.options.getMcpReady(),ai:this.options.getAiStatus()})}),this.app.get("/api/readiness",(e,r)=>{this.options.getInitializationComplete()?r.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):r.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(e,r)=>{r.status(200).json({version:zU})}),this.app.get("/api/instructions",async(e,r)=>{let n=e.query.topic||"all",i=e.query.operation;try{let s;if(i){let o=M$.default.join(__dirname,"../skills/mem-search/operations",`${i}.md`);s=await N$.promises.readFile(o,"utf-8")}else{let o=M$.default.join(__dirname,"../skills/mem-search/SKILL.md"),a=await N$.promises.readFile(o,"utf-8");s=this.extractInstructionSection(a,n)}r.json({content:[{type:"text",text:s}]})}catch{r.status(404).json({error:"Instruction not found"})}}),this.app.post("/api/admin/restart",Cg,async(e,r)=>{r.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(b.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.options.onRestart()},100)}),this.app.post("/api/admin/shutdown",Cg,async(e,r)=>{r.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(b.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown"})):setTimeout(async()=>{await this.options.onShutdown()},100)})}extractInstructionSection(e,r){let n={workflow:this.extractBetween(e,"## The Workflow","## Search Parameters"),search_params:this.extractBetween(e,"## Search Parameters","## Examples"),examples:this.extractBetween(e,"## Examples","## Why This Workflow"),all:e};return n[r]||n.all}extractBetween(e,r,n){let i=e.indexOf(r),s=e.indexOf(n);return i===-1?e:s===-1?e.substring(i):e.substring(i,s).trim()}};var tt=Ne(require("path"),1),op=require("os"),Ct=require("fs"),FU=require("child_process"),ZU=require("util");he();qr();Wt();var zn=require("fs"),sp=require("path");he();function LU(t){try{return(0,zn.existsSync)(t)?JSON.parse((0,zn.readFileSync)(t,"utf-8")):{}}catch(e){return b.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function qU(t,e){let r=(0,sp.join)(t,"..");(0,zn.mkdirSync)(r,{recursive:!0}),(0,zn.writeFileSync)(t,JSON.stringify(e,null,2))}function D$(t,e){let r=(0,sp.join)(t,".cursor","rules"),n=(0,sp.join)(r,"claude-mem-context.mdc"),i=`${n}.tmp`;(0,zn.mkdirSync)(r,{recursive:!0});let s=`---
881
+ `);for(let o of s){let a=o.trim().match(/^(\d+)\s+(\S+)\s+(.*)$/);if(!a)continue;let c=parseInt(a[1],10),u=a[2];if(!Number.isInteger(c)||c<=0||c===e)continue;let l=qJ(u);l>=$0&&(r.push(c),b.debug("SYSTEM","Found orphaned process",{pid:c,ageMinutes:l,command:a[3].substring(0,80)}))}}}catch(n){b.error("SYSTEM","Failed to enumerate orphaned processes",{},n);return}if(r.length!==0){if(b.info("SYSTEM","Cleaning up orphaned claude-mem processes",{platform:t?"Windows":"Unix",count:r.length,pids:r,maxAgeMinutes:$0}),t)for(let n of r){if(!Number.isInteger(n)||n<=0){b.warn("SYSTEM","Skipping invalid PID",{pid:n});continue}try{(0,qs.execSync)(`taskkill /PID ${n} /T /F`,{timeout:Lr.POWERSHELL_COMMAND,stdio:"ignore"})}catch(i){b.debug("SYSTEM","Failed to kill process, may have already exited",{pid:n},i)}}else for(let n of r)try{process.kill(n,"SIGKILL")}catch(i){b.debug("SYSTEM","Process already exited",{pid:n},i)}b.info("SYSTEM","Orphaned processes cleaned up",{count:r.length})}}function I0(t,e,r={}){let n=process.platform==="win32",i={...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r};if(n){let u=`Start-Process -FilePath '${process.execPath}' -ArgumentList '${t}','--daemon' -WindowStyle Hidden`;try{return(0,qs.execSync)(`powershell -NoProfile -Command "${u}"`,{stdio:"ignore",windowsHide:!0,env:i}),0}catch{return}}let s="/usr/bin/setsid";if((0,An.existsSync)(s)){let a=(0,qs.spawn)(s,[process.execPath,t,"--daemon"],{detached:!0,stdio:"ignore",env:i});return a.pid===void 0?void 0:(a.unref(),a.pid)}let o=(0,qs.spawn)(process.execPath,[t,"--daemon"],{detached:!0,stdio:"ignore",env:i});if(o.pid!==void 0)return o.unref(),o.pid}function FJ(t){if(t===0)return!0;if(!Number.isInteger(t)||t<0)return!1;try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function kN(){let t=T0();t&&(FJ(t.pid)||(b.info("SYSTEM","Removing stale PID file (worker process is dead)",{pid:t.pid,port:t.port,startedAt:t.startedAt}),ni()))}function TN(t,e){return async r=>{if(e.value){b.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}e.value=!0,b.info("SYSTEM",`Received ${r}, shutting down...`);try{await t(),process.exit(0)}catch(n){b.error("SYSTEM","Error during shutdown",{},n),process.exit(0)}}}var IN=Ne(require("path"),1),ON=require("fs");he();Wt();async function bd(t){try{return(await fetch(`http://127.0.0.1:${t}/api/health`)).ok}catch{return!1}}async function xd(t,e=3e4){let r=Date.now();for(;Date.now()-r<e;){try{if((await fetch(`http://127.0.0.1:${t}/api/health`)).ok)return!0}catch(n){b.debug("SYSTEM","Service not ready yet, will retry",{port:t},n)}await new Promise(n=>setTimeout(n,500))}return!1}async function Sh(t,e=1e4){let r=Date.now();for(;Date.now()-r<e;){if(!await bd(t))return!0;await new Promise(n=>setTimeout(n,500))}return!1}async function wh(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/admin/shutdown`,{method:"POST"});return e.ok?!0:(b.warn("SYSTEM","Shutdown request returned error",{port:t,status:e.status}),!1)}catch(e){return e instanceof Error&&e.message?.includes("ECONNREFUSED")?(b.debug("SYSTEM","Worker already stopped",{port:t},e),!1):(b.error("SYSTEM","Shutdown request failed unexpectedly",{port:t},e),!1)}}function ZJ(){let t=IN.default.join(Ii,"package.json");return JSON.parse((0,ON.readFileSync)(t,"utf-8")).version}async function HJ(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/version`);return e.ok?(await e.json()).version:null}catch{return b.debug("SYSTEM","Could not fetch worker version",{port:t}),null}}async function RN(t){let e=ZJ(),r=await HJ(t);return r?{matches:e===r,pluginVersion:e,workerVersion:r}:{matches:!0,pluginVersion:e,workerVersion:r}}he();async function CN(t){b.info("SYSTEM","Shutdown initiated"),ni();let e=await SN(process.pid);if(b.info("SYSTEM","Found child processes",{count:e.length,pids:e}),t.server&&(await BJ(t.server),b.info("SYSTEM","HTTP server closed")),await t.sessionManager.shutdownAll(),t.mcpClient&&(await t.mcpClient.close(),b.info("SYSTEM","MCP client closed")),t.chromaServer&&(b.info("SHUTDOWN","Stopping Chroma server..."),await t.chromaServer.stop(),b.info("SHUTDOWN","Chroma server stopped")),t.dbManager&&await t.dbManager.close(),e.length>0){b.info("SYSTEM","Force killing remaining children");for(let r of e)await wN(r);await EN(e,5e3)}b.info("SYSTEM","Worker shutdown complete")}async function BJ(t){t.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{t.close(n=>n?r(n):e())}),process.platform==="win32"&&(await new Promise(e=>setTimeout(e,500)),b.info("SYSTEM","Waited for Windows port cleanup"))}var UU=Ne(Rg(),1),N$=Ne(require("fs"),1),M$=Ne(require("path"),1);he();var C$=Ne(Rg(),1),AU=Ne(PU(),1),NU=Ne(require("path"),1);Wt();he();function P$(t){let e=[];e.push(C$.default.json({limit:"50mb"})),e.push((0,AU.default)({origin:(i,s)=>{!i||i.startsWith("http://localhost:")||i.startsWith("http://127.0.0.1:")?s(null,!0):s(new Error("CORS not allowed"))},credentials:!1})),e.push((i,s,o)=>{let c=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(f=>i.path.endsWith(f)),u=i.path==="/api/logs";if(i.path.startsWith("/health")||i.path==="/"||c||u)return o();let l=Date.now(),d=`${i.method}-${Date.now()}`,p=t(i.method,i.path,i.body);b.info("HTTP",`\u2192 ${i.method} ${i.path}`,{requestId:d},p);let m=s.send.bind(s);s.send=function(f){let h=Date.now()-l;return b.info("HTTP",`\u2190 ${s.statusCode} ${i.path}`,{requestId:d,duration:`${h}ms`}),m(f)},o()});let r=Qr(),n=NU.default.join(r,"plugin","ui");return e.push(C$.default.static(n)),e}function Cg(t,e,r){let n=t.ip||t.connection.remoteAddress||"";if(!(n==="127.0.0.1"||n==="::1"||n==="::ffff:127.0.0.1"||n==="localhost")){b.warn("SECURITY","Admin endpoint access denied - not localhost",{endpoint:t.path,clientIp:n,method:t.method}),e.status(403).json({error:"Forbidden",message:"Admin endpoints are only accessible from localhost"});return}r()}function A$(t,e,r){if(!r||Object.keys(r).length===0||e.includes("/init"))return"";if(e.includes("/observations")){let n=r.tool_name||"?",i=r.tool_input;return`tool=${b.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}he();var zc=class extends Error{constructor(r,n=500,i,s){super(r);this.statusCode=n;this.code=i;this.details=s;this.name="AppError"}};function MU(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}var DU=(t,e,r,n)=>{let i=t instanceof zc?t.statusCode:500;b.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof zc?t.code:void 0},t);let s=MU(t.name||"Error",t.message,t instanceof zc?t.code:void 0,t instanceof zc?t.details:void 0);r.status(i).json(s)};function jU(t,e){e.status(404).json(MU("NotFound",`Cannot ${t.method} ${t.path}`))}var zU="10.1.0",Pg=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,UU.default)(),this.setupMiddleware(),this.setupCoreRoutes()}getHttpServer(){return this.server}async listen(e,r){return new Promise((n,i)=>{this.server=this.app.listen(e,r,()=>{b.info("SYSTEM","HTTP server started",{host:r,port:e,pid:process.pid}),n()}),this.server.on("error",i)})}async close(){this.server&&(this.server.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{this.server.close(n=>n?r(n):e())}),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),this.server=null,b.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(jU),this.app.use(DU)}setupMiddleware(){P$(A$).forEach(r=>this.app.use(r))}setupCoreRoutes(){this.app.get("/api/health",(e,r)=>{r.status(200).json({status:"ok",version:zU,workerPath:this.options.workerPath,uptime:Date.now()-this.startTime,managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.options.getInitializationComplete(),mcpReady:this.options.getMcpReady(),ai:this.options.getAiStatus()})}),this.app.get("/api/readiness",(e,r)=>{this.options.getInitializationComplete()?r.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):r.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(e,r)=>{r.status(200).json({version:zU})}),this.app.get("/api/instructions",async(e,r)=>{let n=e.query.topic||"all",i=e.query.operation;try{let s;if(i){let o=M$.default.join(__dirname,"../skills/mem-search/operations",`${i}.md`);s=await N$.promises.readFile(o,"utf-8")}else{let o=M$.default.join(__dirname,"../skills/mem-search/SKILL.md"),a=await N$.promises.readFile(o,"utf-8");s=this.extractInstructionSection(a,n)}r.json({content:[{type:"text",text:s}]})}catch{r.status(404).json({error:"Instruction not found"})}}),this.app.post("/api/admin/restart",Cg,async(e,r)=>{r.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(b.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.options.onRestart()},100)}),this.app.post("/api/admin/shutdown",Cg,async(e,r)=>{r.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(b.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown"})):setTimeout(async()=>{await this.options.onShutdown()},100)})}extractInstructionSection(e,r){let n={workflow:this.extractBetween(e,"## The Workflow","## Search Parameters"),search_params:this.extractBetween(e,"## Search Parameters","## Examples"),examples:this.extractBetween(e,"## Examples","## Why This Workflow"),all:e};return n[r]||n.all}extractBetween(e,r,n){let i=e.indexOf(r),s=e.indexOf(n);return i===-1?e:s===-1?e.substring(i):e.substring(i,s).trim()}};var tt=Ne(require("path"),1),op=require("os"),Ct=require("fs"),FU=require("child_process"),ZU=require("util");he();qr();Wt();var zn=require("fs"),sp=require("path");he();function LU(t){try{return(0,zn.existsSync)(t)?JSON.parse((0,zn.readFileSync)(t,"utf-8")):{}}catch(e){return b.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function qU(t,e){let r=(0,sp.join)(t,"..");(0,zn.mkdirSync)(r,{recursive:!0}),(0,zn.writeFileSync)(t,JSON.stringify(e,null,2))}function D$(t,e){let r=(0,sp.join)(t,".cursor","rules"),n=(0,sp.join)(r,"claude-mem-context.mdc"),i=`${n}.tmp`;(0,zn.mkdirSync)(r,{recursive:!0});let s=`---
880
882
  alwaysApply: true
881
883
  description: "Claude-mem context from past sessions (auto-updated)"
882
884
  ---
@@ -1405,7 +1407,7 @@ Tips:
1405
1407
  ORDER BY MAX(created_at_epoch) DESC
1406
1408
  `).all().map(a=>a.project);n.json({projects:o})});handleGetProcessingStatus=this.wrapHandler((r,n)=>{let i=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalActiveWork();n.json({isProcessing:i,queueDepth:s})});handleSetProcessing=this.wrapHandler((r,n)=>{this.workerService.broadcastProcessingStatus();let i=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalQueueDepth(),o=this.sessionManager.getActiveSessionCount();n.json({status:"ok",isProcessing:i,queueDepth:s,activeSessions:o})});parsePaginationParams(r){let n=parseInt(r.query.offset,10)||0,i=Math.min(parseInt(r.query.limit,10)||20,100),s=r.query.project;return{offset:n,limit:i,project:s}}handleImport=this.wrapHandler((r,n)=>{let{sessions:i,summaries:s,observations:o,prompts:a}=r.body,c={sessionsImported:0,sessionsSkipped:0,summariesImported:0,summariesSkipped:0,observationsImported:0,observationsSkipped:0,promptsImported:0,promptsSkipped:0},u=this.dbManager.getSessionStore();if(Array.isArray(i))for(let l of i)u.importSdkSession(l).imported?c.sessionsImported++:c.sessionsSkipped++;if(Array.isArray(s))for(let l of s)u.importSessionSummary(l).imported?c.summariesImported++:c.summariesSkipped++;if(Array.isArray(o))for(let l of o)u.importObservation(l).imported?c.observationsImported++:c.observationsSkipped++;if(Array.isArray(a))for(let l of a)u.importUserPrompt(l).imported?c.promptsImported++:c.promptsSkipped++;n.json({success:!0,stats:c})});handleGetPendingQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(Ys(),Pu(ea)),s=new i(this.dbManager.getSessionStore().db,3),o=s.getQueueMessages(),a=s.getRecentlyProcessed(20,30),c=s.getStuckCount(300*1e3),u=s.getSessionsWithPendingMessages();n.json({queue:{messages:o,totalPending:o.filter(l=>l.status==="pending").length,totalProcessing:o.filter(l=>l.status==="processing").length,totalFailed:o.filter(l=>l.status==="failed").length,stuckCount:c},recentlyProcessed:a,sessionsWithPendingWork:u})});handleProcessPendingQueue=this.wrapHandler(async(r,n)=>{let i=Math.min(Math.max(parseInt(r.body.sessionLimit,10)||10,1),100),s=await this.workerService.processPendingQueues(i);n.json({success:!0,...s})});handleClearFailedQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(Ys(),Pu(ea)),o=new i(this.dbManager.getSessionStore().db,3).clearFailed();b.info("QUEUE","Cleared failed queue messages",{clearedCount:o}),n.json({success:!0,clearedCount:o})});handleClearAllQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(Ys(),Pu(ea)),o=new i(this.dbManager.getSessionStore().db,3).clearAll();b.warn("QUEUE","Cleared ALL queue messages (pending, processing, failed)",{clearedCount:o}),n.json({success:!0,clearedCount:o})})};var ry=class extends Pr{constructor(r){super();this.searchManager=r}setupRoutes(r){r.get("/api/search",this.handleUnifiedSearch.bind(this)),r.get("/api/timeline",this.handleUnifiedTimeline.bind(this)),r.get("/api/decisions",this.handleDecisions.bind(this)),r.get("/api/changes",this.handleChanges.bind(this)),r.get("/api/how-it-works",this.handleHowItWorks.bind(this)),r.get("/api/search/observations",this.handleSearchObservations.bind(this)),r.get("/api/search/sessions",this.handleSearchSessions.bind(this)),r.get("/api/search/prompts",this.handleSearchPrompts.bind(this)),r.get("/api/search/by-concept",this.handleSearchByConcept.bind(this)),r.get("/api/search/by-file",this.handleSearchByFile.bind(this)),r.get("/api/search/by-type",this.handleSearchByType.bind(this)),r.get("/api/context/recent",this.handleGetRecentContext.bind(this)),r.get("/api/context/timeline",this.handleGetContextTimeline.bind(this)),r.get("/api/context/preview",this.handleContextPreview.bind(this)),r.get("/api/context/inject",this.handleContextInject.bind(this)),r.get("/api/timeline/by-query",this.handleGetTimelineByQuery.bind(this)),r.get("/api/search/help",this.handleSearchHelp.bind(this))}handleUnifiedSearch=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.search(r.query);n.json(i)});handleUnifiedTimeline=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.timeline(r.query);n.json(i)});handleDecisions=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.decisions(r.query);n.json(i)});handleChanges=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.changes(r.query);n.json(i)});handleHowItWorks=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.howItWorks(r.query);n.json(i)});handleSearchObservations=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.searchObservations(r.query);n.json(i)});handleSearchSessions=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.searchSessions(r.query);n.json(i)});handleSearchPrompts=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.searchUserPrompts(r.query);n.json(i)});handleSearchByConcept=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.findByConcept(r.query);n.json(i)});handleSearchByFile=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.findByFile(r.query);n.json(i)});handleSearchByType=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.findByType(r.query);n.json(i)});handleGetRecentContext=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.getRecentContext(r.query);n.json(i)});handleGetContextTimeline=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.getContextTimeline(r.query);n.json(i)});handleContextPreview=this.wrapHandler(async(r,n)=>{let i=r.query.project;if(!i){this.badRequest(n,"Project parameter is required");return}let{generateContext:s}=await Promise.resolve().then(()=>(ST(),xT)),o=`/preview/${i}`,a=await s({session_id:"preview-"+Date.now(),cwd:o},!0);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(a)});handleContextInject=this.wrapHandler(async(r,n)=>{let i=r.query.projects||r.query.project,s=r.query.colors==="true";if(!i){this.badRequest(n,"Project(s) parameter is required");return}let o=i.split(",").map(d=>d.trim()).filter(Boolean);if(o.length===0){this.badRequest(n,"At least one project is required");return}let{generateContext:a}=await Promise.resolve().then(()=>(ST(),xT)),u=`/context/${o[o.length-1]}`,l=await a({session_id:"context-inject-"+Date.now(),cwd:u,projects:o},s);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(l)});handleGetTimelineByQuery=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.getTimelineByQuery(r.query);n.json(i)});handleSearchHelp=this.wrapHandler((r,n)=>{n.json({title:"Claude-Mem Search API",description:"HTTP API for searching persistent memory",endpoints:[{path:"/api/search/observations",method:"GET",description:"Search observations using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/sessions",method:"GET",description:"Search session summaries using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)"}},{path:"/api/search/prompts",method:"GET",description:"Search user prompts using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/by-concept",method:"GET",description:"Find observations by concept tag",parameters:{concept:"Concept tag (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-file",method:"GET",description:"Find observations and sessions by file path",parameters:{filePath:"File path or partial path (required)",limit:"Number of results per type (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-type",method:"GET",description:"Find observations by type",parameters:{type:"Observation type (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/context/recent",method:"GET",description:"Get recent session context including summaries and observations",parameters:{project:"Project name (default: current directory)",limit:"Number of recent sessions (default: 3)"}},{path:"/api/context/timeline",method:"GET",description:"Get unified timeline around a specific point in time",parameters:{anchor:'Anchor point: observation ID, session ID (e.g., "S123"), or ISO timestamp (required)',depth_before:"Number of records before anchor (default: 10)",depth_after:"Number of records after anchor (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/timeline/by-query",method:"GET",description:"Search for best match, then get timeline around it",parameters:{query:"Search query (required)",mode:'Search mode: "auto", "observations", or "sessions" (default: "auto")',depth_before:"Number of records before match (default: 10)",depth_after:"Number of records after match (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/help",method:"GET",description:"Get this help documentation"}],examples:['curl "http://localhost:37777/api/search/observations?query=authentication&limit=5"','curl "http://localhost:37777/api/search/by-type?type=bugfix&limit=10"','curl "http://localhost:37777/api/context/recent?project=claude-mem&limit=3"','curl "http://localhost:37777/api/context/timeline?anchor=123&depth_before=5&depth_after=5"']})})};var ma=Ne(require("path"),1),xr=require("fs"),kT=require("os");Wt();he();var ET=require("child_process"),pa=require("fs"),ny=require("path");he();Wt();var rm=Ii;function wT(t){return!t||typeof t!="string"?!1:/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(t)&&!t.includes("..")}var wye=3e5,$T=6e5;function Vn(t){let e=(0,ET.spawnSync)("git",t,{cwd:rm,encoding:"utf-8",timeout:wye,windowsHide:!0,shell:!1});if(e.error)throw e.error;if(e.status!==0)throw new Error(e.stderr||e.stdout||"Git command failed");return e.stdout.trim()}function j9(t,e=$T){let n=process.platform==="win32"?"npm.cmd":"npm",i=(0,ET.spawnSync)(n,t,{cwd:rm,encoding:"utf-8",timeout:e,windowsHide:!0,shell:!1});if(i.error)throw i.error;if(i.status!==0)throw new Error(i.stderr||i.stdout||"npm command failed");return i.stdout.trim()}function iy(){let t=(0,ny.join)(rm,".git");if(!(0,pa.existsSync)(t))return{branch:null,isBeta:!1,isGitRepo:!1,isDirty:!1,canSwitch:!1,error:"Installed plugin is not a git repository"};try{let e=Vn(["rev-parse","--abbrev-ref","HEAD"]),n=Vn(["status","--porcelain"]).length>0,i=e.startsWith("beta");return{branch:e,isBeta:i,isGitRepo:!0,isDirty:n,canSwitch:!0}}catch(e){return b.error("BRANCH","Failed to get branch info",{},e),{branch:null,isBeta:!1,isGitRepo:!0,isDirty:!1,canSwitch:!1,error:e.message}}}async function z9(t){if(!wT(t))return{success:!1,error:`Invalid branch name: ${t}. Branch names must be alphanumeric with hyphens, underscores, slashes, or dots.`};let e=iy();if(!e.isGitRepo)return{success:!1,error:"Installed plugin is not a git repository. Please reinstall."};if(e.branch===t)return{success:!0,branch:t,message:`Already on branch ${t}`};try{b.info("BRANCH","Starting branch switch",{from:e.branch,to:t}),b.debug("BRANCH","Discarding local changes"),Vn(["checkout","--","."]),Vn(["clean","-fd"]),b.debug("BRANCH","Fetching from origin"),Vn(["fetch","origin"]),b.debug("BRANCH","Checking out branch",{branch:t});try{Vn(["checkout",t])}catch(n){b.debug("BRANCH","Branch not local, tracking remote",{branch:t,error:n instanceof Error?n.message:String(n)}),Vn(["checkout","-b",t,`origin/${t}`])}b.debug("BRANCH","Pulling latest"),Vn(["pull","origin",t]);let r=(0,ny.join)(rm,".install-version");return(0,pa.existsSync)(r)&&(0,pa.unlinkSync)(r),b.debug("BRANCH","Running npm install"),j9(["install"],$T),b.success("BRANCH","Branch switch complete",{branch:t}),{success:!0,branch:t,message:`Switched to ${t}. Worker will restart automatically.`}}catch(r){b.error("BRANCH","Branch switch failed",{targetBranch:t},r);try{e.branch&&wT(e.branch)&&Vn(["checkout",e.branch])}catch(n){b.error("BRANCH","Recovery checkout also failed",{originalBranch:e.branch},n)}return{success:!1,error:`Branch switch failed: ${r.message}`}}}async function U9(){let t=iy();if(!t.isGitRepo||!t.branch)return{success:!1,error:"Cannot pull updates: not a git repository"};try{if(!wT(t.branch))return{success:!1,error:`Invalid current branch name: ${t.branch}`};b.info("BRANCH","Pulling updates",{branch:t.branch}),Vn(["checkout","--","."]),Vn(["fetch","origin"]),Vn(["pull","origin",t.branch]);let e=(0,ny.join)(rm,".install-version");return(0,pa.existsSync)(e)&&(0,pa.unlinkSync)(e),j9(["install"],$T),b.success("BRANCH","Updates pulled",{branch:t.branch}),{success:!0,branch:t.branch,message:`Updated ${t.branch}. Worker will restart automatically.`}}catch(e){return b.error("BRANCH","Pull failed",{},e),{success:!1,error:`Pull failed: ${e.message}`}}}sr();qr();var sy=class extends Pr{constructor(r){super();this.settingsManager=r}setupRoutes(r){r.get("/api/settings",this.handleGetSettings.bind(this)),r.post("/api/settings",this.handleUpdateSettings.bind(this)),r.get("/api/mcp/status",this.handleGetMcpStatus.bind(this)),r.post("/api/mcp/toggle",this.handleToggleMcp.bind(this)),r.get("/api/branch/status",this.handleGetBranchStatus.bind(this)),r.post("/api/branch/switch",this.handleSwitchBranch.bind(this)),r.post("/api/branch/update",this.handleUpdateBranch.bind(this))}handleGetSettings=this.wrapHandler((r,n)=>{let i=ma.default.join((0,kT.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(i);let s=Re.loadFromFile(i);n.json(s)});handleUpdateSettings=this.wrapHandler((r,n)=>{let i=this.validateSettings(r.body);if(!i.valid){n.status(400).json({success:!1,error:i.error});return}let s=ma.default.join((0,kT.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(s);let o={};if((0,xr.existsSync)(s)){let c=(0,xr.readFileSync)(s,"utf-8");try{o=JSON.parse(c)}catch(u){b.error("SETTINGS","Failed to parse settings file",{settingsPath:s},u),n.status(500).json({success:!1,error:"Settings file is corrupted. Delete ~/.claude-mem/settings.json to reset."});return}}let a=["CLAUDE_MEM_MODEL","CLAUDE_MEM_CONTEXT_OBSERVATIONS","CLAUDE_MEM_WORKER_PORT","CLAUDE_MEM_WORKER_HOST","CLAUDE_MEM_PROVIDER","CLAUDE_MEM_GEMINI_API_KEY","CLAUDE_MEM_GEMINI_MODEL","CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED","CLAUDE_MEM_OPENROUTER_API_KEY","CLAUDE_MEM_OPENROUTER_MODEL","CLAUDE_MEM_OPENROUTER_SITE_URL","CLAUDE_MEM_OPENROUTER_APP_NAME","CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES","CLAUDE_MEM_OPENROUTER_MAX_TOKENS","CLAUDE_MEM_DATA_DIR","CLAUDE_MEM_LOG_LEVEL","CLAUDE_MEM_PYTHON_VERSION","CLAUDE_CODE_PATH","CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES","CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS","CLAUDE_MEM_CONTEXT_FULL_COUNT","CLAUDE_MEM_CONTEXT_FULL_FIELD","CLAUDE_MEM_CONTEXT_SESSION_COUNT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE","CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED"];for(let c of a)r.body[c]!==void 0&&(o[c]=r.body[c]);(0,xr.writeFileSync)(s,JSON.stringify(o,null,2),"utf-8"),fN(),b.info("WORKER","Settings updated"),n.json({success:!0,message:"Settings updated successfully"})});handleGetMcpStatus=this.wrapHandler((r,n)=>{let i=this.isMcpEnabled();n.json({enabled:i})});handleToggleMcp=this.wrapHandler((r,n)=>{let{enabled:i}=r.body;if(typeof i!="boolean"){this.badRequest(n,"enabled must be a boolean");return}this.toggleMcp(i),n.json({success:!0,enabled:this.isMcpEnabled()})});handleGetBranchStatus=this.wrapHandler((r,n)=>{let i=iy();n.json(i)});handleSwitchBranch=this.wrapHandler(async(r,n)=>{let{branch:i}=r.body;if(!i){n.status(400).json({success:!1,error:"Missing branch parameter"});return}let s=["main","beta/7.0","feature/bun-executable"];if(!s.includes(i)){n.status(400).json({success:!1,error:`Invalid branch. Allowed: ${s.join(", ")}`});return}b.info("WORKER","Branch switch requested",{branch:i});let o=await z9(i);o.success&&setTimeout(()=>{b.info("WORKER","Restarting worker after branch switch"),process.exit(0)},1e3),n.json(o)});handleUpdateBranch=this.wrapHandler(async(r,n)=>{b.info("WORKER","Branch update requested");let i=await U9();i.success&&setTimeout(()=>{b.info("WORKER","Restarting worker after branch update"),process.exit(0)},1e3),n.json(i)});validateSettings(r){if(r.CLAUDE_MEM_PROVIDER&&!["claude","gemini","openrouter"].includes(r.CLAUDE_MEM_PROVIDER))return{valid:!1,error:'CLAUDE_MEM_PROVIDER must be "claude", "gemini", or "openrouter"'};if(r.CLAUDE_MEM_GEMINI_MODEL&&!["gemini-2.5-flash-lite","gemini-2.5-flash","gemini-3-flash-preview"].includes(r.CLAUDE_MEM_GEMINI_MODEL))return{valid:!1,error:"CLAUDE_MEM_GEMINI_MODEL must be one of: gemini-2.5-flash-lite, gemini-2.5-flash, gemini-3-flash-preview"};if(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS){let i=parseInt(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10);if(isNaN(i)||i<1||i>200)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200"}}if(r.CLAUDE_MEM_WORKER_PORT){let i=parseInt(r.CLAUDE_MEM_WORKER_PORT,10);if(isNaN(i)||i<1024||i>65535)return{valid:!1,error:"CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535"}}if(r.CLAUDE_MEM_WORKER_HOST){let i=r.CLAUDE_MEM_WORKER_HOST;if(!/^(127\.0\.0\.1|0\.0\.0\.0|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.test(i))return{valid:!1,error:"CLAUDE_MEM_WORKER_HOST must be a valid IP address (e.g., 127.0.0.1, 0.0.0.0)"}}if(r.CLAUDE_MEM_LOG_LEVEL&&!["DEBUG","INFO","WARN","ERROR","SILENT"].includes(r.CLAUDE_MEM_LOG_LEVEL.toUpperCase()))return{valid:!1,error:"CLAUDE_MEM_LOG_LEVEL must be one of: DEBUG, INFO, WARN, ERROR, SILENT"};if(r.CLAUDE_MEM_PYTHON_VERSION&&!/^3\.\d{1,2}$/.test(r.CLAUDE_MEM_PYTHON_VERSION))return{valid:!1,error:'CLAUDE_MEM_PYTHON_VERSION must be in format "3.X" or "3.XX" (e.g., "3.13")'};let n=["CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE"];for(let i of n)if(r[i]&&!["true","false"].includes(r[i]))return{valid:!1,error:`${i} must be "true" or "false"`};if(r.CLAUDE_MEM_CONTEXT_FULL_COUNT){let i=parseInt(r.CLAUDE_MEM_CONTEXT_FULL_COUNT,10);if(isNaN(i)||i<0||i>20)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_FULL_COUNT must be between 0 and 20"}}if(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT){let i=parseInt(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10);if(isNaN(i)||i<1||i>50)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_SESSION_COUNT must be between 1 and 50"}}if(r.CLAUDE_MEM_CONTEXT_FULL_FIELD&&!["narrative","facts"].includes(r.CLAUDE_MEM_CONTEXT_FULL_FIELD))return{valid:!1,error:'CLAUDE_MEM_CONTEXT_FULL_FIELD must be "narrative" or "facts"'};if(r.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES){let i=parseInt(r.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES,10);if(isNaN(i)||i<1||i>100)return{valid:!1,error:"CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES must be between 1 and 100"}}if(r.CLAUDE_MEM_OPENROUTER_MAX_TOKENS){let i=parseInt(r.CLAUDE_MEM_OPENROUTER_MAX_TOKENS,10);if(isNaN(i)||i<1e3||i>1e6)return{valid:!1,error:"CLAUDE_MEM_OPENROUTER_MAX_TOKENS must be between 1000 and 1000000"}}if(r.CLAUDE_MEM_OPENROUTER_SITE_URL)try{new URL(r.CLAUDE_MEM_OPENROUTER_SITE_URL)}catch(i){return b.debug("SETTINGS","Invalid URL format",{url:r.CLAUDE_MEM_OPENROUTER_SITE_URL,error:i instanceof Error?i.message:String(i)}),{valid:!1,error:"CLAUDE_MEM_OPENROUTER_SITE_URL must be a valid URL"}}return{valid:!0}}isMcpEnabled(){let r=Qr(),n=ma.default.join(r,"plugin",".mcp.json");return(0,xr.existsSync)(n)}toggleMcp(r){let n=Qr(),i=ma.default.join(n,"plugin",".mcp.json"),s=ma.default.join(n,"plugin",".mcp.json.disabled");r&&(0,xr.existsSync)(s)?((0,xr.renameSync)(s,i),b.info("WORKER","MCP search server enabled")):!r&&(0,xr.existsSync)(i)?((0,xr.renameSync)(i,s),b.info("WORKER","MCP search server disabled")):b.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:r})}ensureSettingsFile(r){if(!(0,xr.existsSync)(r)){let n=Re.getAllDefaults(),i=ma.default.dirname(r);(0,xr.existsSync)(i)||(0,xr.mkdirSync)(i,{recursive:!0}),(0,xr.writeFileSync)(r,JSON.stringify(n,null,2),"utf-8"),b.info("SETTINGS","Created settings file with defaults",{settingsPath:r})}}};var fa=require("fs"),oy=require("path");he();sr();var ay=class extends Pr{getLogFilePath(){let e=Re.get("CLAUDE_MEM_DATA_DIR"),r=(0,oy.join)(e,"logs"),n=new Date().toISOString().split("T")[0];return(0,oy.join)(r,`claude-mem-${n}.log`)}getLogsDir(){let e=Re.get("CLAUDE_MEM_DATA_DIR");return(0,oy.join)(e,"logs")}setupRoutes(e){e.get("/api/logs",this.handleGetLogs.bind(this)),e.post("/api/logs/clear",this.handleClearLogs.bind(this))}handleGetLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,fa.existsSync)(n)){r.json({logs:"",path:n,exists:!1});return}let i=parseInt(e.query.lines||"1000",10),s=Math.min(i,1e4),a=(0,fa.readFileSync)(n,"utf-8").split(`
1407
1409
  `),c=Math.max(0,a.length-s),u=a.slice(c).join(`
1408
- `);r.json({logs:u,path:n,exists:!0,totalLines:a.length,returnedLines:a.length-c})});handleClearLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,fa.existsSync)(n)){r.json({success:!0,message:"Log file does not exist",path:n});return}(0,fa.writeFileSync)(n,"","utf-8"),b.info("SYSTEM","Log file cleared via UI",{path:n}),r.json({success:!0,message:"Log file cleared",path:n})})};he();var cy=class extends Pr{constructor(r,n){super();this.dbManager=r;this.defaultProject=n}setupRoutes(r){r.post("/api/memory/save",this.handleSaveMemory.bind(this))}handleSaveMemory=this.wrapHandler(async(r,n)=>{let{text:i,title:s,project:o}=r.body,a=o||this.defaultProject;if(!i||typeof i!="string"||i.trim().length===0){this.badRequest(n,"text is required and must be non-empty");return}let c=this.dbManager.getSessionStore(),u=this.dbManager.getChromaSync(),l=c.getOrCreateManualSession(a),d={type:"discovery",title:s||i.substring(0,60).trim()+(i.length>60?"...":""),subtitle:"Manual memory",facts:[],narrative:i,concepts:[],files_read:[],files_modified:[]},p=c.storeObservation(l,a,d,0,0);b.info("HTTP","Manual observation saved",{id:p.id,project:a,title:d.title}),u.syncObservation(p.id,l,a,d,0,p.createdAtEpoch,0).catch(m=>{b.error("CHROMA","ChromaDB sync failed",{id:p.id},m)}),n.json({success:!0,id:p.id,title:d.title,project:a,message:`Memory saved as observation #${p.id}`})})};var Yye={},Hye=120*1e3;function BT(){return dy.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),".worker-start-attempted")}function Bye(){if(process.platform!=="win32")return!1;let t=BT();if(!(0,Ss.existsSync)(t))return!1;try{let e=(0,Ss.statSync)(t).mtimeMs;return Date.now()-e<Hye}catch{return!1}}function Vye(){if(process.platform==="win32")try{(0,Ss.writeFileSync)(BT(),"","utf-8")}catch{}}function Gye(){if(process.platform==="win32")try{let t=BT();(0,Ss.existsSync)(t)&&(0,Ss.unlinkSync)(t)}catch{}}var Wye="10.0.8";function d8(t,e){return{continue:!0,suppressOutput:!0,status:t,...e&&{message:e}}}var nm=class{server;startTime=Date.now();mcpClient;mcpReady=!1;initializationCompleteFlag=!1;isShuttingDown=!1;dbManager;sessionManager;sseBroadcaster;sdkAgent;geminiAgent;openRouterAgent;paginationHelper;settingsManager;sessionEventBroadcaster;searchRoutes=null;chromaServer=null;initializationComplete;resolveInitialization;stopOrphanReaper=null;lastAiInteraction=null;constructor(){this.initializationComplete=new Promise(e=>{this.resolveInitialization=e}),this.dbManager=new Vg,this.sessionManager=new Qg(this.dbManager),this.sseBroadcaster=new ev,this.sdkAgent=new Pv(this.dbManager,this.sessionManager),this.geminiAgent=new Av(this.dbManager,this.sessionManager),this.openRouterAgent=new Dv(this.dbManager,this.sessionManager),this.paginationHelper=new jv(this.dbManager),this.settingsManager=new zv(this.dbManager),this.sessionEventBroadcaster=new Fv(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new lh({name:"worker-search-proxy",version:Wye},{capabilities:{}}),this.server=new Pg({getInitializationComplete:()=>this.initializationCompleteFlag,getMcpReady:()=>this.mcpReady,onShutdown:()=>this.shutdown(),onRestart:()=>this.shutdown(),workerPath:__filename,getAiStatus:()=>{let e="claude";return ku()&&ua()?e="openrouter":$u()&&ca()&&(e="gemini"),{provider:e,authMethod:bh(),lastInteraction:this.lastAiInteraction?{timestamp:this.lastAiInteraction.timestamp,success:this.lastAiInteraction.success,...this.lastAiInteraction.error&&{error:this.lastAiInteraction.error}}:null}}}),this.registerRoutes(),this.registerSignalHandlers()}registerSignalHandlers(){let e={value:this.isShuttingDown},r=TN(()=>this.shutdown(),e);process.on("SIGTERM",()=>{this.isShuttingDown=e.value,r("SIGTERM")}),process.on("SIGINT",()=>{this.isShuttingDown=e.value,r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{b.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{this.isShuttingDown=e.value,r("SIGHUP")}))}registerRoutes(){this.server.app.get("/api/context/inject",async(e,r,n)=>{if(!this.initializationCompleteFlag||!this.searchRoutes){b.warn("SYSTEM","Context requested before initialization complete, returning empty"),r.status(200).json({content:[{type:"text",text:""}]});return}n()}),this.server.app.use("/api",async(e,r,n)=>{if(this.initializationCompleteFlag){n();return}let i=3e4,s=new Promise((o,a)=>setTimeout(()=>a(new Error("Database initialization timeout")),i));try{await Promise.race([this.initializationComplete,s]),n()}catch(o){b.error("HTTP",`Request to ${e.method} ${e.path} rejected \u2014 DB not initialized`,{},o),r.status(503).json({error:"Service initializing",message:"Database is still initializing, please retry"})}}),this.server.registerRoutes(new Hv(this.sseBroadcaster,this.dbManager,this.sessionManager)),this.server.registerRoutes(new Gv(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.openRouterAgent,this.sessionEventBroadcaster,this)),this.server.registerRoutes(new Wv(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime)),this.server.registerRoutes(new sy(this.settingsManager)),this.server.registerRoutes(new ay),this.server.registerRoutes(new cy(this.dbManager,"claude-mem"))}async start(){let e=gt(),r=_h();await this.server.listen(e,r),xN({pid:process.pid,port:e,startedAt:new Date().toISOString()}),b.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{b.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await $N();let{ModeManager:e}=await Promise.resolve().then(()=>(Hr(),GL)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(sr(),rN)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(Wt(),dN)),i=await import("os"),s=r.loadFromFile(n);(s.CLAUDE_MEM_CHROMA_MODE||"local")==="local"?(b.info("SYSTEM","Starting local Chroma server..."),this.chromaServer=lc.getInstance({dataDir:dy.default.join(i.homedir(),".claude-mem","vector-db"),host:s.CLAUDE_MEM_CHROMA_HOST||"127.0.0.1",port:parseInt(s.CLAUDE_MEM_CHROMA_PORT||"8000",10)}),await this.chromaServer.start(6e4)?b.success("SYSTEM","Chroma server ready"):(b.warn("SYSTEM","Chroma server failed to start - vector search disabled"),this.chromaServer=null)):b.info("SYSTEM","Chroma remote mode - skipping local server");let a=s.CLAUDE_MEM_MODE;e.getInstance().loadMode(a),b.info("SYSTEM",`Mode loaded: ${a}`),await this.dbManager.initialize();let{PendingMessageStore:c}=await Promise.resolve().then(()=>(Ys(),ea)),l=new c(this.dbManager.getSessionStore().db,3).resetStaleProcessingMessages(0);l>0&&b.info("SYSTEM",`Reset ${l} stale processing messages to pending`);let d=new Lv,p=new qv,m=new Uv(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),d,p);this.searchRoutes=new ry(m),this.server.registerRoutes(this.searchRoutes),b.info("WORKER","SearchManager initialized and search routes registered");let f=dy.default.join(__dirname,"mcp-server.cjs"),h=new mh({command:"node",args:[f],env:process.env}),g=3e5,v=this.mcpClient.connect(h),_=new Promise((y,x)=>setTimeout(()=>x(new Error("MCP connection timeout after 5 minutes")),g));await Promise.race([v,_]),this.mcpReady=!0,b.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),b.info("SYSTEM","Background initialization complete"),this.stopOrphanReaper=BL(()=>{let y=new Set;for(let[x]of this.sessionManager.sessions)y.add(x);return y}),b.info("SYSTEM","Started orphan reaper (runs every 5 minutes)"),this.processPendingQueues(50).then(y=>{y.sessionsStarted>0&&b.info("SYSTEM",`Auto-recovered ${y.sessionsStarted} sessions with pending work`,{totalPending:y.totalPendingSessions,started:y.sessionsStarted,sessionIds:y.startedSessionIds})}).catch(y=>{b.error("SYSTEM","Auto-recovery of pending queues failed",{},y)})}catch(e){throw b.error("SYSTEM","Background initialization failed",{},e),e}}getActiveAgent(){return ku()&&ua()?this.openRouterAgent:$u()&&ca()?this.geminiAgent:this.sdkAgent}startSessionProcessor(e,r){if(!e)return;let n=e.sessionDbId,i=this.getActiveAgent(),s=i.constructor.name;e.abortController.signal.aborted&&(b.debug("SYSTEM","Replacing aborted AbortController before starting generator",{sessionId:e.sessionDbId}),e.abortController=new AbortController);let o=!1,a=!1;b.info("SYSTEM",`Starting generator (${r}) using ${s}`,{sessionId:n}),e.generatorPromise=i.startSession(e,this).catch(async c=>{let u=c?.message||"";if(["Claude executable not found","CLAUDE_CODE_PATH","ENOENT","spawn","Invalid API key"].some(d=>u.includes(d))){o=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},b.error("SDK","Unrecoverable generator error - will NOT restart",{sessionId:e.sessionDbId,project:e.project,errorMessage:u});return}if(this.isSessionTerminatedError(c))return b.warn("SDK","SDK resume failed, falling back to standalone processing",{sessionId:e.sessionDbId,project:e.project,reason:c instanceof Error?c.message:String(c)}),this.runFallbackForTerminatedSession(e,c);throw(u.includes("aborted by user")||u.includes("No conversation found"))&&e.memorySessionId&&(b.warn("SDK","Detected stale resume failure, clearing memorySessionId for fresh start",{sessionId:e.sessionDbId,memorySessionId:e.memorySessionId,errorMessage:u}),this.dbManager.getSessionStore().updateMemorySessionId(e.sessionDbId,null),e.memorySessionId=null,e.forceInit=!0),b.error("SDK","Session generator failed",{sessionId:e.sessionDbId,project:e.project,provider:s},c),a=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},c}).finally(()=>{if(e.generatorPromise=null,!a&&!o&&(this.lastAiInteraction={timestamp:Date.now(),success:!0,provider:s}),o){b.warn("SYSTEM","Skipping restart due to unrecoverable error",{sessionId:e.sessionDbId}),this.broadcastProcessingStatus();return}let{PendingMessageStore:c}=(Ys(),Pu(ea)),l=new c(this.dbManager.getSessionStore().db,3).getPendingCount(e.sessionDbId);l>0&&(b.info("SYSTEM","Pending work remains after generator exit, restarting with fresh AbortController",{sessionId:e.sessionDbId,pendingCount:l}),e.abortController=new AbortController,this.startSessionProcessor(e,"pending-work-restart")),this.broadcastProcessingStatus()})}isSessionTerminatedError(e){let n=(e instanceof Error?e.message:String(e)).toLowerCase();return n.includes("process aborted by user")||n.includes("processtransport")||n.includes("not ready for writing")||n.includes("session generator failed")||n.includes("claude code process")}async runFallbackForTerminatedSession(e,r){if(!e)return;let n=e.sessionDbId;if(!e.memorySessionId){let o=`fallback-${n}-${Date.now()}`;e.memorySessionId=o,this.dbManager.getSessionStore().updateMemorySessionId(n,o)}if(ca())try{await this.geminiAgent.startSession(e,this);return}catch(o){b.warn("SDK","Fallback Gemini failed, trying OpenRouter",{sessionId:n,error:o instanceof Error?o.message:String(o)})}if(ua())try{await this.openRouterAgent.startSession(e,this);return}catch(o){b.warn("SDK","Fallback OpenRouter failed",{sessionId:n,error:o instanceof Error?o.message:String(o)})}let s=this.sessionManager.getPendingMessageStore().markAllSessionMessagesAbandoned(n);s>0&&b.warn("SDK","No fallback available; marked pending messages abandoned",{sessionId:n,abandoned:s}),this.sessionManager.removeSessionImmediate(n),this.sessionEventBroadcaster.broadcastSessionCompleted(n)}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(Ys(),ea)),n=new r(this.dbManager.getSessionStore().db,3),i=this.dbManager.getSessionStore(),s=360*60*1e3,o=Date.now()-s;try{let u=i.db.prepare(`
1410
+ `);r.json({logs:u,path:n,exists:!0,totalLines:a.length,returnedLines:a.length-c})});handleClearLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,fa.existsSync)(n)){r.json({success:!0,message:"Log file does not exist",path:n});return}(0,fa.writeFileSync)(n,"","utf-8"),b.info("SYSTEM","Log file cleared via UI",{path:n}),r.json({success:!0,message:"Log file cleared",path:n})})};he();var cy=class extends Pr{constructor(r,n){super();this.dbManager=r;this.defaultProject=n}setupRoutes(r){r.post("/api/memory/save",this.handleSaveMemory.bind(this))}handleSaveMemory=this.wrapHandler(async(r,n)=>{let{text:i,title:s,project:o}=r.body,a=o||this.defaultProject;if(!i||typeof i!="string"||i.trim().length===0){this.badRequest(n,"text is required and must be non-empty");return}let c=this.dbManager.getSessionStore(),u=this.dbManager.getChromaSync(),l=c.getOrCreateManualSession(a),d={type:"discovery",title:s||i.substring(0,60).trim()+(i.length>60?"...":""),subtitle:"Manual memory",facts:[],narrative:i,concepts:[],files_read:[],files_modified:[]},p=c.storeObservation(l,a,d,0,0);b.info("HTTP","Manual observation saved",{id:p.id,project:a,title:d.title}),u.syncObservation(p.id,l,a,d,0,p.createdAtEpoch,0).catch(m=>{b.error("CHROMA","ChromaDB sync failed",{id:p.id},m)}),n.json({success:!0,id:p.id,title:d.title,project:a,message:`Memory saved as observation #${p.id}`})})};var Yye={},Hye=120*1e3;function BT(){return dy.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),".worker-start-attempted")}function Bye(){if(process.platform!=="win32")return!1;let t=BT();if(!(0,Ss.existsSync)(t))return!1;try{let e=(0,Ss.statSync)(t).mtimeMs;return Date.now()-e<Hye}catch{return!1}}function Vye(){if(process.platform==="win32")try{(0,Ss.writeFileSync)(BT(),"","utf-8")}catch{}}function Gye(){if(process.platform==="win32")try{let t=BT();(0,Ss.existsSync)(t)&&(0,Ss.unlinkSync)(t)}catch{}}var Wye="10.1.0";function d8(t,e){return{continue:!0,suppressOutput:!0,status:t,...e&&{message:e}}}var nm=class{server;startTime=Date.now();mcpClient;mcpReady=!1;initializationCompleteFlag=!1;isShuttingDown=!1;dbManager;sessionManager;sseBroadcaster;sdkAgent;geminiAgent;openRouterAgent;paginationHelper;settingsManager;sessionEventBroadcaster;searchRoutes=null;chromaServer=null;initializationComplete;resolveInitialization;stopOrphanReaper=null;lastAiInteraction=null;constructor(){this.initializationComplete=new Promise(e=>{this.resolveInitialization=e}),this.dbManager=new Vg,this.sessionManager=new Qg(this.dbManager),this.sseBroadcaster=new ev,this.sdkAgent=new Pv(this.dbManager,this.sessionManager),this.geminiAgent=new Av(this.dbManager,this.sessionManager),this.openRouterAgent=new Dv(this.dbManager,this.sessionManager),this.paginationHelper=new jv(this.dbManager),this.settingsManager=new zv(this.dbManager),this.sessionEventBroadcaster=new Fv(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new lh({name:"worker-search-proxy",version:Wye},{capabilities:{}}),this.server=new Pg({getInitializationComplete:()=>this.initializationCompleteFlag,getMcpReady:()=>this.mcpReady,onShutdown:()=>this.shutdown(),onRestart:()=>this.shutdown(),workerPath:__filename,getAiStatus:()=>{let e="claude";return ku()&&ua()?e="openrouter":$u()&&ca()&&(e="gemini"),{provider:e,authMethod:bh(),lastInteraction:this.lastAiInteraction?{timestamp:this.lastAiInteraction.timestamp,success:this.lastAiInteraction.success,...this.lastAiInteraction.error&&{error:this.lastAiInteraction.error}}:null}}}),this.registerRoutes(),this.registerSignalHandlers()}registerSignalHandlers(){let e={value:this.isShuttingDown},r=TN(()=>this.shutdown(),e);process.on("SIGTERM",()=>{this.isShuttingDown=e.value,r("SIGTERM")}),process.on("SIGINT",()=>{this.isShuttingDown=e.value,r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{b.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{this.isShuttingDown=e.value,r("SIGHUP")}))}registerRoutes(){this.server.app.get("/api/context/inject",async(e,r,n)=>{if(!this.initializationCompleteFlag||!this.searchRoutes){b.warn("SYSTEM","Context requested before initialization complete, returning empty"),r.status(200).json({content:[{type:"text",text:""}]});return}n()}),this.server.app.use("/api",async(e,r,n)=>{if(this.initializationCompleteFlag){n();return}let i=3e4,s=new Promise((o,a)=>setTimeout(()=>a(new Error("Database initialization timeout")),i));try{await Promise.race([this.initializationComplete,s]),n()}catch(o){b.error("HTTP",`Request to ${e.method} ${e.path} rejected \u2014 DB not initialized`,{},o),r.status(503).json({error:"Service initializing",message:"Database is still initializing, please retry"})}}),this.server.registerRoutes(new Hv(this.sseBroadcaster,this.dbManager,this.sessionManager)),this.server.registerRoutes(new Gv(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.openRouterAgent,this.sessionEventBroadcaster,this)),this.server.registerRoutes(new Wv(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime)),this.server.registerRoutes(new sy(this.settingsManager)),this.server.registerRoutes(new ay),this.server.registerRoutes(new cy(this.dbManager,"claude-mem"))}async start(){let e=gt(),r=_h();await this.server.listen(e,r),xN({pid:process.pid,port:e,startedAt:new Date().toISOString()}),b.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{b.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await $N();let{ModeManager:e}=await Promise.resolve().then(()=>(Hr(),GL)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(sr(),rN)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(Wt(),dN)),i=await import("os"),s=r.loadFromFile(n);(s.CLAUDE_MEM_CHROMA_MODE||"local")==="local"?(b.info("SYSTEM","Starting local Chroma server..."),this.chromaServer=lc.getInstance({dataDir:dy.default.join(i.homedir(),".claude-mem","vector-db"),host:s.CLAUDE_MEM_CHROMA_HOST||"127.0.0.1",port:parseInt(s.CLAUDE_MEM_CHROMA_PORT||"8000",10)}),await this.chromaServer.start(6e4)?b.success("SYSTEM","Chroma server ready"):(b.warn("SYSTEM","Chroma server failed to start - vector search disabled"),this.chromaServer=null)):b.info("SYSTEM","Chroma remote mode - skipping local server");let a=s.CLAUDE_MEM_MODE;e.getInstance().loadMode(a),b.info("SYSTEM",`Mode loaded: ${a}`),await this.dbManager.initialize();let{PendingMessageStore:c}=await Promise.resolve().then(()=>(Ys(),ea)),l=new c(this.dbManager.getSessionStore().db,3).resetStaleProcessingMessages(0);l>0&&b.info("SYSTEM",`Reset ${l} stale processing messages to pending`);let d=new Lv,p=new qv,m=new Uv(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),d,p);this.searchRoutes=new ry(m),this.server.registerRoutes(this.searchRoutes),b.info("WORKER","SearchManager initialized and search routes registered");let f=dy.default.join(__dirname,"mcp-server.cjs"),h=new mh({command:"node",args:[f],env:process.env}),g=3e5,v=this.mcpClient.connect(h),_=new Promise((y,x)=>setTimeout(()=>x(new Error("MCP connection timeout after 5 minutes")),g));await Promise.race([v,_]),this.mcpReady=!0,b.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),b.info("SYSTEM","Background initialization complete"),this.stopOrphanReaper=BL(()=>{let y=new Set;for(let[x]of this.sessionManager.sessions)y.add(x);return y}),b.info("SYSTEM","Started orphan reaper (runs every 5 minutes)"),this.processPendingQueues(50).then(y=>{y.sessionsStarted>0&&b.info("SYSTEM",`Auto-recovered ${y.sessionsStarted} sessions with pending work`,{totalPending:y.totalPendingSessions,started:y.sessionsStarted,sessionIds:y.startedSessionIds})}).catch(y=>{b.error("SYSTEM","Auto-recovery of pending queues failed",{},y)})}catch(e){throw b.error("SYSTEM","Background initialization failed",{},e),e}}getActiveAgent(){return ku()&&ua()?this.openRouterAgent:$u()&&ca()?this.geminiAgent:this.sdkAgent}startSessionProcessor(e,r){if(!e)return;let n=e.sessionDbId,i=this.getActiveAgent(),s=i.constructor.name;e.abortController.signal.aborted&&(b.debug("SYSTEM","Replacing aborted AbortController before starting generator",{sessionId:e.sessionDbId}),e.abortController=new AbortController);let o=!1,a=!1;b.info("SYSTEM",`Starting generator (${r}) using ${s}`,{sessionId:n}),e.generatorPromise=i.startSession(e,this).catch(async c=>{let u=c?.message||"";if(["Claude executable not found","CLAUDE_CODE_PATH","ENOENT","spawn","Invalid API key"].some(d=>u.includes(d))){o=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},b.error("SDK","Unrecoverable generator error - will NOT restart",{sessionId:e.sessionDbId,project:e.project,errorMessage:u});return}if(this.isSessionTerminatedError(c))return b.warn("SDK","SDK resume failed, falling back to standalone processing",{sessionId:e.sessionDbId,project:e.project,reason:c instanceof Error?c.message:String(c)}),this.runFallbackForTerminatedSession(e,c);throw(u.includes("aborted by user")||u.includes("No conversation found"))&&e.memorySessionId&&(b.warn("SDK","Detected stale resume failure, clearing memorySessionId for fresh start",{sessionId:e.sessionDbId,memorySessionId:e.memorySessionId,errorMessage:u}),this.dbManager.getSessionStore().updateMemorySessionId(e.sessionDbId,null),e.memorySessionId=null,e.forceInit=!0),b.error("SDK","Session generator failed",{sessionId:e.sessionDbId,project:e.project,provider:s},c),a=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},c}).finally(()=>{if(e.generatorPromise=null,!a&&!o&&(this.lastAiInteraction={timestamp:Date.now(),success:!0,provider:s}),o){b.warn("SYSTEM","Skipping restart due to unrecoverable error",{sessionId:e.sessionDbId}),this.broadcastProcessingStatus();return}let{PendingMessageStore:c}=(Ys(),Pu(ea)),l=new c(this.dbManager.getSessionStore().db,3).getPendingCount(e.sessionDbId);l>0&&(b.info("SYSTEM","Pending work remains after generator exit, restarting with fresh AbortController",{sessionId:e.sessionDbId,pendingCount:l}),e.abortController=new AbortController,this.startSessionProcessor(e,"pending-work-restart")),this.broadcastProcessingStatus()})}isSessionTerminatedError(e){let n=(e instanceof Error?e.message:String(e)).toLowerCase();return n.includes("process aborted by user")||n.includes("processtransport")||n.includes("not ready for writing")||n.includes("session generator failed")||n.includes("claude code process")}async runFallbackForTerminatedSession(e,r){if(!e)return;let n=e.sessionDbId;if(!e.memorySessionId){let o=`fallback-${n}-${Date.now()}`;e.memorySessionId=o,this.dbManager.getSessionStore().updateMemorySessionId(n,o)}if(ca())try{await this.geminiAgent.startSession(e,this);return}catch(o){b.warn("SDK","Fallback Gemini failed, trying OpenRouter",{sessionId:n,error:o instanceof Error?o.message:String(o)})}if(ua())try{await this.openRouterAgent.startSession(e,this);return}catch(o){b.warn("SDK","Fallback OpenRouter failed",{sessionId:n,error:o instanceof Error?o.message:String(o)})}let s=this.sessionManager.getPendingMessageStore().markAllSessionMessagesAbandoned(n);s>0&&b.warn("SDK","No fallback available; marked pending messages abandoned",{sessionId:n,abandoned:s}),this.sessionManager.removeSessionImmediate(n),this.sessionEventBroadcaster.broadcastSessionCompleted(n)}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(Ys(),ea)),n=new r(this.dbManager.getSessionStore().db,3),i=this.dbManager.getSessionStore(),s=360*60*1e3,o=Date.now()-s;try{let u=i.db.prepare(`
1409
1411
  SELECT id FROM sdk_sessions
1410
1412
  WHERE status = 'active' AND started_at_epoch < ?
1411
1413
  `).all(o);if(u.length>0){let l=u.map(m=>m.id),d=l.map(()=>"?").join(",");i.db.prepare(`