claude-mem 13.30.0 → 13.31.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.
@@ -9,7 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "claude-mem",
12
- "version": "13.30.0",
12
+ "version": "13.31.0",
13
13
  "source": "./plugin",
14
14
  "description": "Persistent memory system for Claude Code - context compression across sessions"
15
15
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.30.0",
3
+ "version": "13.31.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.30.0",
3
+ "version": "13.31.0",
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.30.0-green.svg" alt="Version">
62
+ <img src="https://img.shields.io/badge/version-13.31.0-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">
@@ -13,7 +13,7 @@ ${m.stack??""}
13
13
  `)}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){JS=e}error(e,r,i,n){this.log(3,e,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(e,r,i){try{if(!JS||!(i instanceof Error))return;JS(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)}},g=new qS});function cN(t=process.env){let e=Number.parseInt(t.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=lN.min&&e<=lN.max?e:U9}function uN(t=process.platform){return t==="win32"?8e3:5e3}function BS(t=process.platform){return Ot.SESSION_INIT_HOOK_CAP-uN(t)}function Vi(t){return process.platform==="win32"?Math.round(t*Ot.WINDOWS_MULTIPLIER):t}var Ot,U9,lN,js=E(()=>{"use strict";Ot={HEALTH_CHECK:3e3,API_REQUEST:3e4,SESSION_INIT_HOOK_CAP:15e3,SESSION_INIT_REQUEST:1e4,SESSION_INIT_REQUEST_MAX:14e3,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},U9=300,lN={min:60,max:86400}});var dN=E(()=>{"use strict"});function pN(t){try{return new URL(t).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var fN=E(()=>{"use strict";_e()});import{readFileSync as $9,existsSync as mN,writeFileSync as F9}from"fs";import{basename as J9,dirname as z9,join as WS}from"path";import{homedir as hN,hostname as q9}from"os";function H9(t){let e=t.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!V9.has(e.trim()))return!1;let r=typeof t.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?t.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||pN(r)}function vN(t,e){return WS(z9(t),`.${J9(t)}.${e.markerTag}`)}function GS(t,e){try{F9(vN(t,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}function Y9(t){if(typeof t!="string")return null;let e=t.trim();if(e.length===0)return null;try{if(new URL(e).hostname===G9)return W9}catch{return null}return null}var B9,G9,W9,V9,yN,gN,bN,Re,Sr=E(()=>{"use strict";js();dr();fN();Si();B9="security_alert",G9="sync-hub.black-pond-afbb.workers.dev",W9="https://sync.cmem.ai",V9=new Set(["xiaomi/mimo-v2-flash:free"]);yN=18e4,gN=[{key:"CLAUDE_MEM_LLM_TIMEOUT_MS",legacy:"30000",markerTag:"llm-timeout-migrated-v1"},{key:"CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS",legacy:"30000",markerTag:"field-optimize-timeout-migrated-v1"}];bN=new Set;Re=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES:"false",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(Vi(Ot.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(BS()),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_SKIP_BASH_PATTERNS:"",CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS:"false",CLAUDE_MEM_SKIP_AGENT_TYPES:"",CLAUDE_MEM_CAPTURE_ADVISOR_CALLS:"false",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CODEX_MODEL:"",CLAUDE_MEM_CODEX_PATH:"codex",CLAUDE_MEM_CODEX_REASONING_EFFORT:"low",CLAUDE_MEM_CODEX_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_SIZE:"8",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_MAX_CHARS:"32000",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_DATA_DIR:WS(hN(),".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_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",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:WS(hN(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",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_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",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:q9(),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:String(yN),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(yN),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_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",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_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",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:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};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(!mN(e)){let d=this.getAllDefaults();try{bt(e,d,{mode:384});for(let p of gN)GS(e,p);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(p){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,p instanceof Error?p.message:String(p))}return this.finalizeSettings(d,r)}let i=$9(e,"utf-8"),n=Wi(i),o=Qn(n),s=o!==n,a=jS(n),l=s&&Object.keys(a).some(d=>d!=="env");if(s&&!l)try{bt(e,o,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,d instanceof Error?d.message:String(d))}if(o.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===B9){o={...o,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{bt(e,l?{...a,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,d instanceof Error?d.message:String(d))}}if(H9(o)){let d=String(o.CLAUDE_MEM_OPENROUTER_MODEL).trim();o={...o,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL};try{bt(e,l?{...a,env:o}:o,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${d} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(p){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,p instanceof Error?p.message:String(p))}}let c=Y9(o.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(c!==null){o={...o,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:c};try{bt(e,l?{...a,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL off the legacy workers.dev host:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,d instanceof Error?d.message:String(d))}}for(let d of gN)if(!mN(vN(e,d))){if(o[d.key]!==d.legacy){GS(e,d);continue}o={...o,[d.key]:this.DEFAULTS[d.key]};try{bt(e,l?{...a,env:o}:o,{mode:384}),GS(e,d),console.warn(`[SETTINGS] Migrated ${d.key} off the old ${d.legacy}ms default to ${this.DEFAULTS[d.key]}ms:`,e)}catch(p){let f=`${d.key}\0${e}`;bN.has(f)||(bN.add(f),console.warn(`[SETTINGS] Failed to migrate ${d.key}; using the new default in memory (reported once per process):`,e,p instanceof Error?p.message:String(p)))}}let u={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))o[d]!==void 0&&(u[d]=o[d]);return this.finalizeSettings(u,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)}}}});var EN=E(()=>{"use strict";Sr();Le()});function Ou(t){return(t.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}var Nf=E(()=>{"use strict"});var SN=E(()=>{"use strict"});import{spawn as Z9,spawnSync as wN}from"node:child_process";import{dirname as X9,extname as Kf,join as Q9}from"node:path";function Hi(t,e,r){return Z9(t,e??[],{...r,windowsHide:!0})}function t7(t){return`"${t.replace(/"/g,'""')}"`}function _N(t){return kN.has(Kf(t).toLowerCase())}function HS(t){if(process.platform!=="win32")return[];try{let e=wN("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 i7(t,e){let r=t.find(_N);if(r)return r;let i=t.find(n=>VS.has(Kf(n).toLowerCase()));if(i&&e){let n=e(i);if(n&&_N(n))return n}return i??t.find(n=>e7.has(Kf(n).toLowerCase()))??t[0]??null}function o7(t,e,r=n7){if(!/[\\/]volta[\\/]bin[\\/]/i.test(e))return null;try{let i=r(Q9(X9(e),"volta.exe"),["which",t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:r7,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 ml(t){return i7(HS(t),e=>o7(t,e))}function hl(t,e,r,i=process.platform){let n={...r,...i==="win32"?{windowsHide:!0}:{}};if(i==="win32"&&VS.has(Kf(t).toLowerCase())){let o=[t,...e].map(t7).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 VS,kN,e7,r7,n7,Yi=E(()=>{"use strict";VS=new Set([".cmd",".bat"]),kN=new Set([".exe",".com"]),e7=new Set([...kN,...VS]);r7=5e3,n7=(t,e,r)=>wN(t,e,r)});function jr(t=process.env){let e={};for(let[r,i]of Object.entries(t))if(i!==void 0){if(c7.has(r)){e[r]=i;continue}a7.has(r)||s7.some(n=>r.startsWith(n))||(e[r]=i)}return e}var s7,a7,l7,c7,Ls=E(()=>{"use strict";s7=["CLAUDECODE_","CLAUDE_CODE_"],a7=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),l7=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"]),c7=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_TMPDIR","CLAUDE_CODE_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",...l7])});import{spawnSync as xN}from"child_process";import{readFileSync as u7}from"fs";function TN(t,e,r){if(r.status!==0)return null;if(typeof r.stdout!="string")return g.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:t,status:r.status}),null;let i=r.stdout.trim();return i.length>0?i:null}function p7(t){YS+=1;let e=xN("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...jr(process.env),LC_ALL:"C",LANG:"C"}});return TN("powershell-cim",t,e)}function f7(t,e=!1){if(!e){let i=IN.get(t);if(i&&(t===process.pid||Date.now()-i.capturedAtMs<d7))return i.token}let r=null;try{r=p7(t)}catch(i){g.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:t,error:i instanceof Error?i.message:String(i)}),r=null}return(r!==null||t!==process.pid)&&IN.set(t,{token:r,capturedAtMs:Date.now()}),r}function CN(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){YS+=1;try{let r=u7(`/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 g.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}if(process.platform==="win32")return f7(t,e);YS+=1;try{let r=xN("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...jr(process.env),LC_ALL:"C",LANG:"C"}});return TN("ps-lstart",t,r)}catch(r){return g.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:t,error:r instanceof Error?r.message:String(r)}),null}}function wi(t){return CN(t,!1)}function ti(t,e){if(e===null)return!0;let r=CN(t,!0);return r===null?!0:r===e}var d7,IN,YS,jf=E(()=>{"use strict";_e();Ls();d7=5e3,IN=new Map,YS=0});import{execFile as m7}from"child_process";import{readdirSync as h7,readFileSync as y7}from"fs";import{promisify as g7}from"util";async function ri(t,e={}){let r=e.signalMode==="immediate",i=e.expectedStartToken!==void 0?e.expectedStartToken:wi(t),n=()=>ti(t,i);if(!n()){g.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:t});return}if(g.debug("PROCESS",`Killing process tree rooted at PID ${t}`,{immediate:r}),process.platform==="win32"){try{await ZS("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===b7||v7.test(`${a} ${l}`)){g.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new Lf(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${a.trim()||l}`,{cause:o})}return}try{let o=r?"SIGKILL":"SIGTERM",s=await Uf(t);for(let c of s){if(!ti(c.pid,c.startToken)){g.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"&&g.debug("PROCESS",`Failed to ${o} PID ${t}`,{code:d},u)}else g.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 Uf(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(!ti(c,u)){g.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 Lf(t,`tree-kill failed for PID ${t}: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}async function E7(){return process.platform==="win32"?w7():process.platform==="linux"?S7():_7()}function S7(){let t=[],e;try{e=h7("/proc")}catch(r){return g.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=y7(`/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 _7(){let t;try{t=(await ZS("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(r){return g.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(`
14
14
  `)){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 w7(){let t;try{t=(await ZS("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 g.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 Uf(t){let e=await E7(),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 ZS,b7,v7,Lf,yl=E(()=>{"use strict";_e();jf();ZS=g7(m7),b7=128,v7=/not found|no running instance|no tasks/i,Lf=class extends Error{pid;constructor(e,r,i){super(r,i),this.name="ProcessTreeKillError",this.pid=e}}});import{existsSync as AN,readFileSync as t_}from"fs";import k7 from"path";function St(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:(g.debug("SYSTEM","PID check failed",{pid:t,code:r}),!1)}return g.warn("SYSTEM","PID check threw non-Error",{pid:t,error:String(e)}),!1}}async function $f(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(i=>!St(i.pid)))return;await new Promise(i=>setTimeout(i,100))}}function ON(t){if(!t||!St(t.pid))return!1;if(!t.startToken)return!0;let e=wi(t.pid);if(e===null)return!0;let r=e===t.startToken;return r||g.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:t.pid,stored:t.startToken,current:e}),r}function gl(t,e=A7){if(!ON(t))return!1;if(t.startToken||e.platform!=="linux")return!0;let r;try{r=e.readCommandLine(t.pid)}catch(n){return g.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:t.pid,error:n instanceof Error?n.message:String(n)}),!0}let i=r.split("\0").some(n=>k7.basename(n)==="worker-service.cjs");return i||g.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:t.pid}),i}function ki(t=$e.workerPid()){if(!AN(t))return null;let e;try{e=JSON.parse(t_(t,"utf-8"))}catch{return null}return e!==null&&gl(e)?e:null}function Ff(){return XS||(XS=new e_),XS}function QS(){let t=O7.shift();t&&t.notify()}var I7,x7,T7,C7,A7,e_,XS,yRe,O7,en=E(()=>{"use strict";Yi();_e();dr();Ls();Le();jf();yl();I7=5e3,x7=1e3,T7=$e.supervisorRegistry(),C7=null;A7={platform:process.platform,readCommandLine:t=>t_(`/proc/${t}/cmdline`,"utf-8")};e_=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=T7){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!AN(this.registryPath)){this.persist();return}try{let i=JSON.parse(t_(this.registryPath,"utf-8")).processes??{};for(let[n,o]of Object.entries(i))this.entries.set(n,o)}catch(r){r instanceof Error?g.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},r):g.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(r)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&g.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||!St(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)),g.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,r){this.initialize();let i=e,n=this.entries.get(i);r!==void 0&&n?.pid!==r&&(i=`${e}#superseded:${r}`,n=this.entries.get(i),n?.pid!==r)||n&&(this.entries.delete(i),this.runtimeProcesses.delete(i),this.persist(),n?.type==="sdk"&&QS())}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)St(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)QS();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;g.info("SYSTEM",`Reaping ${r.length} process(es) for session ${e}`,{sessionId:i,pids:r.map(a=>a.pid)});let n=r.filter(a=>St(a.pid)),o=new Map(n.map(a=>[a.pid,wi(a.pid)]));for(let a of n)try{process.platform==="win32"?await ri(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"&&g.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):g.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}await $f(n,I7);let s=n.filter(a=>St(a.pid));for(let a of s){g.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(!ti(a.pid,l)){g.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:i});continue}try{process.platform==="win32"?await ri(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"&&g.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):g.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()+x7;for(;Date.now()<a&&s.filter(c=>St(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"&&QS();return g.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())};try{bt(this.registryPath,e),this.persistDegraded=!1}catch(r){this.reportPersistFailure(r)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let r=e instanceof Error?e:new Error(String(e));g.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},r);try{C7?.({errorCategory:r.code??"unknown"})}catch{}}},XS=null;yRe=180*1e3,O7=[]});import{existsSync as R7,readFileSync as D7,rmSync as P7}from"fs";async function DN(t){let e=t.currentPid??process.pid,r=t.pidFilePath??M7,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(!St(l.pid)){t.registry.unregister(l.id);continue}s.set(l.id,wi(l.pid)),o.set(l.id,await Uf(l.pid));try{await RN(l,"SIGTERM")}catch(c){c instanceof Error?g.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:l.pid,pgid:l.pgid,type:l.type},c):g.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:l.pid,pgid:l.pgid,type:l.type,error:String(c)})}}await $f(n,5e3);let a=n.filter(l=>St(l.pid)||(o.get(l.id)??[]).some(c=>St(c.pid)));for(let l of a){let c=ti(l.pid,s.get(l.id)??null);c||g.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:l.pid,type:l.type});try{c&&await RN(l,"SIGKILL")}catch(u){u instanceof Error?g.debug("SYSTEM","Failed to force kill child process",{pid:l.pid,pgid:l.pgid,type:l.type},u):g.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:l.pid,pgid:l.pgid,type:l.type,error:String(u)})}finally{N7(o.get(l.id)??[],l.pid)}}await $f(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);r_(r,e),t.registry.pruneDeadEntries()}function r_(t,e,r=!1){if(!R7(t))return;let i=null;try{let s=JSON.parse(D7(t,"utf-8"));i=typeof s.pid=="number"?s.pid:null}catch(s){g.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||!St(i);if(!n&&!(r&&o)){g.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{P7(t,{force:!0})}catch(s){s instanceof Error?g.debug("SYSTEM","Failed to remove PID file",{pidFilePath:t},s):g.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:t,error:String(s)})}}function N7(t,e){for(let{pid:r,startToken:i}of t)if(!(r===e||!St(r))){if(!ti(r,i)){g.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:r,rootPid:e});continue}try{process.kill(r,"SIGKILL"),g.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"&&g.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:r,rootPid:e,errno:o})}}}async function RN(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 ri(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(n){if((n instanceof Error?n.code:void 0)!=="ESRCH")throw n}return}await ri(r)}var M7,n_=E(()=>{"use strict";_e();en();Le();yl();M7=$e.workerPid()});function K7(){let e=Ff().pruneDeadEntries();e>0&&g.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function MN(){bl===null&&(bl=setInterval(K7,PN),bl.unref(),g.debug("SYSTEM","Health checker started",{intervalMs:PN}))}function NN(){bl!==null&&(clearInterval(bl),bl=null,g.debug("SYSTEM","Health checker stopped"))}var PN,bl,KN=E(()=>{"use strict";_e();en();PN=3e4,bl=null});import{execFile as j7}from"child_process";import{promisify as L7}from"util";function F7(t){let e=[];for(let r of t.split(`
15
15
  `)){let i=r.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);i&&e.push({pid:Number.parseInt(i[1],10),ppid:Number.parseInt(i[2],10),command:i[3].trim()})}return e}async function i_(){let t=await U7("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return F7(t.stdout)}function o_(t,e){let r=t.filter(s=>$7.test(s.command)&&s.pid!==e.selfPid),i=new Set(r.map(s=>s.pid)),n=r.filter(s=>!i.has(s.ppid)),o=n.filter(s=>s.ppid===e.selfPid?!1:s.ppid===1?!0:!e.isAlive(s.ppid));return{matched:r,roots:n,orphans:o}}async function jN(t={}){let e=t.platform??process.platform,r={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return r.skipped="windows",r;let i=t.readTable??i_,n=t.isAlive??St,o=t.killTree??(f=>ri(f,{signalMode:"graceful"})),s=t.selfPid??process.pid,a;try{a=await i()}catch(f){return g.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:f instanceof Error?f.message:String(f)}),r.skipped="unreadable",r}let{matched:l,roots:c,orphans:u}=o_(a,{isAlive:n,selfPid:s});if(r.matched=l.length,r.trees=c.length,r.orphans=u.length,u.length===0)return g.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:r.matched,trees:r.trees}),r;g.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(f=>f.pid)});let d=new Set,p=8;for(let f=0;f<u.length;f+=p){let m=u.slice(f,f+p);(await Promise.allSettled(m.map(b=>o(b.pid)))).forEach((b,S)=>{let v=m[S];b.status==="fulfilled"?(r.killed+=1,d.add(v.pid)):(r.failed+=1,g.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:v.pid,ppid:v.ppid,error:b.reason instanceof Error?b.reason.message:String(b.reason)}))})}if(t.registry)for(let f of t.registry.getAll())f.type==="chroma"&&d.has(f.pid)&&(t.registry.unregister(f.id),r.unregistered+=1);return g.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:r.orphans,killed:r.killed,failed:r.failed,unregistered:r.unregistered}),r}var U7,$7,s_=E(()=>{"use strict";_e();yl();en();U7=L7(j7),$7=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/});import{existsSync as J7,readFileSync as z7,rmSync as LN}from"fs";function l_(){return B7}function Jf(t={}){let e=t.pidFilePath??q7;if(!J7(e))return"missing";let r=null;try{r=JSON.parse(z7(e,"utf-8"))}catch(n){return n instanceof Error?g.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},n):g.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(n)}),LN(e,{force:!0}),"invalid"}return gl(r)&&r?((t.logAlive??!0)&&g.info("SYSTEM","Worker already running (PID alive)",{existingPid:r.pid,existingPort:r.port,startedAt:r.startedAt}),"alive"):(t.removeStale===!1||(g.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:r?.pid,port:r?.port,startedAt:r?.startedAt}),LN(e,{force:!0})),"stale")}var q7,a_,B7,Ru=E(()=>{"use strict";_e();en();n_();KN();s_();Le();en();q7=$e.workerPid(),a_=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),Jf({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,jN({registry:this.registry}).catch(r=>{g.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:r instanceof Error?r.message:String(r)})}),MN()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let r=async i=>{if(this.shutdownInitiated){g.warn("SYSTEM",`Received ${i} but shutdown already in progress`);return}this.shutdownInitiated=!0,g.info("SYSTEM",`Received ${i}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(n){n instanceof Error?g.error("SYSTEM","Error during shutdown",{},n):g.error("SYSTEM","Error during shutdown (non-Error)",{error:String(n)});try{await this.stop()}catch(o){o instanceof Error?g.debug("SYSTEM","Supervisor shutdown fallback failed",{},o):g.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(o)})}}process.exit(0)};process.on("SIGTERM",()=>{r("SIGTERM")}),process.on("SIGINT",()=>{r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{g.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{r("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}NN(),this.stopPromise=DN({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,r,i){this.registry.register(e,r,i)}unregisterProcess(e,r){this.registry.unregister(e,r)}getRegistry(){return this.registry}},B7=new a_(Ff())});import{existsSync as G7,readFileSync as W7}from"fs";function Bt(t,e){if(!G7(t))return e;try{return Wi(W7(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var Co=E(()=>{"use strict";dr()});import{join as UN}from"path";import{mkdirSync as V7,writeFileSync as H7}from"fs";import{randomUUID as Y7}from"crypto";function Z7(t){let e=t.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function c_(t,e){if(Z7(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 FN(t,e){return c_(t,e).enabled}function Du(){return UN(Qr(),$N)}function Ao(){let t;try{t=Bt(Du(),null)}catch(e){let r=e instanceof Error?e:new Error(String(e));return g.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 vl(t){let e=Qr();V7(e,{recursive:!0}),H7(UN(e,$N),JSON.stringify(t,null,2)+`
16
- `)}function zf(){let t=Ao();if(t?.installId)return t.installId;let e=Y7();return vl({installId:e,decidedAt:""}),e}var $N,qf=E(()=>{"use strict";Le();Co();_e();$N="telemetry.json"});import X7 from"os";function Q7(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 g.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,i),""}}let e=t;return e.length>JN?e.slice(0,JN):e}catch{return""}}function eee(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=X7.homedir()||""}catch(i){let n=i instanceof Error?i:new Error(String(i));g.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 g.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,n),t.split(e).join("~")}}function tee(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 ree(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${kn}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${kn}@`))}function nee(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function iee(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)}${kn}`})}function oee(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,kn),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,kn),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,kn),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,kn),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,kn),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,kn),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,kn),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,kn),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,kn),e}function zN(t){let e=Q7(t);return e.length===0?"":(e=eee(e),e=ree(e),e=tee(e),e=nee(e),e=iee(e),e=oee(e),e)}var JN,kn,qN=E(()=>{"use strict";_e();JN=8192,kn="[REDACTED]"});function aee(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!see.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>BN?i.slice(0,BN):i;e[r]=zN(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function GN(t){let e={};try{aee(t,e)}catch{}return e}var see,BN,WN=E(()=>{"use strict";qN();see=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","phase","install_method","interactive","provider_source","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_aborted_deadline_exceeded","outcomes_invalid_output","top_model","top_abort_reason","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"]),BN=200});import VN from"os";function HN(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||cee}function YN(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||uee}function ZN(t){let e={};for(let r of dee)t[r]!==void 0&&(e[r]=t[r]);return e}function pee(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||VN.release().toLowerCase().includes("microsoft")}catch(t){let e=t instanceof Error?t:new Error(String(t));return g.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function XN(){return{version:lee,os:process.platform,os_version:VN.release(),is_wsl:pee(),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 lee,cee,uee,dee,QN=E(()=>{"use strict";_e();lee="13.30.0",cee="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",uee="https://us.i.posthog.com";dee=["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 _r(t,e,r){try{if(!FN(process.env,Ao()))return;let i=GN({...XN(),...e??{}});if(r?.person?i.$set=ZN(i):i.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:t,properties:i})+`
16
+ `)}function zf(){let t=Ao();if(t?.installId)return t.installId;let e=Y7();return vl({installId:e,decidedAt:""}),e}var $N,qf=E(()=>{"use strict";Le();Co();_e();$N="telemetry.json"});import X7 from"os";function Q7(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 g.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,i),""}}let e=t;return e.length>JN?e.slice(0,JN):e}catch{return""}}function eee(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=X7.homedir()||""}catch(i){let n=i instanceof Error?i:new Error(String(i));g.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 g.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,n),t.split(e).join("~")}}function tee(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 ree(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${kn}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${kn}@`))}function nee(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function iee(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)}${kn}`})}function oee(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,kn),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,kn),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,kn),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,kn),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,kn),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,kn),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,kn),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,kn),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,kn),e}function zN(t){let e=Q7(t);return e.length===0?"":(e=eee(e),e=ree(e),e=tee(e),e=nee(e),e=iee(e),e=oee(e),e)}var JN,kn,qN=E(()=>{"use strict";_e();JN=8192,kn="[REDACTED]"});function aee(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!see.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>BN?i.slice(0,BN):i;e[r]=zN(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function GN(t){let e={};try{aee(t,e)}catch{}return e}var see,BN,WN=E(()=>{"use strict";qN();see=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","phase","install_method","interactive","provider_source","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_aborted_deadline_exceeded","outcomes_invalid_output","top_model","top_abort_reason","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"]),BN=200});import VN from"os";function HN(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||cee}function YN(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||uee}function ZN(t){let e={};for(let r of dee)t[r]!==void 0&&(e[r]=t[r]);return e}function pee(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||VN.release().toLowerCase().includes("microsoft")}catch(t){let e=t instanceof Error?t:new Error(String(t));return g.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function XN(){return{version:lee,os:process.platform,os_version:VN.release(),is_wsl:pee(),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 lee,cee,uee,dee,QN=E(()=>{"use strict";_e();lee="13.31.0",cee="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",uee="https://us.i.posthog.com";dee=["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 _r(t,e,r){try{if(!FN(process.env,Ao()))return;let i=GN({...XN(),...e??{}});if(r?.person?i.$set=ZN(i):i.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:t,properties:i})+`
17
17
  `);return}let n=HN(),o=new AbortController,s=setTimeout(()=>o.abort(),fee);try{await mee(n,t,i,o.signal)}finally{clearTimeout(s)}}catch{}}async function mee(t,e,r,i){await fetch(`${YN()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:t,event:e,distinct_id:zf(),properties:r}),signal:i})}var fee,Pu=E(()=>{"use strict";qf();WN();QN();fee=2e3});import{createHash as dDe,randomUUID as pDe}from"crypto";var eK=E(()=>{"use strict";_e()});import{randomUUID as vDe}from"crypto";var tK=E(()=>{"use strict";_e();eK()});import{statSync as hee,readFileSync as yee}from"fs";import Us from"path";function rK(t){let e=Us.join(t,".git"),r;try{r=hee(e)}catch(l){return l instanceof Error&&l.code!=="ENOENT"&&g.warn("GIT","Unexpected error checking .git",{error:l instanceof Error?l.message:String(l)}),Mu}if(!r.isFile())return Mu;let i;try{i=yee(e,"utf-8").trim()}catch(l){return g.warn("GIT","Failed to read .git file",{error:l instanceof Error?l.message:String(l)}),Mu}let n=i.match(/^gitdir:\s*(.+)$/);if(!n)return Mu;let o=Us.resolve(Us.dirname(e),n[1]),s=o.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(s){let l=s[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:Us.basename(t),parentRepoPath:l,parentProjectName:Us.basename(l)}}let a=o.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let l=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:Us.basename(t),parentRepoPath:l,parentProjectName:Us.basename(l)}}return Mu}var Mu,nK=E(()=>{"use strict";_e();Mu={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null}});import{basename as gee}from"path";function bee(t){let e=ei(t.replace(/\\/g,"/"));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 iK(t,e){if(!e.length)return!1;let r=t.replace(/\\/g,"/"),i=gee(r);for(let n of e){let o=n.trim();if(o)try{let s=bee(o);if(s.test(r)||s.test(i))return!0}catch(s){g.warn("PROJECT_NAME","Invalid glob pattern",{pattern:o,error:s instanceof Error?s.message:String(s)});continue}}return!1}var oK=E(()=>{"use strict";Au();_e()});import{realpathSync as vee}from"fs";function sK(t){let e=t;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(i){return g.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:i instanceof Error?i.message:String(i)}),[]}}if(!Array.isArray(e))return e!=null&&g.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let r=[];for(let i of e){let n=typeof i?.name=="string"?i.name.trim():"",o=Array.isArray(i?.patterns)?i.patterns.filter(s=>typeof s=="string"&&s.trim()!==""):[];if(!n||o.length===0){g.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:n});continue}r.push({name:n,patterns:o})}return r}function Eee(t){try{return vee(t)}catch{return t}}function u_(t,e){if(e.length===0)return null;let r=[...new Set([t,Eee(t)])].flatMap(i=>[i,`${i.replace(/[\\/]+$/,"")}/`]);for(let i of e)if(r.some(n=>iK(n,i.patterns)))return i.name;return null}var aK=E(()=>{"use strict";oK();_e()});import Lr from"path";import{existsSync as See,realpathSync as _ee,statSync as wee}from"fs";import{homedir as kee,tmpdir as Iee}from"os";import{execFileSync as uK}from"child_process";function dK(t){try{return uK("git",["rev-parse","--show-toplevel"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let r=e instanceof Error?e:new Error(String(e));return g.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:t},r),null}}function pK(t){try{return _ee(t)}catch{return t}}function Cee(t,e){let r=Lr.relative(e,t);return r===""||!r.startsWith("..")&&!Lr.isAbsolute(r)}function Aee(){return[kee(),Iee(),Ks].flatMap(t=>{let e=Lr.resolve(t);return[e,pK(e)]})}function fK(t){let e=Aee(),r=Lr.resolve(t);if([Lr.resolve(Ks),pK(Lr.resolve(Ks))].some(n=>Cee(r,n)))return null;for(let n=0;n<Tee;n++){if(e.includes(r))return null;let o=Lr.dirname(r);if(o===r)return null;if(xee.some(s=>See(Lr.join(r,s))))return r;r=o}return null}function p_(t,e){let r=Lr.basename(e);if(r===""){if(process.platform==="win32"){let n=t.match(/^([A-Z]):\\/i);if(n){let s=`drive-${n[1].toUpperCase()}`;return g.info("PROJECT_NAME","Drive root detected",{cwd:t,projectName:s}),s}}return g.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:t}),f_}return r}function lK(){try{return wee(We).mtimeMs}catch{return-1}}function mK(){let t=lK();if(t===-1)return Re.getAllDefaults();if(Bf&&Bf.mtimeMs===t)return Bf.settings;let e=Re.loadFromFile(We);return Bf={mtimeMs:lK(),settings:e},e}function Ree(){let t=process.env[Oee]??mK().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(t??"path").trim().toLowerCase()==="git-remote"}function hK(){let t=process.env[Dee]??mK().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!Gf||Gf.raw!==t)&&(Gf={raw:t,environments:sK(t)}),Gf.environments}function Pee(t){let e=(t??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let i=e.replace(/\/+$/,"").replace(/\.git$/i,""),n=i.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),o=n?null:i.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),s=n?.[1]??o?.[1];if(!s)return null;let a=s.split("/").filter(l=>l&&l!=="_git");return a.length>=2?a.slice(-2).join("/"):a.length===1?a[0]:null}function Mee(t){try{let e=uK("git",["remote","get-url","origin"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return Pee(e)}catch(e){let r=e instanceof Error?e:new Error(String(e));return g.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:t},r),null}}function yK(t){return Ree()?(d_.has(t)||d_.set(t,Mee(t)),d_.get(t)??null):null}function Nee(t,e=process.platform){if(!t||t.trim()==="")return g.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),f_;let r=ei(t,e),i=u_(r,hK());if(i)return i;let n=dK(r),o=n?yK(n):null;if(o)return o;let s=n??fK(r)??r;return p_(t,s)}function gK(t,e){return e===t?t:`${t}/${e}`}function Kee(t,e){if(!t.isSubmodule||!t.parentRepoPath)return null;let r=Lr.relative(t.parentRepoPath,e);return!r||r.startsWith("..")||Lr.isAbsolute(r)?null:r.split(Lr.sep).join("/")}function Nu(t,e=process.platform){if(!t||t.trim()===""){let l=Nee(t,e);return{primary:l,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[l],keySource:"path"}}let r=ei(t,e),i=dK(r),n=jee(t,r,i),o=i?yK(i):null,s=o?cK(n,o,"git-remote"):n,a=u_(r,hK());return a?cK(s,a,"environment"):s}function cK(t,e,r){return{primary:e,parent:null,isWorktree:t.isWorktree,isSubmodule:t.isSubmodule,allProjects:[...t.allProjects.filter(i=>i!==e),e],keySource:r}}function jee(t,e,r){let i=r?null:fK(e),n=p_(t,r??i??e),o=r??e,s=rK(o);if((s.isWorktree||s.isSubmodule)&&s.parentProjectName){let a=s.parentProjectName,l,c;return s.isSubmodule?(l=`${a}/${Kee(s,o)??n}`,c=n!==a?[n]:[]):(l=gK(a,n),c=l===a?[`${a}/${n}`]:[]),{primary:l,parent:a,isWorktree:s.isWorktree,isSubmodule:s.isSubmodule,allProjects:[...new Set([a,...c,l])].filter(u=>u!==l).concat(l),keySource:"path"}}if(i&&Lr.resolve(i)!==Lr.resolve(e)){let a=p_(t,e);if(a!==n&&a!==f_)return{primary:n,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a,n],keySource:"path"}}return{primary:n,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[n],keySource:"path"}}var f_,xee,Tee,Oee,Bf,Dee,Gf,d_,Wf=E(()=>{"use strict";Au();Le();Sr();_e();nK();aK();f_="unknown-project";xee=[".claude-mem-project",".claude-mem.json"],Tee=64;Oee="CLAUDE_MEM_PROJECT_NAME_SOURCE",Bf=null;Dee="CLAUDE_MEM_PROJECT_ENVIRONMENTS",Gf=null;d_=new Map});import tn from"path";import{homedir as Lee,tmpdir as YDe}from"os";import{existsSync as Vf,writeFileSync as XDe,readFileSync as Uee,unlinkSync as QDe,mkdirSync as $ee,statSync as ePe,utimesSync as Fee,copyFileSync as tPe,realpathSync as Jee}from"fs";import{execFileSync as zee,spawnSync as EK}from"child_process";function qee(t){return t===void 0?bK:Math.max(1,Math.min(bK,t))}function Bee(t){try{return Jee(t)}catch{return null}}function m_(t){return t?/(^|[\\/])bun(\.exe)?$/i.test(t.trim()):!1}function Gee(t,e){let r=e==="win32"?"where.exe":"which",i=[t],n;try{n=zee(r,i,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(s){return s instanceof Error?g.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r,args:i},s):g.debug("SYSTEM",`Binary lookup failed for ${t}`,{command:r,args:i},new Error(String(s))),null}return n.split(/\r?\n/).map(s=>s.trim()).find(s=>s.length>0)||null}function y_(t={}){let e=Object.keys(t).length===0;if(e&&h_!==void 0)return h_;let r=Wee(t);return e&&r!==null&&(h_=r),r}function vK(t,e){let r=t?.trim();return r?e==="win32"?[tn.join(r,"bin","bun.exe"),tn.join(r,"bin","bun"),tn.join(r,"bun.exe")]:[tn.join(r,"bin","bun"),tn.join(r,"bun")]:[]}function Wee(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(m_(r))return r;let i=t.env??process.env,n=t.homeDirectory??Lee(),o=t.pathExists??Vf,s=t.lookupInPath??Gee,a=t.realpath??Bee,l=e==="win32"?[i.BUN,i.BUN_PATH,...vK(i.BUN_INSTALL,e),tn.join(n,".bun","bin","bun.exe"),tn.join(n,".bun","bin","bun"),i.USERPROFILE?tn.join(i.USERPROFILE,".bun","bin","bun.exe"):void 0,i.LOCALAPPDATA?tn.join(i.LOCALAPPDATA,"bun","bun.exe"):void 0,i.LOCALAPPDATA?tn.join(i.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,i.npm_config_prefix?tn.join(i.npm_config_prefix,"bun.exe"):void 0]:[i.BUN,i.BUN_PATH,...vK(i.BUN_INSTALL,e),tn.join(n,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun",i.npm_config_prefix?tn.join(i.npm_config_prefix,"bin","bun"):void 0];for(let d of l){let p=d?.trim();if(p&&(m_(p)&&o(p)||p.toLowerCase()==="bun"))return p}let c=s("bun",e)?.trim();if(!c||!m_(c))return null;let u=a(c)??c;return o(u)?u:null}function _K(){if(!Vf($s))return null;try{return JSON.parse(Uee($s,"utf-8"))}catch(t){return t instanceof Error?g.warn("SYSTEM","Failed to parse PID file",{path:$s},t):g.warn("SYSTEM","Failed to parse PID file",{path:$s},new Error(String(t))),null}}function wK(t){r_($s,t,!0)}function Oo(t){return process.platform==="win32"?Math.round(t*2):t}function g_(){let t=$e.dataDir();return $ee(t,{recursive:!0}),t}function Vee(t,e,r=g_()){let i=n=>n.replace(/'/g,"''");return`Start-Process -FilePath '${i(t)}' -ArgumentList @('"${i(e)}"','--daemon') -WorkingDirectory '${i(r)}' -WindowStyle Hidden`}function Zee(t,e,r){return t?.code!=="ETIMEDOUT"?!1:e<r/2}function kK(t,e=Oo(Hee)){let r=y_();if(!r)return;let i=()=>{let a=Date.now();try{return{result:EK(r,[t,"status"],{encoding:"utf-8",timeout:e,windowsHide:!0,env:jr({...process.env})}),elapsedMs:Date.now()-a}}catch(l){let c=l instanceof Error?l:new Error(String(l));g.debug("SYSTEM","Worker boot probe could not be launched",{scriptPath:t},c);return}},n=i();if(n===void 0||Zee(n.result.error,n.elapsedMs,e)&&(g.debug("SYSTEM","Worker boot probe timed out before it could run \u2014 retrying once",{scriptPath:t,elapsedMs:n.elapsedMs,timeoutMs:e}),n=i(),n===void 0))return;let{result:o}=n;if(o.error||o.status===0)return;let s=`${o.stdout??""}${o.stderr??""}`.trim();if(s)return s.split(/\r?\n/).slice(0,Yee).join(`
18
18
  `)}function Xee(t=process.env){let e=t.SystemRoot||t.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function Qee(t,e,r=g_()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(Vee(t,e,r),"utf16le").toString("base64")]}function IK(t,e,r,i=process.platform,n){if(i==="win32"){let u=Xee(r),d=Qee(t,e),p=qee(n);try{let f=EK(u,d,{stdio:"ignore",windowsHide:!0,env:r,timeout:p,killSignal:"SIGTERM"});if(f.error)throw f.error;if(f.signal)throw new Error(`powershell Start-Process killed by signal=${f.signal} after ${p}ms`);if(f.status!==0)throw new Error(`powershell Start-Process exited ${f.status??"null"}`);return 0}catch(f){let m=f instanceof Error?f:new Error(String(f));g.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:t,powershell:u},m);return}}let o="/usr/bin/setsid",s=Vf(o),a=s?o:t,c=Hi(a,s?[t,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:g_(),env:r});if(c.on("error",u=>{g.error("SYSTEM",SK,{runtimePath:t,execPath:a},u)}),c.pid!==void 0)return c.unref(),c.pid}function xK(t,e,r={}){l_().assertCanSpawn("worker daemon");let i=jr({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),n=y_();if(!n){g.error("SYSTEM",SK);return}return IK(n,t,i)}function TK(){try{if(!Vf($s))return;let t=new Date;Fee($s,t,t)}catch{}}function Ku(t={}){return Jf({logAlive:!1,removeStale:t.removeStale})}var bK,fPe,$s,SK,h_,Hee,Yee,Hf=E(()=>{"use strict";Yi();_e();Ls();n_();Ru();tK();Wf();Le();js();en();bK=Vi(Ot.POWERSHELL_COMMAND);fPe=$e.dataDir(),$s=$e.workerPid(),SK="Bun runtime not found \u2014 install from https://bun.sh and ensure it is on PATH, under ~/.bun/bin, or set BUN / BUN_PATH / BUN_INSTALL. The worker daemon requires Bun because it uses bun:sqlite.";Hee=5e3,Yee=8});function b_(t,e){if(!t||typeof t!="object"||e.has(t))return!1;e.add(t);let r=t;return typeof r.code=="string"&&ete.has(r.code)||b_(r.cause,e)?!0:Array.isArray(r.errors)&&r.errors.some(i=>b_(i,e))}function El(t){return b_(t,new Set)?!0:t instanceof Error&&t.message.includes("ECONNREFUSED")}function CK(t){let e=t?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var ete,Yf,Sl=E(()=>{"use strict";ete=new Set(["ECONNREFUSED","ConnectionRefused"]);Yf="Set CLAUDE_MEM_WORKER_PORT to a port between 1024 and 65535 and CLAUDE_MEM_WORKER_HOST to an address of this machine (127.0.0.1 by default) in claude-mem settings"});import tte from"net";function v_(){return Re.loadFromFile(We).CLAUDE_MEM_WORKER_HOST}function AK(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}async function rte(t,e,r="GET",i=ju){let n=await fetch(`http://${AK(v_())}:${t}${e}`,{method:r,signal:AbortSignal.timeout(Math.max(1,i))}),o="";try{o=await n.text()}catch{}return{ok:n.ok,statusCode:n.status,body:o}}async function E_(t,e=ju){let r=Date.now()+e;if(process.platform==="win32")try{let n=await fetch(`http://${AK(v_())}:${t}/api/health`,{signal:AbortSignal.timeout(Math.max(1,r-Date.now()))});if(n.ok)return!0;g.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:t,status:n.status})}catch(n){n instanceof Error?g.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:t,message:n.message}):g.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:t,error:String(n)})}let i=await OK(t,Math.max(1,r-Date.now()));return i==="occupied"||i==="indeterminate"}async function OK(t,e=ju){return(await S_(t,e)).occupancy}function S_(t,e=ju){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(r=>{let i=!1,n=!1,o=!1,s;try{s=tte.createServer()}catch{r({occupancy:"indeterminate"});return}let a=u=>{if(o){u?.();return}o=!0;try{s.close(u)}catch(d){u?.(d instanceof Error?d:new Error(String(d)))}},l=setTimeout(()=>{if(n)a();else try{s.close()}catch{}c({occupancy:"indeterminate"})},e),c=u=>{i||(i=!0,clearTimeout(l),r(u))};s.once("error",u=>{if(n)a();else try{s.close()}catch{}u.code==="EADDRINUSE"?c({occupancy:"occupied"}):CK(u)?c({occupancy:"unbindable",bindErrorCode:u.code}):c({occupancy:"indeterminate"})}),s.once("listening",()=>{if(n=!0,i){a();return}try{a(u=>c({occupancy:u?"indeterminate":"free"}))}catch{c({occupancy:"indeterminate"})}});try{s.listen(t,v_())}catch{try{s.close()}catch{}c({occupancy:"indeterminate"})}})}async function RK(t,e,r,i){let n=Date.now()+r;for(;Date.now()<n;){try{let s=n-Date.now();if((await rte(t,e,"GET",Math.min(ju,s))).ok)return!0}catch(s){s instanceof Error?g.debug("SYSTEM",i,{},s):g.debug("SYSTEM",i,{error:String(s)})}let o=Math.min(500,n-Date.now());o>0&&await new Promise(s=>setTimeout(s,o))}return!1}function Ro(t,e=3e4){return RK(t,"/api/health",e,"Service not ready yet, will retry")}function _l(t,e=3e4){return RK(t,"/api/readiness",e,"Worker not ready yet, will retry")}var ju,Lu=E(()=>{"use strict";_e();Sr();Le();Sl();ju=5e3});var DK=E(()=>{"use strict";_e();Ru()});var PK=E(()=>{"use strict";Hf();Lu();DK()});import{dirname as nte,join as ite}from"path";import{mkdirSync as ote,readFileSync as Zf,statSync as MK,unlinkSync as NK,utimesSync as ste,writeFileSync as ate}from"fs";function w_(){return ite(Qr(),"spawn.lock")}function __(t){try{let e=JSON.parse(Zf(t,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function ute(t){if(t===null)return null;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function Qf(){let t=w_(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return ote(nte(t),{recursive:!0}),ate(t,e,{flag:"wx"}),!0}catch(i){let n=i instanceof Error?i:new Error(String(i)),o=n.code;if(o!=="EEXIST")return g.warn("SYSTEM","Spawn lock write failed for a non-contention reason; failing open (spawning unlocked)",{lockPath:t,code:o},n),!0;if(r>0)return!1;let s;try{s=MK(t).mtimeMs}catch{continue}let a=__(t),l=null;if(a===null)try{l=Zf(t,"utf-8")}catch{continue}if(Date.now()-s<=Xf&&ute(a)!==!1)return!1;let u;try{u=MK(t).mtimeMs}catch{continue}if(u!==s)return!1;if(a!==null){if(__(t)!==a)return!1}else try{if(Zf(t,"utf-8")!==l)return!1}catch{continue}try{NK(t)}catch{return!1}}return!1}function em(){let t=w_();try{if(JSON.parse(Zf(t,"utf-8")).pid!==process.pid)return;NK(t)}catch{}}async function k_(t,e=lte){let r=Date.now()+t;for(;!Qf();){if(Date.now()>=r)return null;await new Promise(n=>setTimeout(n,cte))}let i=setInterval(dte,e);return i.unref(),()=>{clearInterval(i),em()}}function dte(){let t=w_();try{if(__(t)!==process.pid)return;let e=new Date;ste(t,e,e)}catch{}}var Xf,lte,cte,tm=E(()=>{"use strict";Le();_e();Xf=9e4,lte=Xf/3,cte=250});import{execFile as pte}from"node:child_process";import{promisify as fte}from"node:util";function KK(t){return mte.test(t.trim())}function hte(t,e){if(!t)return!1;let r=t.toLowerCase().replace(/\\/g,"/"),i=r.indexOf("--data-dir");if(i<0)return!1;let n=r.slice(i+10).trim();if(n.startsWith('"')){let s=n.indexOf('"',1);n=s<0?n.slice(1):n.slice(1,s)}let o=e.toLowerCase().replace(/\\/g,"/");return n===o||n.startsWith(o)&&n[o.length]==="/"}function nm(t,e){return e===void 0?t:Math.max(1,Math.min(t,e))}async function yte(t){try{let e=await rm("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,CommandLine,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Json -Compress"],{timeout:nm(3e4,t),windowsHide:!0,maxBuffer:33554432}),r=JSON.parse(e.stdout),i=Array.isArray(r)?r:r===null?[]:[r],n=[];for(let o of i){let s=typeof o.Name=="string"?o.Name.trim():"";if(!s)continue;let a=typeof o.ProcessId=="number"?o.ProcessId:Number.parseInt(String(o.ProcessId),10),l=typeof o.ParentProcessId=="number"?o.ParentProcessId:Number.parseInt(String(o.ParentProcessId),10);!Number.isInteger(a)||!Number.isInteger(l)||n.push({pid:a,ppid:l,name:s,cmdline:typeof o.CommandLine=="string"?o.CommandLine:null,startToken:typeof o.StartToken=="string"&&o.StartToken.length>0?o.StartToken:null})}return n}catch(e){return g.warn("PROCESS","Cannot enumerate the Windows process table with names \u2014 ghost-port reclaim disabled",{error:e instanceof Error?e.message:String(e)}),null}}async function gte(t,e){try{let r=await rm("netstat",["-ano"],{timeout:nm(15e3,e),windowsHide:!0,maxBuffer:16777216});return Ste(r.stdout,t)}catch(r){return g.warn("PROCESS","netstat failed \u2014 ghost-port reclaim disabled for this attempt",{port:t,error:r instanceof Error?r.message:String(r)}),null}}async function bte(t,e){try{let r=await rm("lsof",["-nP",`-iTCP:${t}`,"-sTCP:LISTEN","-t"],{timeout:nm(1e4,e),maxBuffer:1048576});return vte(r.stdout)}catch(r){let i=r;return i.code===1&&typeof i.stdout=="string"&&i.stdout.trim()===""?[]:(g.warn("PROCESS","lsof failed \u2014 cannot verify the worker port owner",{port:t,error:r instanceof Error?r.message:String(r)}),null)}}function vte(t){let e=new Set;for(let r of t.split(/\r?\n/)){let i=Number.parseInt(r.trim(),10);Number.isInteger(i)&&i>0&&e.add(i)}return[...e]}async function Ete(t,e){try{let i=(await rm("ps",["-p",String(t),"-o","command="],{timeout:nm(5e3,e)})).stdout.trim();return i.length>0?i:null}catch{return null}}function Ste(t,e){let r=new Set,i=`:${e}`;for(let n of t.split(/\r?\n/)){let o=n.trim();if(!/^TCP\b/i.test(o))continue;let s=o.split(/\s+/);if(!s[1]?.endsWith(i)||s[3]!=="LISTENING")continue;let l=Number.parseInt(s[4]??"",10);Number.isInteger(l)&&l>0&&r.add(l)}return[...r]}async function wte(t,e){let r=e.readOwnedWorker();if(r===null||r.port!==t)return null;let i=(c,u={})=>(g.info("PROCESS","Wedged-worker reclaim declined",{port:t,pid:r.pid,reason:c,...u}),{reclaimed:!1,reason:c,killedPids:[]}),n=(e.now()-Date.parse(r.startedAt))/1e3;if(!Number.isFinite(n)||n<e.minOwnerAgeSeconds)return i("owner-booting",{ageSeconds:n,minOwnerAgeSeconds:e.minOwnerAgeSeconds});for(let c=0;c<2;c++)if(c>0&&await e.sleep(UK),await e.probeHealth(t))return i("owner-responding");let o=await e.listOwners(t);if(o===null)return i("netstat-unreadable");if(!o.includes(r.pid))return g.info("PROCESS","Wedged-worker reclaim: our worker does not own the port \u2014 deferring to the ghost-listener check",{port:t,pid:r.pid,listeners:o}),null;let s=await e.readIdentity(r.pid),a=r.startToken!==void 0&&s.startToken!==null&&s.startToken!==r.startToken;if(a||s.cmdline===null||!_te.test(s.cmdline))return i("owner-identity-mismatch",{tokenMismatch:a,hasCmdline:s.cmdline!==null});if(!e.hasKillBudget())return i("out-of-budget");g.warn("PROCESS","Reclaiming wedged worker: past its boot grace, silent on two health probes, and still holding the port",{port:t,pid:r.pid,ageSeconds:Math.round(n)});try{await e.killTree(r.pid,{expectedStartToken:s.startToken??r.startToken??void 0,signalMode:"graceful"})}catch(c){return g.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:t,pid:r.pid},c instanceof Error?c:new Error(String(c))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let l=await e.listOwners(t);return l!==null&&l.length===0?(g.info("PROCESS","Wedged worker reclaimed \u2014 port is free again",{port:t,killedPids:[r.pid]}),{reclaimed:!0,killedPids:[r.pid]}):(g.warn("PROCESS","Wedged-worker reclaim killed the worker but the port is still bound",{port:t,pid:r.pid,stillOwnedBy:l}),{reclaimed:!1,reason:"still-bound",killedPids:[r.pid]})}async function kte(t,e,r,i){let n=wi(t),o=e?(await r(i))?.find(s=>s.pid===t)?.cmdline??null:await Ete(t,i);return ti(t,n)?{startToken:n,cmdline:o}:{startToken:null,cmdline:null}}async function x_(t,e={}){let r=e.isWin32??(()=>process.platform==="win32"),i=e.now??Date.now,n=e.deadlineAt??null,o=B=>n!==null&&n-i()<B,s=()=>n===null?void 0:Math.max(1,n-i());if(o(jK))return g.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:t,remainingMs:s(),neededMs:jK}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((B,Q)=>r()?gte(B,Q):bte(B,Q)),l=B=>a(B,s()),c=e.readTable??yte,u=()=>c(s()),d=e.killTree??((B,Q)=>ri(B,Q)),p=e.dataDir??(()=>rt),f=e.readIdentity??((B,Q)=>kte(B,r(),c,Q)),m=await wte(t,{listOwners:l,killTree:d,readOwnedWorker:e.readOwnedWorker??ki,probeHealth:e.probeHealth??(B=>Ro(B,LK)),readIdentity:B=>f(B,s()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??cN(),now:i,sleep:e.sleep??(B=>new Promise(Q=>setTimeout(Q,B))),hasKillBudget:()=>!o(I_)});if(m!==null)return m;if(!r())return{reclaimed:!1,reason:"not-supported",killedPids:[]};let h=await l(t);if(h===null)return{reclaimed:!1,reason:"netstat-unreadable",killedPids:[]};if(h.length===0)return{reclaimed:!1,reason:"no-listener",killedPids:[]};let b=await u();if(b===null)return{reclaimed:!1,reason:"table-unreadable",killedPids:[]};if(h.filter(B=>St(B)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let v=new Map;for(let B of b){let Q=v.get(B.ppid);Q?Q.push(B):v.set(B.ppid,[B])}let C=new Map,O=new Set,M=B=>{for(let Q of v.get(B)??[])O.has(Q.pid)||(O.add(Q.pid),M(Q.pid),KK(Q.name)&&C.set(Q.pid,Q))};for(let B of h)M(B);let J=p();if(J)for(let B of b)C.has(B.pid)||KK(B.name)&&hte(B.cmdline,J)&&C.set(B.pid,B);if(C.size===0)return g.info("PROCESS","Ghost listener owner is dead but no chroma-sidecar descendants found",{port:t,deadOwners:h,processTableRows:b.length,dataDir:J??"(unresolved)"}),{reclaimed:!1,reason:"no-chroma-descendants",killedPids:[]};g.warn("PROCESS","Reclaiming ghost listener: killing dead worker's surviving chroma sidecar chain",{port:t,deadOwners:h,targets:[...C.values()].map(B=>({pid:B.pid,name:B.name}))});let F=[];for(let B of C.values()){if(o(I_))return g.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:t,killedPids:F}),{reclaimed:!1,reason:"out-of-budget",killedPids:F};try{await d(B.pid,{expectedStartToken:B.startToken,signalMode:"immediate"}),F.push(B.pid)}catch(Q){return g.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:t,pid:B.pid},Q instanceof Error?Q:new Error(String(Q))),{reclaimed:!1,reason:"kill-failed",killedPids:F}}}let ce=await l(t);return ce!==null&&ce.length===0?(g.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:t,killedPids:F}),{reclaimed:!0,killedPids:F}):(g.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:t,killedPids:F,stillOwnedBy:ce}),{reclaimed:!1,reason:"still-bound",killedPids:F})}var rm,mte,_te,LK,UK,I_,jK,T_=E(()=>{"use strict";_e();yl();en();Ru();Lu();jf();js();Le();rm=fte(pte),mte=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;_te=/worker-service/i,LK=1500,UK=1e3,I_=5500,jK=2*LK+UK+I_});import{existsSync as Ite,readFileSync as xte,realpathSync as Tte}from"fs";import{createRequire as Cte}from"module";import Fs from"path";function $K(t){try{return Tte(t)}catch{return t}}function Ote(t,e){let r=Fs.relative(e,t);return r!==""&&!r.startsWith("..")&&!Fs.isAbsolute(r)}function C_(t){let e;try{let n=JSON.parse(xte(Fs.join(t,"package.json"),"utf-8"));e=Object.keys(n?.dependencies??{})}catch{return[]}if(e.length===0)return[];let r=Fs.join(t,"node_modules"),i=e.filter(n=>!Ite(Fs.join(r,...n.split("/"),"package.json")));if(e.includes("zod")&&!i.includes("zod")){let n=Cte(Fs.join(r,"noop.js")),o=$K(Fs.join(r,"zod"));for(let s of Ate)try{let a=n.resolve(s,{paths:[r]});Ote($K(a),o)||i.push(s)}catch{i.push(s)}}return i}var Ate,FK=E(()=>{"use strict";Ate=["zod/v3","zod/v4","zod/v4-mini"]});import Rt from"path";import{randomUUID as nMe}from"crypto";import{readFileSync as Rte,existsSync as lm,writeFileSync as oMe,renameSync as sMe,mkdirSync as aMe,readdirSync as Dte,statSync as Pte,unlinkSync as lMe}from"fs";function qK(t,e,r){let i=process.env[t];if(i){let n=parseInt(i,10);if(Number.isFinite(n)&&n>=r.min&&n<=r.max)return n;g.warn("SYSTEM",`Invalid ${t}, using default`,{value:i,min:r.min,max:r.max})}return e}function BK(t=process.env){let e=t.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let r=e.trim().toLowerCase();return r==="1"||r==="true"||r==="on"||r==="yes"}function Nte(t){return BK()?{...t,verbose:!0}:t}function Kte(t){let e={},r=t;for(let i=0;r&&i<4;i++){let n=i===0?"error":`cause${i}`;if(r instanceof Error){let o=r;e[n]={name:r.name,message:r.message,...o.code!==void 0?{code:o.code}:{}},r=r.cause;continue}e[n]=String(r);break}return e}function jte(t,e,r){let i=typeof e.method=="string"?e.method:"GET",n=Kte(r),o=JSON.stringify(n);g.warn("SYSTEM","Worker IPC fetch failed",{url:t,method:i},o),Xn(`[claude-mem] fetch verbose: ${i} ${t} ${o}
19
19
  `)}async function A_(t,e={}){let r=Nte(e);try{return await fetch(t,r)}catch(i){throw BK()&&jte(t,e,i),i}}async function Lte(t,e={},r){try{return await A_(t,{...e,signal:AbortSignal.timeout(r)})}catch(i){throw i instanceof DOMException&&i.name==="TimeoutError"?new Error(`Request timed out after ${r}ms`):i}}function Ute(t,e){let r=new AbortController,i=null,n=null,o=null,s=!1,a=()=>{n!==null&&(clearTimeout(n),n=null)},l=()=>{s=!0,a(),o!==null&&(clearTimeout(o),o=null)},c=d=>{s||(i=d,l(),r.abort(d))},u=()=>{s||(a(),n=setTimeout(()=>c(new Error(`Request timed out after ${t.idleTimeoutMs}ms idle`)),t.idleTimeoutMs))};if(t.absoluteCapMs!==void 0&&t.absoluteCapMs>0){let d=t.absoluteCapMs;o=setTimeout(()=>c(new Error(`Request timed out after ${d}ms`)),d)}return u(),{signal:e?AbortSignal.any([e,r.signal]):r.signal,touch:u,pause:a,dispose:l,translate:d=>i??d}}async function $te(t,e,r){let i=Ute(r,e.signal),n;try{n=await A_(t,{...e,signal:i.signal})}catch(c){throw i.dispose(),i.translate(c)}i.touch();let o=n.body,s=o?o.getReader():null,a=!1;async function*l(){if(!s){a=!0,i.dispose();return}try{for(;;){i.touch();let c;try{c=await s.read()}catch(u){throw a=!0,i.translate(u)}if(c.done){a=!0;return}i.pause(),r.onChunk?.(c.value),yield c.value}}finally{i.dispose(),a||await s.cancel()}}return{status:n.status,statusText:n.statusText,ok:n.ok,headers:n.headers,chunks:l(),cancel:async()=>{i.dispose(),s&&!a&&(a=!0,await s.cancel())}}}async function Fte(t,e,r){let i=await $te(t,e,r),n=new TextDecoder,o="";for await(let s of i.chunks)o+=n.decode(s,{stream:!0});return o+=n.decode(),{status:i.status,statusText:i.statusText,ok:i.ok,headers:i.headers,text:o}}function Jte(){return Rt.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function O_(){return sm!==null||(sm=Re.loadFromFile(Jte())),sm}function JK(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function zte(t,e,r){let i=process.env[t];if(i!==void 0){let s=JK(i,r);return s!==null?s:(g.warn("SYSTEM",`Invalid ${t}, using default`,{value:i,min:r.min,max:r.max}),e)}let n=O_()[t],o=JK(n,r);return o!==null?o:(g.warn("SYSTEM",`Invalid ${t} in settings.json, using default`,{value:n,min:r.min,max:r.max}),e)}function R_(){if(im!==null)return im;let t=O_();return im=parseInt(t.CLAUDE_MEM_WORKER_PORT,10),im}function D_(){return om!==null||(om=O_().CLAUDE_MEM_WORKER_HOST),om}function qte(){return am!==null||(am=zte("CLAUDE_MEM_API_TIMEOUT_MS",Vi(Ot.API_REQUEST),Mte)),am}function P_(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}function M_(t){return`http://${P_(D_())}:${R_()}${t}`}function wl(t,e={}){let r=e.method??"GET",i=M_(t),n={method:r};if(e.headers&&(n.headers=e.headers),e.body&&(n.body=e.body),e.idleTimeoutMs!==void 0&&e.idleTimeoutMs>0)return Fte(i,n,{idleTimeoutMs:e.idleTimeoutMs,absoluteCapMs:e.timeoutMs}).then(s=>new Response(s.text.length>0?s.text:null,{status:s.status,statusText:s.statusText,headers:s.headers}));let o=e.timeoutMs??qte();return o>0?Lte(i,n,o):A_(i,n)}function GK(t){let e=lm(Rt.join(t,"plugin","scripts"))?Rt.join(t,"plugin"):t;return Rt.join(e,"scripts","worker-service.cjs")}function N_(t,e){let r=d=>{let p=d.split("-")[0].split(".");return[parseInt(p[0],10)||0,parseInt(p[1],10)||0,parseInt(p[2],10)||0]},[i,n,o]=r(t),[s,a,l]=r(e);if(s!==i)return s-i;if(a!==n)return a-n;if(l!==o)return l-o;let c=t.includes("-")?1:0,u=e.includes("-")?1:0;return c!==u?c-u:t<e?1:t>e?-1:0}function K_(t=Rt.join(Rt.dirname(Rt.dirname(_i)),"cache","thedotmack","claude-mem")){try{return Dte(t).filter(e=>/^\d/.test(e)).map(e=>Rt.join(t,e)).filter(e=>{try{if(!Pte(e).isDirectory())return!1}catch{return!1}return!lm(Rt.join(e,".orphaned_at"))}).map(e=>({scriptPath:GK(e),version:Rt.basename(e)}))}catch{return[]}}function zK(t){try{let e=JSON.parse(Rte(t,"utf-8"));return typeof e.version=="string"?e.version:null}catch(e){let r=e.code;return r!=="ENOENT"&&g.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:t,code:r}),null}}function WK(){return{cacheRoot:Rt.join(Rt.dirname(Rt.dirname(_i)),"cache","thedotmack","claude-mem"),marketplaceRoot:_i,cwd:process.cwd()}}function j_(t=WK()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if(lm(e))return{scriptPath:e,version:null};g.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let r=[...K_(t.cacheRoot),{scriptPath:GK(Rt.join(t.marketplaceRoot,"plugin")),version:zK(Rt.join(t.marketplaceRoot,"package.json"))},{scriptPath:Rt.join(t.cwd,"plugin","scripts","worker-service.cjs"),version:zK(Rt.join(t.cwd,"package.json"))}];return L_(r)}function VK(t){return Rt.dirname(Rt.dirname(t))}function Bte(t){return C_(VK(t.scriptPath)).length===0}function L_(t,e=Bte){let r=t.filter(i=>lm(i.scriptPath));return r.length===0?null:(r.sort((i,n)=>i.version===null&&n.version===null?0:i.version===null?1:n.version===null?-1:N_(i.version,n.version)),r.find(e)??r[0])}function kl(t=WK()){let e=j_(t);if(!e)return null;let r=VK(e.scriptPath);return{root:r,version:e.version,missingDependencies:C_(r)}}var OMe,RMe,Mte,DMe,im,om,sm,am,Gte,Wte,PMe,Do=E(()=>{"use strict";_e();js();dN();Sr();Le();EN();Nf();SN();Ru();Cu();Pu();PK();Lu();Sl();Hf();tm();T_();Ls();yl();dr();FK();OMe=qK("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Vi(Ot.HEALTH_CHECK),{min:500,max:3e5}),RMe=qK("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Vi(Ot.HOOK_READINESS_WAIT),{min:0,max:3e5}),Mte={min:500,max:3e5},DMe={min:500,max:Ot.SESSION_INIT_REQUEST_MAX};im=null,om=null,sm=null,am=null;Gte=1e3,Wte=5e3,PMe=Wte+Gte});import{existsSync as U_,readFileSync as HK}from"fs";import{homedir as Vte}from"os";import{dirname as Hte,join as rn}from"path";import{fileURLToPath as Yte}from"url";function $_(){return process.env.CLAUDE_CONFIG_DIR||rn(Vte(),".claude")}function wr(){return rn($_(),"plugins","marketplaces","thedotmack")}function Js(){return rn($_(),"plugins")}function Il(){return rn(Js(),"known_marketplaces.json")}function Po(){return rn(Js(),"installed_plugins.json")}function Mo(){return rn($_(),"settings.json")}function xl(){return rn(Js(),"cache","thedotmack","claude-mem")}function Tl(t){return rn(xl(),t)}function zs(){let t=Yte(import.meta.url),e=rn(Hte(t),"..","..");if(!U_(rn(e,"package.json")))throw new Error(`npmPackageRootDirectory: expected package.json at ${e}. Bundle structure may have changed \u2014 update the path walk.`);return e}function F_(){return rn(zs(),"plugin")}function No(){let t=rn(F_(),".claude-plugin","plugin.json");if(U_(t))try{let r=JSON.parse(HK(t,"utf-8"));if(r.version)return r.version}catch{}let e=rn(zs(),"package.json");if(U_(e))try{let r=JSON.parse(HK(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function YK(){return kl()!==null}var st,ni=E(()=>{"use strict";dr();Do();Co();st=process.platform==="win32"});var XK,QK,ej,tj=E(()=>{XK=(()=>{let t=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g;return e=>{let r=0;for(t.lastIndex=0;t.test(e);)r+=1;return e.length-r}})(),QK=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,ej=t=>t===8987||t===9001||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12771||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=19903||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||t>=131072&&t<=196605||t>=196608&&t<=262141});var Zte,Xte,rj,Qte,nj,ere,tre,rre,ij,oj,sj=E(()=>{tj();Zte=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Xte=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,rj=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Qte=/\t{1,1000}/y,nj=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),ere=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,tre=new RegExp("\\p{M}+","gu"),rre={limit:1/0,ellipsis:""},ij=(t,e={},r={})=>{let i=e.limit??1/0,n=e.ellipsis??"",o=e?.ellipsisWidth??(n?ij(n,rre,r).width:0),s=0,a=r.controlWidth??0,l=r.tabWidth??8,c=r.emojiWidth??2,u=2,d=r.regularWidth??1,p=r.wideWidth??u,f=[[ere,d],[Zte,s],[Xte,a],[Qte,l],[nj,c],[rj,p]],m=0,h=0,b=t.length,S=0,v=!1,C=b,O=Math.max(0,i-o),M=0,J=0,F=0,ce=0;e:for(;;){if(J>M||h>=b&&h>m){let B=t.slice(M,J)||t.slice(m,h);S=0;for(let Q of B.replaceAll(tre,"")){let fe=Q.codePointAt(0)||0;if(QK(fe)?ce=u:ej(fe)?ce=p:ce=d,F+ce>O&&(C=Math.min(C,Math.max(M,m)+S)),F+ce>i){v=!0;break e}S+=Q.length,F+=ce}M=J=0}if(h>=b)break e;for(let B=0,Q=f.length;B<Q;B++){let[fe,Xr]=f[B];if(fe.lastIndex=h,fe.test(t)){if(S=fe===rj?XK(t.slice(h,fe.lastIndex)):fe===nj?1:fe.lastIndex-h,ce=S*Xr,F+ce>O&&(C=Math.min(C,h+Math.floor((O-F)/Xr))),F+ce>i){v=!0;break e}F+=ce,M=m,J=h,h=m=fe.lastIndex;continue e}}h+=1}return{width:v?O:F,index:v?C:b,truncated:v,ellipsed:v&&i>=o}},oj=ij});var nre,ire,kr,J_=E(()=>{sj();nre={limit:1/0,ellipsis:"",ellipsisWidth:0},ire=(t,e={})=>oj(t,nre,e).width,kr=ire});function Ii(t,e,r){return String(t).normalize().split(cre).map(i=>lre(i,e,r)).join(`
@@ -3,7 +3,7 @@
3
3
  "name": "Claude-Mem (Persistent Memory)",
4
4
  "description": "OpenClaw plugin for Claude-Mem. Records observations from embedded runner sessions and streams them to messaging channels.",
5
5
  "kind": "memory",
6
- "version": "13.30.0",
6
+ "version": "13.31.0",
7
7
  "license": "Apache-2.0",
8
8
  "author": "thedotmack",
9
9
  "homepage": "https://claude-mem.ai",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.30.0",
3
+ "version": "13.31.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": "13.30.0",
3
+ "version": "13.31.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem",
3
- "version": "13.30.0",
3
+ "version": "13.31.0",
4
4
  "description": "Memory compression system for Claude Code - persist context across sessions",
5
5
  "author": {
6
6
  "name": "Alex Newman",
@@ -24,7 +24,12 @@
24
24
  "command": "export PATH=\"$HOME/.nvm/versions/node/v$(ls \"$HOME/.nvm/versions/node\" 2>/dev/null | sed 's/^v//' | sort -t. -k1,1n -k2,2n -k3,3n | tail -1)/bin:$HOME/.local/bin:/usr/local/bin:/opt/homebrew/bin:$PATH\"; _C=\"${CLAUDE_CONFIG_DIR:-$HOME/.claude}\"; _E=\"${CLAUDE_PLUGIN_ROOT:-${PLUGIN_ROOT:-}}\"; _P=; if [ -n \"$_E\" ]; then _R=\"${_E%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && _P=\"$_Q\"; fi; if [ -z \"$_P\" ]; then _F=; _P=$({ for _V in \"$_C/plugins/cache/thedotmack/claude-mem\"/[0-9]*/; do [ -d \"$_V\" ] || continue; [ -e \"${_V}.orphaned_at\" ] && continue; _B=${_V%/}; _B=${_B##*/}; case \"$_B\" in (*-*) _G=0;; (*) _G=1;; esac; _N=${_B%%-*}; _M1=${_N%%.*}; case \"$_N\" in (*.*) _T=${_N#*.};; (*) _T=0;; esac; _M2=${_T%%.*}; case \"$_T\" in (*.*) _U=${_T#*.};; (*) _U=0;; esac; _M3=${_U%%.*}; _M1=${_M1%%[!0-9]*}; _M2=${_M2%%[!0-9]*}; _M3=${_M3%%[!0-9]*}; printf '%08d%08d%08d%d %s\\n' \"${_M1:-0}\" \"${_M2:-0}\" \"${_M3:-0}\" \"$_G\" \"$_V\"; done 2>/dev/null | sort -r | sed 's/^[^ ]* //'; printf '%s\\n' \"$_C/plugins/marketplaces/thedotmack/plugin\"; } | while IFS= read -r _R; do _R=\"${_R%/}\"; [ -d \"$_R/plugin/scripts\" ] && _Q=\"$_R/plugin\" || _Q=\"$_R\"; [ -f \"$_Q/scripts/bun-runner.js\" ] && [ -f \"$_Q/scripts/worker-service.cjs\" ] && [ -z \"$_F\" ] && { _F=1; printf '%s\\n' \"$_Q\"; }; done); fi; [ -n \"$_P\" ] || { echo \"claude-mem: plugin scripts not found\" >&2; exit 0; }; command -v cygpath >/dev/null 2>&1 && { _W=$(cygpath -w \"$_P\" 2>/dev/null); [ -n \"$_W\" ] && _P=\"$_W\"; }; { node \"$_P/scripts/bun-runner.js\" \"$_P/scripts/worker-service.cjs\" start; } || { _S=$?; echo \"claude-mem: hook command failed (exit $_S)\" >&2; exit 0; }",
25
25
  "timeout": 60,
26
26
  "async": true
27
- },
27
+ }
28
+ ]
29
+ },
30
+ {
31
+ "matcher": "startup|clear|compact",
32
+ "hooks": [
28
33
  {
29
34
  "type": "command",
30
35
  "shell": "bash",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "claude-mem-plugin",
3
- "version": "13.30.0",
3
+ "version": "13.31.0",
4
4
  "private": true,
5
5
  "description": "Runtime dependencies for claude-mem bundled hooks",
6
6
  "type": "module",