claude-mem 13.26.0 → 13.26.1

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.26.0",
3
+ "version": "13.26.1",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman",
package/README.md CHANGED
@@ -59,7 +59,7 @@
59
59
  <img src="https://img.shields.io/badge/License-Apache%202.0-blue.svg" alt="License">
60
60
  </a>
61
61
  <a href="package.json">
62
- <img src="https://img.shields.io/badge/version-13.26.0-green.svg" alt="Version">
62
+ <img src="https://img.shields.io/badge/version-13.26.1-green.svg" alt="Version">
63
63
  </a>
64
64
  <a href="package.json">
65
65
  <img src="https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen.svg" alt="Node">
@@ -101,7 +101,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
101
101
  `).catch(s=>r.abort(s)):e.streamInput(t).catch(s=>r.abort(s))}var vce=new Set(["EBUSY","EMFILE","ENFILE","ENOTEMPTY","EPERM"]);async function HS(e){for(let t=0;;t++)try{return await wle(e,{recursive:!0,force:!0})}catch(r){if(t>=4||!vce.has(Le(r)??""))return;await Bo((t+1)*100)}}function bce(e,t){e.waitForExit().catch(()=>{}).finally(()=>HS(t))}function BS({prompt:e,options:t}){if((t?.resume||t?.continue)&&t?.sessionStore)return Sce(e,t);let{queryInstance:r,abortController:i,verbatimPrompts:s}=jS(t,{isSingleUserTurn:typeof e=="string"});return FS(r,e,i,s),r}function Sce(e,t){let{queryInstance:r,transport:i,abortController:s,processEnv:n,verbatimPrompts:o}=jS({...t},{isSingleUserTurn:typeof e=="string",deferSpawn:!0}),a=qc(t.cwd??"."),u=t.sessionStore,c=t.loadTimeoutMs??6e4,d=t.resume;return(async()=>{if(d||(d=(await Ei(u.listSessions($S(a,t.env)),c,`SessionStore.listSessions() timed out after ${c}ms`)).slice().sort((f,p)=>p.mtime-f.mtime)[0]?.sessionId),!!d)return _ce(u,d,a,t.env,t.loadTimeoutMs)})().then(f=>{if(f){i.updateResume(d);let p={CLAUDE_CONFIG_DIR:f};if(process.platform==="win32"){let g=t.env?.CLAUDE_SECURESTORAGE_CONFIG_DIR??process.env.CLAUDE_SECURESTORAGE_CONFIG_DIR??t.env?.CLAUDE_CONFIG_DIR??process.env.CLAUDE_CONFIG_DIR??"";p.CLAUDE_SECURESTORAGE_CONFIG_DIR=g,n.CLAUDE_SECURESTORAGE_CONFIG_DIR=g}i.updateEnv(p),n.CLAUDE_CONFIG_DIR=f,r.addCleanupCallback(()=>bce(i,f))}r.isClosed()||i.spawn()}).catch(f=>{let p=yi(f);i.spawnAbort(p),r.setError(p)}),FS(r,e,s,o),r}import*as Or from"fs/promises";import*as Ut from"path";import{exec as ade}from"child_process";import{promisify as lde}from"util";import*as Nh from"os";import{readFileSync as Hce,existsSync as Bce}from"fs";import{join as GS}from"path";import{homedir as KS,hostname as zce}from"os";var Lh={HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function zS(e){return process.platform==="win32"?Math.round(e*Lh.WINDOWS_MULTIPLIER):e}import{closeSync as Ph,existsSync as Ace,fsyncSync as WS,lstatSync as Oce,mkdirSync as Tce,openSync as Mh,readFileSync as Lye,readlinkSync as kce,realpathSync as Dce,renameSync as Ice,statSync as Lce,unlinkSync as Rce,writeSync as Pce}from"fs";import{randomBytes as Mce}from"crypto";import{basename as Uce,dirname as Uh,join as Nce,resolve as xce}from"path";var wce=null;function Cce(e){return(wce??process.stderr.write.bind(process.stderr))(e)}function Rh(e){Cce(e)}var $ce=process.platform==="win32";function jce(e){return e.replace(/^\uFEFF/,"")}function ma(e){return JSON.parse(jce(e))}function Fce(e){Ace(e)||Tce(e,{recursive:!0})}function _n(e,t){let r=e;try{if(Oce(e).isSymbolicLink())try{r=Dce(e)}catch(c){let d=c instanceof Error?c:new Error(String(c));Rh(`claude-mem: realpathSync failed for ${e}, resolving symlink manually: ${d.message}
102
102
  `);let f=kce(e);r=xce(Uh(e),f)}}catch(c){let d=c.code;if(d!=="ENOENT"&&d!=="ENOTDIR")throw c}Fce(Uh(r));let i=Uh(r),s=Uce(r),n=Nce(i,`.${s}.${process.pid}.${Mce(6).toString("hex")}.tmp`),o=Buffer.from(JSON.stringify(t,null,2)+`
103
103
  `,"utf-8"),a;try{a=Lce(r).mode&511}catch{}let u;try{u=a!==void 0?Mh(n,"w",a):Mh(n,"w");let c=0;for(;c<o.length;){let d=Pce(u,o,c,o.length-c);if(d===0)throw new Error(`writeSync stalled at ${c}/${o.length} bytes`);c+=d}if(WS(u),Ph(u),u=void 0,Ice(n,r),!$ce){let d;try{d=Mh(i,"r"),WS(d)}catch(f){let p=f instanceof Error?f:new Error(String(f));Rh(`claude-mem: directory fsync failed for ${i}: ${p.message}
104
- `)}finally{if(d!==void 0)try{Ph(d)}catch{}}}}catch(c){if(u!==void 0)try{Ph(u)}catch{}try{Rce(n)}catch{}throw c}}var Wce="security_alert",Gce="sync-hub.black-pond-afbb.workers.dev",Kce="https://sync.cmem.ai";function Vce(e){if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;try{if(new URL(t).hostname===Gce)return Kce}catch{return null}return null}var ga=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(zS(Lh.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:GS(KS(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",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:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",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_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:GS(KS(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",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",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:zce(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:"30000",CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(t){let r=process.env[t]??this.DEFAULTS[t];return t==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(t){return t==="localhost"?"127.0.0.1":t}static finalizeSettings(t,r){let i=r?this.applyEnvOverrides(t):t;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(t){let r=this.get(t);return parseInt(r,10)}static applyEnvOverrides(t){let r={...t};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(t,r=!0){try{if(!Bce(t)){let d=this.getAllDefaults();try{_n(t,d),console.warn("[SETTINGS] Created settings file with defaults:",t)}catch(f){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,f instanceof Error?f.message:String(f))}return this.finalizeSettings(d,r)}let i=Hce(t,"utf-8"),s=ma(i),n=s,o=s.env&&typeof s.env=="object"&&!Array.isArray(s.env),a=o&&Object.keys(s).some(d=>d!=="env");if(o&&(n=s.env,!a))try{_n(t,n),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,d instanceof Error?d.message:String(d))}if(n.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Wce){n={...n,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{_n(t,a?{...s,env:n}:n),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",t)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",t,d instanceof Error?d.message:String(d))}}let u=Vce(n.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(u!==null){n={...n,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:u};try{_n(t,a?{...s,env:n}:n),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",t)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",t,d instanceof Error?d.message:String(d))}}let c={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))n[d]!==void 0&&(c[d]=n[d]);return this.finalizeSettings(c,r)}catch(i){console.warn("[SETTINGS] Failed to load settings, using defaults:",t,i instanceof Error?i.message:String(i));let s=this.getAllDefaults();return this.finalizeSettings(s,r)}}};import{join as Ar,dirname as Yce,basename as Xce}from"path";import{homedir as VS}from"os";import{existsSync as Jce,mkdirSync as Zye,readFileSync as Qce}from"fs";import{fileURLToPath as ede}from"url";import{homedir as qce}from"os";import{join as Zce}from"path";function _a(e,t=process.platform,r=qce()){return typeof e!="string"||e.length===0?e:e==="~"?r:e.startsWith("~/")||t==="win32"&&e.startsWith("~\\")?Zce(r,e.slice(2)):e}function tde(){return typeof __dirname<"u"?__dirname:Yce(ede(import.meta.url))}var Qye=tde();function rde(){if(process.env.CLAUDE_MEM_DATA_DIR)return _a(process.env.CLAUDE_MEM_DATA_DIR);let e=Ar(VS(),".claude-mem"),t=Ar(e,"settings.json");try{if(Jce(t)){let r=ma(Qce(t,"utf-8")),i=r.env??r;if(i.CLAUDE_MEM_DATA_DIR)return _a(i.CLAUDE_MEM_DATA_DIR)}}catch{}return e}var ya=rde(),ide=Ar(VS(),".claude"),sde=process.env.CLAUDE_CONFIG_DIR||ide,eEe=Ar(sde,"plugins","marketplaces","thedotmack"),tEe=Ar(ya,"logs"),qS=Ar(ya,"settings.json"),nde="claude-mem.db";var rEe=Ar(ya,nde),ode=Ar(ya,"observer-sessions"),iEe=Xce(ode);var es=lde(ade);function Vr(e){let t=Nh.homedir();return e.replace(t,"~")}async function ude(){try{let e=Ut.join(process.cwd(),"package.json"),t=await Or.readFile(e,"utf-8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}async function cde(){try{let{stdout:e}=await es("claude --version");return e.trim()}catch{return"not installed or not in PATH"}}async function dde(){try{let{stdout:e}=await es("bun --version");return e.trim()}catch{return"not installed"}}async function hde(){try{if(process.platform==="darwin"){let{stdout:e}=await es("sw_vers -productVersion");return`macOS ${e.trim()}`}else if(process.platform==="linux"){let{stdout:e}=await es("uname -sr");return e.trim()}else if(process.platform==="win32"){let{stdout:e}=await es("ver");return e.trim()}return"unknown"}catch{return"unknown"}}async function fde(e,t){try{return await(await fetch(`http://${e}:${t}/api/health`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function pde(e,t){try{return await(await fetch(`http://${e}:${t}/api/stats`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function mde(e){try{let t=Ut.join(e,"worker.pid"),r=await Or.readFile(t,"utf-8");return JSON.parse(r)}catch{return null}}async function ZS(e,t){try{return(await Or.readFile(e,"utf-8")).split(`
104
+ `)}finally{if(d!==void 0)try{Ph(d)}catch{}}}}catch(c){if(u!==void 0)try{Ph(u)}catch{}try{Rce(n)}catch{}throw c}}var Wce="security_alert",Gce="sync-hub.black-pond-afbb.workers.dev",Kce="https://sync.cmem.ai";function Vce(e){if(typeof e!="string")return null;let t=e.trim();if(t.length===0)return null;try{if(new URL(t).hostname===Gce)return Kce}catch{return null}return null}var ga=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(zS(Lh.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:GS(KS(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",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:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",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_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:GS(KS(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",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",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:zce(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:"30000",CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(t){let r=process.env[t]??this.DEFAULTS[t];return t==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(t){return t==="localhost"?"127.0.0.1":t}static finalizeSettings(t,r){let i=r?this.applyEnvOverrides(t):t;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(t){let r=this.get(t);return parseInt(r,10)}static applyEnvOverrides(t){let r={...t};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(t,r=!0){try{if(!Bce(t)){let d=this.getAllDefaults();try{_n(t,d),console.warn("[SETTINGS] Created settings file with defaults:",t)}catch(f){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",t,f instanceof Error?f.message:String(f))}return this.finalizeSettings(d,r)}let i=Hce(t,"utf-8"),s=ma(i),n=s,o=s.env&&typeof s.env=="object"&&!Array.isArray(s.env),a=o&&Object.keys(s).some(d=>d!=="env");if(o&&(n=s.env,!a))try{_n(t,n),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",t)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",t,d instanceof Error?d.message:String(d))}if(n.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Wce){n={...n,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{_n(t,a?{...s,env:n}:n),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",t)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",t,d instanceof Error?d.message:String(d))}}let u=Vce(n.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(u!==null){n={...n,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:u};try{_n(t,a?{...s,env:n}:n),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",t)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",t,d instanceof Error?d.message:String(d))}}let c={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))n[d]!==void 0&&(c[d]=n[d]);return this.finalizeSettings(c,r)}catch(i){console.warn("[SETTINGS] Failed to load settings, using defaults:",t,i instanceof Error?i.message:String(i));let s=this.getAllDefaults();return this.finalizeSettings(s,r)}}};import{join as Ar,dirname as Yce,basename as Xce}from"path";import{homedir as VS}from"os";import{existsSync as Jce,mkdirSync as Zye,readFileSync as Qce}from"fs";import{fileURLToPath as ede}from"url";import{homedir as qce}from"os";import{join as Zce}from"path";function _a(e,t=process.platform,r=qce()){return typeof e!="string"||e.length===0?e:e==="~"?r:e.startsWith("~/")||t==="win32"&&e.startsWith("~\\")?Zce(r,e.slice(2)):e}function tde(){return typeof __dirname<"u"?__dirname:Yce(ede(import.meta.url))}var Qye=tde();function rde(){if(process.env.CLAUDE_MEM_DATA_DIR)return _a(process.env.CLAUDE_MEM_DATA_DIR);let e=Ar(VS(),".claude-mem"),t=Ar(e,"settings.json");try{if(Jce(t)){let r=ma(Qce(t,"utf-8")),i=r.env??r;if(i.CLAUDE_MEM_DATA_DIR)return _a(i.CLAUDE_MEM_DATA_DIR)}}catch{}return e}var ya=rde(),ide=Ar(VS(),".claude"),sde=process.env.CLAUDE_CONFIG_DIR||ide,eEe=Ar(sde,"plugins","marketplaces","thedotmack"),tEe=Ar(ya,"logs"),qS=Ar(ya,"settings.json"),nde="claude-mem.db";var rEe=Ar(ya,nde),ode=Ar(ya,"observer-sessions"),iEe=Xce(ode);var es=lde(ade);function Vr(e){let t=Nh.homedir();return e.replace(t,"~")}async function ude(){try{let e=Ut.join(process.cwd(),"package.json"),t=await Or.readFile(e,"utf-8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}async function cde(){try{let{stdout:e}=await es("claude --version");return e.trim()}catch{return"not installed or not in PATH"}}async function dde(){try{let{stdout:e}=await es("bun --version");return e.trim()}catch{return"not installed"}}async function hde(){try{if(process.platform==="darwin"){let{stdout:e}=await es("sw_vers -productVersion");return`macOS ${e.trim()}`}else if(process.platform==="linux"){let{stdout:e}=await es("uname -sr");return e.trim()}else if(process.platform==="win32"){let{stdout:e}=await es("ver");return e.trim()}return"unknown"}catch{return"unknown"}}async function fde(e,t){try{return await(await fetch(`http://${e}:${t}/api/health`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function pde(e,t){try{return await(await fetch(`http://${e}:${t}/api/stats`,{signal:AbortSignal.timeout(2e3)})).json()}catch{return null}}async function mde(e){try{let t=Ut.join(e,"worker.pid"),r=await Or.readFile(t,"utf-8");return JSON.parse(r)}catch{return null}}async function ZS(e,t){try{return(await Or.readFile(e,"utf-8")).split(`
105
105
  `).filter(s=>s.trim()).slice(-t)}catch{return[]}}async function gde(e){try{let t=Ut.join(e,"settings.json"),r=await Or.readFile(t,"utf-8");return{exists:!0,settings:JSON.parse(r)}}catch{return{exists:!1}}}async function _de(e){try{let t=Ut.join(e,"claude-mem.db");return{exists:!0,size:(await Or.stat(t)).size}}catch{return{exists:!1}}}async function yde(e){try{let t=Ut.join(e,"claude-mem.db");await Or.stat(t);let r="SELECT (SELECT COUNT(*) FROM observations) AS observations, (SELECT COUNT(*) FROM sessions) AS sessions, (SELECT COUNT(*) FROM session_summaries) AS summaries;",{stdout:i}=await es(`sqlite3 "${t}" "${r}"`),s=i.trim().split("|");return s.length===3?{observations:parseInt(s[0],10)||0,sessions:parseInt(s[1],10)||0,summaries:parseInt(s[2],10)||0}:void 0}catch{return}}async function yn(e={}){let t=Nh.homedir(),r=Ut.join(t,".claude-mem"),i=Ut.join(t,".claude","plugins","marketplaces","thedotmack"),s=process.cwd(),n=s.includes("claude-mem")&&!s.includes(".claude"),[o,a,u,c]=await Promise.all([ude(),cde(),dde(),hde()]),d={claudeMem:o,claudeCode:a,node:process.version,bun:u},f={os:process.platform,osVersion:c,arch:process.arch},p={pluginPath:Vr(i),dataDir:Vr(r),cwd:Vr(s),isDevMode:n},g=await mde(r),v=ga.loadFromFile(qS),b=v.CLAUDE_MEM_WORKER_HOST,E=process.env.CLAUDE_MEM_WORKER_PORT||v.CLAUDE_MEM_WORKER_PORT,y=typeof g?.port=="number"?g.port:parseInt(E,10),[C,S]=await Promise.all([fde(b,y),pde(b,y)]),A={running:C!==null,pid:g?.pid,port:y,uptime:S?.worker?.uptime,version:S?.worker?.version,health:C,stats:S},D=[],k=[];if(e.includeLogs!==!1){let L=new Date().toISOString().split("T")[0],j=Ut.join(r,"logs",`worker-${L}.log`),Q=Ut.join(r,"silent.log");[D,k]=await Promise.all([ZS(j,50),ZS(Q,50)])}let h={workerLog:D.map(Vr),silentLog:k.map(Vr)},[_,w]=await Promise.all([_de(r),yde(r)]),T={path:Vr(Ut.join(r,"claude-mem.db")),exists:_.exists,size:_.size,counts:w},I=await gde(r),R={settingsPath:Vr(Ut.join(r,"settings.json")),settingsExist:I.exists,settings:I.settings};return{versions:d,platform:f,paths:p,worker:A,logs:h,database:T,config:R}}function xh(e){let t="";if(t+=`## Environment
106
106
 
107
107
  `,t+=`- **Claude-mem**: ${e.versions.claudeMem}
@@ -100,8 +100,8 @@ ${o.stack}`:` ${o.message}`;else if(this.getLevel()===0&&typeof o=="object")try{
100
100
  ${m.stack??""}
101
101
  `)}else $n(f+`
102
102
  `)}debug(e,r,i,n){this.log(0,e,r,i,n)}info(e,r,i,n){this.log(1,e,r,i,n)}warn(e,r,i,n){this.log(2,e,r,i,n)}setErrorSink(e){qS=e}error(e,r,i,n){this.log(3,e,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(e,r,i){try{if(!qS||!(i instanceof Error))return;qS(i)}catch{}}dataIn(e,r,i,n){this.info(e,`\u2192 ${r}`,i,n)}dataOut(e,r,i,n){this.info(e,`\u2190 ${r}`,i,n)}success(e,r,i,n){this.info(e,`\u2713 ${r}`,i,n)}failure(e,r,i,n){this.error(e,`\u2717 ${r}`,i,n)}},w=new BS});import{join as UP}from"path";import{mkdirSync as N8,writeFileSync as L8}from"fs";import{randomUUID as $8}from"crypto";function U8(t){let e=t.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function VS(t,e){if(U8(t))return{enabled:!1,source:"DO_NOT_TRACK"};let r=t.CLAUDE_MEM_TELEMETRY?.toLowerCase();return r==="0"||r==="false"||r==="off"?{enabled:!1,source:"env"}:r==="1"||r==="true"||r==="on"?{enabled:!0,source:"env"}:e?.enabled===!0?{enabled:!0,source:"config"}:e?.enabled===!1?{enabled:!1,source:"config"}:{enabled:!0,source:"default"}}function JP(t,e){return VS(t,e).enabled}function eu(){return UP(Un(),FP)}function po(){let t;try{t=lr(eu(),null)}catch(e){let r=e instanceof Error?e:new Error(String(e));return w.warn("SYSTEM","Telemetry: corrupt telemetry.json; treating as no recorded consent",void 0,r),null}return!t||typeof t!="object"||typeof t.installId!="string"||t.enabled!==void 0&&typeof t.enabled!="boolean"?null:{enabled:t.enabled,installId:t.installId,decidedAt:typeof t.decidedAt=="string"?t.decidedAt:""}}function Fa(t){let e=Un();N8(e,{recursive:!0}),L8(UP(e,FP),JSON.stringify(t,null,2)+`
103
- `)}function tf(){let t=po();if(t?.installId)return t.installId;let e=$8();return Fa({installId:e,decidedAt:""}),e}var FP,rf=E(()=>{"use strict";He();ls();Oe();FP="telemetry.json"});import F8 from"os";function J8(t){try{if(typeof t!="string"){if(t==null)return"";try{t=String(t)}catch(r){let i=r instanceof Error?r:new Error(String(r));return w.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,i),""}}let e=t;return e.length>zP?e.slice(0,zP):e}catch{return""}}function z8(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=F8.homedir()||""}catch(i){let n=i instanceof Error?i:new Error(String(i));w.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,n),e=""}if(!e)return t;let r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return t.replace(new RegExp(r,"g"),"~")}catch(i){let n=i instanceof Error?i:new Error(String(i));return w.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,n),t.split(e).join("~")}}function q8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function G8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>/^https?:\/\/hooks\.slack\.com\/services\//i.test(e)?e.replace(/^(https?:\/\/hooks\.slack\.com\/services\/)[^\s"'()]+/i,`$1${mn}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${mn}@`))}function B8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function V8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let r=e.indexOf("=");return`${e.slice(0,r+1)}${mn}`})}function W8(t){if(typeof t!="string"||t.length===0)return t??"";let e=t;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,mn),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,mn),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,mn),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,mn),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,mn),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,mn),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,mn),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,mn),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,mn),e}function qP(t){let e=J8(t);return e.length===0?"":(e=z8(e),e=G8(e),e=q8(e),e=B8(e),e=V8(e),e=W8(e),e)}var zP,mn,GP=E(()=>{"use strict";Oe();zP=8192,mn="[REDACTED]"});function Z8(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!H8.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>BP?i.slice(0,BP):i;e[r]=qP(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function VP(t){let e={};try{Z8(t,e)}catch{}return e}var H8,BP,WP=E(()=>{"use strict";GP();H8=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","install_method","interactive","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_invalid_output","top_model","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),BP=200});import HP from"os";function ZP(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||X8}function YP(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Q8}function XP(t){let e={};for(let r of eX)t[r]!==void 0&&(e[r]=t[r]);return e}function tX(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||HP.release().toLowerCase().includes("microsoft")}catch(t){let e=t instanceof Error?t:new Error(String(t));return w.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function QP(){return{version:Y8,os:process.platform,os_version:HP.release(),is_wsl:tX(),arch:process.arch,runtime:process.versions.bun?"bun":"node",runtime_version:process.versions.bun??process.versions.node,node_version:process.versions.node,is_ci:!!process.env.CI,locale:Intl.DateTimeFormat().resolvedOptions().locale}}var Y8,X8,Q8,eX,eM=E(()=>{"use strict";Oe();Y8="13.26.0",X8="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Q8="https://us.i.posthog.com";eX=["version","os","os_version","is_wsl","arch","runtime","locale","ide","provider","runtime_mode","install_method","claude_code_version","first_active_date","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs"]});async function oi(t,e,r){try{if(!JP(process.env,po()))return;let i=VP({...QP(),...e??{}});if(r?.person?i.$set=XP(i):i.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:t,properties:i})+`
104
- `);return}let n=ZP(),o=new AbortController,s=setTimeout(()=>o.abort(),rX);try{await nX(n,t,i,o.signal)}finally{clearTimeout(s)}}catch{}}async function nX(t,e,r,i){await fetch(`${YP()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:t,event:e,distinct_id:tf(),properties:r}),signal:i})}var rX,nf=E(()=>{"use strict";rf();WP();eM();rX=2e3});import{spawn as iX,spawnSync as tM}from"node:child_process";import{dirname as oX,extname as tu,join as sX}from"node:path";function si(t,e,r){return iX(t,e??[],{windowsHide:!0,...r})}function lX(t){return`"${t.replace(/"/g,'""')}"`}function ZS(t){if(process.platform!=="win32")return[];try{let e=tM("where",[t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0});return e.status!==0||!e.stdout.trim()?[]:e.stdout.split(/\r?\n/).map(r=>r.trim()).filter(Boolean)}catch{return[]}}function dX(t,e){let r=t.find(n=>WS.has(tu(n).toLowerCase()));if(r)return r;let i=t.find(n=>HS.has(tu(n).toLowerCase()));if(i&&e){let n=e(i);if(n&&WS.has(tu(n).toLowerCase()))return n}return i??t.find(n=>aX.has(tu(n).toLowerCase()))??t[0]??null}function pX(t,e,r=uX){if(!/[\\/]volta[\\/]bin[\\/]/i.test(e))return null;try{let i=r(sX(oX(e),"volta.exe"),["which",t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:cX,windowsHide:!0});return i.status!==0||!i.stdout.trim()?null:i.stdout.split(/\r?\n/).map(n=>n.trim()).find(Boolean)??null}catch{return null}}function Ja(t){return dX(ZS(t),e=>pX(t,e))}function za(t,e,r,i=process.platform){let n={...i==="win32"?{windowsHide:!0}:{},...r};if(i==="win32"&&HS.has(tu(t).toLowerCase())){let o=[t,...e].map(lX).join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],options:{...n,windowsVerbatimArguments:!0}}}return{command:t,args:[...e],options:n}}var HS,WS,aX,cX,uX,ai=E(()=>{"use strict";HS=new Set([".cmd",".bat"]),WS=new Set([".exe",".com"]),aX=new Set([...WS,...HS]);cX=5e3,uX=(t,e,r)=>tM(t,e,r)});function qa(t){return process.platform==="win32"?Math.round(t*qr.WINDOWS_MULTIPLIER):t}var qr,of=E(()=>{"use strict";qr={HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5}});var iM={};De(iM,{SettingsDefaultsManager:()=>Le});import{readFileSync as fX,existsSync as mX}from"fs";import{join as rM}from"path";import{homedir as nM,hostname as hX}from"os";function vX(t){if(typeof t!="string")return null;let e=t.trim();if(e.length===0)return null;try{if(new URL(e).hostname===gX)return bX}catch{return null}return null}var yX,gX,bX,Le,Dr=E(()=>{"use strict";of();Rr();yX="security_alert",gX="sync-hub.black-pond-afbb.workers.dev",bX="https://sync.cmem.ai";Le=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(qa(qr.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:rM(nM(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",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:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",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_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:rM(nM(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",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",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:hX(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:"30000",CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let r=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,r){let i=r?this.applyEnvOverrides(e):e;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(e,r=!0){try{if(!mX(e)){let u=this.getAllDefaults();try{lt(e,u),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(d){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,d instanceof Error?d.message:String(d))}return this.finalizeSettings(u,r)}let i=fX(e,"utf-8"),n=Et(i),o=n,s=n.env&&typeof n.env=="object"&&!Array.isArray(n.env),a=s&&Object.keys(n).some(u=>u!=="env");if(s&&(o=n.env,!a))try{lt(e,o),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(u){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,u instanceof Error?u.message:String(u))}if(o.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===yX){o={...o,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{lt(e,a?{...n,env:o}:o),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(u){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,u instanceof Error?u.message:String(u))}}let l=vX(o.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null){o={...o,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l};try{lt(e,a?{...n,env:o}:o),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",e)}catch(u){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,u instanceof Error?u.message:String(u))}}let c={...this.DEFAULTS};for(let u of Object.keys(this.DEFAULTS))o[u]!==void 0&&(c[u]=o[u]);return this.finalizeSettings(c,r)}catch(i){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,i instanceof Error?i.message:String(i));let n=this.getAllDefaults();return this.finalizeSettings(n,r)}}}});import{execFile as SX}from"child_process";import{promisify as EX}from"util";import{createHash as LIe}from"crypto";import{existsSync as UIe,readFileSync as FIe,writeFileSync as JIe,mkdirSync as zIe,unlinkSync as qIe}from"fs";import{userInfo as BIe}from"os";import{join as WIe}from"path";var XIe,oM=E(()=>{"use strict";He();Dr();Oe();XIe=EX(SX)});import{existsSync as YS,readFileSync as aM,writeFileSync as wX,mkdirSync as _X,chmodSync as sM}from"fs";import{parseEnv as kX}from"util";import{basename as axe}from"path";function lM(){return process.env.CLAUDE_MEM_ENV_FILE??Be.envFile()}function uM(t){return kX(t)}function IX(t){let e=["# claude-mem credentials","# This file stores keys and gateway settings for the claude-mem memory agent","# Edit this file or use claude-mem settings to configure",""];for(let[r,i]of Object.entries(t))if(i){let n=/[\s#=]/.test(i);e.push(`${r}=${n?`"${i}"`:i}`)}return e.join(`
103
+ `)}function tf(){let t=po();if(t?.installId)return t.installId;let e=$8();return Fa({installId:e,decidedAt:""}),e}var FP,rf=E(()=>{"use strict";He();ls();Oe();FP="telemetry.json"});import F8 from"os";function J8(t){try{if(typeof t!="string"){if(t==null)return"";try{t=String(t)}catch(r){let i=r instanceof Error?r:new Error(String(r));return w.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,i),""}}let e=t;return e.length>zP?e.slice(0,zP):e}catch{return""}}function z8(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=F8.homedir()||""}catch(i){let n=i instanceof Error?i:new Error(String(i));w.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,n),e=""}if(!e)return t;let r=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return t.replace(new RegExp(r,"g"),"~")}catch(i){let n=i instanceof Error?i:new Error(String(i));return w.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,n),t.split(e).join("~")}}function q8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function G8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>/^https?:\/\/hooks\.slack\.com\/services\//i.test(e)?e.replace(/^(https?:\/\/hooks\.slack\.com\/services\/)[^\s"'()]+/i,`$1${mn}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${mn}@`))}function B8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function V8(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let r=e.indexOf("=");return`${e.slice(0,r+1)}${mn}`})}function W8(t){if(typeof t!="string"||t.length===0)return t??"";let e=t;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,mn),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,mn),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,mn),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,mn),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,mn),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,mn),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,mn),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,mn),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,mn),e}function qP(t){let e=J8(t);return e.length===0?"":(e=z8(e),e=G8(e),e=q8(e),e=B8(e),e=V8(e),e=W8(e),e)}var zP,mn,GP=E(()=>{"use strict";Oe();zP=8192,mn="[REDACTED]"});function Z8(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!H8.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>BP?i.slice(0,BP):i;e[r]=qP(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function VP(t){let e={};try{Z8(t,e)}catch{}return e}var H8,BP,WP=E(()=>{"use strict";GP();H8=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","install_method","interactive","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_invalid_output","top_model","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),BP=200});import HP from"os";function ZP(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||X8}function YP(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Q8}function XP(t){let e={};for(let r of eX)t[r]!==void 0&&(e[r]=t[r]);return e}function tX(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||HP.release().toLowerCase().includes("microsoft")}catch(t){let e=t instanceof Error?t:new Error(String(t));return w.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function QP(){return{version:Y8,os:process.platform,os_version:HP.release(),is_wsl:tX(),arch:process.arch,runtime:process.versions.bun?"bun":"node",runtime_version:process.versions.bun??process.versions.node,node_version:process.versions.node,is_ci:!!process.env.CI,locale:Intl.DateTimeFormat().resolvedOptions().locale}}var Y8,X8,Q8,eX,eM=E(()=>{"use strict";Oe();Y8="13.26.1",X8="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Q8="https://us.i.posthog.com";eX=["version","os","os_version","is_wsl","arch","runtime","locale","ide","provider","runtime_mode","install_method","claude_code_version","first_active_date","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs"]});async function oi(t,e,r){try{if(!JP(process.env,po()))return;let i=VP({...QP(),...e??{}});if(r?.person?i.$set=XP(i):i.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:t,properties:i})+`
104
+ `);return}let n=ZP(),o=new AbortController,s=setTimeout(()=>o.abort(),rX);try{await nX(n,t,i,o.signal)}finally{clearTimeout(s)}}catch{}}async function nX(t,e,r,i){await fetch(`${YP()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:t,event:e,distinct_id:tf(),properties:r}),signal:i})}var rX,nf=E(()=>{"use strict";rf();WP();eM();rX=2e3});import{spawn as iX,spawnSync as tM}from"node:child_process";import{dirname as oX,extname as tu,join as sX}from"node:path";function si(t,e,r){return iX(t,e??[],{windowsHide:!0,...r})}function lX(t){return`"${t.replace(/"/g,'""')}"`}function ZS(t){if(process.platform!=="win32")return[];try{let e=tM("where",[t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0});return e.status!==0||!e.stdout.trim()?[]:e.stdout.split(/\r?\n/).map(r=>r.trim()).filter(Boolean)}catch{return[]}}function dX(t,e){let r=t.find(n=>WS.has(tu(n).toLowerCase()));if(r)return r;let i=t.find(n=>HS.has(tu(n).toLowerCase()));if(i&&e){let n=e(i);if(n&&WS.has(tu(n).toLowerCase()))return n}return i??t.find(n=>aX.has(tu(n).toLowerCase()))??t[0]??null}function pX(t,e,r=uX){if(!/[\\/]volta[\\/]bin[\\/]/i.test(e))return null;try{let i=r(sX(oX(e),"volta.exe"),["which",t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:cX,windowsHide:!0});return i.status!==0||!i.stdout.trim()?null:i.stdout.split(/\r?\n/).map(n=>n.trim()).find(Boolean)??null}catch{return null}}function Ja(t){return dX(ZS(t),e=>pX(t,e))}function za(t,e,r,i=process.platform){let n={...i==="win32"?{windowsHide:!0}:{},...r};if(i==="win32"&&HS.has(tu(t).toLowerCase())){let o=[t,...e].map(lX).join(" ");return{command:process.env.ComSpec??"cmd.exe",args:["/d","/s","/c",`"${o}"`],options:{...n,windowsVerbatimArguments:!0}}}return{command:t,args:[...e],options:n}}var HS,WS,aX,cX,uX,ai=E(()=>{"use strict";HS=new Set([".cmd",".bat"]),WS=new Set([".exe",".com"]),aX=new Set([...WS,...HS]);cX=5e3,uX=(t,e,r)=>tM(t,e,r)});function qa(t){return process.platform==="win32"?Math.round(t*qr.WINDOWS_MULTIPLIER):t}var qr,of=E(()=>{"use strict";qr={HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5}});var iM={};De(iM,{SettingsDefaultsManager:()=>Le});import{readFileSync as fX,existsSync as mX}from"fs";import{join as rM}from"path";import{homedir as nM,hostname as hX}from"os";function vX(t){if(typeof t!="string")return null;let e=t.trim();if(e.length===0)return null;try{if(new URL(e).hostname===gX)return bX}catch{return null}return null}var yX,gX,bX,Le,Dr=E(()=>{"use strict";of();Rr();yX="security_alert",gX="sync-hub.black-pond-afbb.workers.dev",bX="https://sync.cmem.ai";Le=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(qa(qr.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:rM(nM(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",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:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",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_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:rM(nM(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",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",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:hX(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:"30000",CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let r=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(r):r}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,r){let i=r?this.applyEnvOverrides(e):e;return i.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(i.CLAUDE_MEM_WORKER_HOST),i}static getInt(e){let r=this.get(e);return parseInt(r,10)}static applyEnvOverrides(e){let r={...e};for(let i of Object.keys(this.DEFAULTS))process.env[i]!==void 0&&(r[i]=process.env[i]);return r}static loadFromFile(e,r=!0){try{if(!mX(e)){let u=this.getAllDefaults();try{lt(e,u),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(d){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,d instanceof Error?d.message:String(d))}return this.finalizeSettings(u,r)}let i=fX(e,"utf-8"),n=Et(i),o=n,s=n.env&&typeof n.env=="object"&&!Array.isArray(n.env),a=s&&Object.keys(n).some(u=>u!=="env");if(s&&(o=n.env,!a))try{lt(e,o),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(u){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,u instanceof Error?u.message:String(u))}if(o.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===yX){o={...o,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{lt(e,a?{...n,env:o}:o),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(u){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,u instanceof Error?u.message:String(u))}}let l=vX(o.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null){o={...o,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l};try{lt(e,a?{...n,env:o}:o),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",e)}catch(u){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,u instanceof Error?u.message:String(u))}}let c={...this.DEFAULTS};for(let u of Object.keys(this.DEFAULTS))o[u]!==void 0&&(c[u]=o[u]);return this.finalizeSettings(c,r)}catch(i){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,i instanceof Error?i.message:String(i));let n=this.getAllDefaults();return this.finalizeSettings(n,r)}}}});import{execFile as SX}from"child_process";import{promisify as EX}from"util";import{createHash as LIe}from"crypto";import{existsSync as UIe,readFileSync as FIe,writeFileSync as JIe,mkdirSync as zIe,unlinkSync as qIe}from"fs";import{userInfo as BIe}from"os";import{join as WIe}from"path";var XIe,oM=E(()=>{"use strict";He();Dr();Oe();XIe=EX(SX)});import{existsSync as YS,readFileSync as aM,writeFileSync as wX,mkdirSync as _X,chmodSync as sM}from"fs";import{parseEnv as kX}from"util";import{basename as axe}from"path";function lM(){return process.env.CLAUDE_MEM_ENV_FILE??Be.envFile()}function uM(t){return kX(t)}function IX(t){let e=["# claude-mem credentials","# This file stores keys and gateway settings for the claude-mem memory agent","# Edit this file or use claude-mem settings to configure",""];for(let[r,i]of Object.entries(t))if(i){let n=/[\s#=]/.test(i);e.push(`${r}=${n?`"${i}"`:i}`)}return e.join(`
105
105
  `)+`
106
106
  `}function dM(){let t=lM();if(!YS(t))return{};try{let e=aM(t,"utf-8"),r=uM(e),i={};for(let n of cM)r[n]&&(i[n]=r[n]);return i}catch(e){return w.warn("ENV","Failed to load .env file",{path:t},e instanceof Error?e:new Error(String(e))),{}}}function pM(t){let e=lM(),r={};try{YS(Be.dataDir())||_X(Be.dataDir(),{recursive:!0,mode:448}),sM(Be.dataDir(),448),r=YS(e)?uM(aM(e,"utf-8")):{}}catch(n){let o=n instanceof Error?n:new Error(String(n));throw w.error("ENV","Failed to set up env directory or read existing env",{},o),o}let i={...r};for(let n of cM){let o=t[n];o!==void 0&&(o?i[n]=o:delete i[n])}try{wX(e,IX(i),{encoding:"utf-8",mode:384}),sM(e,384)}catch(n){throw w.error("ENV","Failed to save .env file",{path:e},n instanceof Error?n:new Error(String(n))),n}}var cM,fM=E(()=>{"use strict";Oe();He();Dr();oM();cM=["ANTHROPIC_API_KEY","ANTHROPIC_BASE_URL","ANTHROPIC_AUTH_TOKEN","GEMINI_API_KEY","OPENROUTER_API_KEY"]});function Fn(t=process.env){let e={};for(let[r,i]of Object.entries(t))if(i!==void 0){if(AX.has(r)){e[r]=i;continue}TX.has(r)||xX.some(n=>r.startsWith(n))||(e[r]=i)}return e}var xX,TX,CX,AX,ru=E(()=>{"use strict";xX=["CLAUDECODE_","CLAUDE_CODE_"],TX=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),CX=new Set(["HTTP_PROXY","HTTPS_PROXY","ALL_PROXY","NO_PROXY","http_proxy","https_proxy","all_proxy","no_proxy","npm_config_proxy","npm_config_https_proxy","npm_config_noproxy"]),AX=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...CX])});import{spawnSync as hM}from"child_process";import{readFileSync as OX}from"fs";function DX(t){XS+=1;let e=hM("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Fn(process.env),LC_ALL:"C",LANG:"C"}});if(e.status===0){let r=e.stdout.trim();return r.length>0?r:null}return null}function PX(t,e=!1){if(!e){let i=mM.get(t);if(i&&Date.now()-i.capturedAtMs<RX)return i.token}let r=null;try{r=DX(t)}catch(i){w.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:i instanceof Error?i.message:String(i)}),r=null}return mM.set(t,{token:r,capturedAtMs:Date.now()}),r}function yM(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){XS+=1;try{let r=OX(`/proc/${t}/stat`,"utf-8"),i=r.lastIndexOf(") ");if(i<0)return null;let o=r.slice(i+2).split(" ")[19];return o&&/^\d+$/.test(o)?o:null}catch(r){return w.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return PX(t,e);XS+=1;try{let r=hM("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Fn(process.env),LC_ALL:"C",LANG:"C"}});if(r.status!==0)return null;let i=r.stdout.trim();return i.length>0?i:null}catch(r){return w.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function fo(t){return yM(t,!1)}function Di(t,e){if(e===null)return!0;let r=yM(t,!0);return r===null?!0:r===e}var RX,mM,XS,QS=E(()=>{"use strict";Oe();ru();RX=5e3,mM=new Map,XS=0});import{execFile as MX}from"child_process";import{readdirSync as KX,readFileSync as jX}from"fs";import{promisify as NX}from"util";async function Jn(t,e={}){let r=e.signalMode==="immediate",i=e.expectedStartToken!==void 0?e.expectedStartToken:fo(t),n=()=>Di(t,i);if(!n()){w.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(w.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await eE("taskkill",["/PID",String(t),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(o){let s=o.code,a=String(o.stderr??""),l=o instanceof Error?o.message:String(o);if(s===LX||$X.test(`${a} ${l}`)){w.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new sf(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${a.trim()||l}`,{cause:o})}return}try{let o=r?"SIGKILL":"SIGTERM",s=await af(t);for(let c of s){if(!Di(c.pid,c.startToken)){w.debug("PROCESS",`Skipping ${o}: descendant PID was reused since enumeration`,{pid:c.pid,rootPid:t});continue}try{process.kill(c.pid,o)}catch{}}if(n())try{process.kill(t,o)}catch(c){let u=c instanceof Error?c:new Error(String(c)),d=u.code;d!=="ESRCH"&&w.debug("PROCESS",`Failed to ${o} PID ${t}`,{code:d},u)}else w.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:t,signal:o});r||await new Promise(c=>setTimeout(c,500));let a=n()?await af(t):[],l=new Map;for(let c of s)l.set(c.pid,c.startToken);for(let c of a)l.set(c.pid,c.startToken);for(let[c,u]of l){if(!Di(c,u)){w.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:c,rootPid:t});continue}try{process.kill(c,"SIGKILL")}catch{}}if(!r&&n())try{process.kill(t,"SIGKILL")}catch{}}catch(o){throw new sf(t,`tree-kill failed for PID ${t}: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}async function UX(){return process.platform==="win32"?zX():process.platform==="linux"?FX():JX()}function FX(){let t=[],e;try{e=KX("/proc")}catch(r){return w.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),t}for(let r of e){if(!/^\d+$/.test(r))continue;let i;try{i=jX(`/proc/${r}/stat`,"utf-8")}catch{continue}let n=i.lastIndexOf(") ");if(n<0)continue;let o=i.slice(n+2).split(" "),s=Number.parseInt(o[1]??"",10),a=o[19];Number.isFinite(s)&&t.push({pid:Number.parseInt(r,10),ppid:s,startToken:a&&/^\d+$/.test(a)?a:null})}return t}async function JX(){let t;try{t=(await eE("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return w.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(`
107
107
  `)){let i=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!i)continue;let n=i[3].trim();e.push({pid:Number.parseInt(i[1],10),ppid:Number.parseInt(i[2],10),startToken:n.length>0?n:null})}return e}async function zX(){let t;try{t=(await eE("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Csv -NoTypeInformation"],{timeout:3e4,windowsHide:!0,maxBuffer:33554432})).stdout}catch(r){return w.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:r instanceof Error?r.message:String(r)}),[]}let e=[];for(let r of t.split(/\r?\n/).slice(1)){let i=r.match(/^"(\d+)","(\d+)","(.*)"$/);if(!i)continue;let n=i[3].trim();e.push({pid:Number.parseInt(i[1],10),ppid:Number.parseInt(i[2],10),startToken:n.length>0?n:null})}return e}async function af(t){let e=await UX(),r=new Map;for(let s of e){let a=r.get(s.ppid);a?a.push(s):r.set(s.ppid,[s])}let i=new Set([t]),n=[],o=s=>{for(let a of r.get(s)??[])i.has(a.pid)||(i.add(a.pid),o(a.pid),n.push({pid:a.pid,startToken:a.startToken}))};return o(t),n}var eE,LX,$X,sf,Ga=E(()=>{"use strict";Oe();QS();eE=NX(MX),LX=128,$X=/not found|no running instance|no tasks/i,sf=class extends Error{pid;constructor(e,r,i){super(r,i),this.name="ProcessTreeKillError",this.pid=e}}});import{existsSync as qX,mkdirSync as gM,readFileSync as GX,writeFileSync as BX}from"fs";import bM from"path";function kt(t){if(!Number.isInteger(t)||t<0||t===0)return!1;try{return process.kill(t,0),!0}catch(e){if(e instanceof Error){let r=e.code;return r==="EPERM"?!0:(w.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return w.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function lf(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(i=>!kt(i.pid)))return;await new Promise(i=>setTimeout(i,100))}}function iE(t){if(!t||!kt(t.pid))return!1;if(!t.startToken)return!0;let e=fo(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||w.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function cf(){return tE||(tE=new nE),tE}function rE(){let t=ZX.shift();t&&t.notify()}var VX,WX,HX,nE,tE,Mxe,ZX,Pi=E(()=>{"use strict";ai();Oe();ru();He();QS();Ga();VX=5e3,WX=1e3,HX=Be.supervisorRegistry();nE=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=HX){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,gM(bM.dirname(this.registryPath),{recursive:!0}),!qX(this.registryPath)){this.persist();return}try{let i=JSON.parse(GX(this.registryPath,"utf-8")).processes??{};for(let[n,o]of Object.entries(i))this.entries.set(n,o)}catch(r){r instanceof Error?w.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):w.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&w.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,r){let i=this.entries.get(e);if(!i||i.pid===r||!kt(i.pid))return;let n=`${e}#superseded:${i.pid}`;this.entries.set(n,i);let o=this.runtimeProcesses.get(e);o&&(this.runtimeProcesses.set(n,o),this.runtimeProcesses.delete(e)),w.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:n,supersededPid:i.pid,incomingPid:r})}register(e,r,i){this.initialize(),this.retainSupersededEntry(e,r.pid),this.entries.set(e,r),i&&this.runtimeProcesses.set(e,i),this.persist()}unregister(e){this.initialize();let r=this.entries.get(e);this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist(),r?.type==="sdk"&&rE()}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,r])=>({id:e,...r})).sort((e,r)=>{let i=Date.parse(e.startedAt),n=Date.parse(r.startedAt);return(Number.isNaN(i)?0:i)-(Number.isNaN(n)?0:n)})}getBySession(e){let r=String(e);return this.getAll().filter(i=>i.sessionId!==void 0&&String(i.sessionId)===r)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,r=0;for(let[i,n]of this.entries)kt(n.pid)||(this.entries.delete(i),this.runtimeProcesses.delete(i),e+=1,n.type==="sdk"&&(r+=1));e>0&&this.persist();for(let i=0;i<r;i+=1)rE();return e}async reapSession(e){this.initialize();let r=this.getBySession(e);if(r.length===0)return 0;let i=typeof e=="number"?e:Number(e)||void 0;w.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:i,pids:r.map(a=>a.pid)});let n=r.filter(a=>kt(a.pid)),o=new Map(n.map(a=>[a.pid,fo(a.pid)]));for(let a of n)try{process.platform==="win32"?await Jn(a.pid,{expectedStartToken:o.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(l){l instanceof Error?l.code!=="ESRCH"&&w.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):w.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}await lf(n,VX);let s=n.filter(a=>kt(a.pid));for(let a of s){w.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:i});let l=o.get(a.pid)??null;if(!Di(a.pid,l)){w.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:i});continue}try{process.platform==="win32"?await Jn(a.pid,{expectedStartToken:l}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(c){c instanceof Error?c.code!=="ESRCH"&&w.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):w.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}}if(s.length>0){let a=Date.now()+WX;for(;Date.now()<a&&s.filter(c=>kt(c.pid)).length!==0;)await new Promise(c=>setTimeout(c,100))}for(let a of r)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of r)a.type==="sdk"&&rE();return w.info("SYSTEM",`Reaped ${r.length} process(es) for session ${e}`,{sessionId:i,reaped:r.length}),r.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};gM(bM.dirname(this.registryPath),{recursive:!0}),BX(this.registryPath,JSON.stringify(e,null,2))}},tE=null;Mxe=180*1e3,ZX=[]});import{existsSync as YX,readFileSync as XX,rmSync as QX}from"fs";async function SM(t){let e=t.currentPid??process.pid,r=t.pidFilePath??eQ,i=t.registry.getAll(),n=[...i].filter(l=>l.pid!==e).sort((l,c)=>Date.parse(c.startedAt)-Date.parse(l.startedAt)),o=new Map,s=new Map;for(let l of n){if(!kt(l.pid)){t.registry.unregister(l.id);continue}s.set(l.id,fo(l.pid)),o.set(l.id,await af(l.pid));try{await vM(l,"SIGTERM")}catch(c){c instanceof Error?w.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:l.pid,pgid:l.pgid,type:l.type},c):w.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:l.pid,pgid:l.pgid,type:l.type,error:String(c)})}}await lf(n,5e3);let a=n.filter(l=>kt(l.pid)||(o.get(l.id)??[]).some(c=>kt(c.pid)));for(let l of a){let c=Di(l.pid,s.get(l.id)??null);c||w.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:l.pid,type:l.type});try{c&&await vM(l,"SIGKILL")}catch(u){u instanceof Error?w.debug("SYSTEM","Failed to force kill child process",{pid:l.pid,pgid:l.pgid,type:l.type},u):w.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:l.pid,pgid:l.pgid,type:l.type,error:String(u)})}finally{tQ(o.get(l.id)??[],l.pid)}}await lf(a,1e3);for(let l of n)t.registry.unregister(l.id);for(let l of i.filter(c=>c.pid===e))t.registry.unregister(l.id);EM(r,e),t.registry.pruneDeadEntries()}function EM(t,e,r=!1){if(!YX(t))return;let i=null;try{let s=JSON.parse(XX(t,"utf-8"));i=typeof s.pid=="number"?s.pid:null}catch(s){w.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:t,error:s instanceof Error?s.message:String(s)});return}let n=e!==null&&i===e,o=i===null||!kt(i);if(!n&&!(r&&o)){w.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:t,recordedPid:i,currentPid:e});return}try{QX(t,{force:!0})}catch(s){s instanceof Error?w.debug("SYSTEM","Failed to remove PID file",{pidFilePath:t},s):w.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:t,error:String(s)})}}function tQ(t,e){for(let{pid:r,startToken:i}of t)if(!(r===e||!kt(r))){if(!Di(r,i)){w.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:r,rootPid:e});continue}try{process.kill(r,"SIGKILL"),w.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:r,rootPid:e})}catch(n){let o=n instanceof Error?n.code:void 0;o!=="ESRCH"&&w.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:r,rootPid:e,errno:o})}}}async function vM(t,e){let{pid:r,pgid:i}=t;if(process.platform!=="win32"){if(typeof i=="number")try{process.kill(-i,e);return}catch(n){if((n instanceof Error?n.code:void 0)!=="ESRCH")throw n}if(e==="SIGKILL"){await Jn(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(n){if((n instanceof Error?n.code:void 0)!=="ESRCH")throw n}return}await Jn(r)}var eQ,oE=E(()=>{"use strict";Oe();Pi();He();Ga();eQ=Be.workerPid()});function rQ(){let e=cf().pruneDeadEntries();e>0&&w.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function _M(){Ba===null&&(Ba=setInterval(rQ,wM),Ba.unref(),w.debug("SYSTEM","Health checker started",{intervalMs:wM}))}function kM(){Ba!==null&&(clearInterval(Ba),Ba=null,w.debug("SYSTEM","Health checker stopped"))}var wM,Ba,IM=E(()=>{"use strict";Oe();Pi();wM=3e4,Ba=null});import{execFile as nQ}from"child_process";import{promisify as iQ}from"util";function aQ(t){let e=[];for(let r of t.split(`