claude-mem 13.40.0 → 13.41.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.
Files changed (33) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.qoder-plugin/plugin.json +1 -1
  5. package/README.md +1 -1
  6. package/dist/npx-cli/index.js +2 -2
  7. package/dist/opencode-plugin/index.js +3 -3
  8. package/dist/pi-extension/index.js +6 -6
  9. package/dsh/package.json +1 -1
  10. package/omp/hooks/claude-mem.ts +5 -1
  11. package/openclaw/openclaw.plugin.json +1 -1
  12. package/package.json +1 -1
  13. package/plugin/.claude-plugin/plugin.json +1 -1
  14. package/plugin/.codex-plugin/plugin.json +1 -1
  15. package/plugin/.qoder-plugin/plugin.json +1 -1
  16. package/plugin/package.json +1 -1
  17. package/plugin/scripts/context-generator.cjs +21 -21
  18. package/plugin/scripts/context-generator.cjs.map +3 -3
  19. package/plugin/scripts/mcp-server.cjs +122 -115
  20. package/plugin/scripts/mcp-server.cjs.map +3 -3
  21. package/plugin/scripts/server-service.cjs +2 -2
  22. package/plugin/scripts/server-service.cjs.map +1 -1
  23. package/plugin/scripts/transcript-watcher.cjs +28 -27
  24. package/plugin/scripts/transcript-watcher.cjs.map +3 -3
  25. package/plugin/scripts/worker-service.cjs +525 -523
  26. package/plugin/scripts/worker-service.cjs.map +3 -3
  27. package/plugin/skills/build/SKILL.md +16 -0
  28. package/plugin/skills/build-and-release/SKILL.md +16 -0
  29. package/plugin/skills/childhood/SKILL.md +46 -0
  30. package/plugin/skills/release/SKILL.md +15 -0
  31. package/plugin/sqlite/SessionStore.js.map +1 -1
  32. package/plugin/sqlite/observations/files.js +6 -6
  33. package/plugin/sqlite/observations/files.js.map +1 -1
@@ -9,7 +9,7 @@
9
9
  "plugins": [
10
10
  {
11
11
  "name": "claude-mem",
12
- "version": "13.40.0",
12
+ "version": "13.41.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.40.0",
3
+ "version": "13.41.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.40.0",
3
+ "version": "13.41.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.40.0",
3
+ "version": "13.41.0",
4
4
  "description": "Persistent memory and context compression for Qoder 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.40.0-green.svg" alt="Version">
62
+ <img src="https://img.shields.io/badge/version-13.41.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){fw=e}error(e,r,i,n){this.log(3,e,r,i,n),this.routeErrorToSink(r,i,n)}routeErrorToSink(e,r,i){try{if(!fw||!(i instanceof Error))return;fw(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 hw});function JK(t=process.env){let e=Number.parseInt(t.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=FK.min&&e<=FK.max?e:mne}function zK(t=process.platform){return t==="win32"?8e3:5e3}function yw(t=process.platform){return jt.SESSION_INIT_HOOK_CAP-zK(t)}function bo(t){return process.platform==="win32"?Math.round(t*jt.WINDOWS_MULTIPLIER):t}var jt,mne,FK,ua=v(()=>{"use strict";jt={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},mne=300,FK={min:60,max:86400}});var qK=v(()=>{"use strict"});function BK(t){try{return new URL(t).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var GK=v(()=>{"use strict";he()});import{readFileSync as hne,existsSync as WK,writeFileSync as yne}from"fs";import{basename as gne,dirname as bne,join as bw}from"path";import{homedir as VK,hostname as vne}from"os";function Ine(t){return typeof t=="boolean"?String(t):t}function xne(t){let e=t.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!kne.has(e.trim()))return!1;let r=typeof t.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?t.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return r===""||BK(r)}function XK(t,e){return bw(bne(t),`.${gne(t)}.${e.markerTag}`)}function gw(t,e){try{yne(XK(t,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}function Tne(t){if(typeof t!="string")return null;let e=t.trim();if(e.length===0)return null;try{let r=new URL(e).hostname;if(r===Sne||r===_ne)return wne}catch{return null}return null}var Ene,Sne,_ne,wne,kne,HK,YK,ZK,Te,gr=v(()=>{"use strict";ua();kt();GK();ci();Ene="security_alert",Sne="sync-hub.black-pond-afbb.workers.dev",_ne="ziczmqtpmaxbornfghye.supabase.co",wne="https://sync.cmem.ai",kne=new Set(["xiaomi/mimo-v2-flash:free"]);HK=18e4,YK=[{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"}];ZK=new Set;Te=class{static DEFAULTS={CLAUDE_MEM_MEMORY_SEARCH_HOOK_ENABLED:"true",CLAUDE_MEM_MEMORY_INSTRUCTIONS_ENABLED:"true",CLAUDE_MEM_MEMORY_WATCH_ROOTS:"",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_WORKER_INGEST_TOKEN:"",CLAUDE_MEM_HOOK_SPOOL_TRANSPORT:"auto",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(bo(jt.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(yw()),CLAUDE_MEM_IDLE_EXIT_SEC:"0",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_OBSERVATION_BATCH_SIZE:"1",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_TEMPERATURE:"",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",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_QUOTA_THRESHOLD_FIVE_HOUR:"0.95",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_OPUS:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_SONNET:"0.92",CLAUDE_MEM_QUOTA_THRESHOLD_OVERAGE:"0.95",CLAUDE_MEM_DATA_DIR:bw(VK(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_OBSERVER_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_WORK_STATE_ENABLED:"true",CLAUDE_MEM_FILE_READ_GATE_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:bw(VK(),".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_THINKING:"disabled",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_REDACT_GENERIC_ENABLED:"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_SEMANTIC_INJECT_FORMAT:"narrative",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_CHROMA_UVX_PATH:"",CLAUDE_MEM_SEARCH_RECENCY_DAYS:"90",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:vne(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_TEAMBRAIN_URL:"",CLAUDE_MEM_TEAMBRAIN_TEAM_ID:"",CLAUDE_MEM_LLM_TIMEOUT_MS:String(HK),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(HK),CLAUDE_MEM_LLM_STREAM_IDLE_TIMEOUT_MS:"90000",CLAUDE_MEM_WORKER_HEARTBEAT_STALE_MS:"120000",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_TOOL_USES_RETENTION_DAYS:"0",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,i={}){try{if(!WK(e)){let p=this.getAllDefaults();if(!i.readOnly)try{Je(e,p,{mode:384});for(let f of YK)gw(e,f);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(f){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,f instanceof Error?f.message:String(f))}return this.finalizeSettings(p,r)}let n=hne(e,"utf-8"),o=Cr(n),s=li(o),a=s!==o,l=lw(o),c=a&&Object.keys(l).some(p=>p!=="env");if(a&&!c&&!i.readOnly)try{Je(e,s,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(p){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,p instanceof Error?p.message:String(p))}if(s.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Ene&&(s={...s,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!i.readOnly))try{Je(e,c?{...l,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,p instanceof Error?p.message:String(p))}if(xne(s)){let p=String(s.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(s={...s,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!i.readOnly)try{Je(e,c?{...l,env:s}:s,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${p} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(f){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,f instanceof Error?f.message:String(f))}}let u=Tne(s.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(u!==null&&(s={...s,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:u},!i.readOnly))try{Je(e,c?{...l,env:s}:s,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",u,"from a retired hub host:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,p instanceof Error?p.message:String(p))}for(let p of YK)if(!WK(XK(e,p))){if(s[p.key]!==p.legacy){i.readOnly||gw(e,p);continue}if(s={...s,[p.key]:this.DEFAULTS[p.key]},!i.readOnly)try{Je(e,c?{...l,env:s}:s,{mode:384}),gw(e,p),console.warn(`[SETTINGS] Migrated ${p.key} off the old ${p.legacy}ms default to ${this.DEFAULTS[p.key]}ms:`,e)}catch(f){let m=`${p.key}\0${e}`;ZK.has(m)||(ZK.add(m),console.warn(`[SETTINGS] Failed to migrate ${p.key}; using the new default in memory (reported once per process):`,e,f instanceof Error?f.message:String(f)))}}let d={...this.DEFAULTS};for(let p of Object.keys(this.DEFAULTS))s[p]!==void 0&&(d[p]=Ine(s[p]));return this.finalizeSettings(d,r)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let o=this.getAllDefaults();return this.finalizeSettings(o,r)}}}});function vw(){return jm!==null||(jm=Te.loadFromFile(_e)),jm}var jm,Ew=v(()=>{"use strict";gr();Re();jm=null});function dd(t){return(t.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}var Km=v(()=>{"use strict"});var QK=v(()=>{"use strict"});function ji(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}var Sw=v(()=>{"use strict"});import{spawn as Cne,spawnSync as tL}from"node:child_process";import{existsSync as Ane}from"node:fs";import{dirname as One,extname as Lm,join as rL}from"node:path";function ui(t,e,r){return Cne(t,e??[],{...r,windowsHide:!0})}function Dne(t){return`"${t.replace(/"/g,'""')}"`}function eL(t){return nL.has(Lm(t).toLowerCase())}function Mne(t=process.env){let e=t.SystemRoot||t.SYSTEMROOT||t.windir||t.WINDIR||"C:\\Windows";return rL(e,"System32","where.exe")}function ww(t){if(process.platform!=="win32")return[];try{let e=tL(Mne(),[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).filter(r=>Ane(r))}catch{return[]}}function jne(t,e){let r=t.find(eL);if(r)return r;let i=t.find(n=>_w.has(Lm(n).toLowerCase()));if(i&&e){let n=e(i);if(n&&eL(n))return n}return i??t.find(n=>Rne.has(Lm(n).toLowerCase()))??t[0]??null}function Kne(t,e,r=Nne){if(!/[\\/]volta[\\/]bin[\\/]/i.test(e))return null;try{let i=r(rL(One(e),"volta.exe"),["which",t],{encoding:"utf-8",stdio:["ignore","pipe","ignore"],timeout:Pne,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 Kn(t){return jne(ww(t),e=>Kne(t,e))}function Ar(t,e,r,i=process.platform){let n={...r,...i==="win32"?{windowsHide:!0}:{}};if(i==="win32"&&_w.has(Lm(t).toLowerCase())){let o=[t,...e].map(Dne).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 _w,nL,Rne,Pne,Nne,Hr=v(()=>{"use strict";_w=new Set([".cmd",".bat"]),nL=new Set([".exe",".com"]),Rne=new Set([...nL,..._w]);Pne=5e3,Nne=(t,e,r)=>tL(t,e,r)});function or(t=process.env){let e={};for(let[r,i]of Object.entries(t))if(i!==void 0){if(Fne.has(r)){e[r]=i;continue}Une.has(r)||Lne.some(n=>r.startsWith(n))||(e[r]=i)}return e}var Lne,Une,$ne,Fne,Zo=v(()=>{"use strict";Lne=["CLAUDECODE_","CLAUDE_CODE_"],Une=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),$ne=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"]),Fne=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",...$ne])});import{spawnSync as oL}from"child_process";import{readFileSync as Jne}from"fs";function sL(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 qne(t){kw+=1;let e=oL("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${t}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...or(process.env),LC_ALL:"C",LANG:"C"}});return sL("powershell-cim",t,e)}function Bne(t,e=!1){if(!e){let i=iL.get(t);if(i&&(t===process.pid||Date.now()-i.capturedAtMs<zne))return i.token}let r=null;try{r=qne(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)&&iL.set(t,{token:r,capturedAtMs:Date.now()}),r}function aL(t,e){if(!Number.isInteger(t)||t<=0)return null;if(process.platform==="linux"){kw+=1;try{let r=Jne(`/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 Bne(t,e);kw+=1;try{let r=oL("ps",["-p",String(t),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...or(process.env),LC_ALL:"C",LANG:"C"}});return sL("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 Ki(t){return aL(t,!1)}function di(t,e){if(e===null)return!0;let r=aL(t,!0);return r===null?!0:r===e}var zne,iL,kw,Um=v(()=>{"use strict";he();Zo();zne=5e3,iL=new Map,kw=0});import{execFile as Gne}from"child_process";import{readdirSync as Wne,readFileSync as Vne}from"fs";import{promisify as Hne}from"util";async function pi(t,e={}){let r=e.signalMode==="immediate",i=e.expectedStartToken!==void 0?e.expectedStartToken:Ki(t),n=()=>di(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 Iw("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===Yne||Zne.test(`${a} ${l}`)){g.debug("PROCESS","taskkill reported the process was already gone",{pid:t});return}throw new $m(t,`taskkill failed for PID ${t} (exit ${String(s)}): ${a.trim()||l}`,{cause:o})}return}try{let o=r?"SIGKILL":"SIGTERM",s=await Fm(t);for(let c of s){if(!di(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 Fm(t):[],l=new Map;for(let c of s)l.set(c.pid,c.startToken);for(let c of a)l.set(c.pid,c.startToken);for(let[c,u]of l){if(!di(c,u)){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 $m(t,`tree-kill failed for PID ${t}: ${o instanceof Error?o.message:String(o)}`,{cause:o})}}async function Xne(){return process.platform==="win32"?tie():process.platform==="linux"?Qne():eie()}function Qne(){let t=[],e;try{e=Wne("/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=Vne(`/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 eie(){let t;try{t=(await Iw("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 tie(){let t;try{t=(await Iw("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 Fm(t){let e=await Xne(),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 Iw,Yne,Zne,$m,Ul=v(()=>{"use strict";he();Um();Iw=Hne(Gne),Yne=128,Zne=/not found|no running instance|no tasks/i,$m=class extends Error{pid;constructor(e,r,i){super(r,i),this.name="ProcessTreeKillError",this.pid=e}}});import{existsSync as lL,readFileSync as Aw}from"fs";import nie from"path";function It(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 Jm(t,e){let r=Date.now()+e;for(;Date.now()<r;){if(t.every(i=>!It(i.pid)))return;await new Promise(i=>setTimeout(i,100))}}function cL(t){if(!t||!It(t.pid))return!1;if(!t.startToken)return!0;let e=Ki(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 $l(t,e=lie){if(!cL(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=>nie.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 Li(t=Ke.workerPid()){if(!lL(t))return null;let e;try{e=JSON.parse(Aw(t,"utf-8"))}catch{return null}return e!==null&&$l(e)?e:null}function zm(){return xw||(xw=new Cw),xw}function Tw(){let t=cie.shift();t&&t.notify()}var iie,oie,sie,aie,lie,Cw,xw,bLe,cie,mn=v(()=>{"use strict";Hr();he();kt();Zo();Re();Um();Ul();iie=5e3,oie=1e3,sie=Ke.supervisorRegistry(),aie=null;lie={platform:process.platform,readCommandLine:t=>Aw(`/proc/${t}/cmdline`,"utf-8")};Cw=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=sie){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!lL(this.registryPath)){this.persist();return}try{let i=JSON.parse(Aw(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||!It(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"&&Tw())}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)It(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)Tw();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=>It(a.pid)),o=new Map(n.map(a=>[a.pid,Ki(a.pid)]));for(let a of n)try{process.platform==="win32"?await pi(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 Jm(n,iie);let s=n.filter(a=>It(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(!di(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 pi(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()+oie;for(;Date.now()<a&&s.filter(c=>It(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"&&Tw();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{Je(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{aie?.({errorCategory:r.code??"unknown"})}catch{}}},xw=null;bLe=180*1e3,cie=[]});import{existsSync as uie,readFileSync as die,rmSync as pie}from"fs";async function dL(t){let e=t.currentPid??process.pid,r=t.pidFilePath??fie,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(!It(l.pid)){t.registry.unregister(l.id);continue}s.set(l.id,Ki(l.pid)),o.set(l.id,await Fm(l.pid));try{await uL(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 Jm(n,5e3);let a=n.filter(l=>It(l.pid)||(o.get(l.id)??[]).some(c=>It(c.pid)));for(let l of a){let c=di(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 uL(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{mie(o.get(l.id)??[],l.pid)}}await Jm(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);Ow(r,e),t.registry.pruneDeadEntries()}function Ow(t,e,r=!1){if(!uie(t))return;let i=null;try{let s=JSON.parse(die(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||!It(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{pie(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 mie(t,e){for(let{pid:r,startToken:i}of t)if(!(r===e||!It(r))){if(!di(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 uL(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 pi(r,{signalMode:"immediate"});return}try{process.kill(r,e)}catch(n){if((n instanceof Error?n.code:void 0)!=="ESRCH")throw n}return}await pi(r)}var fie,Rw=v(()=>{"use strict";he();mn();Re();Ul();fie=Ke.workerPid()});function hie(){let e=zm().pruneDeadEntries();e>0&&g.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function fL(){Fl===null&&(Fl=setInterval(hie,pL),Fl.unref(),g.debug("SYSTEM","Health checker started",{intervalMs:pL}))}function mL(){Fl!==null&&(clearInterval(Fl),Fl=null,g.debug("SYSTEM","Health checker stopped"))}var pL,Fl,hL=v(()=>{"use strict";he();mn();pL=3e4,Fl=null});import{execFile as yie}from"child_process";import{promisify as gie}from"util";function Eie(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 Dw(){let t=await bie("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Eie(t.stdout)}function Mw(t,e){let r=t.filter(s=>vie.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 yL(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??Dw,n=t.isAlive??It,o=t.killTree??(f=>pi(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}=Mw(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 E=m[S];b.status==="fulfilled"?(r.killed+=1,d.add(E.pid)):(r.failed+=1,g.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:E.pid,ppid:E.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 bie,vie,Pw=v(()=>{"use strict";he();Ul();mn();bie=gie(yie),vie=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/});import{existsSync as Sie,readFileSync as _ie,rmSync as gL}from"fs";function jw(){return kie}function Kw(t={}){let e=t.pidFilePath??wie;if(!Sie(e))return"missing";let r=null;try{r=JSON.parse(_ie(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)}),gL(e,{force:!0}),"invalid"}return $l(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}),gL(e,{force:!0})),"stale")}var wie,Nw,kie,pd=v(()=>{"use strict";he();mn();Rw();hL();Pw();Re();mn();wie=Ke.workerPid(),Nw=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(),Kw({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,yL({registry:this.registry}).catch(r=>{g.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:r instanceof Error?r.message:String(r)})}),fL()}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}mL(),this.stopPromise=dL({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}},kie=new Nw(zm())});import{existsSync as Iie,readFileSync as xie}from"fs";function Yt(t,e){if(!Iie(t))return e;try{return Cr(xie(t,"utf-8"))}catch(r){throw new Error(`Corrupt JSON file, refusing to overwrite: ${t}: ${r instanceof Error?r.message:String(r)}`)}}var Xo=v(()=>{"use strict";kt()});import{join as bL}from"path";import{mkdirSync as Tie,writeFileSync as Cie}from"fs";import{randomUUID as Aie}from"crypto";function Oie(t){let e=t.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function Lw(t,e){if(Oie(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 EL(t,e){return Lw(t,e).enabled}function fd(){return bL(fn(),vL)}function Qo(){let t;try{t=Yt(fd(),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 Jl(t){let e=fn();Tie(e,{recursive:!0}),Cie(bL(e,vL),JSON.stringify(t,null,2)+`
16
- `)}function qm(){let t=Qo();if(t?.installId)return t.installId;let e=Aie();return Jl({installId:e,decidedAt:""}),e}var vL,Bm=v(()=>{"use strict";Re();Xo();he();vL="telemetry.json"});import Rie from"os";function Die(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>SL?e.slice(0,SL):e}catch{return""}}function Mie(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=Rie.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 Pie(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 Nie(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${Ln}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${Ln}@`))}function jie(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function Kie(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)}${Ln}`})}function Lie(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,Ln),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,Ln),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,Ln),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,Ln),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,Ln),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,Ln),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,Ln),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,Ln),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,Ln),e}function _L(t){let e=Die(t);return e.length===0?"":(e=Mie(e),e=Nie(e),e=Pie(e),e=jie(e),e=Kie(e),e=Lie(e),e)}var SL,Ln,wL=v(()=>{"use strict";he();SL=8192,Ln="[REDACTED]"});function $ie(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!Uie.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>kL?i.slice(0,kL):i;e[r]=_L(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function IL(t){let e={};try{$ie(t,e)}catch{}return e}var Uie,kL,xL=v(()=>{"use strict";wL();Uie=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"]),kL=200});import TL from"os";function CL(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||Jie}function AL(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||zie}function OL(t){let e={};for(let r of qie)t[r]!==void 0&&(e[r]=t[r]);return e}function Bie(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||TL.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 RL(){return{version:Fie,os:process.platform,os_version:TL.release(),is_wsl:Bie(),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 Fie,Jie,zie,qie,DL=v(()=>{"use strict";he();Fie="13.40.0",Jie="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",zie="https://us.i.posthog.com";qie=["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 Or(t,e,r){try{if(!EL(process.env,Qo()))return;let i=IL({...RL(),...e??{}});if(r?.person?i.$set=OL(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 qm(){let t=Qo();if(t?.installId)return t.installId;let e=Aie();return Jl({installId:e,decidedAt:""}),e}var vL,Bm=v(()=>{"use strict";Re();Xo();he();vL="telemetry.json"});import Rie from"os";function Die(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>SL?e.slice(0,SL):e}catch{return""}}function Mie(t){if(typeof t!="string"||t.length===0)return t??"";let e="";try{e=Rie.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 Pie(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 Nie(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${Ln}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${Ln}@`))}function jie(t){return typeof t!="string"||t.length===0?t??"":t.replace(/\?[^\s"'()]*/g,"")}function Kie(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)}${Ln}`})}function Lie(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,Ln),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,Ln),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,Ln),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,Ln),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,Ln),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,Ln),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,Ln),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,Ln),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,Ln),e}function _L(t){let e=Die(t);return e.length===0?"":(e=Mie(e),e=Nie(e),e=Pie(e),e=jie(e),e=Kie(e),e=Lie(e),e)}var SL,Ln,wL=v(()=>{"use strict";he();SL=8192,Ln="[REDACTED]"});function $ie(t,e){if(!(!t||typeof t!="object"))for(let r of Object.keys(t)){if(!Uie.has(r))continue;let i=t[r];if(typeof i=="string"){let n=i.length>kL?i.slice(0,kL):i;e[r]=_L(n)}else(typeof i=="number"&&Number.isFinite(i)||typeof i=="boolean")&&(e[r]=i)}}function IL(t){let e={};try{$ie(t,e)}catch{}return e}var Uie,kL,xL=v(()=>{"use strict";wL();Uie=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","platform","agent_role","instruction_state","instruction_returned_count","instruction_disabled_count","instruction_excluded_count","instruction_missing_count","instruction_unknown_count","captured_prompt_count","captured_session_count","captured_tool_count","unidentified_tool_event_count","native_todo_count",...["captured","mcp"].flatMap(t=>["read","write"].flatMap(e=>[`${t}_${e}_count`,...["ok","error","excluded","disabled","unknown"].map(r=>`${t}_${e}_${r}_count`)]))]),kL=200});import TL from"os";function CL(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||Jie}function AL(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||zie}function OL(t){let e={};for(let r of qie)t[r]!==void 0&&(e[r]=t[r]);return e}function Bie(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||TL.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 RL(){return{version:Fie,os:process.platform,os_version:TL.release(),is_wsl:Bie(),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 Fie,Jie,zie,qie,DL=v(()=>{"use strict";he();Fie="13.41.0",Jie="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",zie="https://us.i.posthog.com";qie=["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 Or(t,e,r){try{if(!EL(process.env,Qo()))return;let i=IL({...RL(),...e??{}});if(r?.person?i.$set=OL(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=CL(),o=new AbortController,s=setTimeout(()=>o.abort(),Gie);try{await Wie(n,t,i,o.signal)}finally{clearTimeout(s)}}catch{}}async function Wie(t,e,r,i){await fetch(`${AL()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:t,event:e,distinct_id:qm(),properties:r}),signal:i})}var Gie,md=v(()=>{"use strict";Bm();xL();DL();Gie=2e3});import{createHash as f1e,randomUUID as m1e}from"crypto";var ML=v(()=>{"use strict";he()});import{randomUUID as S1e}from"crypto";var PL=v(()=>{"use strict";he();ML()});import{statSync as Vie,readFileSync as Hie}from"fs";import da from"path";function NL(t){let e=da.join(t,".git"),r;try{r=Vie(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)}),hd}if(!r.isFile())return hd;let i;try{i=Hie(e,"utf-8").trim()}catch(l){return g.warn("GIT","Failed to read .git file",{error:l instanceof Error?l.message:String(l)}),hd}let n=i.match(/^gitdir:\s*(.+)$/);if(!n)return hd;let o=da.resolve(da.dirname(e),n[1]),s=o.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(s){let l=s[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:da.basename(t),parentRepoPath:l,parentProjectName:da.basename(l)}}let a=o.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let l=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:da.basename(t),parentRepoPath:l,parentProjectName:da.basename(l)}}return hd}var hd,jL=v(()=>{"use strict";he();hd={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null}});import{basename as LL}from"path";function KL(t){let e=pn(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 UL(t,e,r){let i=KL(t);return i.test(e)||i.test(r)?!0:t.replace(/\\/g,"/").endsWith("/**")?KL(t.slice(0,-3)).test(e.replace(/\/+$/,"")):!1}function $L(t,e){if(!e.length)return!1;let r=t.replace(/\\/g,"/"),i=LL(r);for(let n of e){let o=n.trim();if(o)try{if(UL(o,r,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}function FL(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),i=LL(r),n=e.split(",").map(o=>o.trim()).filter(Boolean);for(let o of n)try{if(UL(o,r,i))return!0}catch(s){g.warn("PROJECT_NAME","Invalid exclusion pattern",{pattern:o,error:s instanceof Error?s.message:String(s)});continue}return!1}var Uw=v(()=>{"use strict";ud();he()});import{realpathSync as Yie}from"fs";function JL(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 Zie(t){try{return Yie(t)}catch{return t}}function $w(t,e){if(e.length===0)return null;let r=[...new Set([t,Zie(t)])].flatMap(i=>[i,`${i.replace(/[\\/]+$/,"")}/`]);for(let i of e)if(r.some(n=>$L(n,i.patterns)))return i.name;return null}var zL=v(()=>{"use strict";Uw();he()});import Yr from"path";import{existsSync as Xie,realpathSync as Qie,statSync as eoe}from"fs";import{homedir as toe,tmpdir as roe}from"os";import{execFileSync as GL}from"child_process";function WL(t){try{return GL("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 VL(t){try{return Qie(t)}catch{return t}}function ooe(t,e){let r=Yr.relative(e,t);return r===""||!r.startsWith("..")&&!Yr.isAbsolute(r)}function soe(){return[toe(),roe(),go].flatMap(t=>{let e=Yr.resolve(t);return[e,VL(e)]})}function HL(t){let e=soe(),r=Yr.resolve(t);if([Yr.resolve(go),VL(Yr.resolve(go))].some(n=>ooe(r,n)))return null;for(let n=0;n<ioe;n++){if(e.includes(r))return null;let o=Yr.dirname(r);if(o===r)return null;if(noe.some(s=>Xie(Yr.join(r,s))))return r;r=o}return null}function Jw(t,e){let r=Yr.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}),zw}return r}function qL(){try{return eoe(_e).mtimeMs}catch{return-1}}function YL(){let t=qL();if(t===-1)return Te.getAllDefaults();if(Gm&&Gm.mtimeMs===t)return Gm.settings;let e=Te.loadFromFile(_e);return Gm={mtimeMs:qL(),settings:e},e}function loe(){let t=process.env[aoe]??YL().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(t??"path").trim().toLowerCase()==="git-remote"}function ZL(){let t=process.env[coe]??YL().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!Wm||Wm.raw!==t)&&(Wm={raw:t,environments:JL(t)}),Wm.environments}function uoe(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 doe(t){try{let e=GL("git",["remote","get-url","origin"],{cwd:t,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return uoe(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 XL(t){return loe()?(Fw.has(t)||Fw.set(t,doe(t)),Fw.get(t)??null):null}function poe(t,e=process.platform){if(!t||t.trim()==="")return g.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:t}),zw;let r=pn(t,e),i=$w(r,ZL());if(i)return i;let n=WL(r),o=n?XL(n):null;if(o)return o;let s=n??HL(r)??r;return Jw(t,s)}function QL(t,e){return e===t?t:`${t}/${e}`}function foe(t,e){if(!t.isSubmodule||!t.parentRepoPath)return null;let r=Yr.relative(t.parentRepoPath,e);return!r||r.startsWith("..")||Yr.isAbsolute(r)?null:r.split(Yr.sep).join("/")}function pa(t,e=process.platform){if(!t||t.trim()===""){let l=poe(t,e);return{primary:l,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[l],keySource:"path"}}let r=pn(t,e),i=WL(r),n=moe(t,r,i),o=i?XL(i):null,s=o?BL(n,o,"git-remote"):n,a=$w(r,ZL());return a?BL(s,a,"environment"):s}function BL(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 moe(t,e,r){let i=r?null:HL(e),n=Jw(t,r??i??e),o=r??e,s=NL(o);if((s.isWorktree||s.isSubmodule)&&s.parentProjectName){let a=s.parentProjectName,l,c;return s.isSubmodule?(l=`${a}/${foe(s,o)??n}`,c=n!==a?[n]:[]):(l=QL(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&&Yr.resolve(i)!==Yr.resolve(e)){let a=Jw(t,e);if(a!==n&&a!==zw)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 zw,noe,ioe,aoe,Gm,coe,Wm,Fw,yd=v(()=>{"use strict";ud();Re();gr();he();jL();zL();zw="unknown-project";noe=[".claude-mem-project",".claude-mem.json"],ioe=64;aoe="CLAUDE_MEM_PROJECT_NAME_SOURCE",Gm=null;coe="CLAUDE_MEM_PROJECT_ENVIRONMENTS",Wm=null;Fw=new Map});import hn from"path";import{homedir as hoe,tmpdir as X1e}from"os";import{existsSync as Vm,writeFileSync as eUe,readFileSync as yoe,unlinkSync as tUe,mkdirSync as goe,statSync as rUe,utimesSync as boe,copyFileSync as nUe,realpathSync as voe}from"fs";import{execFileSync as Eoe,spawnSync as r1}from"child_process";function Soe(t){return t===void 0?e1:Math.max(1,Math.min(e1,t))}function _oe(t){try{return voe(t)}catch{return null}}function qw(t){return t?/(^|[\\/])bun(\.exe)?$/i.test(t.trim()):!1}function woe(t,e){let r=e==="win32"?"where.exe":"which",i=[t],n;try{n=Eoe(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 Gw(t={}){let e=Object.keys(t).length===0;if(e&&Bw!==void 0)return Bw;let r=koe(t);return e&&r!==null&&(Bw=r),r}function t1(t,e){let r=t?.trim();return r?e==="win32"?[hn.join(r,"bin","bun.exe"),hn.join(r,"bin","bun"),hn.join(r,"bun.exe")]:[hn.join(r,"bin","bun"),hn.join(r,"bun")]:[]}function koe(t){let e=t.platform??process.platform,r=t.execPath??process.execPath;if(qw(r))return r;let i=t.env??process.env,n=t.homeDirectory??hoe(),o=t.pathExists??Vm,s=t.lookupInPath??woe,a=t.realpath??_oe,l=e==="win32"?[i.BUN,i.BUN_PATH,...t1(i.BUN_INSTALL,e),hn.join(n,".bun","bin","bun.exe"),hn.join(n,".bun","bin","bun"),i.USERPROFILE?hn.join(i.USERPROFILE,".bun","bin","bun.exe"):void 0,i.LOCALAPPDATA?hn.join(i.LOCALAPPDATA,"bun","bun.exe"):void 0,i.LOCALAPPDATA?hn.join(i.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,i.npm_config_prefix?hn.join(i.npm_config_prefix,"bun.exe"):void 0]:[i.BUN,i.BUN_PATH,...t1(i.BUN_INSTALL,e),hn.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?hn.join(i.npm_config_prefix,"bin","bun"):void 0];for(let d of l){let p=d?.trim();if(p&&(qw(p)&&o(p)||p.toLowerCase()==="bun"))return p}let c=s("bun",e)?.trim();if(!c||!qw(c))return null;let u=a(c)??c;return o(u)?u:null}function i1(){if(!Vm(fa))return null;try{return JSON.parse(yoe(fa,"utf-8"))}catch(t){return t instanceof Error?g.warn("SYSTEM","Failed to parse PID file",{path:fa},t):g.warn("SYSTEM","Failed to parse PID file",{path:fa},new Error(String(t))),null}}function o1(t){Ow(fa,t,!0)}function es(t){return process.platform==="win32"?Math.round(t*2):t}function Ww(){let t=Ke.dataDir();return goe(t,{recursive:!0}),t}function Ioe(t,e,r=Ww()){let i=n=>n.replace(/'/g,"''");return`Start-Process -FilePath '${i(t)}' -ArgumentList @('"${i(e)}"','--daemon') -WorkingDirectory '${i(r)}' -WindowStyle Hidden`}function Coe(t,e,r){return t?.code!=="ETIMEDOUT"?!1:e<r/2}function s1(t,e=es(xoe)){let r=Gw();if(!r)return;let i=()=>{let a=Date.now();try{return{result:r1(r,[t,"status"],{encoding:"utf-8",timeout:e,windowsHide:!0,env:or({...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||Coe(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,Toe).join(`
18
18
  `)}function Aoe(t=process.env){let e=t.SystemRoot||t.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function Ooe(t,e,r=Ww()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(Ioe(t,e,r),"utf16le").toString("base64")]}function a1(t,e,r,i=process.platform,n){if(i==="win32"){let u=Aoe(r),d=Ooe(t,e),p=Soe(n);try{let f=r1(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=Vm(o),a=s?o:t,c=ui(a,s?[t,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:Ww(),env:r});if(c.on("error",u=>{g.error("SYSTEM",n1,{runtimePath:t,execPath:a},u)}),c.pid!==void 0)return c.unref(),c.pid}function l1(t,e,r={}){jw().assertCanSpawn("worker daemon");let i=or({...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r}),n=Gw();if(!n){g.error("SYSTEM",n1);return}return a1(n,t,i)}function c1(){try{if(!Vm(fa))return;let t=new Date;boe(fa,t,t)}catch{}}function gd(t={}){return Kw({logAlive:!1,removeStale:t.removeStale})}var e1,hUe,fa,n1,Bw,xoe,Toe,Hm=v(()=>{"use strict";Hr();he();Zo();Rw();pd();PL();yd();Re();ua();mn();e1=bo(jt.POWERSHELL_COMMAND);hUe=Ke.dataDir(),fa=Ke.workerPid(),n1="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.";xoe=5e3,Toe=8});function Vw(t,e){if(!t||typeof t!="object"||e.has(t))return!1;if(e.add(t),t instanceof Error&&t.message.includes("ECONNREFUSED"))return!0;let r=t;return typeof r.code=="string"&&Roe.has(r.code)||Vw(r.cause,e)?!0:Array.isArray(r.errors)&&r.errors.some(i=>Vw(i,e))}function vo(t){return Vw(t,new Set)?!0:t instanceof Error&&t.message.includes("ECONNREFUSED")}function u1(t){let e=t?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var Roe,Ym,ma=v(()=>{"use strict";Roe=new Set(["ECONNREFUSED","ConnectionRefused"]);Ym="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 Doe from"net";function Hw(){return Te.loadFromFile(_e).CLAUDE_MEM_WORKER_HOST}function d1(t){return t.startsWith("[")&&t.endsWith("]")?t:t.includes(":")?`[${t}]`:t}async function Moe(t,e,r="GET",i=bd){let n=await fetch(`http://${d1(Hw())}:${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 Yw(t,e=bd){let r=Date.now()+e;if(process.platform==="win32")try{let n=await fetch(`http://${d1(Hw())}:${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 p1(t,Math.max(1,r-Date.now()));return i==="occupied"||i==="indeterminate"}async function p1(t,e=bd){return(await Zw(t,e)).occupancy}function Zw(t,e=bd){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(r=>{let i=!1,n=!1,o=!1,s;try{s=Doe.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"}):u1(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,Hw())}catch{try{s.close()}catch{}c({occupancy:"indeterminate"})}})}async function f1(t,e,r,i){let n=Date.now()+r;for(;Date.now()<n;){try{let s=n-Date.now();if((await Moe(t,e,"GET",Math.min(bd,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 ts(t,e=3e4){return f1(t,"/api/health",e,"Service not ready yet, will retry")}function zl(t,e=3e4){return f1(t,"/api/readiness",e,"Worker not ready yet, will retry")}var bd,vd=v(()=>{"use strict";he();gr();Re();ma();bd=5e3});var m1=v(()=>{"use strict";he();pd()});var h1=v(()=>{"use strict";Hm();vd();m1()});import{dirname as Poe,join as Noe}from"path";import{mkdirSync as joe,readFileSync as Zm,statSync as y1,unlinkSync as g1,utimesSync as Koe,writeFileSync as Loe}from"fs";function Qw(){return Noe(fn(),"spawn.lock")}function Xw(t){try{let e=JSON.parse(Zm(t,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function Foe(t){if(t===null)return null;try{return process.kill(t,0),!0}catch(e){return e?.code==="EPERM"}}function Qm(){let t=Qw(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let r=0;r<2;r++)try{return joe(Poe(t),{recursive:!0}),Loe(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=y1(t).mtimeMs}catch{continue}let a=Xw(t),l=null;if(a===null)try{l=Zm(t,"utf-8")}catch{continue}if(Date.now()-s<=Xm&&Foe(a)!==!1)return!1;let u;try{u=y1(t).mtimeMs}catch{continue}if(u!==s)return!1;if(a!==null){if(Xw(t)!==a)return!1}else try{if(Zm(t,"utf-8")!==l)return!1}catch{continue}try{g1(t)}catch{return!1}}return!1}function eh(){let t=Qw();try{if(JSON.parse(Zm(t,"utf-8")).pid!==process.pid)return;g1(t)}catch{}}async function ek(t,e=Uoe){let r=Date.now()+t;for(;!Qm();){if(Date.now()>=r)return null;await new Promise(n=>setTimeout(n,$oe))}let i=setInterval(Joe,e);return i.unref(),()=>{clearInterval(i),eh()}}function Joe(){let t=Qw();try{if(Xw(t)!==process.pid)return;let e=new Date;Koe(t,e,e)}catch{}}var Xm,Uoe,$oe,th=v(()=>{"use strict";Re();he();Xm=9e4,Uoe=Xm/3,$oe=250});import{execFile as zoe}from"node:child_process";import{readdirSync as UUe,readFileSync as qoe,statSync as $Ue,promises as FUe}from"node:fs";import{promisify as Boe}from"node:util";function b1(t){return Goe.test(t.trim())}function Woe(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 nh(t,e){return e===void 0?t:Math.max(1,Math.min(t,e))}async function Voe(t){try{let e=await rh("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:nh(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 Hoe(t,e){try{let r=await rh("netstat",["-ano"],{timeout:nh(15e3,e),windowsHide:!0,maxBuffer:16777216});return Qoe(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 Yoe(t,e){try{let r=await rh("lsof",["-nP",`-iTCP:${t}`,"-sTCP:LISTEN","-t"],{timeout:nh(1e4,e),maxBuffer:1048576});return Zoe(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 Zoe(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 Xoe(t,e){try{let i=(await rh("ps",["-p",String(t),"-o","command="],{timeout:nh(5e3,e)})).stdout.trim();return i.length>0?i:null}catch{return null}}function Qoe(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 tse(t,e){let r=e.readOwnedWorker();if(r===null||r.port!==t)return null;let i=(u,d={})=>(g.info("PROCESS","Wedged-worker reclaim declined",{port:t,pid:r.pid,reason:u,...d}),{reclaimed:!1,reason:u,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 u=0;u<2;u++)if(u>0&&await e.sleep(_1),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=e.readHeartbeat();if(s!==null&&s.pid===r.pid){let u=e.now(),d=Math.max(0,u-s.beatAtMs),p=Math.max(0,u-s.lastResponseAtMs);if(d<e.heartbeatStaleMs){if(p<e.maxSilentProtectionMs)return i("owner-progressing",{heartbeatAgeMs:Math.round(d),sinceLastResponseMs:Math.round(p)});g.warn("PROCESS","Worker finished no response within the protection window despite a fresh liveness heartbeat",{port:t,pid:r.pid,sinceLastResponseMs:Math.round(p),maxSilentProtectionMs:e.maxSilentProtectionMs})}}let a=await e.readIdentity(r.pid),l=r.startToken!==void 0&&a.startToken!==null&&a.startToken!==r.startToken;if(l||a.cmdline===null||!ese.test(a.cmdline))return i("owner-identity-mismatch",{tokenMismatch:l,hasCmdline:a.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:a.startToken??r.startToken??void 0,signalMode:"graceful"})}catch(u){return g.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:t,pid:r.pid},u instanceof Error?u:new Error(String(u))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let c=await e.listOwners(t);return c!==null&&c.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:c}),{reclaimed:!1,reason:"still-bound",killedPids:[r.pid]})}async function rse(t,e,r,i){let n=Ki(t),o=e?(await r(i))?.find(s=>s.pid===t)?.cmdline??null:await Xoe(t,i);return di(t,n)?{startToken:n,cmdline:o}:{startToken:null,cmdline:null}}async function rk(t,e={}){let r=e.isWin32??(()=>process.platform==="win32"),i=e.now??Date.now,n=e.deadlineAt??null,o=W=>n!==null&&n-i()<W,s=()=>n===null?void 0:Math.max(1,n-i());if(o(v1))return g.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:t,remainingMs:s(),neededMs:v1}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((W,Q)=>r()?Hoe(W,Q):Yoe(W,Q)),l=W=>a(W,s()),c=e.readTable??Voe,u=()=>c(s()),d=e.killTree??((W,Q)=>pi(W,Q)),p=e.dataDir??(()=>ze),f=e.readIdentity??((W,Q)=>rse(W,r(),c,Q)),m=await tse(t,{listOwners:l,killTree:d,readOwnedWorker:e.readOwnedWorker??Li,probeHealth:e.probeHealth??(W=>ts(W,S1)),readIdentity:W=>f(W,s()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??JK(),readHeartbeat:e.readHeartbeat??(()=>sse()),heartbeatStaleMs:e.heartbeatStaleMs??ise(),maxSilentProtectionMs:e.maxSilentProtectionMs??ose,now:i,sleep:e.sleep??(W=>new Promise(Q=>setTimeout(Q,W))),hasKillBudget:()=>!o(tk)});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(W=>It(W)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let E=new Map;for(let W of b){let Q=E.get(W.ppid);Q?Q.push(W):E.set(W.ppid,[W])}let x=new Map,O=new Set,N=W=>{for(let Q of E.get(W)??[])O.has(Q.pid)||(O.add(Q.pid),N(Q.pid),b1(Q.name)&&x.set(Q.pid,Q))};for(let W of h)N(W);let B=p();if(B)for(let W of b)x.has(W.pid)||b1(W.name)&&Woe(W.cmdline,B)&&x.set(W.pid,W);if(x.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:B??"(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:[...x.values()].map(W=>({pid:W.pid,name:W.name}))});let J=[];for(let W of x.values()){if(o(tk))return g.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:t,killedPids:J}),{reclaimed:!1,reason:"out-of-budget",killedPids:J};try{await d(W.pid,{expectedStartToken:W.startToken,signalMode:"immediate"}),J.push(W.pid)}catch(Q){return g.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:t,pid:W.pid},Q instanceof Error?Q:new Error(String(Q))),{reclaimed:!1,reason:"kill-failed",killedPids:J}}}let oe=await l(t);return oe!==null&&oe.length===0?(g.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:t,killedPids:J}),{reclaimed:!0,killedPids:J}):(g.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:t,killedPids:J,stillOwnedBy:oe}),{reclaimed:!1,reason:"still-bound",killedPids:J})}function ise(t=process.env,e=_e){let r=t.CLAUDE_MEM_WORKER_HEARTBEAT_STALE_MS??Te.loadFromFile(e,!1,{readOnly:!0}).CLAUDE_MEM_WORKER_HEARTBEAT_STALE_MS,i=Number(r);return Number.isSafeInteger(i)&&i>=E1.min&&i<=E1.max?i:nse}function sse(t=Ke.workerHeartbeat()){try{let e=JSON.parse(qoe(t,"utf8"));if(e&&Number.isSafeInteger(e.pid)&&Number.isFinite(e.beatAtMs)&&Number.isFinite(e.lastResponseAtMs))return{pid:e.pid,beatAtMs:e.beatAtMs,lastResponseAtMs:e.lastResponseAtMs}}catch{}return null}var rh,Goe,ese,S1,_1,tk,v1,nse,E1,ose,nk=v(()=>{"use strict";he();Ul();mn();pd();vd();Um();ua();Re();gr();rh=Boe(zoe),Goe=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;ese=/worker-service/i,S1=1500,_1=1e3,tk=5500,v1=2*S1+_1+tk;nse=12e4,E1={min:1e4,max:36e5};ose=6e5});import{existsSync as ase,readFileSync as lse,realpathSync as cse}from"fs";import{createRequire as use}from"module";import ha from"path";function w1(t){try{return cse(t)}catch{return t}}function pse(t,e){let r=ha.relative(e,t);return r!==""&&!r.startsWith("..")&&!ha.isAbsolute(r)}function ik(t){let e;try{let n=JSON.parse(lse(ha.join(t,"package.json"),"utf-8"));e=Object.keys(n?.dependencies??{})}catch{return[]}if(e.length===0)return[];let r=ha.join(t,"node_modules"),i=e.filter(n=>!ase(ha.join(r,...n.split("/"),"package.json")));if(e.includes("zod")&&!i.includes("zod")){let n=use(ha.join(r,"noop.js")),o=w1(ha.join(r,"zod"));for(let s of dse)try{let a=n.resolve(s,{paths:[r]});pse(w1(a),o)||i.push(s)}catch{i.push(s)}}return i}var dse,k1=v(()=>{"use strict";dse=["zod/v3","zod/v4","zod/v4-mini"]});import Kt from"path";import{randomUUID as c$e}from"crypto";import{readFileSync as fse,existsSync as sh,writeFileSync as d$e,renameSync as p$e,mkdirSync as f$e,readdirSync as mse,statSync as hse,unlinkSync as m$e}from"fs";function C1(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 A1(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 gse(t){return A1()?{...t,verbose:!0}:t}function bse(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 vse(t,e,r){let i=typeof e.method=="string"?e.method:"GET",n=bse(r),o=JSON.stringify(n);g.warn("SYSTEM","Worker IPC fetch failed",{url:t,method:i},o),ai(`[claude-mem] fetch verbose: ${i} ${t} ${o}
19
19
  `)}async function ak(t,e={}){let r=gse(e);try{return await fetch(t,r)}catch(i){throw A1()&&vse(t,e,i),i}}async function Ese(t,e={},r){try{return await ak(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 Sse(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 _se(t,e,r){let i=Sse(r,e.signal),n;try{n=await ak(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 wse(t,e,r){let i=await _se(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 I1(){return Kt.join(Te.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function lk(t={}){return t.readOnly?Te.loadFromFile(I1(),!0,t):(ih!==null||(ih=Te.loadFromFile(I1())),ih)}function x1(t,e){if(!t)return null;let r=parseInt(t,10);return Number.isFinite(r)&&r>=e.min&&r<=e.max?r:null}function kse(t,e,r){let i=process.env[t];if(i!==void 0){let s=x1(i,r);return s!==null?s:(g.warn("SYSTEM",`Invalid ${t}, using default`,{value:i,min:r.min,max:r.max}),e)}let n=lk()[t],o=x1(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 Eo(t={}){if(!t.readOnly&&ok!==null)return ok;let e=parseInt(lk(t).CLAUDE_MEM_WORKER_PORT,10);return t.readOnly||(ok=e),e}function Ed(t={}){if(!t.readOnly&&sk!==null)return sk;let e=lk(t).CLAUDE_MEM_WORKER_HOST;return t.readOnly||(sk=e),e}function Ise(){return oh!==null||(oh=kse("CLAUDE_MEM_API_TIMEOUT_MS",bo(jt.API_REQUEST),yse)),oh}function ck(t){return`http://${ji(Ed())}:${Eo()}${t}`}function fi(t,e={}){let r=e.method??"GET",i=ck(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 wse(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??Ise();return o>0?Ese(i,n,o):ak(i,n)}function O1(t){let e=sh(Kt.join(t,"plugin","scripts"))?Kt.join(t,"plugin"):t;return Kt.join(e,"scripts","worker-service.cjs")}function uk(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 dk(t=Kt.join(Kt.dirname(Kt.dirname(yr)),"cache","thedotmack","claude-mem")){try{return mse(t).filter(e=>/^\d/.test(e)).map(e=>Kt.join(t,e)).filter(e=>{try{if(!hse(e).isDirectory())return!1}catch{return!1}return!sh(Kt.join(e,".orphaned_at"))}).map(e=>({scriptPath:O1(e),version:Kt.basename(e)}))}catch{return[]}}function T1(t){try{let e=JSON.parse(fse(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 R1(){return{cacheRoot:Kt.join(Kt.dirname(Kt.dirname(yr)),"cache","thedotmack","claude-mem"),marketplaceRoot:yr,cwd:process.cwd()}}function pk(t=R1()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if(sh(e))return{scriptPath:e,version:null};g.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let r=[...dk(t.cacheRoot),{scriptPath:O1(Kt.join(t.marketplaceRoot,"plugin")),version:T1(Kt.join(t.marketplaceRoot,"package.json"))},{scriptPath:Kt.join(t.cwd,"plugin","scripts","worker-service.cjs"),version:T1(Kt.join(t.cwd,"package.json"))}];return fk(r)}function D1(t){return Kt.dirname(Kt.dirname(t))}function xse(t){return ik(D1(t.scriptPath)).length===0}function fk(t,e=xse){let r=t.filter(i=>sh(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:uk(i.version,n.version)),r.find(e)??r[0])}function ql(t=R1()){let e=pk(t);if(!e)return null;let r=D1(e.scriptPath);return{root:r,version:e.version,missingDependencies:ik(r)}}var K$e,L$e,yse,U$e,ok,sk,ih,oh,Tse,Cse,$$e,mi=v(()=>{"use strict";he();ua();qK();gr();Re();Ew();Km();QK();Sw();pd();cd();md();h1();vd();ma();Hm();th();nk();Zo();Ul();kt();k1();Sw();K$e=C1("CLAUDE_MEM_HEALTH_TIMEOUT_MS",bo(jt.HEALTH_CHECK),{min:500,max:3e5}),L$e=C1("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",bo(jt.HOOK_READINESS_WAIT),{min:0,max:3e5}),yse={min:500,max:3e5},U$e={min:500,max:jt.SESSION_INIT_REQUEST_MAX};ok=null,sk=null,ih=null,oh=null;Tse=1e3,Cse=5e3,$$e=Cse+Tse});import{existsSync as mk,readFileSync as M1}from"fs";import{homedir as Ase}from"os";import{dirname as Ose,join as yn}from"path";import{fileURLToPath as Rse}from"url";function hk(){return process.env.CLAUDE_CONFIG_DIR||yn(Ase(),".claude")}function br(){return yn(hk(),"plugins","marketplaces","thedotmack")}function ya(){return yn(hk(),"plugins")}function Bl(){return yn(ya(),"known_marketplaces.json")}function rs(){return yn(ya(),"installed_plugins.json")}function ns(){return yn(hk(),"settings.json")}function Gl(){return yn(ya(),"cache","thedotmack","claude-mem")}function Wl(t){return yn(Gl(),t)}function ga(){let t=Rse(import.meta.url),e=yn(Ose(t),"..","..");if(!mk(yn(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 yk(){return yn(ga(),"plugin")}function is(){let t=yn(yk(),".claude-plugin","plugin.json");if(mk(t))try{let r=JSON.parse(M1(t,"utf-8"));if(r.version)return r.version}catch{}let e=yn(ga(),"package.json");if(mk(e))try{let r=JSON.parse(M1(e,"utf-8"));if(r.version)return r.version}catch{}return"0.0.0"}function P1(){return ql()!==null}var Et,hi=v(()=>{"use strict";kt();mi();Xo();Et=process.platform==="win32"});var j1,K1,L1,U1=v(()=>{j1=(()=>{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}})(),K1=t=>t===12288||t>=65281&&t<=65376||t>=65504&&t<=65510,L1=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 Dse,Mse,$1,Pse,F1,Nse,jse,Kse,J1,z1,q1=v(()=>{U1();Dse=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]|\u001b\]8;[^;]*;.*?(?:\u0007|\u001b\u005c)/y,Mse=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,$1=/(?:(?![\uFF61-\uFF9F\uFF00-\uFFEF])[\p{Script=Han}\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Hangul}\p{Script=Tangut}]){1,1000}/yu,Pse=/\t{1,1000}/y,F1=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"),Nse=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,jse=new RegExp("\\p{M}+","gu"),Kse={limit:1/0,ellipsis:""},J1=(t,e={},r={})=>{let i=e.limit??1/0,n=e.ellipsis??"",o=e?.ellipsisWidth??(n?J1(n,Kse,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=[[Nse,d],[Dse,s],[Mse,a],[Pse,l],[F1,c],[$1,p]],m=0,h=0,b=t.length,S=0,E=!1,x=b,O=Math.max(0,i-o),N=0,B=0,J=0,oe=0;e:for(;;){if(B>N||h>=b&&h>m){let W=t.slice(N,B)||t.slice(m,h);S=0;for(let Q of W.replaceAll(jse,"")){let Oe=Q.codePointAt(0)||0;if(K1(Oe)?oe=u:L1(Oe)?oe=p:oe=d,J+oe>O&&(x=Math.min(x,Math.max(N,m)+S)),J+oe>i){E=!0;break e}S+=Q.length,J+=oe}N=B=0}if(h>=b)break e;for(let W=0,Q=f.length;W<Q;W++){let[Oe,wt]=f[W];if(Oe.lastIndex=h,Oe.test(t)){if(S=Oe===$1?j1(t.slice(h,Oe.lastIndex)):Oe===F1?1:Oe.lastIndex-h,oe=S*wt,J+oe>O&&(x=Math.min(x,h+Math.floor((O-J)/wt))),J+oe>i){E=!0;break e}J+=oe,N=m,B=h,h=m=Oe.lastIndex;continue e}}h+=1}return{width:E?O:J,index:E?x:b,truncated:E,ellipsed:E&&i>=o}},z1=J1});var Lse,Use,Rr,gk=v(()=>{q1();Lse={limit:1/0,ellipsis:"",ellipsisWidth:0},Use=(t,e={})=>z1(t,Lse,e).width,Rr=Use});function Ui(t,e,r){return String(t).normalize().split(qse).map(i=>zse(i,e,r)).join(`
@@ -595,7 +595,7 @@ ${i.map(s=>hg(s,!1)).join(`
595
595
  ${i.map(s=>hg(s,!1)).join(`
596
596
  `)}`),null)}function fG(t){let e=fI(t);return e||R.error("This install has not joined a TeamBrain team. Join one: npx claude-mem teambrain join <invite-link> (or start one: npx claude-mem teambrain start)"),e}function TT(t){try{return t()}catch(e){if(e instanceof Error&&String(e.code??"").startsWith("ERR_PARSE_ARGS"))return console.error(_n("red",e.message)),console.error(pg),null;throw e}}async function Lbe(t){let e=TT(()=>kT({args:t,options:{share:{type:"string"},"share-all":{type:"boolean"}},allowPositionals:!0,strict:!0}));if(!e)return 1;let r=rG(e.positionals[0]);if(!r.ok)return R.error(r.error),1;let i=IT({share:e.values.share,shareAll:e.values["share-all"]===!0});if(!i.ok)return R.error(i.error),1;let n=mg();if(n)return R.error(wT(n,"the join")),1;let o=await Ip({source:"teambrain_join",teamInvite:r.token});if(!o)return R.error(Rbe()),1;R.info(`Sign in, then approve this device on the page to join the team: ${o.authorizationUrl}`),lg(o,"Approving this device on the page, which names the team, joins it."),fg?(await ag("Hit return to open it in your browser\u2026"),Dc(o.authorizationUrl)):R.info("AGENT: show this link to the user. This command waits until they approve this device.");let s=await xp(o,"teambrain_join",Ibe);if(!s||s.kind!=="ready")return 1;let a=mg();if(a)return R.error(wT(a,"the join")),1;let l=Abe(),c=gg(),u=iG([l.CLAUDE_MEM_CLOUD_SYNC_USER_ID,c.CLAUDE_MEM_CLOUD_SYNC_USER_ID],s.userId);if(u)return R.error(u),1;let d=oG(s.teambrainUrl);if(!d.ok)return R.error(d.error),1;let p={teambrainUrl:d.url,syncToken:s.setupToken,syncUserId:s.userId,teamId:s.team?.id??""},f=s.team,m=null;if(!f){let E=await pG(p,void 0);if(!E)return 1;f=E.team,m=E.team,p.teamId=f.id}let h=Obe(c,s),b=aG(sG(s,l,{teambrainUrl:p.teambrainUrl,teamId:f.id}));if(b)return R.error(`${b}. ${f.name} counts you as a member, but this install did not save the connection; fix the file and run the join again.`),1;R.success(`Joined ${f.name}. Your memory stays private; you choose what the team sees.`);let S=i.choice??(fg?await cG(f.name,m):null);if(S){if(!await uG(p,f,S))return 1}else R.info("Not sharing any projects yet. Choose them with: npx claude-mem teambrain share");return h&&await dG(!0),R.info("Your next session starts with the team brief, and agents can use the team_search tool. Check anytime: npx claude-mem teambrain status"),0}async function Ube(t){let e=TT(()=>kT({args:t,options:{share:{type:"string"},"share-all":{type:"boolean"},team:{type:"string"}},allowPositionals:!1,strict:!0}));if(!e)return 1;let r=IT({share:e.values.share,shareAll:e.values["share-all"]===!0});if(!r.ok)return R.error(r.error),1;if(!r.choice&&!fg)return R.error("Without a terminal, name what to share: npx claude-mem teambrain share --share <a,b> (or --share-all)"),1;let i=fG(gg());if(!i)return 1;let n=await pG(i,e.values.team);if(!n)return 1;let o=r.choice??await cG(n.team.name,n.team);return o?await uG(i,n.team,o)?0:1:(R.info("Nothing changed."),0)}async function $be(){let t=fI(gg());if(!t)return console.log(`${_n("bold","TeamBrain:")} not joined on this install`),console.log(` Start a team: ${_n("cyan","npx claude-mem teambrain start")}`),console.log(` Join a team: ${_n("cyan","npx claude-mem teambrain join <invite-link>")}`),0;console.log(`${_n("bold","TeamBrain:")} ${Dt(t.teambrainUrl)}`);let e=await Kd(t,Nc);if(!e.ok)return console.error(_n("red",`Could not read your teams: ${e.reason}`)),1;if(e.value.length===0)return console.log(" This account is not in a team. Join one: npx claude-mem teambrain join <invite-link>"),0;for(let r of e.value)console.log(hg(r,r.id===t.teamId));return console.log(_n("dim","Change what you share: npx claude-mem teambrain share")),0}async function Fbe(t,e,r){let i=!t.teamId||t.teamId===e,n=await Kd(t,Nc),o=l=>{let c=aG(l);return c&&R.error(`${c}. The team was left on cmem.ai, but this install still points at it; fix the file and run leave again.`),!c};if(!n.ok)return R.warn(`Could not read which teams this account is still in: ${n.reason}`),i?o(_T)?(R.info("Cleared CLAUDE_MEM_TEAMBRAIN_URL and CLAUDE_MEM_TEAMBRAIN_TEAM_ID on this install. Cloud sync settings were not changed. To use another team you are in, join it again with its invite link."),0):1:(R.info("Nothing on this install changed: it stays connected to its own team. Cloud sync settings were not changed."),0);let s=n.value;if(s.length>0){if(i){if(!o({CLAUDE_MEM_TEAMBRAIN_TEAM_ID:s[0].id}))return 1;R.info(`This install now uses ${s[0].name}.`)}return R.info(`Still in: ${s.map(l=>l.name).join(", ")}. Cloud sync settings were not changed.`),0}let a=r.CLAUDE_MEM_PRO_PLAN.trim()==="teambrain_seat";return o(a?{..._T,...Cbe}:_T)?(R.info("This account is in no team now, so TeamBrain is off on this install (CLAUDE_MEM_TEAMBRAIN_URL and CLAUDE_MEM_TEAMBRAIN_TEAM_ID cleared)."),a?(R.info("Cloud sync is off for this install too: a TeamBrain seat was its only sync access (CLAUDE_MEM_CLOUD_SYNC_* cleared). Your memory stays on this machine."),await dG(!1),0):(R.info("Cloud sync settings were not changed."),0)):1}async function Jbe(t){let e=TT(()=>kT({args:t,options:{},allowPositionals:!0,strict:!0}));if(!e)return 1;let r=mg();if(r)return R.error(wT(r,"leave")),1;let i=gg(),n=fG(i);if(!n)return 1;let o=await Kd(n,Nc);o.ok||R.warn(`Could not read your teams before leaving: ${o.reason}`);let s=o.ok?o.value:null,a=e.positionals[0]?.trim()??"",l=a||n.teamId||(s?.length===1?s[0].id:"");if(!l)return R.error(o.ok?"Name the team to leave: npx claude-mem teambrain leave <team-id> (see npx claude-mem teambrain status)":"Name the team to leave: npx claude-mem teambrain leave <team-id>"),1;let c=s?.find(d=>d.id===l),u=c?.name??`team ${Dt(l)}`;if(s&&!c){if(a)return R.error(`This account is not in team ${Dt(l)}.${s.length>0?` Its teams:
597
597
  ${s.map(d=>hg(d,!1)).join(`
598
- `)}`:""}`),1;R.info(`This account is no longer in ${u}; removing it from this install.`)}else{if(fg){let p=await yi({message:`Leave ${u}? TeamBrain removes what you shared with it.`,initialValue:!1});if(Tt(p)||!p)return R.info("Still in the team. Nothing changed."),0}let d=await J$(n,l,Nc);if(!d.ok)return R.error(`Could not leave ${u}: ${d.reason}`),1;R.success(`Left ${u}.`)}return Fbe(n,l,i)}function zbe(){let t=z$($i()),e=!process.stdout.isTTY||!!process.env.CI||!!(process.env.SSH_CONNECTION||process.env.SSH_TTY)||process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY;return console.log(`Create your team's TeamBrain: ${_n("cyan",t)}`),e?console.log("Open that link in a browser to continue."):Dc(t),0}async function qbe(t=[]){let e=t[0]?.toLowerCase()??"status";if(t.slice(1).some(r=>r==="--help"||r==="-h"))return console.log(pg),0;switch(e){case"join":return Lbe(t.slice(1));case"start":return zbe();case"status":return $be();case"share":return Ube(t.slice(1));case"leave":return Jbe(t.slice(1));case"help":case"--help":case"-h":return console.log(pg),0;default:return console.error(_n("red",`Unknown teambrain command: ${Dt(e)}`)),console.error(pg),1}}var Ibe,fg,Nc,yg,QB,xbe,Tbe,ST,eG,Cbe,_T,pg,hG=v(()=>{"use strict";xd();kt();Nd();ma();Re();Pd();gr();ci();XB();yI();mi();he();yd();Tp();Ibe="13.40.0",fg=process.stdin.isTTY===!0,Nc=15e3,yg=5e3,QB=3e4,xbe=1e3,Tbe=40,ST="__teambrain_all_projects__",eG=/^[A-Za-z0-9_-]{16,128}$/,Cbe={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:"",CLAUDE_MEM_PRO_PLAN:""},_T={CLAUDE_MEM_TEAMBRAIN_URL:"",CLAUDE_MEM_TEAMBRAIN_TEAM_ID:""},pg=[`Usage: ${_n("bold","npx claude-mem teambrain <command>")}`," join <invite-link> Join a team: sign in, approve this device on the page, then choose which projects to share"," (without a terminal: --share <a,b> or --share-all)"," start Create a team on cmem.ai (opens the browser)"," status Show your teams and what this install shares (the default)"," share Choose again which projects you share (--share <a,b>, --share-all, --team <id>)"," leave [team-id] Leave a team; TeamBrain removes what you shared with it"].join(`
598
+ `)}`:""}`),1;R.info(`This account is no longer in ${u}; removing it from this install.`)}else{if(fg){let p=await yi({message:`Leave ${u}? TeamBrain removes what you shared with it.`,initialValue:!1});if(Tt(p)||!p)return R.info("Still in the team. Nothing changed."),0}let d=await J$(n,l,Nc);if(!d.ok)return R.error(`Could not leave ${u}: ${d.reason}`),1;R.success(`Left ${u}.`)}return Fbe(n,l,i)}function zbe(){let t=z$($i()),e=!process.stdout.isTTY||!!process.env.CI||!!(process.env.SSH_CONNECTION||process.env.SSH_TTY)||process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY;return console.log(`Create your team's TeamBrain: ${_n("cyan",t)}`),e?console.log("Open that link in a browser to continue."):Dc(t),0}async function qbe(t=[]){let e=t[0]?.toLowerCase()??"status";if(t.slice(1).some(r=>r==="--help"||r==="-h"))return console.log(pg),0;switch(e){case"join":return Lbe(t.slice(1));case"start":return zbe();case"status":return $be();case"share":return Ube(t.slice(1));case"leave":return Jbe(t.slice(1));case"help":case"--help":case"-h":return console.log(pg),0;default:return console.error(_n("red",`Unknown teambrain command: ${Dt(e)}`)),console.error(pg),1}}var Ibe,fg,Nc,yg,QB,xbe,Tbe,ST,eG,Cbe,_T,pg,hG=v(()=>{"use strict";xd();kt();Nd();ma();Re();Pd();gr();ci();XB();yI();mi();he();yd();Tp();Ibe="13.41.0",fg=process.stdin.isTTY===!0,Nc=15e3,yg=5e3,QB=3e4,xbe=1e3,Tbe=40,ST="__teambrain_all_projects__",eG=/^[A-Za-z0-9_-]{16,128}$/,Cbe={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:"",CLAUDE_MEM_PRO_PLAN:""},_T={CLAUDE_MEM_TEAMBRAIN_URL:"",CLAUDE_MEM_TEAMBRAIN_TEAM_ID:""},pg=[`Usage: ${_n("bold","npx claude-mem teambrain <command>")}`," join <invite-link> Join a team: sign in, approve this device on the page, then choose which projects to share"," (without a terminal: --share <a,b> or --share-all)"," start Create a team on cmem.ai (opens the browser)"," status Show your teams and what this install shares (the default)"," share Choose again which projects you share (--share <a,b>, --share-all, --team <id>)"," leave [team-id] Leave a team; TeamBrain removes what you shared with it"].join(`
599
599
  `)});function Bbe(t){return t.trim().toLowerCase().replace(/\s+/g,"-")}function Gbe(t){if(!t)return yG;let e=Bbe(t);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e.includes("kimi")?"kimi":e==="pi-mono"?"pi":e==="agy"||e==="antigravity"||e.startsWith("antigravity-")?"antigravity-cli":e:yG}function Zi(t){return typeof t!="string"?null:Gbe(t)}var yG,bg=v(()=>{"use strict";yG="claude"});import{existsSync as Wbe,readFileSync as Vbe}from"fs";function CT(t){return new RegExp(`${t}${Hbe}`,"gi")}function gG(t){return`(?<=${t}${Eg}${Np}[=:]${Np}${Eg})`}function AT(t,e){if(!e.enabled||t.length===0)return{redacted:t,counts:{},oversize:!1};if(t.length>Xbe)return g.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:t.length}),{redacted:Qbe,counts:{oversize:1},oversize:!0};let r=new Set(e.disabledBuiltinPatterns??[]),i={},n=t,o=[];for(let a of e.customPatterns??[]){if(!a.name||a.name.length===0){g.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:a});continue}try{o.push({name:a.name,regex:new RegExp(a.regex,"g")})}catch(l){g.warn("REDACT","custom pattern skipped: invalid regex",{name:a.name},l instanceof Error?l:new Error(String(l)))}}let s=[...o,...Ybe,...e.genericEnabled?Zbe:[]];for(let a of s)r.has(a.name)||(a.regex.lastIndex=0,n=n.replace(a.regex,()=>(i[a.name]=(i[a.name]??0)+1,`<redacted type='${a.name}'/>`)));return e.logMatches&&Object.keys(i).length>0&&g.debug("REDACT","patterns matched",void 0,{counts:i}),{redacted:n,counts:i,oversize:!1}}function eve(t){if(!t||t.trim()==="")return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.filter(r=>r&&typeof r.name=="string"&&typeof r.regex=="string"):(g.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return g.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function tve(t){return{enabled:t.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(t.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:eve(t.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:t.CLAUDE_MEM_REDACT_LOG_MATCHES==="true",genericEnabled:t.CLAUDE_MEM_REDACT_GENERIC_ENABLED==="true"}}function ove(t){if(!Wbe(t))return null;try{return Vbe(t,"utf-8")}catch{return""}}function sve(t){if(t===null)return!1;try{let e=JSON.parse(ow(t));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function ave(t,e,r){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(Pp?.enabled===!0||ive.test(e))?r:(vG||(vG=!0,g.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:t,using:Pp?.enabled?"the last configuration that loaded":"the built-in patterns"})),Pp?.enabled?Pp:nve)}function OT(t=_e){let e=Date.now();if(Mp&&e-bG<rve)return Mp;let r=Te.loadFromFile(t),i=tve(r),n=i.enabled?null:ove(t);return sve(n)?Mp=ave(t,n,i):(Mp=i,Pp=i),bG=e,Mp}function uve(t,e,r){if(!r.genericEnabled)return null;let i=lve.exec(t);if(!i)return null;let n=i[1].toLowerCase().startsWith("passw")?"generic_password":"generic_token";return r.disabledBuiltinPatterns?.includes(n)||!cve.test(e)||!/[A-Za-z]/.test(e)?null:`<redacted type='${n}'/>`}function EG(t,e=OT()){if(!e.enabled)return t;let r=(i,n)=>{if(typeof i=="string"){let o=AT(i,e);return n===void 0||Object.keys(o.counts).length>0?o.redacted:uve(n,i,e)??o.redacted}return Array.isArray(i)?i.map(o=>r(o)):i!==null&&typeof i=="object"?Object.fromEntries(Object.entries(i).map(([o,s])=>[o,r(s,o)])):i};return r(t)}var vg,Hbe,Eg,Np,Ybe,Zbe,Xbe,Qbe,Mp,bG,rve,Pp,vG,nve,ive,lve,cve,RT=v(()=>{"use strict";he();gr();Re();kt();vg=String.raw`[A-Za-z0-9_.\-+/=~@#$%^*!?]`,Hbe=`(?=${vg}{8})${vg}*[A-Za-z]${vg}*`,Eg=String.raw`(?:\\{0,3}["'])?`,Np=String.raw`\s{0,8}`;Ybe=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s{0,8}[=:]\s{0,8}['"]?)[A-Za-z0-9/+=]{40}/g},{name:"github_pat",regex:/\bgh[oprs]_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"openai_key",regex:/\bsk-(?!ant-)[A-Za-z0-9_-]{20,}\b/g},{name:"anthropic_key",regex:/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g},{name:"slack_token",regex:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"jwt",regex:/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g},{name:"private_key_pem",regex:/-----BEGIN (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g},{name:"stripe_key",regex:/\b(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"google_api_key",regex:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"claude_mem_key",regex:/\bcmem_[A-Za-z0-9_-]{32,}|\bcm_pro_[A-Za-z0-9_-]{8,}/g}],Zbe=[{name:"generic_password",regex:CT(gG(String.raw`\b(?:\w*_?(?:password|passwd)|\w+_pwd)`))},{name:"generic_token",regex:CT(gG(String.raw`\b\w*_(?:token|secret|api_key)`))},{name:"bearer_token",regex:CT(`(?<=\\bAuthorization${Eg}${Np}:${Np}${Eg}Bearer${Np})`)}],Xbe=1024*1024,Qbe="<redacted type='oversize'/>";Mp=null,bG=0,rve=5e3,Pp=null,vG=!1,nve={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},ive=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;lve=/(?:^|_)(password|passwd|secret|token|api_key)$/i,cve=new RegExp(`^${vg}{8,}$`)});function pve(t){let e=Object.fromEntries(DT.map(u=>[u,0]));if(!t.includes("<"))return{text:t,counts:e,total:0};let r=t.length,i=new Int32Array(r+1);i[r]=r;for(let u=r-1;u>=0;u--)i[u]=t.charCodeAt(u)===62?u:i[u+1];let n=new Map,o=[],s=0,a=0;for(;a<r;){if(t.charCodeAt(a)!==60){a+=1;continue}_G.lastIndex=a;let u=_G.exec(t);if(u){let p=u[1],f=n.get(p),m=f&&f.head<f.items.length?f.items[f.head]:void 0;m&&a>=m.attrEnd&&(f.head+=1,o.push([m.start,a+u[0].length]),e[p]+=1,s+=1),a+=u[0].length;continue}SG.lastIndex=a;let d=SG.exec(t);if(d&&dve.has(d[1])){let p=d[1],f=a+d[0].length,m={start:a,attrEnd:i[f]},h=n.get(p);h?h.items.push(m):n.set(p,{items:[m],head:0}),a=f;continue}a+=1}o.sort((u,d)=>u[0]-d[0]);let l="",c=0;for(let[u,d]of o)u>c&&(l+=t.slice(c,u)),d>c&&(c=d);return l+=t.slice(c),{text:l,counts:e,total:s}}function fve(t){let{text:e,counts:r,total:i}=pve(t);return i>wG&&g.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:i,maxAllowed:wG,contentLength:t.length}),{stripped:AT(e.trim(),OT()).redacted,counts:r}}function mve(t){return fve(t).stripped}function jp(t){let e=r=>typeof r=="string"?hve.test(r)?mve(r):r:Array.isArray(r)?r.map(e):r!==null&&typeof r=="object"?Object.fromEntries(Object.entries(r).map(([i,n])=>[i,e(n)])):r;return e(t)}var DT,dve,SG,_G,wG,hve,yve,n4e,i4e,MT=v(()=>{"use strict";he();RT();DT=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],dve=new Set(DT),SG=/<([A-Za-z_][A-Za-z0-9_-]*)/y,_G=/<\/([A-Za-z_][A-Za-z0-9_-]*)\s*>/y;wG=100;hve=new RegExp(`<(${DT.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`);yve=["task-notification"],n4e=new RegExp(`^\\s*<(${yve.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),i4e=256*1024});function kG(t){let e=Zi(t.platformSource),r=e?[e]:[];return t.sourceEventId?`agent_event:v1:${Si([t.teamId,t.projectId,t.sourceAdapter,...r,t.sourceEventId])}`:`agent_event:v1:${Si([t.teamId,t.projectId,t.sourceAdapter,...r,t.contentSessionId??t.serverSessionId??null,t.eventType,new Date(t.occurredAt).toISOString(),Sp(t.payload??{})])}`}function PT(t){return{id:t.id,projectId:t.project_id,teamId:t.team_id,serverSessionId:t.server_session_id,sourceAdapter:t.source_adapter,sourceEventId:t.source_event_id,idempotencyKey:t.idempotency_key,eventType:t.event_type,platformSource:t.platform_source,payload:t.payload,metadata:Rt(t.metadata),occurredAtEpoch:Qe(t.occurred_at),receivedAtEpoch:Qe(t.received_at),createdAtEpoch:Qe(t.created_at)}}var Kp,NT=v(()=>{"use strict";Ao();bg();RT();MT();Kp=class{constructor(e){this.client=e}client;async create(e){await Ei(this.client,e.projectId,e.teamId),e.serverSessionId&&await Co(this.client,e.serverSessionId,e.projectId,e.teamId);let r=kG(e),i=Zi(e.platformSource),n=await ve(this.client,`
600
600
  INSERT INTO agent_events (
601
601
  id, project_id, team_id, server_session_id, source_adapter,
@@ -71,9 +71,9 @@ ${n.stack}`:` ${n.message}`:this.getLevel()===0&&typeof n=="object"?l=`
71
71
  ${_.stack??""}
72
72
  `)}else Kt(f+`
73
73
  `)}debug(r,i,o,t){this.log(0,r,i,o,t)}info(r,i,o,t){this.log(1,r,i,o,t)}warn(r,i,o,t){this.log(2,r,i,o,t)}setErrorSink(r){Fl=r}error(r,i,o,t){this.log(3,r,i,o,t),this.routeErrorToSink(i,o,t)}routeErrorToSink(r,i,o){try{if(!Fl||!(o instanceof Error))return;Fl(o)}catch{}}dataIn(r,i,o,t){this.info(r,`\u2192 ${i}`,o,t)}dataOut(r,i,o,t){this.info(r,`\u2190 ${i}`,o,t)}success(r,i,o,t){this.info(r,`\u2713 ${i}`,o,t)}failure(r,i,o,t){this.error(r,`\u2717 ${i}`,o,t)}},mE=new Gl;function fg(e){try{return new URL(e).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}var hE="security_alert",yE="sync-hub.black-pond-afbb.workers.dev",EE="ziczmqtpmaxbornfghye.supabase.co",bE="https://sync.cmem.ai",SE=new Set(["xiaomi/mimo-v2-flash:free"]);function IE(e){return typeof e=="boolean"?String(e):e}function kE(e){let r=e.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof r!="string"||!SE.has(r.trim()))return!1;let i=typeof e.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?e.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return i===""||fg(i)}var gg=18e4,_g=[{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"}];function $g(e,r){return Jl(vE(e),`.${_E(e)}.${r.markerTag}`)}function Kl(e,r){try{gE($g(e,r),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var vg=new Set;function xE(e){if(typeof e!="string")return null;let r=e.trim();if(r.length===0)return null;try{let i=new URL(r).hostname;if(i===yE||i===EE)return bE}catch{return null}return null}var Xr=class{static DEFAULTS={CLAUDE_MEM_MEMORY_SEARCH_HOOK_ENABLED:"true",CLAUDE_MEM_MEMORY_INSTRUCTIONS_ENABLED:"true",CLAUDE_MEM_MEMORY_WATCH_ROOTS:"",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_WORKER_INGEST_TOKEN:"",CLAUDE_MEM_HOOK_SPOOL_TRANSPORT:"auto",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(tg(io.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(eg()),CLAUDE_MEM_IDLE_EXIT_SEC:"0",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_OBSERVATION_BATCH_SIZE:"1",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_TEMPERATURE:"",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",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_QUOTA_THRESHOLD_FIVE_HOUR:"0.95",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_OPUS:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_SONNET:"0.92",CLAUDE_MEM_QUOTA_THRESHOLD_OVERAGE:"0.95",CLAUDE_MEM_DATA_DIR:Jl(pg(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_OBSERVER_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_WORK_STATE_ENABLED:"true",CLAUDE_MEM_FILE_READ_GATE_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:Jl(pg(),".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_THINKING:"disabled",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_REDACT_GENERIC_ENABLED:"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_SEMANTIC_INJECT_FORMAT:"narrative",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_CHROMA_UVX_PATH:"",CLAUDE_MEM_SEARCH_RECENCY_DAYS:"90",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:$E(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_TEAMBRAIN_URL:"",CLAUDE_MEM_TEAMBRAIN_TEAM_ID:"",CLAUDE_MEM_LLM_TIMEOUT_MS:String(gg),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(gg),CLAUDE_MEM_LLM_STREAM_IDLE_TIMEOUT_MS:"90000",CLAUDE_MEM_WORKER_HEARTBEAT_STALE_MS:"120000",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_TOOL_USES_RETENTION_DAYS:"0",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(r){let i=process.env[r]??this.DEFAULTS[r];return r==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(i):i}static normalizeWorkerHost(r){return r==="localhost"?"127.0.0.1":r}static finalizeSettings(r,i){let o=i?this.applyEnvOverrides(r):r;return o.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(o.CLAUDE_MEM_WORKER_HOST),o}static getInt(r){let i=this.get(r);return parseInt(i,10)}static applyEnvOverrides(r){let i={...r};for(let o of Object.keys(this.DEFAULTS))process.env[o]!==void 0&&(i[o]=process.env[o]);return i}static loadFromFile(r,i=!0,o={}){try{if(!mg(r)){let f=this.getAllDefaults();if(!o.readOnly)try{Re(r,f,{mode:384});for(let m of _g)Kl(r,m);console.warn("[SETTINGS] Created settings file with defaults:",r)}catch(m){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",r,m instanceof Error?m.message:String(m))}return this.finalizeSettings(f,i)}let t=pE(r,"utf-8"),n=Zl(t),a=Jt(n),u=a!==n,c=sg(n),s=u&&Object.keys(c).some(f=>f!=="env");if(u&&!s&&!o.readOnly)try{Re(r,a,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",r)}catch(f){console.warn("[SETTINGS] Failed to auto-migrate settings file:",r,f instanceof Error?f.message:String(f))}if(a.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===hE&&(a={...a,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!o.readOnly))try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",r)}catch(f){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",r,f instanceof Error?f.message:String(f))}if(kE(a)){let f=String(a.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(a={...a,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!o.readOnly)try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${f} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,r)}catch(m){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",r,m instanceof Error?m.message:String(m))}}let l=xE(a.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null&&(a={...a,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l},!o.readOnly))try{Re(r,s?{...c,env:a}:a,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",l,"from a retired hub host:",r)}catch(f){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",r,f instanceof Error?f.message:String(f))}for(let f of _g)if(!mg($g(r,f))){if(a[f.key]!==f.legacy){o.readOnly||Kl(r,f);continue}if(a={...a,[f.key]:this.DEFAULTS[f.key]},!o.readOnly)try{Re(r,s?{...c,env:a}:a,{mode:384}),Kl(r,f),console.warn(`[SETTINGS] Migrated ${f.key} off the old ${f.legacy}ms default to ${this.DEFAULTS[f.key]}ms:`,r)}catch(m){let _=`${f.key}\0${r}`;vg.has(_)||(vg.add(_),console.warn(`[SETTINGS] Failed to migrate ${f.key}; using the new default in memory (reported once per process):`,r,m instanceof Error?m.message:String(m)))}}let d={...this.DEFAULTS};for(let f of Object.keys(this.DEFAULTS))a[f]!==void 0&&(d[f]=IE(a[f]));return this.finalizeSettings(d,i)}catch(t){console.warn("[SETTINGS] Failed to load settings, using defaults:",r,t instanceof Error?t.message:String(t));let n=this.getAllDefaults();return this.finalizeSettings(n,i)}}};function hg(e,r){let i;try{i=JSON.parse(e)}catch{return"Failed to parse search results."}let o=i.content;if(!Array.isArray(o)||o.length===0)return`No results found for "${r}".`;let t=o.filter(n=>n.type==="text"&&typeof n.text=="string").map(n=>n.text).join(`
74
- `).trim();return t||`No results found for "${r}".`}var yg="claude";function DE(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Eg(e){if(!e)return yg;let r=DE(e);return r?r==="transcript"||r.includes("codex")?"codex":r.includes("cursor")?"cursor":r.includes("claude")?"claude":r.includes("kimi")?"kimi":r==="pi-mono"?"pi":r==="agy"||r==="antigravity"||r.startsWith("antigravity-")?"antigravity-cli":r:yg}var AE=new Set(["ECONNREFUSED","ConnectionRefused"]);function Wl(e,r){if(!e||typeof e!="object"||r.has(e))return!1;if(r.add(e),e instanceof Error&&e.message.includes("ECONNREFUSED"))return!0;let i=e;return typeof i.code=="string"&&AE.has(i.code)||Wl(i.cause,r)?!0:Array.isArray(i.errors)&&i.errors.some(o=>Wl(o,r))}function Hl(e){return Wl(e,new Set)?!0:e instanceof Error&&e.message.includes("ECONNREFUSED")}function bg(e){return e.startsWith("[")&&e.endsWith("]")?e:e.includes(":")?`[${e}]`:e}var OE=[500,1e3,2e3,3e3,4e3];async function Sg(e,r=OE){for(let i of r)if(await new Promise(o=>setTimeout(o,i)),!await e())return}function UE(){let e=wE(Xr.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),r=Xr.loadFromFile(e);return`http://${bg(r.CLAUDE_MEM_WORKER_HOST)}:${r.CLAUDE_MEM_WORKER_PORT}`}var Ag=UE(),Ig=1e3,Wt="opencode",TE=new Map([["read","Read"],["write","Write"],["edit","Edit"]]),Og={"Content-Type":"application/json"},wg=5e3;function Xl(e){return e instanceof Error?e.message:String(e)}async function kg(e,r,i){try{let o=await e(`${Ag}${r}`,{method:"POST",headers:Og,body:i,signal:AbortSignal.timeout(wg)});return o.ok||console.warn(`[claude-mem] Worker POST ${r} returned ${o.status}`),!1}catch(o){return Hl(o)?!0:(console.warn(`[claude-mem] Worker POST ${r} failed: ${Xl(o)}`),!1)}}async function uo(e,r){let i=JSON.stringify({...r,platformSource:Eg(Wt)}),o=fetch;await kg(o,e,i)&&Sg(()=>kg(o,e,i))}async function xg(e){try{let r=await fetch(`${Ag}${e}`,{headers:Og,signal:AbortSignal.timeout(wg)});return r.ok?await r.text():(console.warn(`[claude-mem] Worker GET ${e} returned ${r.status}`),null)}catch(r){return Hl(r)||console.warn(`[claude-mem] Worker GET ${e} failed: ${Xl(r)}`),null}}var ot=new Map,Ug=1e3,je=new Map,CE=6e4;function ME(e){if(!ot.has(e)){for(;ot.size>=Ug;){let r=ot.keys().next().value;if(r!==void 0)ot.delete(r);else break}ot.set(e,`opencode-${e}-${Date.now()}`)}return ot.get(e)}function so(e){return ME(e)}async function NE(e,r,i){let o=so(e);await uo("/api/sessions/init",{contentSessionId:o,prompt:i,cwd:r,platform_source:Wt})}function Dg(e){return e.length>Ig?e.slice(0,Ig):e}async function zE(e,r,i){let o=e?.session;if(typeof o?.messages!="function")return"";try{let{data:t}=await o.messages({path:{id:r},query:{directory:i}}),n=null;for(let a of t??[]){let u=a.info?.time?.completed;if(a.info?.role!=="assistant"||a.info.summary===!0||typeof u!="number")continue;let c=(a.parts??[]).filter(s=>s.type==="text"&&s.ignored!==!0&&typeof s.text=="string").map(s=>s.text).join(`
75
- `).trim();c&&(!n||u>=n.completed)&&(n={completed:u,text:c})}return n?.text??""}catch(t){return console.warn(`[claude-mem] OpenCode message list failed for ${r}: ${Xl(t)}`),""}}function co(e){function r(o,t){let n=je.get(o);if(n&&(n.failedAt===void 0||Date.now()-n.failedAt<CE))return n.request;for(je.delete(o);je.size>=Ug;){let u=je.keys().next().value;if(u===void 0)break;je.delete(u)}let a={request:xg(`/api/context/inject?cwd=${encodeURIComponent(t)}&platformSource=${Wt}`)};return je.set(o,a),a.request.then(u=>{u||(a.failedAt=Date.now())}),a.request}async function i(o,t={}){let n=so(o);await uo("/api/sessions/summarize",{contentSessionId:n,last_assistant_message:t.lastAssistantMessage??await zE(e.client,o,e.directory),cwd:e.directory,platform_source:Wt})}return{async captureTool({tool:o,sessionID:t,args:n,output:a}){let u=so(t),c=n||{};if(o==="apply_patch"&&typeof c.patchText=="string"){let{patchText:s,...l}=c;c={...l,patch:s}}await uo("/api/sessions/observations",{contentSessionId:u,tool_name:TE.get(o)??o,tool_input:c,tool_response:Dg(a||""),cwd:e.directory,platform_source:Wt})},async captureUserPrompt(o,t){await NE(o,e.directory,t)},async captureAssistantMessage(o,t){let n=so(o);t&&await uo("/api/sessions/observations",{contentSessionId:n,tool_name:"assistant_message",tool_input:{},tool_response:Dg(t),cwd:e.directory,platform_source:Wt})},captureSummary:i,forgetMemoryContext(o){je.delete(o)},forgetSession(o){ot.delete(o),je.delete(o)},memoryContext(o){return r(o,e.directory)},async search(o){if(!o)return"Please provide a search query.";let t=await xg(`/api/search/observations?query=${encodeURIComponent(o)}&limit=10`);return t?hg(t,o):"claude-mem worker is not running. Start it with: npx claude-mem start"}}}function Tg(e){return(e||[]).filter(r=>r.type==="text"&&typeof r.text=="string").map(r=>r.text).join(`
76
- `)}function Cg(e){console.log(`[claude-mem] OpenCode plugin loading (directory: ${e.directory})`);let r=co(e);return{"tool.execute.after":async(i,o)=>{await r.captureTool({tool:i.tool,sessionID:i.sessionID,args:i.args,output:o.output||""})},"chat.message":async(i,o)=>{let t=o.message?.sessionID;if(t){if(o.message?.role==="user"){let n=Tg(o.parts).trim();n&&await r.captureUserPrompt(t,n);return}o.message?.role==="assistant"&&await r.captureAssistantMessage(t,Tg(o.parts))}},"experimental.session.compacting":async i=>{r.forgetMemoryContext(i.sessionID),await r.captureSummary(i.sessionID)},"experimental.chat.system.transform":async(i,o)=>{let t=await r.memoryContext(i.sessionID??"");t?.trim()&&o.system.push(t)},event:async({event:i})=>{let o=i?.type,t=i?.properties?.sessionID||i?.properties?.info?.id;if(t)switch(o){case"session.idle":{await r.captureSummary(t);break}case"session.deleted":{r.forgetSession(t);break}default:break}},tool:{claude_mem_search:{description:"Search claude-mem memory database for past observations, sessions, and context",args:{query:no.string().describe("Search query for memory observations")},execute:async i=>r.search(String(i.query||""))}}}}import Hx from"path";import{existsSync as Yx,readFileSync as qx,writeFileSync as Qx,mkdirSync as eD}from"fs";var Yl="<claude-mem-context>",Mg="</claude-mem-context>";var Ng="claude-mem",LE=1e4,PE=1e3;function ql(e){if(e instanceof Error)return e.message;let r=e?.message;return typeof r=="string"?r:String(e)}function RE(e){for(let r=e.length-1;r>=0;r--){let i=e[r];i?.type==="text"&&i.text?.startsWith(Yl)&&e.splice(r,1)}}function jE(e,r){return new Promise(i=>{let o=()=>{clearTimeout(t),r.removeEventListener("abort",o),i()},t=setTimeout(o,e);t.unref?.(),r.addEventListener("abort",o,{once:!0})})}async function ZE(e,r,i,o){for(;!i.aborted;){try{for await(let t of e({signal:i})){if(i.aborted)break;r(t)}}catch(t){i.aborted||console.warn(`[claude-mem] OpenCode event stream failed: ${ql(t)}`)}i.aborted||await jE(o,i)}}function VE(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let r=e;if(typeof r.content=="string"&&r.content.trim())return r.content;if(Array.isArray(r.content)){let i=r.content.filter(o=>o?.type==="text"&&typeof o.text=="string").map(o=>o.text).join(`
74
+ `).trim();return t||`No results found for "${r}".`}var yg="claude";function DE(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Eg(e){if(!e)return yg;let r=DE(e);return r?r==="transcript"||r.includes("codex")?"codex":r.includes("cursor")?"cursor":r.includes("claude")?"claude":r.includes("kimi")?"kimi":r==="pi-mono"?"pi":r==="agy"||r==="antigravity"||r.startsWith("antigravity-")?"antigravity-cli":r:yg}var AE=new Set(["ECONNREFUSED","ConnectionRefused"]);function Wl(e,r){if(!e||typeof e!="object"||r.has(e))return!1;if(r.add(e),e instanceof Error&&e.message.includes("ECONNREFUSED"))return!0;let i=e;return typeof i.code=="string"&&AE.has(i.code)||Wl(i.cause,r)?!0:Array.isArray(i.errors)&&i.errors.some(o=>Wl(o,r))}function Hl(e){return Wl(e,new Set)?!0:e instanceof Error&&e.message.includes("ECONNREFUSED")}function bg(e){return e.startsWith("[")&&e.endsWith("]")?e:e.includes(":")?`[${e}]`:e}var OE=[500,1e3,2e3,3e3,4e3];async function Sg(e,r=OE){for(let i of r)if(await new Promise(o=>setTimeout(o,i)),!await e())return}function UE(){let e=wE(Xr.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),r=Xr.loadFromFile(e);return`http://${bg(r.CLAUDE_MEM_WORKER_HOST)}:${r.CLAUDE_MEM_WORKER_PORT}`}var Ag=UE(),Ig=1e3,Wt="opencode",TE=new Map([["read","Read"],["write","Write"],["edit","Edit"]]),Og={"Content-Type":"application/json"},wg=5e3;function Xl(e){return e instanceof Error?e.message:String(e)}async function kg(e,r,i){try{let o=await e(`${Ag}${r}`,{method:"POST",headers:Og,body:i,signal:AbortSignal.timeout(wg)});return o.ok||console.warn(`[claude-mem] Worker POST ${r} returned ${o.status}`),!1}catch(o){return Hl(o)?!0:(console.warn(`[claude-mem] Worker POST ${r} failed: ${Xl(o)}`),!1)}}async function uo(e,r){let i=JSON.stringify({...r,platformSource:Eg(Wt)}),o=fetch;await kg(o,e,i)&&Sg(()=>kg(o,e,i))}async function xg(e){try{let r=await fetch(`${Ag}${e}`,{headers:Og,signal:AbortSignal.timeout(wg)});return r.ok?await r.text():(console.warn(`[claude-mem] Worker GET ${e} returned ${r.status}`),null)}catch(r){return Hl(r)||console.warn(`[claude-mem] Worker GET ${e} failed: ${Xl(r)}`),null}}var ot=new Map,Ug=1e3,je=new Map,CE=6e4;function ME(e){if(!ot.has(e)){for(;ot.size>=Ug;){let r=ot.keys().next().value;if(r!==void 0)ot.delete(r);else break}ot.set(e,`opencode-${e}-${Date.now()}`)}return ot.get(e)}function so(e){return ME(e)}async function NE(e,r,i){let o=Date.now(),t=so(e);await uo("/api/sessions/init",{contentSessionId:t,prompt:i,cwd:r,platform_source:Wt,telemetryPromptEpochMs:o})}function Dg(e){return e.length>Ig?e.slice(0,Ig):e}async function zE(e,r,i){let o=e?.session;if(typeof o?.messages!="function")return"";try{let{data:t}=await o.messages({path:{id:r},query:{directory:i}}),n=null;for(let a of t??[]){let u=a.info?.time?.completed;if(a.info?.role!=="assistant"||a.info.summary===!0||typeof u!="number")continue;let c=(a.parts??[]).filter(s=>s.type==="text"&&s.ignored!==!0&&typeof s.text=="string").map(s=>s.text).join(`
75
+ `).trim();c&&(!n||u>=n.completed)&&(n={completed:u,text:c})}return n?.text??""}catch(t){return console.warn(`[claude-mem] OpenCode message list failed for ${r}: ${Xl(t)}`),""}}function co(e){function r(o,t){let n=je.get(o);if(n&&(n.failedAt===void 0||Date.now()-n.failedAt<CE))return n.request;for(je.delete(o);je.size>=Ug;){let u=je.keys().next().value;if(u===void 0)break;je.delete(u)}let a={request:xg(`/api/context/inject?cwd=${encodeURIComponent(t)}&platformSource=${Wt}`)};return je.set(o,a),a.request.then(u=>{u||(a.failedAt=Date.now())}),a.request}async function i(o,t={}){let n=so(o);await uo("/api/sessions/summarize",{contentSessionId:n,last_assistant_message:t.lastAssistantMessage??await zE(e.client,o,e.directory),cwd:e.directory,platform_source:Wt})}return{async captureTool({tool:o,sessionID:t,toolUseId:n,args:a,output:u}){let c=Date.now(),s=so(t),l=a||{};if(o==="apply_patch"&&typeof l.patchText=="string"){let{patchText:d,...f}=l;l={...f,patch:d}}await uo("/api/sessions/observations",{contentSessionId:s,tool_name:TE.get(o)??o,tool_input:l,tool_response:Dg(u||""),cwd:e.directory,platform_source:Wt,telemetryToolEpochMs:c,...n?{tool_use_id:n}:{}})},async captureUserPrompt(o,t){await NE(o,e.directory,t)},async captureAssistantMessage(o,t){let n=so(o);t&&await uo("/api/sessions/observations",{contentSessionId:n,tool_name:"assistant_message",tool_input:{},tool_response:Dg(t),cwd:e.directory,platform_source:Wt})},captureSummary:i,forgetMemoryContext(o){je.delete(o)},forgetSession(o){ot.delete(o),je.delete(o)},memoryContext(o){return r(o,e.directory)},async search(o){if(!o)return"Please provide a search query.";let t=await xg(`/api/search/observations?query=${encodeURIComponent(o)}&limit=10`);return t?hg(t,o):"claude-mem worker is not running. Start it with: npx claude-mem start"}}}function Tg(e){return(e||[]).filter(r=>r.type==="text"&&typeof r.text=="string").map(r=>r.text).join(`
76
+ `)}function Cg(e){console.log(`[claude-mem] OpenCode plugin loading (directory: ${e.directory})`);let r=co(e);return{"tool.execute.after":async(i,o)=>{await r.captureTool({tool:i.tool,sessionID:i.sessionID,toolUseId:i.callID,args:i.args,output:o.output||""})},"chat.message":async(i,o)=>{let t=o.message?.sessionID;if(t){if(o.message?.role==="user"){let n=Tg(o.parts).trim();n&&await r.captureUserPrompt(t,n);return}o.message?.role==="assistant"&&await r.captureAssistantMessage(t,Tg(o.parts))}},"experimental.session.compacting":async i=>{r.forgetMemoryContext(i.sessionID),await r.captureSummary(i.sessionID)},"experimental.chat.system.transform":async(i,o)=>{let t=await r.memoryContext(i.sessionID??"");t?.trim()&&o.system.push(t)},event:async({event:i})=>{let o=i?.type,t=i?.properties?.sessionID||i?.properties?.info?.id;if(t)switch(o){case"session.idle":{await r.captureSummary(t);break}case"session.deleted":{r.forgetSession(t);break}default:break}},tool:{claude_mem_search:{description:"Search claude-mem memory database for past observations, sessions, and context",args:{query:no.string().describe("Search query for memory observations")},execute:async i=>r.search(String(i.query||""))}}}}import Hx from"path";import{existsSync as Yx,readFileSync as qx,writeFileSync as Qx,mkdirSync as eD}from"fs";var Yl="<claude-mem-context>",Mg="</claude-mem-context>";var Ng="claude-mem",LE=1e4,PE=1e3;function ql(e){if(e instanceof Error)return e.message;let r=e?.message;return typeof r=="string"?r:String(e)}function RE(e){for(let r=e.length-1;r>=0;r--){let i=e[r];i?.type==="text"&&i.text?.startsWith(Yl)&&e.splice(r,1)}}function jE(e,r){return new Promise(i=>{let o=()=>{clearTimeout(t),r.removeEventListener("abort",o),i()},t=setTimeout(o,e);t.unref?.(),r.addEventListener("abort",o,{once:!0})})}async function ZE(e,r,i,o){for(;!i.aborted;){try{for await(let t of e({signal:i})){if(i.aborted)break;r(t)}}catch(t){i.aborted||console.warn(`[claude-mem] OpenCode event stream failed: ${ql(t)}`)}i.aborted||await jE(o,i)}}function VE(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let r=e;if(typeof r.content=="string"&&r.content.trim())return r.content;if(Array.isArray(r.content)){let i=r.content.filter(o=>o?.type==="text"&&typeof o.text=="string").map(o=>o.text).join(`
77
77
  `);if(i.trim())return i}if(typeof r.output=="string")return r.output;if(r.output&&typeof r.output=="object"){let i=r.output.output;if(typeof i=="string")return i}return""}async function zg(e,r={}){let i={directory:e.location?.directory??"",client:e.client};console.log(`[claude-mem] OpenCode plugin loading (directory: ${i.directory})`);let o=co(i),t=[],n=new Map,a=v=>{if(!n.has(v)){if(n.size>=PE){let E=n.keys().next().value;E!==void 0&&n.delete(E)}n.set(v,"")}},u=async()=>{await Promise.allSettled(t.map(v=>v.dispose()))},c=async v=>{try{t.push(await v())}catch(E){throw await u(),E}},s=e.tool,l=e.session;if(s?.hook){let v=s.hook.bind(s);await c(()=>v("execute.after",async E=>{let k=E.sessionID,I=E.tool;if(!k||!I)return;a(k);let x=E.input??E.args,C=E.result,P=E.status==="error"?ql(E.error??""):VE(C);await o.captureTool({tool:I,sessionID:k,args:x,output:P})}))}if(l?.hook){let v=l.hook.bind(l);await c(()=>v("prompt",async E=>{let k=E?.prompt?.text?.trim();!E?.sessionID||!k||(a(E.sessionID),await o.captureUserPrompt(E.sessionID,k))})),await c(()=>v("context",async E=>{if(!E?.sessionID||!Array.isArray(E.system))return;let k=(await o.memoryContext(E.sessionID))?.trim();k&&(RE(E.system),E.system.push({type:"text",text:`${Yl}
78
78
  ${k}
79
79
  ${Mg}`}))})),await c(()=>v("compaction",E=>{E?.sessionID&&o.forgetMemoryContext(E.sessionID)}))}if(s?.transform){let v=s.transform.bind(s);await c(()=>v(E=>{E.add({name:"claude_mem_search",description:"Search claude-mem memory database for past observations, sessions, and context",input:{type:"object",properties:{query:{type:"string",description:"Search query for memory observations"}},required:["query"]},execute:async k=>({content:await o.search(String(k?.query||""))})})}))}let d=v=>{o.captureSummary(v,{lastAssistantMessage:n.get(v)??""}).catch(E=>console.warn(`[claude-mem] OpenCode summary failed: ${ql(E)}`))},f=v=>{let E=v?.data?.sessionID;if(!E)return;let k=v.location?.directory;if(!(k&&i.directory&&k!==i.directory))switch(v.type){case"session.deleted":n.delete(E),o.forgetSession(E);return;case"session.text.ended":n.has(E)&&typeof v.data?.text=="string"&&n.set(E,v.data.text);return;case"session.execution.succeeded":case"session.compaction.ended":n.has(E)&&d(E);return;default:return}},m=new AbortController,_=e.event;return _?.subscribe&&ZE(v=>_.subscribe(v),f,m.signal,r.resubscribeDelayMs??LE),async()=>{m.abort(),await u()}}async function FE(e){return Cg(e)}async function BE(e){return zg(e)}var sD={id:Ng,server:FE,setup:BE};export{sD as default};