claude-mem 13.34.2 → 13.35.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +3 -1
- package/dist/bug-report/index.js +66 -66
- package/dist/npx-cli/index.js +278 -278
- package/dist/opencode-plugin/index.js +45 -43
- package/dsh/package.json +1 -1
- package/openclaw/openclaw.plugin.json +1 -1
- package/package.json +1 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/hooks/codex-hooks.json +1 -1
- package/plugin/hooks/hooks.json +1 -1
- package/plugin/package.json +1 -1
- package/plugin/scripts/context-generator.cjs +14 -14
- package/plugin/scripts/context-generator.cjs.map +1 -1
- package/plugin/scripts/mcp-server.cjs +102 -58
- package/plugin/scripts/mcp-server.cjs.map +3 -3
- package/plugin/scripts/server-service.cjs +6 -6
- package/plugin/scripts/server-service.cjs.map +1 -1
- package/plugin/scripts/transcript-watcher.cjs +22 -22
- package/plugin/scripts/transcript-watcher.cjs.map +3 -3
- package/plugin/scripts/worker-service.cjs +515 -480
- package/plugin/scripts/worker-service.cjs.map +3 -3
- package/plugin/skills/mem-search/SKILL.md +81 -128
- package/plugin/sqlite/SessionStore.js +42 -42
- package/plugin/sqlite/SessionStore.js.map +3 -3
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env bun
|
|
2
2
|
var __CM_FILENAME__ = typeof __filename !== "undefined" ? __filename : require("node:path").resolve(process.argv[1] || "");
|
|
3
3
|
var __CM_DIRNAME__ = typeof __dirname !== "undefined" ? __dirname : require("node:path").dirname(__CM_FILENAME__);
|
|
4
|
-
"use strict";var
|
|
5
|
-
`);let p=(0,O.readlinkSync)(r);n=(0,Ae.resolve)((0,Ae.dirname)(r),p)}}catch(u){let d=u.code;if(d!=="ENOENT"&&d!=="ENOTDIR")throw u}
|
|
6
|
-
`,"utf-8"),c=t.mode;if(c===void 0)try{c=(0,O.statSync)(n).mode&511}catch{}let l;try{l=c!==void 0?(0,O.openSync)(o,"w",c):(0,O.openSync)(o,"w");let u=0;for(;u<a.length;){let d=(0,O.writeSync)(l,a,u,a.length-u);if(d===0)throw new Error(`writeSync stalled at ${u}/${a.length} bytes`);u+=d}if((0,O.fsyncSync)(l),(0,O.closeSync)(l),l=void 0,(0,O.renameSync)(o,n),!
|
|
7
|
-
`)}finally{if(d!==void 0)try{(0,O.closeSync)(d)}catch{}}}}catch(u){if(l!==void 0)try{(0,O.closeSync)(l)}catch{}try{(0,O.unlinkSync)(o)}catch{}throw u}}var O,Ea,Ae,
|
|
4
|
+
"use strict";var sp=Object.create;var qs=Object.defineProperty;var ip=Object.getOwnPropertyDescriptor;var op=Object.getOwnPropertyNames;var ap=Object.getPrototypeOf,cp=Object.prototype.hasOwnProperty;var wt=(r,e,t)=>()=>{if(t)throw t[0];try{return r&&(e=r(r=0)),e}catch(n){throw t=[n],n}};var lp=(r,e)=>{for(var t in e)qs(r,t,{get:e[t],enumerable:!0})},up=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of op(e))!cp.call(r,s)&&s!==t&&qs(r,s,{get:()=>e[s],enumerable:!(n=ip(e,s))||n.enumerable});return r};var Ee=(r,e,t)=>(t=r!=null?sp(ap(r)):{},up(e||!r||!r.__esModule?qs(t,"default",{value:r,enumerable:!0}):t,r));function fp(r){return(dp??process.stderr.write.bind(process.stderr))(r)}function Le(r){fp(r)}var dp,ub,zr=wt(()=>{"use strict";dp=null;ub=Promise.resolve()});function Js(r){return r.replace(/^\uFEFF/,"")}function zt(r){return JSON.parse(Js(r))}function Fe(r){return zt((0,O.readFileSync)(r,"utf-8"))}function gp(r){(0,O.existsSync)(r)||(0,O.mkdirSync)(r,{recursive:!0})}function j(r,e,t={}){let n=r;try{if((0,O.lstatSync)(r).isSymbolicLink())try{n=(0,O.realpathSync)(r)}catch(u){let d=u instanceof Error?u:new Error(String(u));Le(`claude-mem: realpathSync failed for ${r}, resolving symlink manually: ${d.message}
|
|
5
|
+
`);let p=(0,O.readlinkSync)(r);n=(0,Ae.resolve)((0,Ae.dirname)(r),p)}}catch(u){let d=u.code;if(d!=="ENOENT"&&d!=="ENOTDIR")throw u}gp((0,Ae.dirname)(n));let s=(0,Ae.dirname)(n),i=(0,Ae.basename)(n),o=(0,Ae.join)(s,`.${i}.${process.pid}.${(0,Ea.randomBytes)(6).toString("hex")}.tmp`),a=Buffer.from(JSON.stringify(e,null,2)+`
|
|
6
|
+
`,"utf-8"),c=t.mode;if(c===void 0)try{c=(0,O.statSync)(n).mode&511}catch{}let l;try{l=c!==void 0?(0,O.openSync)(o,"w",c):(0,O.openSync)(o,"w");let u=0;for(;u<a.length;){let d=(0,O.writeSync)(l,a,u,a.length-u);if(d===0)throw new Error(`writeSync stalled at ${u}/${a.length} bytes`);u+=d}if((0,O.fsyncSync)(l),(0,O.closeSync)(l),l=void 0,(0,O.renameSync)(o,n),!pp){let d;try{d=(0,O.openSync)(s,"r"),(0,O.fsyncSync)(d)}catch(p){let g=p instanceof Error?p:new Error(String(p));Le(`claude-mem: directory fsync failed for ${s}: ${g.message}
|
|
7
|
+
`)}finally{if(d!==void 0)try{(0,O.closeSync)(d)}catch{}}}}catch(u){if(l!==void 0)try{(0,O.closeSync)(l)}catch{}try{(0,O.unlinkSync)(o)}catch{}throw u}}var O,Ea,Ae,pp,ce=wt(()=>{"use strict";O=require("fs"),Ea=require("crypto"),Ae=require("path");zr();pp=process.platform==="win32"});function Sa(r){let e=r.env;return mp(e)&&Object.keys(e).some(t=>t.startsWith("CLAUDE_MEM_"))?"nested":"flat"}function Tt(r){return Sa(r)==="nested"?r.env:r}function ya(r){return Sa(r)!=="nested"?r:Object.fromEntries(Object.entries(r).filter(([e])=>!e.startsWith("CLAUDE_MEM_")))}var mp,Vr=wt(()=>{"use strict";ce();mp=r=>r!==null&&typeof r=="object"&&!Array.isArray(r)});function ve(r,e=process.platform,t=(0,ba.homedir)()){return typeof r!="string"||r.length===0?r:r==="~"?t:r.startsWith("~/")||e==="win32"&&r.startsWith("~\\")?(0,wa.join)(t,r.slice(2)):r}var ba,wa,Vt=wt(()=>{"use strict";ba=require("os"),wa=require("path")});function hp(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,x.dirname)((0,Ta.fileURLToPath)(yp.url))}function se(){if(process.env.CLAUDE_MEM_DATA_DIR)return ve(process.env.CLAUDE_MEM_DATA_DIR);let r=(0,x.join)((0,Yr.homedir)(),".claude-mem"),e=(0,x.join)(r,"settings.json");try{if((0,Xs.existsSync)(e)){let t=Fe(e);if(t===null||typeof t!="object"||Array.isArray(t))return r;let n=Tt(t);if(typeof n.CLAUDE_MEM_DATA_DIR=="string"&&n.CLAUDE_MEM_DATA_DIR)return ve(n.CLAUDE_MEM_DATA_DIR)}}catch{}return r}function va(r,e=(0,Yr.homedir)(),t=process.platform){return ve(r,t,e)}var x,Yr,Xs,Ta,yp,wb,F,_p,rt,At,Ep,ie,Aa,Tb,qr,Sp,$,U=wt(()=>{"use strict";x=require("path"),Yr=require("os"),Xs=require("fs"),Ta=require("url");ce();Vr();Vt();Vt();yp={};wb=hp();F=se(),_p=(0,x.join)((0,Yr.homedir)(),".claude"),rt=process.env.CLAUDE_CONFIG_DIR||_p,At=(0,x.join)(rt,"plugins","marketplaces","thedotmack"),Ep=(0,x.join)(F,"logs"),ie=(0,x.join)(F,"settings.json"),Aa="claude-mem.db",Tb=(0,x.join)(F,Aa),qr=(0,x.join)(F,"observer-sessions"),Sp=(0,x.basename)(qr);$={dataDir:()=>F,workerPid:()=>(0,x.join)(F,"worker.pid"),serverPid:()=>(0,x.join)(F,".server-beta.pid"),serverPort:()=>(0,x.join)(F,".server-beta.port"),serverRuntime:()=>(0,x.join)(F,".server-beta.runtime.json"),settings:()=>(0,x.join)(F,"settings.json"),database:()=>(0,x.join)(F,Aa),chroma:()=>(0,x.join)(F,"chroma"),combinedCerts:()=>(0,x.join)(F,"combined_certs.pem"),transcriptsConfig:()=>(0,x.join)(F,"transcript-watch.json"),transcriptsState:()=>(0,x.join)(F,"transcript-watch-state.json"),corpora:()=>(0,x.join)(F,"corpora"),supervisorRegistry:()=>(0,x.join)(F,"supervisor.json"),envFile:()=>(0,x.join)(F,".env"),logsDir:()=>Ep}});var nt,Ia,Zs,Qs,ei,f,C=wt(()=>{"use strict";nt=require("fs"),Ia=require("path");U();zr();ce();Vr();Zs=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(Zs||{}),Qs=null,ei=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;logFileDate=null;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){let e=new Date().toISOString().split("T")[0];if(!(this.logFileInitialized&&this.logFileDate===e)){this.logFileInitialized=!0,this.logFileDate=e;try{let t=$.logsDir();(0,nt.existsSync)(t)||(0,nt.mkdirSync)(t,{recursive:!0}),this.logFilePath=(0,Ia.join)(t,`claude-mem-${e}.log`)}catch(t){console.error("[LOGGER] Failed to initialize log file:",t instanceof Error?t.message:String(t)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=$.settings();if((0,nt.existsSync)(e)){let n=(Tt(Fe(e)).CLAUDE_MEM_LOG_LEVEL||"INFO").toString().toUpperCase();this.level=Zs[n]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}safeStringify(e,t,n=6){let s=new WeakSet,i=(o,a)=>{if(typeof o=="bigint")return`${o}n`;if(o===null||typeof o!="object")return o;let c=o.toJSON,l=typeof c=="function"?c.call(o):o;if(typeof l=="bigint")return`${l}n`;if(l===null||typeof l!="object")return l;if(s.has(l))return"[Circular]";if(a>=n)return Array.isArray(l)?"[Array]":"[Object]";s.add(l);try{if(Array.isArray(l))return l.map(d=>i(d,a+1));let u={};for(let d of Object.keys(l))try{u[d]=i(l[d],a+1)}catch{u[d]="[unreadable]"}return u}finally{s.delete(l)}};try{return JSON.stringify(i(e,0),null,t)??String(e)}catch{return Array.isArray(e)?`[${e.length} items]`:"[unserializable]"}}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
|
|
8
8
|
${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?this.safeStringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{n=t}if(e==="Bash"&&n.command)return`${e}(${n.command})`;if(n.file_path)return`${e}(${n.file_path})`;if(n.notebook_path)return`${e}(${n.notebook_path})`;if(e==="Glob"&&n.pattern)return`${e}(${n.pattern})`;if(e==="Grep"&&n.pattern)return`${e}(${n.pattern})`;if(n.url)return`${e}(${n.url})`;if(n.query)return`${e}(${n.query})`;if(e==="Task"){if(n.subagent_type)return`${e}(${n.subagent_type})`;if(n.description)return`${e}(${n.description})`}return e==="Skill"&&n.skill?`${e}(${n.skill})`:e==="LSP"&&n.operation?`${e}(${n.operation})`:e}formatTimestamp(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${t}-${n}-${s} ${i}:${o}:${a}.${c}`}log(e,t,n,s,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let o=this.formatTimestamp(new Date),a=Zs[e].padEnd(5),c=t.padEnd(6),l="";s?.correlationId?l=`[${s.correlationId}] `:s?.sessionId&&(l=`[session-${s.sessionId}] `);let u="";i!=null&&(i instanceof Error?u=this.getLevel()===0?`
|
|
9
9
|
${i.message}
|
|
10
10
|
${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?u=`
|
|
@@ -12,29 +12,29 @@ ${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?u=`
|
|
|
12
12
|
`,"utf8")}catch(g){let m=g instanceof Error?g:new Error(String(g));Le(`[LOGGER] Failed to write to log file: ${m.message}
|
|
13
13
|
${m.stack??""}
|
|
14
14
|
`)}else Le(p+`
|
|
15
|
-
`)}debug(e,t,n,s){this.log(0,e,t,n,s)}info(e,t,n,s){this.log(1,e,t,n,s)}warn(e,t,n,s){this.log(2,e,t,n,s)}setErrorSink(e){Qs=e}error(e,t,n,s){this.log(3,e,t,n,s),this.routeErrorToSink(t,n,s)}routeErrorToSink(e,t,n){try{if(!Qs||!(n instanceof Error))return;Qs(n)}catch{}}dataIn(e,t,n,s){this.info(e,`\u2192 ${t}`,n,s)}dataOut(e,t,n,s){this.info(e,`\u2190 ${t}`,n,s)}success(e,t,n,s){this.info(e,`\u2713 ${t}`,n,s)}failure(e,t,n,s){this.error(e,`\u2717 ${t}`,n,s)}},f=new ei});var Zf=require("fs");U();var st=require("fs"),Ke=require("path"),qt=require("os");var Y={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},Ep=300,Ra={min:60,max:86400};function Ma(r=process.env){let e=Number.parseInt(r.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=Ra.min&&e<=Ra.max?e:Ep}var He={SUCCESS:0};function Sp(r=process.platform){return r==="win32"?8e3:5e3}function Yt(r=process.platform){return Y.SESSION_INIT_HOOK_CAP-Sp(r)}function Ca(r=process.platform){return r==="win32"?Yt(r):Y.SESSION_INIT_REQUEST_MAX}function Re(r){return process.platform==="win32"?Math.round(r*Y.WINDOWS_MULTIPLIER):r}ce();C();function Ia(r){try{return new URL(r).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}Vr();var yp="security_alert",bp="sync-hub.black-pond-afbb.workers.dev",wp="ziczmqtpmaxbornfghye.supabase.co",Tp="https://sync.cmem.ai",Ap=new Set(["xiaomi/mimo-v2-flash:free"]);function vp(r){let e=r.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Ap.has(e.trim()))return!1;let t=typeof r.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?r.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return t===""||Ia(t)}var Oa=18e4,ka=[{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 xa(r,e){return(0,Ke.join)((0,Ke.dirname)(r),`.${(0,Ke.basename)(r)}.${e.markerTag}`)}function ti(r,e){try{(0,st.writeFileSync)(xa(r,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var Da=new Set;function Rp(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0)return null;try{let t=new URL(e).hostname;if(t===bp||t===wp)return Tp}catch{return null}return null}var B=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES:"false",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(Re(Y.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Yt()),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_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_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:(0,Ke.join)((0,qt.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_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:(0,Ke.join)((0,qt.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,qt.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:String(Oa),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(Oa),CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let t=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(t):t}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,t){let n=t?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let t=this.get(e);return parseInt(t,10)}static applyEnvOverrides(e){let t={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(t[n]=process.env[n]);return t}static loadFromFile(e,t=!0){try{if(!(0,st.existsSync)(e)){let d=this.getAllDefaults();try{H(e,d,{mode:384});for(let p of ka)ti(e,p);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(p){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,p instanceof Error?p.message:String(p))}return this.finalizeSettings(d,t)}let n=(0,st.readFileSync)(e,"utf-8"),s=zt(n),i=Tt(s),o=i!==s,a=ya(s),c=o&&Object.keys(a).some(d=>d!=="env");if(o&&!c)try{H(e,i,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,d instanceof Error?d.message:String(d))}if(i.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===yp){i={...i,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{H(e,c?{...a,env:i}:i,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,d instanceof Error?d.message:String(d))}}if(vp(i)){let d=String(i.CLAUDE_MEM_OPENROUTER_MODEL).trim();i={...i,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL};try{H(e,c?{...a,env:i}:i,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${d} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(p){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,p instanceof Error?p.message:String(p))}}let l=Rp(i.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null){i={...i,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l};try{H(e,c?{...a,env:i}:i,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",l,"from a retired hub host:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,d instanceof Error?d.message:String(d))}}for(let d of ka)if(!(0,st.existsSync)(xa(e,d))){if(i[d.key]!==d.legacy){ti(e,d);continue}i={...i,[d.key]:this.DEFAULTS[d.key]};try{H(e,c?{...a,env:i}:i,{mode:384}),ti(e,d),console.warn(`[SETTINGS] Migrated ${d.key} off the old ${d.legacy}ms default to ${this.DEFAULTS[d.key]}ms:`,e)}catch(p){let g=`${d.key}\0${e}`;Da.has(g)||(Da.add(g),console.warn(`[SETTINGS] Failed to migrate ${d.key}; using the new default in memory (reported once per process):`,e,p instanceof Error?p.message:String(p)))}}let u={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))i[d]!==void 0&&(u[d]=i[d]);return this.finalizeSettings(u,t)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let s=this.getAllDefaults();return this.finalizeSettings(s,t)}}};var it=require("fs"),Fa=require("os"),Xr=require("path");ce();U();var vt=$.transcriptsConfig(),Qr=$.transcriptsState(),Mp={version:1,schemas:{},watches:[],stateFile:Qr};function Na(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name;if(!(r.name==="codex"||e==="codex")||!r.path)return!1;let n=X(r.path).replace(/\\/g,"/"),s=(0,Xr.join)((0,Fa.homedir)(),".codex","sessions").replace(/\\/g,"/");return n===`${s}/**/*.jsonl`}function Ua(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name,t=r.name==="codex"&&(!e||e==="codex");return r.context?.mode==="agents"&&t&&Na(r)}var Cp={path:"payload.source.subagent.thread_spawn"};function $a(r,e){if(e.CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION==="true")return{config:r,scoped:0,removed:0};let t=e.CLAUDE_MEM_CODEX_SUBAGENT_INGESTION==="true"&&e.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS!=="true",n=0,s=0,i=[];for(let o of r.watches)Na(o)?t?(n+=1,i.push({...o,subagentOnly:!0,subagentSource:{...Cp}})):s+=1:i.push(o);return{config:{...r,watches:i},scoped:n,removed:s}}function X(r){return r&&va(r)}var Se=r=>typeof r=="object"&&r!==null&&!Array.isArray(r),La={session_init:!0,session_context:!0,user_message:!0,assistant_message:!0,tool_use:!0,tool_result:!0,observation:!0,file_edit:!0,session_end:!0};function k(r,e,t){if(!r)throw new Error(`${e} ${t}`)}function Jt(r,e){k(r===void 0||typeof r=="string",e,"must be a string")}function Jr(r,e){k(typeof r=="string"&&r.trim().length>0,e,"must be a non-empty string")}function Ba(r,e){k(r===void 0||typeof r=="boolean",e,"must be true or false")}function Wa(r,e){typeof r!="string"&&(k(Se(r),e,"must be a path string or an object"),Jt(r.path,`${e}.path`),r.coalesce!==void 0&&(k(Array.isArray(r.coalesce),`${e}.coalesce`,"must be an array"),r.coalesce.forEach((t,n)=>Wa(t,`${e}.coalesce[${n}]`))))}function ja(r,e){k(Se(r),e,"must be an object");for(let t of["path","regex","contains","not_contains","starts_with","not_starts_with"])Jt(r[t],`${e}.${t}`);Ba(r.exists,`${e}.exists`);for(let t of["in","not_in"])k(r[t]===void 0||Array.isArray(r[t]),`${e}.${t}`,"must be an array");for(let t of["all","any"]){let n=r[t];n!==void 0&&(k(Array.isArray(n),`${e}.${t}`,"must be an array"),n.forEach((s,i)=>ja(s,`${e}.${t}[${i}]`)))}}function ri(r,e){k(Se(r),e,"must be an object"),Jr(r.name,`${e}.name`);for(let t of["eventTypePath","sessionIdPath","cwdPath","projectPath"])Jt(r[t],`${e}.${t}`);k(Array.isArray(r.events),`${e}.events`,"must be an array"),r.events.forEach((t,n)=>{let s=`${e}.events[${n}]`;if(k(Se(t),s,"must be an object"),k(typeof t.name=="string",`${s}.name`,"must be a string"),k(typeof t.action=="string"&&Object.hasOwn(La,t.action),`${s}.action`,`must be one of ${Object.keys(La).join(", ")}`),t.match!==void 0&&ja(t.match,`${s}.match`),t.fields!==void 0){k(Se(t.fields),`${s}.fields`,"must be an object");for(let[i,o]of Object.entries(t.fields))Wa(o,`${s}.fields.${i}`)}})}function Pp(r,e,t){k(Se(r),e,"must be an object"),Jr(r.name,`${e}.name`),Jr(r.path,`${e}.path`);for(let o of["workspace","project","agentId"])Jt(r[o],`${e}.${o}`);for(let o of["startAtEnd","subagentOnly"])Ba(r[o],`${e}.${o}`);let{subagentSource:n,context:s}=r;if(n!==void 0&&(k(Se(n),`${e}.subagentSource`,"must be an object"),k(typeof n.path=="string",`${e}.subagentSource.path`,"must be a string")),s!==void 0&&(k(Se(s),`${e}.context`,"must be an object"),k(s.mode==="agents",`${e}.context.mode`,'must be "agents"'),Jt(s.path,`${e}.context.path`),s.updateOn!==void 0&&(k(Array.isArray(s.updateOn),`${e}.context.updateOn`,"must be an array"),s.updateOn.forEach((o,a)=>k(o==="session_start"||o==="session_end",`${e}.context.updateOn[${a}]`,'must be "session_start" or "session_end"')))),typeof r.schema!="string"){k(Se(r.schema),`${e}.schema`,"must be a schema name or an inline schema object"),ri(r.schema,`${e}.schema`);return}Jr(r.schema,`${e}.schema`);let i=t?.[r.schema];i!==void 0&&ri(i,`schemas.${r.schema}`)}function Ip(r){k(Se(r),"the top level","must be an object"),k(r.version===1,"version","must be 1");let{stateFile:e,schemas:t,watches:n}=r;if(k(e==null||typeof e=="string","stateFile","must be a string"),t!==void 0){k(Se(t),"schemas","must be an object");for(let[s,i]of Object.entries(t))ri(i,`schemas.${s}`)}k(Array.isArray(n),"watches","must be an array"),n.forEach((s,i)=>Pp(s,`watches[${i}]`,t))}function ni(r=vt){let e=X(r);if(!(0,it.existsSync)(e))throw new Error(`Transcript watch config not found: ${e}`);let t=Fe(e);try{Ip(t)}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`Invalid transcript watch config: ${e} (${s})`,{cause:n})}return t.stateFile||(t.stateFile=Qr),t}function si(r=vt){let e=X(r),t=(0,Xr.dirname)(e);(0,it.existsSync)(t)||(0,it.mkdirSync)(t,{recursive:!0}),(0,it.writeFileSync)(e,JSON.stringify(Mp,null,2))}var Yf=require("crypto"),N=require("fs"),qf=require("fs/promises"),j=require("path");C();var Xt=require("fs"),Ka=require("path");C();ce();function Ne(r,e){return typeof r!="object"||r===null||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(t=>e(t[1])))}function Ga(r){try{if(!(0,Xt.existsSync)(r))return{offsets:{}};let e=Fe(r);if(!e||typeof e!="object"||Array.isArray(e))return{offsets:{}};let t=o=>typeof o=="number"&&Number.isSafeInteger(o)&&o>=0,n=o=>typeof o=="string",s={offsets:Ne(e.offsets,t)},i=o=>Object.fromEntries(Object.entries(o).filter(([a])=>Object.hasOwn(s.offsets,a)));if(e.partials!==void 0&&(s.partials=i(Ne(e.partials,n))),e.frameLines!==void 0&&(s.frameLines=i(Ne(e.frameLines,t))),e.fileIdentities!==void 0&&(s.fileIdentities=i(Ne(e.fileIdentities,n))),e.checkpointFingerprints!==void 0&&(s.checkpointFingerprints=i(Ne(e.checkpointFingerprints,n))),e.pendingTools!==void 0){let o=c=>typeof c=="object"&&c!==null&&!Array.isArray(c),a=c=>o(c)&&typeof c.toolName=="string"&&c.toolName.length>0;s.pendingTools=Object.fromEntries(Object.entries(i(Ne(e.pendingTools,o))).map(([c,l])=>[c,Object.fromEntries(Object.entries(Ne(l,o)).map(([u,d])=>[u,Ne(d,a)]))]))}return e.cwds!==void 0&&(s.cwds=Ne(e.cwds,n)),s}catch(e){return f.warn("TRANSCRIPT","Failed to load watch state, starting fresh",{statePath:r,error:e instanceof Error?e.message:String(e)}),{offsets:{}}}}var Op=64*1024,Ha=new WeakMap;function kp(r){let e=Ha.get(r);return e||(e=(r.toolInput===void 0?0:Buffer.byteLength(JSON.stringify(r.toolInput)??""))<=Op?r:{toolName:r.toolName},Ha.set(r,e)),e}function Dp(r){let e={};for(let[t,n]of Object.entries(r)){e[t]={};for(let[s,i]of Object.entries(n)){e[t][s]={};for(let[o,a]of Object.entries(i))e[t][s][o]=kp(a)}}return e}function Qt(r,e){try{let t=(0,Ka.dirname)(r);(0,Xt.existsSync)(t)||(0,Xt.mkdirSync)(t,{recursive:!0});let n=e.pendingTools?{...e,pendingTools:Dp(e.pendingTools)}:e;H(r,n,{mode:384})}catch(t){f.warn("TRANSCRIPT","Failed to save watch state",{statePath:r,error:t instanceof Error?t.message:String(t)})}}var jr=Ee(require("path"),1);var D=Ee(require("path"),1),hl=require("crypto"),P=require("fs");C();var ii=class extends Error{constructor(t){super(`SSE event exceeded ${t} bytes`);this.maxEventBytes=t;this.name="SseEventTooLargeError"}maxEventBytes},oi=class extends Error{constructor(t){super(`SSE stream ended before a terminal event (${t.join(", ")})`);this.terminalEventNames=t;this.name="StreamEndedEarlyError"}terminalEventNames},za=13,Va=10,xp=58;async function*Lp(r){if(!(r instanceof ReadableStream)){yield*r;return}let e=r.getReader(),t=!1;try{for(;;){let{done:n,value:s}=await e.read();if(n){t=!0;return}yield s}}finally{try{t||await e.cancel()}finally{e.releaseLock()}}}function Fp(r,e){if(r.length===1)return r[0];let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.length;return t}async function*Ya(r,e={}){let t=e.maxEventBytes??1048576,n=new TextDecoder,s=[],i=0,o=!1,a=0,c=null,l,u=null,d=!1,p=m=>{if(a+m>t)throw new ii(t)},g=m=>{if(m.length===0){let T=c!==null||u!==null?{event:c??"message",data:(u??[]).join(`
|
|
16
|
-
`),...l!==void 0?{id:l}:{}}:null;return c=null,l=void 0,u=null,a=0,T}if(m[0]===
|
|
17
|
-
`)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function Xp(){let r;try{r=(await fi("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(t){return f.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(/\r?\n/).slice(1)){let n=t.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function rn(r){let e=await Yp(),t=new Map;for(let o of e){let a=t.get(o.ppid);a?a.push(o):t.set(o.ppid,[o])}let n=new Set([r]),s=[],i=o=>{for(let a of t.get(o)??[])n.has(a.pid)||(n.add(a.pid),i(a.pid),s.push({pid:a.pid,startToken:a.startToken}))};return i(r),s}var Qp=5e3,Zp=1e3,eg=$.supervisorRegistry(),tg=null;function z(r){if(!Number.isInteger(r)||r<0||r===0)return!1;try{return process.kill(r,0),!0}catch(e){if(e instanceof Error){let t=e.code;return t==="EPERM"?!0:(f.debug("SYSTEM","PID check failed",{pid:r,code:t}),!1)}return f.warn("SYSTEM","PID check threw non-Error",{pid:r,error:String(e)}),!1}}async function sn(r,e){let t=Date.now()+e;for(;Date.now()<t;){if(r.every(n=>!z(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function rc(r){if(!r||!z(r.pid))return!1;if(!r.startToken)return!0;let e=Me(r.pid);if(e===null)return!0;let t=e===r.startToken;return t||f.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:r.pid,stored:r.startToken,current:e}),t}var rg={platform:process.platform,readCommandLine:r=>(0,ot.readFileSync)(`/proc/${r}/cmdline`,"utf-8")};function on(r,e=rg){if(!rc(r))return!1;if(r.startToken||e.platform!=="linux")return!0;let t;try{t=e.readCommandLine(r.pid)}catch(s){return f.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:r.pid,error:s instanceof Error?s.message:String(s)}),!0}let n=t.split("\0").some(s=>tc.default.basename(s)==="worker-service.cjs");return n||f.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:r.pid}),n}function ze(r=$.workerPid()){if(!(0,ot.existsSync)(r))return null;let e;try{e=JSON.parse((0,ot.readFileSync)(r,"utf-8"))}catch{return null}return e!==null&&on(e)?e:null}var mi=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=eg){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!(0,ot.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,ot.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(n))this.entries.set(s,i)}catch(t){t instanceof Error?f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},t):f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(t)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&f.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,t){let n=this.entries.get(e);if(!n||n.pid===t||!z(n.pid))return;let s=`${e}#superseded:${n.pid}`;this.entries.set(s,n);let i=this.runtimeProcesses.get(e);i&&(this.runtimeProcesses.set(s,i),this.runtimeProcesses.delete(e)),f.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:s,supersededPid:n.pid,incomingPid:t})}register(e,t,n){this.initialize(),this.retainSupersededEntry(e,t.pid),this.entries.set(e,t),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e,t){this.initialize();let n=e,s=this.entries.get(n);t!==void 0&&s?.pid!==t&&(n=`${e}#superseded:${t}`,s=this.entries.get(n),s?.pid!==t)||s&&(this.entries.delete(n),this.runtimeProcesses.delete(n),this.persist(),s?.type==="sdk"&&gi())}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,t])=>({id:e,...t})).sort((e,t)=>{let n=Date.parse(e.startedAt),s=Date.parse(t.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}getBySession(e){let t=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===t)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,t=0;for(let[n,s]of this.entries)z(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(t+=1));e>0&&this.persist();for(let n=0;n<t;n+=1)gi();return e}async reapSession(e){this.initialize();let t=this.getBySession(e);if(t.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;f.info("SYSTEM",`Reaping ${t.length} process(es) for session ${e}`,{sessionId:n,pids:t.map(a=>a.pid)});let s=t.filter(a=>z(a.pid)),i=new Map(s.map(a=>[a.pid,Me(a.pid)]));for(let a of s)try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:i.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):f.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}await sn(s,Qp);let o=s.filter(a=>z(a.pid));for(let a of o){f.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});let c=i.get(a.pid)??null;if(!ye(a.pid,c)){f.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:n});continue}try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:c}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(l){l instanceof Error?l.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):f.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}}if(o.length>0){let a=Date.now()+Zp;for(;Date.now()<a&&o.filter(l=>z(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of t)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of t)a.type==="sdk"&&gi();return f.info("SYSTEM",`Reaped ${t.length} process(es) for session ${e}`,{sessionId:n,reaped:t.length}),t.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};try{H(this.registryPath,e),this.persistDegraded=!1}catch(t){this.reportPersistFailure(t)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let t=e instanceof Error?e:new Error(String(e));f.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},t);try{tg?.({errorCategory:t.code??"unknown"})}catch{}}},pi=null;function an(){return pi||(pi=new mi),pi}var mw=180*1e3,ng=[];function gi(){let r=ng.shift();r&&r.notify()}var Rt=require("fs");C();U();var sg=$.workerPid();async function sc(r){let e=r.currentPid??process.pid,t=r.pidFilePath??sg,n=r.registry.getAll(),s=[...n].filter(c=>c.pid!==e).sort((c,l)=>Date.parse(l.startedAt)-Date.parse(c.startedAt)),i=new Map,o=new Map;for(let c of s){if(!z(c.pid)){r.registry.unregister(c.id);continue}o.set(c.id,Me(c.pid)),i.set(c.id,await rn(c.pid));try{await nc(c,"SIGTERM")}catch(l){l instanceof Error?f.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:c.pid,pgid:c.pgid,type:c.type},l):f.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(l)})}}await sn(s,5e3);let a=s.filter(c=>z(c.pid)||(i.get(c.id)??[]).some(l=>z(l.pid)));for(let c of a){let l=ye(c.pid,o.get(c.id)??null);l||f.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:c.pid,type:c.type});try{l&&await nc(c,"SIGKILL")}catch(u){u instanceof Error?f.debug("SYSTEM","Failed to force kill child process",{pid:c.pid,pgid:c.pgid,type:c.type},u):f.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(u)})}finally{ig(i.get(c.id)??[],c.pid)}}await sn(a,1e3);for(let c of s)r.registry.unregister(c.id);for(let c of n.filter(l=>l.pid===e))r.registry.unregister(c.id);ic(t,e),r.registry.pruneDeadEntries()}function ic(r,e,t=!1){if(!(0,Rt.existsSync)(r))return;let n=null;try{let o=JSON.parse((0,Rt.readFileSync)(r,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){f.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:r,error:o instanceof Error?o.message:String(o)});return}let s=e!==null&&n===e,i=n===null||!z(n);if(!s&&!(t&&i)){f.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:r,recordedPid:n,currentPid:e});return}try{(0,Rt.rmSync)(r,{force:!0})}catch(o){o instanceof Error?f.debug("SYSTEM","Failed to remove PID file",{pidFilePath:r},o):f.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:r,error:String(o)})}}function ig(r,e){for(let{pid:t,startToken:n}of r)if(!(t===e||!z(t))){if(!ye(t,n)){f.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:t,rootPid:e});continue}try{process.kill(t,"SIGKILL"),f.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:t,rootPid:e})}catch(s){let i=s instanceof Error?s.code:void 0;i!=="ESRCH"&&f.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:t,rootPid:e,errno:i})}}}async function nc(r,e){let{pid:t,pgid:n}=r;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}if(e==="SIGKILL"){await ue(t,{signalMode:"immediate"});return}try{process.kill(t,e)}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}return}await ue(t)}C();var oc=3e4,Mt=null;function og(){let e=an().pruneDeadEntries();e>0&&f.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function ac(){Mt===null&&(Mt=setInterval(og,oc),Mt.unref(),f.debug("SYSTEM","Health checker started",{intervalMs:oc}))}function cc(){Mt!==null&&(clearInterval(Mt),Mt=null,f.debug("SYSTEM","Health checker stopped"))}var lc=require("child_process"),uc=require("util");C();var ag=(0,uc.promisify)(lc.execFile),cg=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function lg(r){let e=[];for(let t of r.split(`
|
|
18
|
-
`)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function
|
|
19
|
-
`)}function dn(){let r=Zt();if(r?.installId)return r.installId;let e=(0,gc.randomUUID)();return
|
|
20
|
-
`).trim()}function yi(r){let e=yc(r);return e.length===0?"":(e=Ei(e),e=
|
|
21
|
-
`);return}let s=pn(),i=new AbortController,o=setTimeout(()=>i.abort(),Pg);try{await Ig(s,r,n,i.signal)}finally{clearTimeout(o)}}catch{}}async function Ig(r,e,t,n){await fetch(`${gn()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r,event:e,distinct_id:dn(),properties:t}),signal:n})}var re=Ee(require("path"),1),Oi=require("os"),oe=require("fs"),wn=require("child_process");C();C();C();var Q=Ee(require("path"),1),Ct=require("fs"),bn=require("os"),Mi=require("child_process");Vt();U();C();var _n=require("fs"),Ve=Ee(require("path"),1);C();var er={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function vc(r){let e=Ve.default.join(r,".git"),t;try{t=(0,_n.statSync)(e)}catch(c){return c instanceof Error&&c.code!=="ENOENT"&&f.warn("GIT","Unexpected error checking .git",{error:c instanceof Error?c.message:String(c)}),er}if(!t.isFile())return er;let n;try{n=(0,_n.readFileSync)(e,"utf-8").trim()}catch(c){return f.warn("GIT","Failed to read .git file",{error:c instanceof Error?c.message:String(c)}),er}let s=n.match(/^gitdir:\s*(.+)$/);if(!s)return er;let i=Ve.default.resolve(Ve.default.dirname(e),s[1]),o=i.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(o){let c=o[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}let a=i.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let c=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}return er}var Mc=require("fs");var wi=require("path");Vt();C();function Rc(r){let e=ve(r.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return t=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${t}$`)}function Ti(r,e){if(!e.length)return!1;let t=r.replace(/\\/g,"/"),n=(0,wi.basename)(t);for(let s of e){let i=s.trim();if(i)try{let o=Rc(i);if(o.test(t)||o.test(n))return!0}catch(o){f.warn("PROJECT_NAME","Invalid glob pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}}return!1}function En(r,e){if(!e||!e.trim())return!1;let t=r.replace(/\\/g,"/"),n=(0,wi.basename)(t),s=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of s)try{let o=Rc(i);if(o.test(t)||o.test(n))return!0}catch(o){f.warn("PROJECT_NAME","Invalid exclusion pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}return!1}C();function Cc(r){let e=r;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(n){return f.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:n instanceof Error?n.message:String(n)}),[]}}if(!Array.isArray(e))return e!=null&&f.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let t=[];for(let n of e){let s=typeof n?.name=="string"?n.name.trim():"",i=Array.isArray(n?.patterns)?n.patterns.filter(o=>typeof o=="string"&&o.trim()!==""):[];if(!s||i.length===0){f.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:s});continue}t.push({name:s,patterns:i})}return t}function Og(r){try{return(0,Mc.realpathSync)(r)}catch{return r}}function Ai(r,e){if(e.length===0)return null;let t=[...new Set([r,Og(r)])].flatMap(n=>[n,`${n.replace(/[\\/]+$/,"")}/`]);for(let n of e)if(t.some(s=>Ti(s,n.patterns)))return n.name;return null}var Ci="unknown-project";function Oc(r){try{return(0,Mi.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:r},t),null}}var kg=[".claude-mem-project",".claude-mem.json"],Dg=64;function kc(r){try{return(0,Ct.realpathSync)(r)}catch{return r}}function xg(r,e){let t=Q.default.relative(e,r);return t===""||!t.startsWith("..")&&!Q.default.isAbsolute(t)}function Lg(){return[(0,bn.homedir)(),(0,bn.tmpdir)(),rt].flatMap(r=>{let e=Q.default.resolve(r);return[e,kc(e)]})}function Dc(r){let e=Lg(),t=Q.default.resolve(r);if([Q.default.resolve(rt),kc(Q.default.resolve(rt))].some(s=>xg(t,s)))return null;for(let s=0;s<Dg;s++){if(e.includes(t))return null;let i=Q.default.dirname(t);if(i===t)return null;if(kg.some(o=>(0,Ct.existsSync)(Q.default.join(t,o))))return t;t=i}return null}function Ri(r,e){let t=Q.default.basename(e);if(t===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return f.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return f.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),Ci}return t}var Fg="CLAUDE_MEM_PROJECT_NAME_SOURCE",Sn=null;function Pc(){try{return(0,Ct.statSync)(ie).mtimeMs}catch{return-1}}function xc(){let r=Pc();if(r===-1)return B.getAllDefaults();if(Sn&&Sn.mtimeMs===r)return Sn.settings;let e=B.loadFromFile(ie);return Sn={mtimeMs:Pc(),settings:e},e}function Ng(){let r=process.env[Fg]??xc().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(r??"path").trim().toLowerCase()==="git-remote"}var Ug="CLAUDE_MEM_PROJECT_ENVIRONMENTS",yn=null;function Lc(){let r=process.env[Ug]??xc().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!yn||yn.raw!==r)&&(yn={raw:r,environments:Cc(r)}),yn.environments}function $g(r){let e=(r??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let n=e.replace(/\/+$/,"").replace(/\.git$/i,""),s=n.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),i=s?null:n.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),o=s?.[1]??i?.[1];if(!o)return null;let a=o.split("/").filter(c=>c&&c!=="_git");return a.length>=2?a.slice(-2).join("/"):a.length===1?a[0]:null}function Bg(r){try{let e=(0,Mi.execFileSync)("git",["remote","get-url","origin"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return $g(e)}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:r},t),null}}var vi=new Map;function Fc(r){return Ng()?(vi.has(r)||vi.set(r,Bg(r)),vi.get(r)??null):null}function Wg(r,e=process.platform){if(!r||r.trim()==="")return f.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),Ci;let t=ve(r,e),n=Ai(t,Lc());if(n)return n;let s=Oc(t),i=s?Fc(s):null;if(i)return i;let o=s??Dc(t)??t;return Ri(r,o)}function Nc(r,e){return e===r?r:`${r}/${e}`}function jg(r,e){if(!r.isSubmodule||!r.parentRepoPath)return null;let t=Q.default.relative(r.parentRepoPath,e);return!t||t.startsWith("..")||Q.default.isAbsolute(t)?null:t.split(Q.default.sep).join("/")}function ct(r,e=process.platform){if(!r||r.trim()===""){let c=Wg(r,e);return{primary:c,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[c],keySource:"path"}}let t=ve(r,e),n=Oc(t),s=Hg(r,t,n),i=n?Fc(n):null,o=i?Ic(s,i,"git-remote"):s,a=Ai(t,Lc());return a?Ic(o,a,"environment"):o}function Ic(r,e,t){return{primary:e,parent:null,isWorktree:r.isWorktree,isSubmodule:r.isSubmodule,allProjects:[...r.allProjects.filter(n=>n!==e),e],keySource:t}}function Hg(r,e,t){let n=t?null:Dc(e),s=Ri(r,t??n??e),i=t??e,o=vc(i);if((o.isWorktree||o.isSubmodule)&&o.parentProjectName){let a=o.parentProjectName,c,l;return o.isSubmodule?(c=`${a}/${jg(o,i)??s}`,l=s!==a?[s]:[]):(c=Nc(a,s),l=c===a?[`${a}/${s}`]:[]),{primary:c,parent:a,isWorktree:o.isWorktree,isSubmodule:o.isSubmodule,allProjects:[...new Set([a,...l,c])].filter(u=>u!==c).concat(c),keySource:"path"}}if(n&&Q.default.resolve(n)!==Q.default.resolve(e)){let a=Ri(r,e);if(a!==s&&a!==Ci)return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a,s],keySource:"path"}}return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[s],keySource:"path"}}U();var Uc=Re(Y.POWERSHELL_COMMAND);function Gg(r){return r===void 0?Uc:Math.max(1,Math.min(Uc,r))}var LT=$.dataDir(),FT=$.workerPid(),zg="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.";function Vg(r){try{return(0,oe.realpathSync)(r)}catch{return null}}function Pi(r){return r?/(^|[\\/])bun(\.exe)?$/i.test(r.trim()):!1}function Yg(r,e){let t=e==="win32"?"where.exe":"which",n=[r],s;try{s=(0,wn.execFileSync)(t,n,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(o){return o instanceof Error?f.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},o):f.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},new Error(String(o))),null}return s.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0)||null}var Ii;function ki(r={}){let e=Object.keys(r).length===0;if(e&&Ii!==void 0)return Ii;let t=qg(r);return e&&t!==null&&(Ii=t),t}function $c(r,e){let t=r?.trim();return t?e==="win32"?[re.default.join(t,"bin","bun.exe"),re.default.join(t,"bin","bun"),re.default.join(t,"bun.exe")]:[re.default.join(t,"bin","bun"),re.default.join(t,"bun")]:[]}function qg(r){let e=r.platform??process.platform,t=r.execPath??process.execPath;if(Pi(t))return t;let n=r.env??process.env,s=r.homeDirectory??(0,Oi.homedir)(),i=r.pathExists??oe.existsSync,o=r.lookupInPath??Yg,a=r.realpath??Vg,c=e==="win32"?[n.BUN,n.BUN_PATH,...$c(n.BUN_INSTALL,e),re.default.join(s,".bun","bin","bun.exe"),re.default.join(s,".bun","bin","bun"),n.USERPROFILE?re.default.join(n.USERPROFILE,".bun","bin","bun.exe"):void 0,n.LOCALAPPDATA?re.default.join(n.LOCALAPPDATA,"bun","bun.exe"):void 0,n.LOCALAPPDATA?re.default.join(n.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,n.npm_config_prefix?re.default.join(n.npm_config_prefix,"bun.exe"):void 0]:[n.BUN,n.BUN_PATH,...$c(n.BUN_INSTALL,e),re.default.join(s,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun",n.npm_config_prefix?re.default.join(n.npm_config_prefix,"bin","bun"):void 0];for(let d of c){let p=d?.trim();if(p&&(Pi(p)&&i(p)||p.toLowerCase()==="bun"))return p}let l=o("bun",e)?.trim();if(!l||!Pi(l))return null;let u=a(l)??l;return i(u)?u:null}function Di(){let r=$.dataDir();return(0,oe.mkdirSync)(r,{recursive:!0}),r}function Jg(r,e,t=Di()){let n=s=>s.replace(/'/g,"''");return`Start-Process -FilePath '${n(r)}' -ArgumentList @('"${n(e)}"','--daemon') -WorkingDirectory '${n(t)}' -WindowStyle Hidden`}function Xg(r=process.env){let e=r.SystemRoot||r.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function Qg(r,e,t=Di()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(Jg(r,e,t),"utf16le").toString("base64")]}function xi(r,e,t,n=process.platform,s){if(n==="win32"){let u=Xg(t),d=Qg(r,e),p=Gg(s);try{let g=(0,wn.spawnSync)(u,d,{stdio:"ignore",windowsHide:!0,env:t,timeout:p,killSignal:"SIGTERM"});if(g.error)throw g.error;if(g.signal)throw new Error(`powershell Start-Process killed by signal=${g.signal} after ${p}ms`);if(g.status!==0)throw new Error(`powershell Start-Process exited ${g.status??"null"}`);return 0}catch(g){let m=g instanceof Error?g:new Error(String(g));f.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:r,powershell:u},m);return}}let i="/usr/bin/setsid",o=(0,oe.existsSync)(i),a=o?i:r,l=li(a,o?[r,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:Di(),env:t});if(l.on("error",u=>{f.error("SYSTEM",zg,{runtimePath:r,execPath:a},u)}),l.pid!==void 0)return l.unref(),l.pid}var Wc=Ee(require("net"),1);C();U();function Bc(r){let e=r?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var Li="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";function Fi(){return B.loadFromFile(ie).CLAUDE_MEM_WORKER_HOST}function jc(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var lt=5e3;async function Hc(r,e,t="GET",n=lt){let s=await fetch(`http://${jc(Fi())}:${r}${e}`,{method:t,signal:AbortSignal.timeout(Math.max(1,n))}),i="";try{i=await s.text()}catch{}return{ok:s.ok,statusCode:s.status,body:i}}async function Kc(r,e=lt){let t=Date.now()+e;if(process.platform==="win32")try{let s=await fetch(`http://${jc(Fi())}:${r}/api/health`,{signal:AbortSignal.timeout(Math.max(1,t-Date.now()))});if(s.ok)return!0;f.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:r,status:s.status})}catch(s){s instanceof Error?f.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,message:s.message}):f.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,error:String(s)})}let n=await Tn(r,Math.max(1,t-Date.now()));return n==="occupied"||n==="indeterminate"}async function Tn(r,e=lt){return(await Zg(r,e)).occupancy}function Zg(r,e=lt){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(t=>{let n=!1,s=!1,i=!1,o;try{o=Wc.default.createServer()}catch{t({occupancy:"indeterminate"});return}let a=u=>{if(i){u?.();return}i=!0;try{o.close(u)}catch(d){u?.(d instanceof Error?d:new Error(String(d)))}},c=setTimeout(()=>{if(s)a();else try{o.close()}catch{}l({occupancy:"indeterminate"})},e),l=u=>{n||(n=!0,clearTimeout(c),t(u))};o.once("error",u=>{if(s)a();else try{o.close()}catch{}u.code==="EADDRINUSE"?l({occupancy:"occupied"}):Bc(u)?l({occupancy:"unbindable",bindErrorCode:u.code}):l({occupancy:"indeterminate"})}),o.once("listening",()=>{if(s=!0,n){a();return}try{a(u=>l({occupancy:u?"indeterminate":"free"}))}catch{l({occupancy:"indeterminate"})}});try{o.listen(r,Fi())}catch{try{o.close()}catch{}l({occupancy:"indeterminate"})}})}async function em(r,e,t,n){let s=Date.now()+t;for(;Date.now()<s;){try{let o=s-Date.now();if((await Hc(r,e,"GET",Math.min(lt,o))).ok)return!0}catch(o){o instanceof Error?f.debug("SYSTEM",n,{},o):f.debug("SYSTEM",n,{error:String(o)})}let i=Math.min(500,s-Date.now());i>0&&await new Promise(o=>setTimeout(o,i))}return!1}function Gc(r,e=3e4){return em(r,"/api/health",e,"Service not ready yet, will retry")}async function tm(r,e=lt){try{let t=await Hc(r,"/api/health","GET",e);return t.ok?JSON.parse(t.body).version:null}catch{return f.debug("SYSTEM","Could not fetch worker version",{}),null}}async function zc(r,e,t=lt){let n=e??"unknown",s=await tm(r,t);return!s||n==="unknown"?{matches:!0,pluginVersion:n,workerVersion:s}:{matches:n===s,pluginVersion:n,workerVersion:s}}C();var An=require("path"),q=require("fs");U();C();var Yc=9e4,tA=Yc/3;function qc(){return(0,An.join)(se(),"spawn.lock")}function Vc(r){try{let e=JSON.parse((0,q.readFileSync)(r,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function rm(r){if(r===null)return null;try{return process.kill(r,0),!0}catch(e){return e?.code==="EPERM"}}function Ni(){let r=qc(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let t=0;t<2;t++)try{return(0,q.mkdirSync)((0,An.dirname)(r),{recursive:!0}),(0,q.writeFileSync)(r,e,{flag:"wx"}),!0}catch(n){let s=n instanceof Error?n:new Error(String(n)),i=s.code;if(i!=="EEXIST")return f.warn("SYSTEM","Spawn lock write failed for a non-contention reason; failing open (spawning unlocked)",{lockPath:r,code:i},s),!0;if(t>0)return!1;let o;try{o=(0,q.statSync)(r).mtimeMs}catch{continue}let a=Vc(r),c=null;if(a===null)try{c=(0,q.readFileSync)(r,"utf-8")}catch{continue}if(Date.now()-o<=Yc&&rm(a)!==!1)return!1;let u;try{u=(0,q.statSync)(r).mtimeMs}catch{continue}if(u!==o)return!1;if(a!==null){if(Vc(r)!==a)return!1}else try{if((0,q.readFileSync)(r,"utf-8")!==c)return!1}catch{continue}try{(0,q.unlinkSync)(r)}catch{return!1}}return!1}function Ui(){let r=qc();try{if(JSON.parse((0,q.readFileSync)(r,"utf-8")).pid!==process.pid)return;(0,q.unlinkSync)(r)}catch{}}var Qc=require("node:child_process"),Zc=require("node:util");C();U();var vn=(0,Zc.promisify)(Qc.execFile),nm=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;function Jc(r){return nm.test(r.trim())}function sm(r,e){if(!r)return!1;let t=r.toLowerCase().replace(/\\/g,"/"),n=t.indexOf("--data-dir");if(n<0)return!1;let s=t.slice(n+10).trim();if(s.startsWith('"')){let o=s.indexOf('"',1);s=o<0?s.slice(1):s.slice(1,o)}let i=e.toLowerCase().replace(/\\/g,"/");return s===i||s.startsWith(i)&&s[i.length]==="/"}function Rn(r,e){return e===void 0?r:Math.max(1,Math.min(r,e))}async function im(r){try{let e=await vn("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:Rn(3e4,r),windowsHide:!0,maxBuffer:33554432}),t=JSON.parse(e.stdout),n=Array.isArray(t)?t:t===null?[]:[t],s=[];for(let i of n){let o=typeof i.Name=="string"?i.Name.trim():"";if(!o)continue;let a=typeof i.ProcessId=="number"?i.ProcessId:Number.parseInt(String(i.ProcessId),10),c=typeof i.ParentProcessId=="number"?i.ParentProcessId:Number.parseInt(String(i.ParentProcessId),10);!Number.isInteger(a)||!Number.isInteger(c)||s.push({pid:a,ppid:c,name:o,cmdline:typeof i.CommandLine=="string"?i.CommandLine:null,startToken:typeof i.StartToken=="string"&&i.StartToken.length>0?i.StartToken:null})}return s}catch(e){return f.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 om(r,e){try{let t=await vn("netstat",["-ano"],{timeout:Rn(15e3,e),windowsHide:!0,maxBuffer:16777216});return um(t.stdout,r)}catch(t){return f.warn("PROCESS","netstat failed \u2014 ghost-port reclaim disabled for this attempt",{port:r,error:t instanceof Error?t.message:String(t)}),null}}async function am(r,e){try{let t=await vn("lsof",["-nP",`-iTCP:${r}`,"-sTCP:LISTEN","-t"],{timeout:Rn(1e4,e),maxBuffer:1048576});return cm(t.stdout)}catch(t){let n=t;return n.code===1&&typeof n.stdout=="string"&&n.stdout.trim()===""?[]:(f.warn("PROCESS","lsof failed \u2014 cannot verify the worker port owner",{port:r,error:t instanceof Error?t.message:String(t)}),null)}}function cm(r){let e=new Set;for(let t of r.split(/\r?\n/)){let n=Number.parseInt(t.trim(),10);Number.isInteger(n)&&n>0&&e.add(n)}return[...e]}async function lm(r,e){try{let n=(await vn("ps",["-p",String(r),"-o","command="],{timeout:Rn(5e3,e)})).stdout.trim();return n.length>0?n:null}catch{return null}}function um(r,e){let t=new Set,n=`:${e}`;for(let s of r.split(/\r?\n/)){let i=s.trim();if(!/^TCP\b/i.test(i))continue;let o=i.split(/\s+/);if(!o[1]?.endsWith(n)||o[3]!=="LISTENING")continue;let c=Number.parseInt(o[4]??"",10);Number.isInteger(c)&&c>0&&t.add(c)}return[...t]}var dm=/worker-service/i,el=1500,tl=1e3,$i=5500,Xc=2*el+tl+$i;async function fm(r,e){let t=e.readOwnedWorker();if(t===null||t.port!==r)return null;let n=(l,u={})=>(f.info("PROCESS","Wedged-worker reclaim declined",{port:r,pid:t.pid,reason:l,...u}),{reclaimed:!1,reason:l,killedPids:[]}),s=(e.now()-Date.parse(t.startedAt))/1e3;if(!Number.isFinite(s)||s<e.minOwnerAgeSeconds)return n("owner-booting",{ageSeconds:s,minOwnerAgeSeconds:e.minOwnerAgeSeconds});for(let l=0;l<2;l++)if(l>0&&await e.sleep(tl),await e.probeHealth(r))return n("owner-responding");let i=await e.listOwners(r);if(i===null)return n("netstat-unreadable");if(!i.includes(t.pid))return f.info("PROCESS","Wedged-worker reclaim: our worker does not own the port \u2014 deferring to the ghost-listener check",{port:r,pid:t.pid,listeners:i}),null;let o=await e.readIdentity(t.pid),a=t.startToken!==void 0&&o.startToken!==null&&o.startToken!==t.startToken;if(a||o.cmdline===null||!dm.test(o.cmdline))return n("owner-identity-mismatch",{tokenMismatch:a,hasCmdline:o.cmdline!==null});if(!e.hasKillBudget())return n("out-of-budget");f.warn("PROCESS","Reclaiming wedged worker: past its boot grace, silent on two health probes, and still holding the port",{port:r,pid:t.pid,ageSeconds:Math.round(s)});try{await e.killTree(t.pid,{expectedStartToken:o.startToken??t.startToken??void 0,signalMode:"graceful"})}catch(l){return f.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:r,pid:t.pid},l instanceof Error?l:new Error(String(l))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let c=await e.listOwners(r);return c!==null&&c.length===0?(f.info("PROCESS","Wedged worker reclaimed \u2014 port is free again",{port:r,killedPids:[t.pid]}),{reclaimed:!0,killedPids:[t.pid]}):(f.warn("PROCESS","Wedged-worker reclaim killed the worker but the port is still bound",{port:r,pid:t.pid,stillOwnedBy:c}),{reclaimed:!1,reason:"still-bound",killedPids:[t.pid]})}async function pm(r,e,t,n){let s=Me(r),i=e?(await t(n))?.find(o=>o.pid===r)?.cmdline??null:await lm(r,n);return ye(r,s)?{startToken:s,cmdline:i}:{startToken:null,cmdline:null}}async function rl(r,e={}){let t=e.isWin32??(()=>process.platform==="win32"),n=e.now??Date.now,s=e.deadlineAt??null,i=S=>s!==null&&s-n()<S,o=()=>s===null?void 0:Math.max(1,s-n());if(i(Xc))return f.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:r,remainingMs:o(),neededMs:Xc}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((S,I)=>t()?om(S,I):am(S,I)),c=S=>a(S,o()),l=e.readTable??im,u=()=>l(o()),d=e.killTree??((S,I)=>ue(S,I)),p=e.dataDir??(()=>F),g=e.readIdentity??((S,I)=>pm(S,t(),l,I)),m=await fm(r,{listOwners:c,killTree:d,readOwnedWorker:e.readOwnedWorker??ze,probeHealth:e.probeHealth??(S=>Gc(S,el)),readIdentity:S=>g(S,o()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??Ma(),now:n,sleep:e.sleep??(S=>new Promise(I=>setTimeout(I,S))),hasKillBudget:()=>!i($i)});if(m!==null)return m;if(!t())return{reclaimed:!1,reason:"not-supported",killedPids:[]};let h=await c(r);if(h===null)return{reclaimed:!1,reason:"netstat-unreadable",killedPids:[]};if(h.length===0)return{reclaimed:!1,reason:"no-listener",killedPids:[]};let E=await u();if(E===null)return{reclaimed:!1,reason:"table-unreadable",killedPids:[]};if(h.filter(S=>z(S)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let b=new Map;for(let S of E){let I=b.get(S.ppid);I?I.push(S):b.set(S.ppid,[S])}let w=new Map,T=new Set,M=S=>{for(let I of b.get(S)??[])T.has(I.pid)||(T.add(I.pid),M(I.pid),Jc(I.name)&&w.set(I.pid,I))};for(let S of h)M(S);let R=p();if(R)for(let S of E)w.has(S.pid)||Jc(S.name)&&sm(S.cmdline,R)&&w.set(S.pid,S);if(w.size===0)return f.info("PROCESS","Ghost listener owner is dead but no chroma-sidecar descendants found",{port:r,deadOwners:h,processTableRows:E.length,dataDir:R??"(unresolved)"}),{reclaimed:!1,reason:"no-chroma-descendants",killedPids:[]};f.warn("PROCESS","Reclaiming ghost listener: killing dead worker's surviving chroma sidecar chain",{port:r,deadOwners:h,targets:[...w.values()].map(S=>({pid:S.pid,name:S.name}))});let y=[];for(let S of w.values()){if(i($i))return f.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:r,killedPids:y}),{reclaimed:!1,reason:"out-of-budget",killedPids:y};try{await d(S.pid,{expectedStartToken:S.startToken,signalMode:"immediate"}),y.push(S.pid)}catch(I){return f.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:r,pid:S.pid},I instanceof Error?I:new Error(String(I))),{reclaimed:!1,reason:"kill-failed",killedPids:y}}}let A=await c(r);return A!==null&&A.length===0?(f.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:r,killedPids:y}),{reclaimed:!0,killedPids:y}):(f.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:r,killedPids:y,stillOwnedBy:A}),{reclaimed:!1,reason:"still-bound",killedPids:y})}ce();var Pt=require("fs"),sl=require("module"),Ye=Ee(require("path"),1),gm=["zod/v3","zod/v4","zod/v4-mini"];function nl(r){try{return(0,Pt.realpathSync)(r)}catch{return r}}function mm(r,e){let t=Ye.default.relative(e,r);return t!==""&&!t.startsWith("..")&&!Ye.default.isAbsolute(t)}function il(r){let e;try{let s=JSON.parse((0,Pt.readFileSync)(Ye.default.join(r,"package.json"),"utf-8"));e=Object.keys(s?.dependencies??{})}catch{return[]}if(e.length===0)return[];let t=Ye.default.join(r,"node_modules"),n=e.filter(s=>!(0,Pt.existsSync)(Ye.default.join(t,...s.split("/"),"package.json")));if(e.includes("zod")&&!n.includes("zod")){let s=(0,sl.createRequire)(Ye.default.join(t,"noop.js")),i=nl(Ye.default.join(t,"zod"));for(let o of gm)try{let a=s.resolve(o,{paths:[t]});mm(nl(a),i)||n.push(o)}catch{n.push(o)}}return n}function _l(r,e,t){let n=process.env[r];if(n){let s=parseInt(n,10);if(Number.isFinite(s)&&s>=t.min&&s<=t.max)return s;f.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max})}return e}var ft=_l("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Re(Y.HEALTH_CHECK),{min:500,max:3e5}),tr=_l("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Re(Y.HOOK_READINESS_WAIT),{min:0,max:3e5}),hm=5e3,_m={min:500,max:3e5},Em={min:500,max:Y.SESSION_INIT_REQUEST_MAX},ji=100;function El(r=process.env){let e=r.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="on"||t==="yes"}function Sm(r){return El()?{...r,verbose:!0}:r}function ym(r){let e={},t=r;for(let n=0;t&&n<4;n++){let s=n===0?"error":`cause${n}`;if(t instanceof Error){let i=t;e[s]={name:t.name,message:t.message,...i.code!==void 0?{code:i.code}:{}},t=t.cause;continue}e[s]=String(t);break}return e}function bm(r,e,t){let n=typeof e.method=="string"?e.method:"GET",s=ym(t),i=JSON.stringify(s);f.warn("SYSTEM","Worker IPC fetch failed",{url:r,method:n},i),Le(`[claude-mem] fetch verbose: ${n} ${r} ${i}
|
|
22
|
-
`)}async function Hi(r,e={}){let t=Sm(e);try{return await fetch(r,t)}catch(n){throw El()&&bm(r,e,n),n}}async function Ki(r,e={},t){try{return await Hi(r,{...e,signal:AbortSignal.timeout(t)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${t}ms`):n}}function wm(r,e){let t=new AbortController,n=null,s=null,i=null,o=!1,a=()=>{s!==null&&(clearTimeout(s),s=null)},c=()=>{o=!0,a(),i!==null&&(clearTimeout(i),i=null)},l=d=>{o||(n=d,c(),t.abort(d))},u=()=>{o||(a(),s=setTimeout(()=>l(new Error(`Request timed out after ${r.idleTimeoutMs}ms idle`)),r.idleTimeoutMs))};if(r.absoluteCapMs!==void 0&&r.absoluteCapMs>0){let d=r.absoluteCapMs;i=setTimeout(()=>l(new Error(`Request timed out after ${d}ms`)),d)}return u(),{signal:e?AbortSignal.any([e,t.signal]):t.signal,touch:u,pause:a,dispose:c,translate:d=>n??d}}async function Sl(r,e,t){let n=wm(t,e.signal),s;try{s=await Hi(r,{...e,signal:n.signal})}catch(l){throw n.dispose(),n.translate(l)}n.touch();let i=s.body,o=i?i.getReader():null,a=!1;async function*c(){if(!o){a=!0,n.dispose();return}try{for(;;){n.touch();let l;try{l=await o.read()}catch(u){throw a=!0,n.translate(u)}if(l.done){a=!0;return}n.pause(),t.onChunk?.(l.value),yield l.value}}finally{n.dispose(),a||await o.cancel()}}return{status:s.status,statusText:s.statusText,ok:s.ok,headers:s.headers,chunks:c(),cancel:async()=>{n.dispose(),o&&!a&&(a=!0,await o.cancel())}}}async function Tm(r,e,t){let n=await Sl(r,e,t),s=new TextDecoder,i="";for await(let o of n.chunks)i+=s.decode(o,{stream:!0});return i+=s.decode(),{status:n.status,statusText:n.statusText,ok:n.ok,headers:n.headers,text:i}}var Mn=null,Cn=null,Pn=null,In=null,On=null;function Am(){return D.default.join(B.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Gi(){return Pn!==null||(Pn=B.loadFromFile(Am())),Pn}function ol(r,e){if(!r)return null;let t=parseInt(r,10);return Number.isFinite(t)&&t>=e.min&&t<=e.max?t:null}function yl(r,e,t){let n=process.env[r];if(n!==void 0){let o=ol(n,t);return o!==null?o:(f.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max}),e)}let s=Gi()[r],i=ol(s,t);return i!==null?i:(f.warn("SYSTEM",`Invalid ${r} in settings.json, using default`,{value:s,min:t.min,max:t.max}),e)}function fe(){if(Mn!==null)return Mn;let r=Gi();return Mn=parseInt(r.CLAUDE_MEM_WORKER_PORT,10),Mn}function zi(){return Cn!==null||(Cn=Gi().CLAUDE_MEM_WORKER_HOST),Cn}function vm(){return In!==null||(In=yl("CLAUDE_MEM_API_TIMEOUT_MS",Re(Y.API_REQUEST),_m)),In}function bl(){return On!==null||(On=Math.min(yl("CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS",Yt(),Em),Ca())),On}function Vi(r){return r===null?null:Math.max(0,r-Date.now())}function Dn(r){let e=Vi(r);return e!==null&&e<ji}function qe(r,e){let t=Vi(e);return t===null?r:Math.max(1,Math.min(r,t))}function wl(r){return`http://${ai(zi())}:${fe()}${r}`}function Ce(r,e={}){let t=e.method??"GET",n=wl(r),s={method:t};if(e.headers&&(s.headers=e.headers),e.body&&(s.body=e.body),e.idleTimeoutMs!==void 0&&e.idleTimeoutMs>0)return Tm(n,s,{idleTimeoutMs:e.idleTimeoutMs,absoluteCapMs:e.timeoutMs}).then(o=>new Response(o.text.length>0?o.text:null,{status:o.status,statusText:o.statusText,headers:o.headers}));let i=e.timeoutMs??vm();return i>0?Ki(n,s,i):Hi(n,s)}async function Rm(r){return(await Ce("/api/health",{timeoutMs:r})).ok}async function al(r=ft){return(await Ce("/api/readiness",{timeoutMs:r})).ok}function Tl(r){let e=(0,P.existsSync)(D.default.join(r,"plugin","scripts"))?D.default.join(r,"plugin"):r;return D.default.join(e,"scripts","worker-service.cjs")}function Mm(r,e){let t=d=>{let p=d.split("-")[0].split(".");return[parseInt(p[0],10)||0,parseInt(p[1],10)||0,parseInt(p[2],10)||0]},[n,s,i]=t(r),[o,a,c]=t(e);if(o!==n)return o-n;if(a!==s)return a-s;if(c!==i)return c-i;let l=r.includes("-")?1:0,u=e.includes("-")?1:0;return l!==u?l-u:r<e?1:r>e?-1:0}function Cm(r=D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem")){try{return(0,P.readdirSync)(r).filter(e=>/^\d/.test(e)).map(e=>D.default.join(r,e)).filter(e=>{try{if(!(0,P.statSync)(e).isDirectory())return!1}catch{return!1}return!(0,P.existsSync)(D.default.join(e,".orphaned_at"))}).map(e=>({scriptPath:Tl(e),version:D.default.basename(e)}))}catch{return[]}}function cl(r){try{let e=JSON.parse((0,P.readFileSync)(r,"utf-8"));return typeof e.version=="string"?e.version:null}catch(e){let t=e.code;return t!=="ENOENT"&&f.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:r,code:t}),null}}function Pm(){return{cacheRoot:D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem"),marketplaceRoot:At,cwd:process.cwd()}}function Yi(r=Pm()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if((0,P.existsSync)(e))return{scriptPath:e,version:null};f.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let t=[...Cm(r.cacheRoot),{scriptPath:Tl(D.default.join(r.marketplaceRoot,"plugin")),version:cl(D.default.join(r.marketplaceRoot,"package.json"))},{scriptPath:D.default.join(r.cwd,"plugin","scripts","worker-service.cjs"),version:cl(D.default.join(r.cwd,"package.json"))}];return km(t)}function Im(r){return D.default.dirname(D.default.dirname(r))}function Om(r){return il(Im(r.scriptPath)).length===0}function km(r,e=Om){let t=r.filter(n=>(0,P.existsSync)(n.scriptPath));return t.length===0?null:(t.sort((n,s)=>n.version===null&&s.version===null?0:n.version===null?1:s.version===null?-1:Mm(n.version,s.version)),t.find(e)??t[0])}function Dm(){return Yi()?.scriptPath??null}async function xm(r){let e=r.deadlineAt??null,t=r.backoffMs;for(let n=1;n<=r.attempts;n++){if(Dn(e))return!1;if(await kl(e??Number.POSITIVE_INFINITY))return!0;n<r.attempts&&(await new Promise(s=>setTimeout(s,qe(t,e))),t*=2)}return!1}function ll(r){return r instanceof Error&&/^Request timed out after \d+ms idle$/.test(r.message)}function ul(r){return r instanceof Error&&/^Request timed out after \d+ms$/.test(r.message)}async function Lm(r){let e;try{e=await Sl(wl("/api/ready"),{method:"GET"},{idleTimeoutMs:hm,absoluteCapMs:Math.max(1,r)})}catch(i){return ll(i)?{outcome:"unresponsive",detail:"no response headers within the idle window"}:ul(i)?{outcome:"still_booting",detail:"budget spent before response headers"}:(f.debug("SYSTEM","Worker /api/ready connection failed",{error:i instanceof Error?i.message:String(i)}),{outcome:"not_running"})}let t=()=>e.cancel().catch(i=>{f.debug("SYSTEM","Releasing the /api/ready body failed",{error:i instanceof Error?i.message:String(i)})}),n=e.headers?.get("content-type")??"";if(!e.ok||!n.includes("text/event-stream"))return xn(),await t(),{outcome:"unsupported"};let s=null;try{for await(let i of Ya(e.chunks)){if(i.event!=="phase")continue;let o=JSON.parse(i.data);if(s=typeof o.phase=="string"?o.phase:null,s==="ready")return xn(),await t(),{outcome:"ready"};if(s==="failed")return await t(),{outcome:"failed",detail:typeof o.message=="string"?o.message:"unknown init failure"}}}catch(i){return ul(i)?(xn(),{outcome:"still_booting",detail:`last phase ${s??"none"}`}):ll(i)?{outcome:"unresponsive",detail:`silent past the idle window after response headers (last phase ${s??"none"})`}:{outcome:"wedged",detail:`stream error: ${i instanceof Error?i.message:String(i)} (last phase ${s??"none"})`}}return{outcome:"wedged",detail:`stream closed before ready/failed (last phase ${s??"none"})`}}async function Fm(r){if(r<=0)try{return await al()?{outcome:"ready"}:{outcome:"still_booting"}}catch(t){return f.debug("SYSTEM","Worker readiness check threw",{},t instanceof Error?t:new Error(String(t))),{outcome:"still_booting"}}let e=Date.now();do{let t=r-(Date.now()-e);try{if(await al(Math.max(1,Math.min(ft,t))))return{outcome:"ready"}}catch(s){f.debug("SYSTEM","Worker readiness check threw",{error:s instanceof Error?s.message:String(s)})}let n=r-(Date.now()-e);if(n<=0)break;await new Promise(s=>setTimeout(s,Math.min(250,n)))}while(Date.now()-e<r);return{outcome:"still_booting",detail:"legacy /api/readiness never reported ready"}}async function It(r=tr){let e=r>0?r:ft,t=await Lm(e);return t.outcome==="ready"&&Hm(),t.outcome!=="unsupported"?t:(f.debug("SYSTEM","Worker has no /api/ready stream; falling back to /api/readiness"),Fm(r))}async function Nm(r=ft){try{let t=await(await Ce("/api/health",{timeoutMs:r})).json();return typeof t.version=="string"?t.version:null}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("SYSTEM","Worker health-version fetch failed",{},t),null}}async function Um(r=5e3){let e=Date.now()+r;for(;;){let t=e-Date.now();if(t<=0)return!1;if(await Tn(fe(),Math.min(1e3,t))==="free")return!0;let n=Math.min(200,e-Date.now());n>0&&await new Promise(s=>setTimeout(s,n))}}function Al(r,e){if(!r)return null;try{let t=(0,P.statSync)(r.scriptPath);return JSON.stringify([r.scriptPath,e,t.size,t.mtimeMs,t.ctimeMs])}catch{return null}}function vl(){return D.default.join(se(),"worker-version-recycle.json")}function $m(r,e){if(r===null||e===null)return!1;try{let t=JSON.parse((0,P.readFileSync)(vl(),"utf-8"));return t?.buildKey===r&&t?.workerVersion===e}catch{return!1}}async function dl(r,e=null,t=ft){let n=await Nm(t);if(n!==null&&n!==r){if(e!==null)try{H(vl(),{buildKey:e,workerVersion:n})}catch(s){f.warn("SYSTEM","Could not persist the failed worker version recycle",{error:s instanceof Error?s.message:String(s)})}f.warn("SYSTEM","Worker is ready but still reports a stale version; rebuild or reinstall the worker bundle before retrying",{pluginVersion:r,workerVersion:n})}}var Rl=3e4;function qi(){return D.default.join(se(),"worker-unresponsive.json")}function Bm(){try{let r=JSON.parse((0,P.readFileSync)(qi(),"utf-8"));return typeof r?.pid!="number"||typeof r?.firstUnresponsiveAtEpochMs!="number"?null:{pid:r.pid,firstUnresponsiveAtEpochMs:r.firstUnresponsiveAtEpochMs}}catch{return null}}function xn(){let r=qi();if((0,P.existsSync)(r))try{(0,P.unlinkSync)(r)}catch(e){f.debug("SYSTEM","Could not clear the unresponsive-worker record",{error:e instanceof Error?e.message:String(e)})}}function Wm(r=Date.now()){let e=ze()?.pid??null;if(e===null)return!1;let t=Bm();if(t!==null&&t.pid===e)return r-t.firstUnresponsiveAtEpochMs>=Rl;try{H(qi(),{pid:e,firstUnresponsiveAtEpochMs:r})}catch(n){f.warn("SYSTEM","Could not persist the unresponsive-worker record",{error:n instanceof Error?n.message:String(n)})}return!1}function Ji(){return D.default.join(se(),"worker-never-ready-recycle.json")}function jm(){try{let r=JSON.parse((0,P.readFileSync)(Ji(),"utf-8"));return typeof r?.buildKey!="string"||typeof r?.failureMessage!="string"?null:{buildKey:r.buildKey,failureMessage:r.failureMessage,refusalLogged:r.refusalLogged===!0}}catch{return null}}function Ml(r){try{H(Ji(),r)}catch(e){f.warn("SYSTEM","Could not persist the never-ready worker recycle",{error:e instanceof Error?e.message:String(e)})}}function Hm(){let r=Ji();if((0,P.existsSync)(r))try{(0,P.unlinkSync)(r)}catch(e){f.debug("SYSTEM","Could not clear the never-ready worker recycle record",{error:e instanceof Error?e.message:String(e)})}}function Cl(r){return Al(r,r?.version??"unknown")??"unresolved-worker-bundle"}function Pl(r){return r.outcome==="failed"?r.detail??"unknown init failure":r.outcome}function Il(r,e){if(r.outcome==="unresponsive"&&!Wm())return f.warn("SYSTEM","Worker went silent on /api/ready; skipping this hook without killing it",{detail:r.detail,wedgedAfterMs:Rl}),!1;let t=Pl(r),n=jm();return n!==null&&n.buildKey===e&&n.failureMessage===t?(n.refusalLogged?f.debug("SYSTEM","Never-ready worker recycle already refused for this bundle and failure",{failureMessage:t}):(f.error("SYSTEM","Worker keeps failing to start the same way after a recycle; not recycling again. Run `npx claude-mem doctor` and check the worker logs",{outcome:r.outcome,failureMessage:t,logsDir:D.default.join(se(),"logs")}),Ml({...n,refusalLogged:!0})),!1):!0}function Ol(r,e){Ml({buildKey:e,failureMessage:Pl(r)}),xn()}async function kl(r=Number.POSITIVE_INFINITY){let e=r-Date.now();if(e<=0)return!1;let t;try{t=await Rm(Math.min(ft,e))}catch(n){return f.debug("SYSTEM","Worker health check threw",{error:n instanceof Error?n.message:String(n)}),!1}return t}async function Dl(r,e){let t=ze();if(t===null||t.port!==fe())return f.error("SYSTEM","Stale worker is serving the port but the PID file does not identify it; kill the claude-mem worker process manually",{port:fe(),pidFilePid:t?.pid??null,pidFilePort:t?.port??null}),!1;if(e("stale-worker recycle"))return!1;try{await ue(t.pid,{signalMode:"immediate"})}catch(n){return f.error("SYSTEM","Could not kill stale worker",{pid:t.pid,port:t.port},n instanceof Error?n:new Error(String(n))),!1}return await Um(qe(5e3,r))?!0:(e("stale port release")||(dt=fe(),f.error("SYSTEM","Stale worker port still open after SIGKILL; skipping spawn this hook event",{pid:t.pid,port:fe(),fix:Fn})),!1)}async function Ln(r){let e=r===void 0?null:Date.now()+r,t=h=>Dn(e)?(f.warn("SYSTEM","Worker check ran out of the hook budget; skipping the rest this hook event",{step:h,budgetMs:r}),!0):!1,n=()=>e===null?void 0:qe(ft,e),s=Math.min(Date.now()+5e3,e??Number.POSITIVE_INFINITY),i=Yi(),o=null,a=null,c=!1,l=null,u=null,d=en(le());if(t("health probe"))return!1;if(await kl(s)){if(t("version probe"))return!1;let{matches:h,pluginVersion:E,workerVersion:_}=await zc(fe(),i?.version??null,n());if(E!=="unknown"&&(o=E),h){if(t("readiness wait"))return!1;let b=await It(qe(tr,e));if(b.outcome==="ready")return o!==null&&!Dn(e)&&await dl(o,null,n()),!0;if(b.outcome==="still_booting"||b.outcome==="not_running")return f.warn("SYSTEM","Worker is healthy but not ready yet; skipping hook API call",{outcome:b.outcome,detail:b.detail}),!1;if(d)return f.warn("SYSTEM","Worker will never become ready; CLAUDE_MEM_WORKER_AUTOSTART=false, so leaving it to whatever manages it",{outcome:b.outcome,detail:b.detail}),!1;if(u=Cl(i),!Il(b,u))return!1;l=b,f.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:b.outcome,detail:b.detail,version:_})}else{if(d)return f.warn("SYSTEM","Worker version differs from the installed plugin; CLAUDE_MEM_WORKER_AUTOSTART=false, so using it as is",{pluginVersion:E,workerVersion:_}),t("readiness wait")?!1:(await It(qe(tr,e))).outcome==="ready";if(a=Al(i,E),$m(a,_))return f.warn("SYSTEM","Skipping repeated worker recycle: the unchanged bundle still reports a stale version; rebuild or reinstall it",{pluginVersion:E,workerVersion:_,scriptPath:i?.scriptPath}),t("readiness wait")?!1:(await It(qe(tr,e))).outcome==="ready";f.info("SYSTEM","Worker version mismatch \u2014 killing stale worker",{pluginVersion:E,workerVersion:_})}if(!await Dl(e,t))return!1;l!==null&&u!==null&&Ol(l,u),c=!0}if(d)return f.debug("SYSTEM","Worker not running and CLAUDE_MEM_WORKER_AUTOSTART=false \u2014 not lazy-spawning"),!1;let p=i?.scriptPath??null;if(t("lazy spawn"))return!1;let g=Ni();try{if(g){if(!c&&!await Km(s,e))return!1;let E=ki();if(!E)return f.warn("SYSTEM","Cannot lazy-spawn worker: Bun runtime not found (PATH, BUN / BUN_PATH / BUN_INSTALL, or ~/.bun/bin)"),!1;if(!p)return f.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;f.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:E,scriptPath:p});try{if(xi(E,p,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Vi(e)??void 0)===void 0)return!1}catch(_){return _ instanceof Error?f.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:E,scriptPath:p},_):f.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:E,scriptPath:p,error:String(_)}),!1}}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await xm({attempts:6,backoffMs:500,deadlineAt:e}))return t("cold-boot port wait")||(f.warn("SYSTEM",g?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),ze()===null&&await Kc(fe(),e===null?void 0:qe(5e3,e))&&(dt=fe(),f.error("SYSTEM","Worker port is occupied by an unreachable process that no PID file claims (likely an orphaned OS socket); every lazy-spawn on this port will be silently refused",{port:dt,fix:Fn}))),!1}finally{g&&Ui()}if(t("readiness wait"))return!1;let m=await It(qe(tr,e));return m.outcome!=="ready"?(f.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout",{outcome:m.outcome,detail:m.detail}),!1):(o!==null&&!Dn(e)&&await dl(o,a,n()),!0)}var Fn="Set CLAUDE_MEM_WORKER_PORT to a different port in claude-mem settings, or reboot to release the stuck port",dt=null,Wi=null;async function Km(r,e){let t=fe(),n=r-Date.now();if(n<=0)return!1;let s=await Tn(t,n);if(s==="free")return!0;if(s==="unbindable")return Wi=t,f.error("SYSTEM","Worker port cannot be bound (EACCES or EADDRNOTAVAIL) \u2014 skipping lazy-spawn",{port:t,host:zi(),fix:Li}),!1;if(s==="indeterminate")return f.warn("SYSTEM","Worker port state could not be determined in time \u2014 skipping lazy-spawn",{port:t}),!1;let i=await rl(t,{deadlineAt:e});return i.reclaimed?(f.info("SYSTEM","Reclaimed the worker port before lazy-spawn",{port:t,killedPids:i.killedPids}),!0):(ze()===null&&(dt=t),f.warn("SYSTEM","Worker port is held by a listener that does not answer health \u2014 skipping lazy-spawn",{port:t,reclaimReason:i.reason,...dt===t?{fix:Fn}:{}}),!1)}var kn=null;async function Gm(r){return kn!==null||(kn=await Ln(r)),kn}async function zm(r){let e=Date.now()+r,t=()=>e-Date.now(),n=l=>t()>=ji?!1:(f.debug("SYSTEM","Bounded worker startup ran out of budget",{step:l,budgetMs:r}),!0),s=await It(Math.max(1,t()));if(s.outcome==="ready")return!0;if(s.outcome==="still_booting")return f.warn("SYSTEM","Worker is still booting; bounded startup budget spent, skipping this call",{detail:s.detail,budgetMs:r}),!1;if(!!en(le()))return fl(e);let o=ki(),a=Dm();if(!o||!a)return!1;if(s.outcome==="failed"||s.outcome==="wedged"||s.outcome==="unresponsive"){let l=Cl(Yi());if(!Il(s,l)||(f.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:s.outcome,detail:s.detail}),!await Dl(e,n)))return!1;Ol(s,l)}let c=Ni();try{return c&&xi(o,a,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Math.max(1,t()))===void 0?!1:await fl(e)}catch(l){return f.debug("SYSTEM","Bounded worker startup failed",{error:l instanceof Error?l.message:String(l)}),!1}finally{c&&Ui()}}async function fl(r){for(;r-Date.now()>0;){let e=await It(Math.max(1,r-Date.now()));if(e.outcome==="ready")return!0;if(e.outcome!=="not_running")return f.debug("SYSTEM","Bounded worker startup did not reach ready",{outcome:e.outcome,detail:e.detail}),!1;let t=Math.min(100,r-Date.now());t>0&&await new Promise(n=>setTimeout(n,t))}return!1}var Vm=3,xl=20,Ll=1e3,Ym=10,Fl=5e3,qm=Fl+Ll;function Nn(){return D.default.join(F,"state")}function Nl(){return D.default.join(Nn(),"hook-failures.json")}function Ul(){return D.default.join(Nn(),"hook-failures.lock")}async function Xi(r=Ll){let e=Nn(),t=Ul(),n=(0,hl.randomUUID)(),s=JSON.stringify({pid:process.pid,token:n}),i=Date.now()+r;for(;Date.now()<=i;)try{return(0,P.mkdirSync)(e,{recursive:!0}),(0,P.writeFileSync)(t,s,{flag:"wx"}),n}catch(o){let a=o instanceof Error?o:new Error(String(o)),c=a.code;if(c!=="EEXIST")return f.warn("SYSTEM","Hook-failure lock unavailable; skipping failure-state update",{lockPath:t,code:c},a),null;let l;try{l=(0,P.statSync)(t).mtimeMs}catch{continue}if(Date.now()-l>Fl){let u;try{u=(0,P.statSync)(t).mtimeMs}catch{continue}if(u===l)try{(0,P.unlinkSync)(t);continue}catch{}}await new Promise(u=>setTimeout(u,Ym))}return f.warn("SYSTEM","Timed out waiting for hook-failure lock; skipping failure-state update",{lockPath:t,waitMs:r}),null}function Qi(r){let e=Ul();try{if(JSON.parse((0,P.readFileSync)(e,"utf-8")).token!==r)return;(0,P.unlinkSync)(e)}catch{}}function Jm(r){let e=JSON.parse(r);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0,thresholdTripped:e.thresholdTripped===!0,notifiedSessionIds:Array.isArray(e.notifiedSessionIds)?e.notifiedSessionIds.filter(t=>typeof t=="string").slice(-xl):void 0}}function rr(){try{return Jm((0,P.readFileSync)(Nl(),"utf-8"))}catch{return{consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1}}}function Zi(r){let e=Nn(),t=Nl(),n=`${t}.tmp`;try{return(0,P.existsSync)(e)||(0,P.mkdirSync)(e,{recursive:!0}),(0,P.writeFileSync)(n,JSON.stringify(r),"utf-8"),(0,P.renameSync)(n,t),!0}catch(s){return f.debug("SYSTEM","Failed to persist hook-failure counter",{error:s instanceof Error?s.message:String(s)}),!1}}function Xm(){try{let e=le().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,t=parseInt(e,10);if(Number.isFinite(t)&&t>=1)return t}catch{}return Vm}var pl=null;function $l(r){let e=Wi!==null?`The worker cannot bind port ${Wi} on ${zi()}: the system refuses it (EACCES or EADDRNOTAVAIL). ${Li}.`:dt!==null?`Port ${dt} is held by an unreachable process that no PID file claims, so the worker cannot bind it. ${Fn}.`:"Run `npx claude-mem restart`; if it keeps failing, run `npx claude-mem doctor`.";return`claude-mem worker unreachable for ${r} consecutive hooks \u2014 memory features are degraded, but your prompts are not blocked. ${e}`}var Qm=!1,gl=!1;async function Bi(){if(Qm){if(gl)return rr().consecutiveFailures;gl=!0}let r=await Xi();if(r===null)return rr().consecutiveFailures;let e,t=!1;try{let n=rr();e={consecutiveFailures:n.consecutiveFailures+1,lastFailureAt:Date.now(),thresholdTripped:n.thresholdTripped,notifiedSessionIds:n.notifiedSessionIds};let s=Xm();t=e.consecutiveFailures>=s&&!e.thresholdTripped,t&&(e.thresholdTripped=!0);let i=Zi(e);t=t&&i}finally{Qi(r)}return t&&(await Ac("hook_failed",{...pl!==null?{hook_type:pl}:{},error_mode:"worker_unavailable",consecutive_failures:e.consecutiveFailures,threshold_tripped:!0}),Le(`${$l(e.consecutiveFailures)}
|
|
23
|
-
`)),e.consecutiveFailures}async function Bl(r){if(!r)return null;let e=await Xi();if(e===null)return null;try{let t=rr(),n=t.notifiedSessionIds??[];return!t.thresholdTripped||n.includes(r)?null:Zi({...t,notifiedSessionIds:[...n,r].slice(-xl)})?$l(t.consecutiveFailures):null}finally{Qi(e)}}async function ml(){let r=await Xi(qm);if(r!==null)try{let e=rr();if(e.consecutiveFailures===0&&!e.thresholdTripped)return;Zi({consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1})}finally{Qi(r)}}var ut=Symbol.for("claude-mem/worker-fallback");function Wl(r){return typeof r=="object"&&r!==null&&r[ut]===!0}async function jl(r,e,t,n={}){let s=Date.now(),i=n.workerStartupTimeoutMs!==void 0;if(!(i?await zm(n.workerStartupTimeoutMs):await Gm(n.timeoutMs)))return en(le())?{continue:!0,reason:"worker_autostart_disabled",[ut]:!0}:(i||await Bi(),{continue:!0,reason:"worker_unreachable",[ut]:!0});let a={method:e};if(t!==void 0&&(a.headers={"Content-Type":"application/json"},a.body=JSON.stringify(t)),n.timeoutMs!==void 0){let u=i?n.timeoutMs:n.timeoutMs-(Date.now()-s);if(u<ji)return f.debug("SYSTEM","Hook budget spent before the worker request; skipping it",{url:r}),i||await Bi(),{continue:!0,reason:"worker_budget_exhausted",[ut]:!0};a.timeoutMs=u}let c;try{c=await Ce(r,a)}catch(u){if(!i)throw u;return f.debug("SYSTEM","Worker unavailable for best-effort hook call",{error:u instanceof Error?u.message:String(u)}),{continue:!0,reason:"worker_unreachable",[ut]:!0}}if(!c.ok){let u=await c.text().catch(()=>"");if(await ml(),c.status===429||c.status>=500)return f.warn("SYSTEM",`Worker API ${e} ${r} returned ${c.status}; skipping hook API call`,{body:u.substring(0,200)}),{continue:!0,reason:`worker_api_${c.status}`,[ut]:!0};let d=u;try{d=JSON.parse(u)}catch{}return d}let l;try{l=await c.text()}catch(u){return f.debug("SYSTEM","Worker response body could not be read; treating the worker as unreachable",{error:u instanceof Error?u.message:String(u)}),i||await Bi(),{continue:!0,reason:"worker_body_read_failed",[ut]:!0}}if(await ml(),l.length!==0)try{return JSON.parse(l)}catch{return l}}C();var Pe=require("path");U();var Zm="plugins",eh="cache",th="thedotmack",rh="claude-mem",nh="plugin",sh=(0,Pe.join)(rt,Zm,eh,th,rh),ih=(0,Pe.join)(At,nh);function eo(r,e){let t=(0,Pe.normalize)(r),n=(0,Pe.normalize)(e);if(t===n)return!0;let s=(0,Pe.relative)(n,t);return s.length>0&&!s.startsWith("..")&&!(0,Pe.isAbsolute)(s)}function Un(r){if(process.env.CLAUDE_MEM_INTERNAL==="1")return!1;if(!r)return!0;if(eo(r,qr)||eo(r,sh)||eo(r,ih))return!1;let e=le();return!En(r,e.CLAUDE_MEM_EXCLUDED_PROJECTS)}var Hl="claude";function oh(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function Z(r){if(!r)return Hl;let e=oh(r);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:Hl}C();var $n=require("fs");C();U();ce();var ah=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s*[=:]\s*['"]?)[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}],ch=1024*1024,lh="<redacted type='oversize'/>";function zl(r,e){if(!e.enabled||r.length===0)return{redacted:r,counts:{},oversize:!1};if(r.length>ch)return f.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:r.length}),{redacted:lh,counts:{oversize:1},oversize:!0};let t=new Set(e.disabledBuiltinPatterns??[]),n={},s=r,i=[];for(let a of e.customPatterns??[]){if(!a.name||a.name.length===0){f.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:a});continue}try{i.push({name:a.name,regex:new RegExp(a.regex,"g")})}catch(c){f.warn("REDACT","custom pattern skipped: invalid regex",{name:a.name},c instanceof Error?c:new Error(String(c)))}}let o=[...i,...ah];for(let a of o)t.has(a.name)||(a.regex.lastIndex=0,s=s.replace(a.regex,()=>(n[a.name]=(n[a.name]??0)+1,`<redacted type='${a.name}'/>`)));return e.logMatches&&Object.keys(n).length>0&&f.debug("REDACT","patterns matched",void 0,{counts:n}),{redacted:s,counts:n,oversize:!1}}function uh(r){if(!r||r.trim()==="")return[];try{let e=JSON.parse(r);return Array.isArray(e)?e.filter(t=>t&&typeof t.name=="string"&&typeof t.regex=="string"):(f.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return f.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function dh(r){return{enabled:r.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(r.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:uh(r.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:r.CLAUDE_MEM_REDACT_LOG_MATCHES==="true"}}var nr=null,Kl=0,fh=5e3,sr=null,Gl=!1,ph={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},gh=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;function mh(r){if(!(0,$n.existsSync)(r))return null;try{return(0,$n.readFileSync)(r,"utf-8")}catch{return""}}function hh(r){if(r===null)return!1;try{let e=JSON.parse(Js(r));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function _h(r,e,t){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(sr?.enabled===!0||gh.test(e))?t:(Gl||(Gl=!0,f.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:r,using:sr?.enabled?"the last configuration that loaded":"the built-in patterns"})),sr?.enabled?sr:ph)}function Vl(r=ie){let e=Date.now();if(nr&&e-Kl<fh)return nr;let t=B.loadFromFile(r),n=dh(t),s=n.enabled?null:mh(r);return hh(s)?nr=_h(r,s,n):(nr=n,sr=n),Kl=e,nr}var Jl=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Yl=new RegExp(`<(${Jl.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g");var ql=100;function Eh(r){let e=Object.fromEntries(Jl.map(i=>[i,0]));Yl.lastIndex=0;let t=0,n=r.replace(Yl,(i,o)=>(e[o]=(e[o]??0)+1,t+=1,""));return t>ql&&f.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:t,maxAllowed:ql,contentLength:r.length}),{stripped:zl(n.trim(),Vl()).redacted,counts:e}}function to(r){return Eh(r).stripped}var Sh=["task-notification"],yh=new RegExp(`^\\s*<(${Sh.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),bh=256*1024;function Xl(r){return!r||r.length>bh?!1:yh.test(r)}var wh=[/^You are a helpful assistant\. You will be presented with a user prompt, and your job is to provide a short title/,/^## Memory Writing Agent: Phase 2 \(Consolidation\)/,/^# Overview\r?\n(?:\r?\n)?Generate 0 to 3 hyperpersonalized suggestions/];function Ql(r){let e=r.trimStart();return wh.some(t=>t.test(e))}C();var Th=Re(Y.API_REQUEST),Ue=class extends Error{kind;status;cause;constructor(e,t,n={}){super(t),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Wn=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=Ah(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??Th}async startSession(e,t={}){let n=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",n,t)}async recordEvent(e){let t=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,t)}async endSession(e){if(!e.sessionId)throw new Ue("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e,t={}){let n={projectId:e.projectId};return e.query!==void 0&&(n.query=e.query),e.limit!==void 0&&(n.limit=e.limit),e.platformSource!==void 0&&(n.platformSource=Bn(e.platformSource)),e.folderProjects&&e.folderProjects.length>0&&(n.folderProjects=e.folderProjects),e.excludeSubagents!==void 0&&(n.excludeSubagents=e.excludeSubagents),this.request("POST","/v1/context",n,t)}async getJobStatus(e){if(!e)throw new Ue("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let t=e.content,n=e.kind??"manual",s=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,content:t,...s?{title:s}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,t,n,s={}){if(!this.apiKey||!this.apiKey.trim())throw new Ue("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let i=`${this.baseUrl}${t}`,o={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(o.body=JSON.stringify(n));let a,c=s.timeoutMs??this.timeoutMs;try{a=await Ki(i,o,c)}catch(u){let d=u instanceof Error?u.message:String(u),p=/timed out|timeout/i.test(d);throw new Ue(p?"timeout":"transport",`Server ${e} ${t} failed: ${d}`,{cause:u})}if(!a.ok){let u=await a.text().catch(()=>"");throw new Ue("http_error",`Server ${e} ${t} returned ${a.status}: ${vh(u,200)}`,{status:a.status})}let l=await a.text();if(!l||l.length===0)return{};try{return JSON.parse(l)}catch(u){let d=u instanceof Error?u:new Error(String(u));throw new Ue("invalid_response",`Server ${e} ${t} returned non-JSON response`,{cause:d})}}};function Zl(r){return r instanceof Ue}function Ah(r){return r.replace(/\/+$/,"")}function Bn(r){return typeof r=="string"?Z(r):null}function vh(r,e){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function Rh(){let e=(le().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Mh(){let r=le(),e=(...o)=>{for(let a of o){let c=(a??"").trim();if(c.length>0)return c}return""},t=e(r.CLAUDE_MEM_SERVER_URL,r.CLAUDE_MEM_SERVER_BETA_URL),n=e(r.CLAUDE_MEM_SERVER_API_KEY,r.CLAUDE_MEM_SERVER_BETA_API_KEY),s=e(r.CLAUDE_MEM_SERVER_PROJECT_ID,r.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!t)return f.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return f.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!s)return f.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let i={serverBaseUrl:t,apiKey:n};return{runtime:"server",client:new Wn(i),projectId:s,serverBaseUrl:t}}function eu(){if(Rh()!=="server")return{runtime:"worker"};let r=Mh();return r||{runtime:"worker"}}function tu(r,e){f.warn("HOOK",`[server-fallback] reason=${r}`,e??{})}var Ch={executeWithWorkerFallback:jl,getSessionInitRequestTimeoutMs:bl,isWorkerFallback:Wl,consumeWorkerOutageNotice:Bl,loadFromFileOnce:le,resolveRuntimeContext:eu,logServerFallback:tu,shouldTrackProject:Un,readHookEnvironment:()=>process.env},be=Ch,Ph=2,ro=500,Ih=2e3;var jn=class extends Error{constructor(t){super(`session-init did not record the prompt (${t})`);this.reason=t;this.name="SessionPromptNotRecordedError"}reason};function su(r){return Dh.run(r,!0)}var Oh=r=>r?r.replace(/\\/g,"/").includes("/.qwen/"):!1,kh=(r,e=process.env)=>r?e.QWEN_PROJECT_DIR?!0:Oh(r):!1,Dh={async run(r,e){let{sessionId:t,prompt:n,submittedPrompt:s}=r,i=r.cwd??process.cwd();if(!t)return f.warn("HOOK","session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS};if(!be.shouldTrackProject(i))return f.info("HOOK","Project excluded from tracking",{cwd:i}),{continue:!0,suppressOutput:!0};if(n&&Xl(n))return f.debug("HOOK","session-init: skipping internal protocol payload",{preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(n&&Z(r.platform)==="codex"&&Ql(n))return f.debug("HOOK","session-init: skipping a Codex internal helper prompt",{reason:"internal_system_prompt",preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(s===null)return f.debug("HOOK","session-init: host reported no user-submitted text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};if(s===void 0&&!n?.trim()&&kh(r.transcriptPath,be.readHookEnvironment()))return f.debug("HOOK","session-init: Qwen send carried no submitted_prompt and no prompt text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};let o=s??n,a=!o||!o.trim()?"[media prompt]":o,c=ct(i),l=c.primary,u=Z(r.platform),d=be.loadFromFileOnce(),p=String(d.CLAUDE_MEM_SEMANTIC_INJECT).toLowerCase()==="true",g=be.resolveRuntimeContext(),m=Date.now(),h=be.getSessionInitRequestTimeoutMs();if(g.runtime==="server")try{return await xh(g,r,t,u,l,a,Math.max(ro,Math.floor(h/Ph))),{continue:!0,suppressOutput:!0}}catch(M){if(Zl(M)&&M.isFallbackEligible())be.logServerFallback(M.kind,{status:M.status,message:M.message,route:"/v1/sessions/start"});else return f.error("HOOK","Server session-start failed (non-recoverable)",{error:M instanceof Error?M.message:String(M)}),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS}}f.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:t,project:l});let E=ru(m,h);if(E<ro){if(f.warn("HOOK","session-init: skipping the worker call because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:E}),e)throw new jn("budget_exhausted");return{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS}}let _=await be.executeWithWorkerFallback("/api/sessions/init","POST",{contentSessionId:t,project:l,prompt:a,platformSource:u,cwd:i,projectKeySource:c.keySource},nu(u,E));if(be.isWorkerFallback(_)){if(e)throw new jn("reason"in _?_.reason:"worker_fallback");let M=await be.consumeWorkerOutageNotice(t);return{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS,...M?{systemMessage:M}:{}}}if(typeof _?.sessionDbId!="number")return f.failure("HOOK","Session initialization returned malformed response",{contentSessionId:t,project:l}),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS};let b=_.sessionDbId,w=_.promptNumber;if(f.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:b,promptNumber:w,skipped:_.skipped,contextInjected:_.contextInjected}),f.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${t} | prompt#=${w} | sessionDbId=${b}`),_.skipped&&_.reason==="private")return f.info("HOOK",`INIT_COMPLETE | sessionDbId=${b} | promptNumber=${w} | skipped=true | reason=private`,{sessionId:b}),{continue:!0,suppressOutput:!0};let T="";if(p&&a&&a.length>=20&&a!=="[media prompt]"){let M=d.CLAUDE_MEM_SEMANTIC_INJECT_LIMIT||"5",R=ru(m,h);if(R<ro)f.warn("HOOK","session-init: skipping semantic injection because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:R});else{let y=await be.executeWithWorkerFallback("/api/context/semantic","POST",{q:a,project:l,projects:c.allProjects,limit:M,platformSource:u},nu(u,R));!be.isWorkerFallback(y)&&y?.context&&(f.debug("HOOK",`Semantic injection: ${y.count} observations for prompt`,{sessionId:b,count:y.count}),T=y.context)}}return f.info("HOOK",`INIT_COMPLETE | sessionDbId=${b} | promptNumber=${w} | project=${l}`,{sessionId:b}),T?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:T}}:{continue:!0,suppressOutput:!0}}};async function xh(r,e,t,n,s,i,o){await r.client.startSession({projectId:r.projectId,externalSessionId:t,contentSessionId:t,agentId:e.agentId??null,agentType:e.agentType??null,platformSource:n,metadata:{project:s,prompt:i}},{timeoutMs:o}),f.info("HOOK","session-init: server session started",{contentSessionId:t,project:s})}function ru(r,e){return Math.max(0,e-(Date.now()-r))}function nu(r,e){return r==="codex"?{workerStartupTimeoutMs:Y.POST_SPAWN_WAIT,timeoutMs:Math.min(Ih,e)}:{timeoutMs:e}}var io=require("crypto"),K=require("fs"),Ie=require("path");ce();U();C();var Lh=["observation","file_edit","summarize","session_end","advisor_calls"],Fh=/^[a-z_]+-[A-Za-z0-9_-]+\.json$/,au=/^[A-Za-z0-9_-]{1,128}$/,Nh="corrupt",Uh="expired",iu=10080*60*1e3;function $h(){return(0,Ie.join)(se(),"state","hook-spool")}function oo(r){if(r===null||typeof r!="object")return JSON.stringify(r)??"null";if(Array.isArray(r))return`[${r.map(oo).join(",")}]`;let e=r;return`{${Object.keys(e).filter(n=>e[n]!==void 0).sort().map(n=>`${JSON.stringify(n)}:${oo(e[n])}`).join(",")}}`}function Bh(r,e){let t=e.toolUseId;return typeof t=="string"&&au.test(t)?`${(0,io.createHash)("sha256").update(e.contentSessionId).update("\0").update(Z(e.platformSource)).digest("hex")}-${t}`:(0,io.createHash)("sha256").update(r).update("\0").update(e.contentSessionId).update("\0").update(oo(e)).digest("hex")}function ou(r){return typeof r=="string"&&r.length>0}function no(r){let e;try{e=JSON.parse(r)}catch(i){return{corruptReason:`invalid JSON: ${i instanceof Error?i.message:String(i)}`}}if(e===null||typeof e!="object")return{corruptReason:"not an object"};let t=e;if(!Lh.includes(t.kind))return{corruptReason:`unknown kind ${JSON.stringify(t.kind)}`};if(typeof t.enqueuedAtEpochMs!="number"||!Number.isFinite(t.enqueuedAtEpochMs))return{corruptReason:"missing enqueuedAtEpochMs"};let n=t.payload;if(n===null||typeof n!="object"||!ou(n.contentSessionId))return{corruptReason:"payload missing contentSessionId"};let s=t.kind;return(s==="observation"||s==="file_edit")&&!ou(n.toolName)?{corruptReason:"observation payload missing toolName"}:s==="summarize"&&typeof n.lastAssistantMessage!="string"?{corruptReason:"summarize payload missing lastAssistantMessage"}:s==="advisor_calls"&&(!Array.isArray(n.calls)||n.calls.length===0)?{corruptReason:"advisor_calls payload has no calls"}:{kind:s,payload:{...n,platformSource:Z(n.platformSource)},enqueuedAtEpochMs:t.enqueuedAtEpochMs}}var so=0;function Wh(){return so=Math.max(Date.now(),so+1),so}var Hn=class{constructor(e=$h()){this.directory=e}directory;get corruptDirectory(){return(0,Ie.join)(this.directory,Nh)}get expiredDirectory(){return(0,Ie.join)(this.directory,Uh)}enqueue(e,t,n){let s={...t,platformSource:Z(t.platformSource)},i=(0,Ie.join)(this.directory,`${e}-${Bh(e,s)}.json`),o=s.toolUseId;if(typeof o=="string"&&au.test(o)){let c=(0,Ie.join)(this.directory,`${e}-${o}.json`);try{let l=no((0,K.readFileSync)(c,"utf8"));!("corruptReason"in l)&&l.kind===e&&l.payload.contentSessionId===s.contentSessionId&&l.payload.platformSource===s.platformSource&&(i=c)}catch{}}let a=this.existingEnqueuedAt(i)??n??Wh();return H(i,{kind:e,payload:s,enqueuedAtEpochMs:a}),i}entries(){return this.readEntries().files.map(e=>e.entry)}async drain(e,t){let{files:n,quarantined:s}=this.readEntries(),i=0,o=0,a=0;t?.pruneConsumedBefore(Date.now()-iu);let c=new Set;for(let l of n){let u=l.filename.replace(/\.json$/,"");if(t?.isConsumed(u)){f.info("HOOK","Hook spool entry was already handed to ingest before a restart; removing it without ingesting again",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename}),this.unlinkEntry(l)?(t.clearConsumed(u),i++):o++;continue}let d=JSON.stringify([l.entry.payload.contentSessionId,l.entry.payload.platformSource]);if((l.entry.kind==="summarize"||l.entry.kind==="session_end")&&c.has(d)){o++;continue}let p=!1,g=()=>{if(!p){p=!0;try{t?.markConsumed(u,Date.now())}catch(h){f.error("HOOK","Could not record a hook spool hand-off marker; a crash before the file is removed would ingest it twice",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h)))}}},m;try{m=await e(l.entry,g)}catch(h){f.warn("HOOK",p?"Hook spool entry failed after ingest accepted it; removing it (a retry would send it twice)":"Hook spool entry failed to ingest; keeping it for the next drain",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h))),m=!1}if(p&&(m=!0),!m){this.expireIfPastRetryWindow(l)?a++:((l.entry.kind==="observation"||l.entry.kind==="file_edit")&&c.add(d),o++);continue}this.unlinkEntry(l)?(t?.clearConsumed(u),i++):o++}return{drained:i,retained:o,quarantined:s,expired:a}}unlinkEntry(e){try{return(0,K.unlinkSync)(e.path),!0}catch(t){return t.code==="ENOENT"?!0:(f.warn("HOOK","Hook spool entry was ingested but could not be removed",{kind:e.entry.kind,file:e.filename},t instanceof Error?t:new Error(String(t))),!1)}}expireIfPastRetryWindow(e){let t=Date.now()-e.entry.enqueuedAtEpochMs;if(t<=iu)return!1;let n={kind:e.entry.kind,contentSessionId:e.entry.payload.contentSessionId,ageHours:Math.round(t/36e5),file:e.filename,expiredDirectory:this.expiredDirectory};try{(0,K.mkdirSync)(this.expiredDirectory,{recursive:!0}),(0,K.renameSync)(e.path,(0,Ie.join)(this.expiredDirectory,e.filename))}catch(s){return f.error("HOOK","Hook spool entry is past its retry window but could not be moved to expired/; keeping it",n,s instanceof Error?s:new Error(String(s))),!1}return f.error("HOOK","Hook spool entry was never accepted within its retry window; moved to expired/",n),!0}existingEnqueuedAt(e){if(!(0,K.existsSync)(e))return null;try{let t=no((0,K.readFileSync)(e,"utf-8"));return"corruptReason"in t?null:t.enqueuedAtEpochMs}catch(t){return f.debug("HOOK","Could not read existing hook spool entry; writing a fresh one",{entryPath:e},t instanceof Error?t:new Error(String(t))),null}}quarantine(e,t){let n=(0,Ie.join)(this.directory,e);try{return(0,K.mkdirSync)(this.corruptDirectory,{recursive:!0}),(0,K.renameSync)(n,(0,Ie.join)(this.corruptDirectory,e)),f.error("HOOK","Quarantined corrupt hook spool entry",{file:e,reason:t,corruptDirectory:this.corruptDirectory}),!0}catch(s){return f.error("HOOK","Corrupt hook spool entry could not be quarantined; leaving it in place",{file:e,reason:t},s instanceof Error?s:new Error(String(s))),!1}}readEntries(){if(!(0,K.existsSync)(this.directory))return{files:[],quarantined:0};let e;try{e=(0,K.readdirSync)(this.directory).filter(s=>Fh.test(s))}catch(s){return f.warn("HOOK","Could not list hook spool entries",{directory:this.directory},s instanceof Error?s:new Error(String(s))),{files:[],quarantined:0}}let t=[],n=0;for(let s of e){let i=(0,Ie.join)(this.directory,s),o;try{o=(0,K.readFileSync)(i,"utf-8")}catch(c){c.code!=="ENOENT"&&f.warn("HOOK","Could not read hook spool entry; will retry",{file:s},c instanceof Error?c:new Error(String(c)));continue}let a=no(o);if("corruptReason"in a){this.quarantine(s,a.corruptReason)&&n++;continue}t.push({entry:a,path:i,filename:s})}return t.sort((s,i)=>s.entry.enqueuedAtEpochMs-i.entry.enqueuedAtEpochMs||s.filename.localeCompare(i.filename)),{files:t,quarantined:n}}};C();var jh=250,cu=new Set,ir=null;function Hh(){if(ir)return ir;let r=(async()=>{try{await(await Ce("/api/spool/nudge",{method:"POST",timeoutMs:jh})).body?.cancel()}catch(e){f.debug("HOOK","Hook spool nudge not delivered (worker will pick the entry up on its own)",{error:e instanceof Error?e.message:String(e)})}})();return ir=r,cu.add(r),r.finally(()=>{cu.delete(r),ir===r&&(ir=null)}),r}function or(r,e){let t=new Hn().enqueue(r,e);return f.debug("HOOK","Hook event spooled for the worker",{kind:r,entryPath:t}),Hh(),t}C();var lu={async execute(r){let{sessionId:e,cwd:t,filePath:n,edits:s}=r,i=Z(r.platform);if(!n)throw new Error("fileEditHandler requires filePath");if(f.dataIn("HOOK",`FileEdit: ${n}`,{editCount:s?.length??0}),!t)throw new Error(`Missing cwd in FileEdit hook input for session ${e}, file ${n}`);return Un(t)?(or("file_edit",{contentSessionId:e,platformSource:i,toolName:"write_file",toolInput:{filePath:n,edits:s},toolResponse:{success:!0},cwd:t}),f.debug("HOOK","File edit observation spooled",{filePath:n}),{continue:!0,suppressOutput:!0}):(f.debug("HOOK","Project excluded from tracking, skipping file edit observation",{cwd:t,filePath:n}),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS})}};U();C();var we=require("fs"),Gn=require("path");C();C();U();var ar="<claude-mem-context>",Kn="</claude-mem-context>";function uu(r){let e=r.indexOf(ar);if(e===-1)return null;let t=r.indexOf(Kn,e+ar.length);return t===-1?null:{start:r.lastIndexOf(ar,t),end:t+Kn.length}}var zv=$.settings();function du(r,e){let t=`${ar}
|
|
15
|
+
`)}debug(e,t,n,s){this.log(0,e,t,n,s)}info(e,t,n,s){this.log(1,e,t,n,s)}warn(e,t,n,s){this.log(2,e,t,n,s)}setErrorSink(e){Qs=e}error(e,t,n,s){this.log(3,e,t,n,s),this.routeErrorToSink(t,n,s)}routeErrorToSink(e,t,n){try{if(!Qs||!(n instanceof Error))return;Qs(n)}catch{}}dataIn(e,t,n,s){this.info(e,`\u2192 ${t}`,n,s)}dataOut(e,t,n,s){this.info(e,`\u2190 ${t}`,n,s)}success(e,t,n,s){this.info(e,`\u2713 ${t}`,n,s)}failure(e,t,n,s){this.error(e,`\u2717 ${t}`,n,s)}},f=new ei});var rp=require("fs");U();var st=require("fs"),Ke=require("path"),qt=require("os");var Y={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},bp=300,Ra={min:60,max:86400};function Ma(r=process.env){let e=Number.parseInt(r.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=Ra.min&&e<=Ra.max?e:bp}var je={SUCCESS:0};function wp(r=process.platform){return r==="win32"?8e3:5e3}function Yt(r=process.platform){return Y.SESSION_INIT_HOOK_CAP-wp(r)}function Ca(r=process.platform){return r==="win32"?Yt(r):Y.SESSION_INIT_REQUEST_MAX}function Re(r){return process.platform==="win32"?Math.round(r*Y.WINDOWS_MULTIPLIER):r}ce();C();function Pa(r){try{return new URL(r).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}Vr();var Tp="security_alert",Ap="sync-hub.black-pond-afbb.workers.dev",vp="ziczmqtpmaxbornfghye.supabase.co",Rp="https://sync.cmem.ai",Mp=new Set(["xiaomi/mimo-v2-flash:free"]);function Cp(r){let e=r.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Mp.has(e.trim()))return!1;let t=typeof r.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?r.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return t===""||Pa(t)}var Oa=18e4,ka=[{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 xa(r,e){return(0,Ke.join)((0,Ke.dirname)(r),`.${(0,Ke.basename)(r)}.${e.markerTag}`)}function ti(r,e){try{(0,st.writeFileSync)(xa(r,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var Da=new Set;function Ip(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0)return null;try{let t=new URL(e).hostname;if(t===Ap||t===vp)return Rp}catch{return null}return null}var B=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_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(Re(Y.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Yt()),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_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_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:(0,Ke.join)((0,qt.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_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:(0,Ke.join)((0,qt.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,qt.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:String(Oa),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(Oa),CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let t=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(t):t}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,t){let n=t?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let t=this.get(e);return parseInt(t,10)}static applyEnvOverrides(e){let t={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(t[n]=process.env[n]);return t}static loadFromFile(e,t=!0){try{if(!(0,st.existsSync)(e)){let d=this.getAllDefaults();try{j(e,d,{mode:384});for(let p of ka)ti(e,p);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(p){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,p instanceof Error?p.message:String(p))}return this.finalizeSettings(d,t)}let n=(0,st.readFileSync)(e,"utf-8"),s=zt(n),i=Tt(s),o=i!==s,a=ya(s),c=o&&Object.keys(a).some(d=>d!=="env");if(o&&!c)try{j(e,i,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,d instanceof Error?d.message:String(d))}if(i.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Tp){i={...i,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{j(e,c?{...a,env:i}:i,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,d instanceof Error?d.message:String(d))}}if(Cp(i)){let d=String(i.CLAUDE_MEM_OPENROUTER_MODEL).trim();i={...i,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL};try{j(e,c?{...a,env:i}:i,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${d} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(p){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,p instanceof Error?p.message:String(p))}}let l=Ip(i.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null){i={...i,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l};try{j(e,c?{...a,env:i}:i,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",l,"from a retired hub host:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,d instanceof Error?d.message:String(d))}}for(let d of ka)if(!(0,st.existsSync)(xa(e,d))){if(i[d.key]!==d.legacy){ti(e,d);continue}i={...i,[d.key]:this.DEFAULTS[d.key]};try{j(e,c?{...a,env:i}:i,{mode:384}),ti(e,d),console.warn(`[SETTINGS] Migrated ${d.key} off the old ${d.legacy}ms default to ${this.DEFAULTS[d.key]}ms:`,e)}catch(p){let g=`${d.key}\0${e}`;Da.has(g)||(Da.add(g),console.warn(`[SETTINGS] Failed to migrate ${d.key}; using the new default in memory (reported once per process):`,e,p instanceof Error?p.message:String(p)))}}let u={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))i[d]!==void 0&&(u[d]=i[d]);return this.finalizeSettings(u,t)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let s=this.getAllDefaults();return this.finalizeSettings(s,t)}}};var it=require("fs"),Fa=require("os"),Xr=require("path");ce();U();var vt=$.transcriptsConfig(),Qr=$.transcriptsState(),Pp={version:1,schemas:{},watches:[],stateFile:Qr};function Na(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name;if(!(r.name==="codex"||e==="codex")||!r.path)return!1;let n=X(r.path).replace(/\\/g,"/"),s=(0,Xr.join)((0,Fa.homedir)(),".codex","sessions").replace(/\\/g,"/");return n===`${s}/**/*.jsonl`}function Ua(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name,t=r.name==="codex"&&(!e||e==="codex");return r.context?.mode==="agents"&&t&&Na(r)}var Op={path:"payload.source.subagent.thread_spawn"};function $a(r,e){if(e.CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION==="true")return{config:r,scoped:0,removed:0};let t=e.CLAUDE_MEM_CODEX_SUBAGENT_INGESTION==="true"&&e.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS!=="true",n=0,s=0,i=[];for(let o of r.watches)Na(o)?t?(n+=1,i.push({...o,subagentOnly:!0,subagentSource:{...Op}})):s+=1:i.push(o);return{config:{...r,watches:i},scoped:n,removed:s}}function X(r){return r&&va(r)}var Se=r=>typeof r=="object"&&r!==null&&!Array.isArray(r),La={session_init:!0,session_context:!0,user_message:!0,assistant_message:!0,tool_use:!0,tool_result:!0,observation:!0,file_edit:!0,session_end:!0};function k(r,e,t){if(!r)throw new Error(`${e} ${t}`)}function Jt(r,e){k(r===void 0||typeof r=="string",e,"must be a string")}function Jr(r,e){k(typeof r=="string"&&r.trim().length>0,e,"must be a non-empty string")}function Ba(r,e){k(r===void 0||typeof r=="boolean",e,"must be true or false")}function Wa(r,e){typeof r!="string"&&(k(Se(r),e,"must be a path string or an object"),Jt(r.path,`${e}.path`),r.coalesce!==void 0&&(k(Array.isArray(r.coalesce),`${e}.coalesce`,"must be an array"),r.coalesce.forEach((t,n)=>Wa(t,`${e}.coalesce[${n}]`))))}function Ha(r,e){k(Se(r),e,"must be an object");for(let t of["path","regex","contains","not_contains","starts_with","not_starts_with"])Jt(r[t],`${e}.${t}`);Ba(r.exists,`${e}.exists`);for(let t of["in","not_in"])k(r[t]===void 0||Array.isArray(r[t]),`${e}.${t}`,"must be an array");for(let t of["all","any"]){let n=r[t];n!==void 0&&(k(Array.isArray(n),`${e}.${t}`,"must be an array"),n.forEach((s,i)=>Ha(s,`${e}.${t}[${i}]`)))}}function ri(r,e){k(Se(r),e,"must be an object"),Jr(r.name,`${e}.name`);for(let t of["eventTypePath","sessionIdPath","cwdPath","projectPath"])Jt(r[t],`${e}.${t}`);k(Array.isArray(r.events),`${e}.events`,"must be an array"),r.events.forEach((t,n)=>{let s=`${e}.events[${n}]`;if(k(Se(t),s,"must be an object"),k(typeof t.name=="string",`${s}.name`,"must be a string"),k(typeof t.action=="string"&&Object.hasOwn(La,t.action),`${s}.action`,`must be one of ${Object.keys(La).join(", ")}`),t.match!==void 0&&Ha(t.match,`${s}.match`),t.fields!==void 0){k(Se(t.fields),`${s}.fields`,"must be an object");for(let[i,o]of Object.entries(t.fields))Wa(o,`${s}.fields.${i}`)}})}function kp(r,e,t){k(Se(r),e,"must be an object"),Jr(r.name,`${e}.name`),Jr(r.path,`${e}.path`);for(let o of["workspace","project","agentId"])Jt(r[o],`${e}.${o}`);for(let o of["startAtEnd","subagentOnly"])Ba(r[o],`${e}.${o}`);let{subagentSource:n,context:s}=r;if(n!==void 0&&(k(Se(n),`${e}.subagentSource`,"must be an object"),k(typeof n.path=="string",`${e}.subagentSource.path`,"must be a string")),s!==void 0&&(k(Se(s),`${e}.context`,"must be an object"),k(s.mode==="agents",`${e}.context.mode`,'must be "agents"'),Jt(s.path,`${e}.context.path`),s.updateOn!==void 0&&(k(Array.isArray(s.updateOn),`${e}.context.updateOn`,"must be an array"),s.updateOn.forEach((o,a)=>k(o==="session_start"||o==="session_end",`${e}.context.updateOn[${a}]`,'must be "session_start" or "session_end"')))),typeof r.schema!="string"){k(Se(r.schema),`${e}.schema`,"must be a schema name or an inline schema object"),ri(r.schema,`${e}.schema`);return}Jr(r.schema,`${e}.schema`);let i=t?.[r.schema];i!==void 0&&ri(i,`schemas.${r.schema}`)}function Dp(r){k(Se(r),"the top level","must be an object"),k(r.version===1,"version","must be 1");let{stateFile:e,schemas:t,watches:n}=r;if(k(e==null||typeof e=="string","stateFile","must be a string"),t!==void 0){k(Se(t),"schemas","must be an object");for(let[s,i]of Object.entries(t))ri(i,`schemas.${s}`)}k(Array.isArray(n),"watches","must be an array"),n.forEach((s,i)=>kp(s,`watches[${i}]`,t))}function ni(r=vt){let e=X(r);if(!(0,it.existsSync)(e))throw new Error(`Transcript watch config not found: ${e}`);let t=Fe(e);try{Dp(t)}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`Invalid transcript watch config: ${e} (${s})`,{cause:n})}return t.stateFile||(t.stateFile=Qr),t}function si(r=vt){let e=X(r),t=(0,Xr.dirname)(e);(0,it.existsSync)(t)||(0,it.mkdirSync)(t,{recursive:!0}),(0,it.writeFileSync)(e,JSON.stringify(Pp,null,2))}var Xf=require("crypto"),N=require("fs"),Qf=require("fs/promises"),H=require("path");C();var Xt=require("fs"),Ka=require("path");C();ce();function Ne(r,e){return typeof r!="object"||r===null||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(t=>e(t[1])))}function Ga(r){try{if(!(0,Xt.existsSync)(r))return{offsets:{}};let e=Fe(r);if(!e||typeof e!="object"||Array.isArray(e))return{offsets:{}};let t=o=>typeof o=="number"&&Number.isSafeInteger(o)&&o>=0,n=o=>typeof o=="string",s={offsets:Ne(e.offsets,t)},i=o=>Object.fromEntries(Object.entries(o).filter(([a])=>Object.hasOwn(s.offsets,a)));if(e.partials!==void 0&&(s.partials=i(Ne(e.partials,n))),e.frameLines!==void 0&&(s.frameLines=i(Ne(e.frameLines,t))),e.fileIdentities!==void 0&&(s.fileIdentities=i(Ne(e.fileIdentities,n))),e.checkpointFingerprints!==void 0&&(s.checkpointFingerprints=i(Ne(e.checkpointFingerprints,n))),e.pendingTools!==void 0){let o=c=>typeof c=="object"&&c!==null&&!Array.isArray(c),a=c=>o(c)&&typeof c.toolName=="string"&&c.toolName.length>0;s.pendingTools=Object.fromEntries(Object.entries(i(Ne(e.pendingTools,o))).map(([c,l])=>[c,Object.fromEntries(Object.entries(Ne(l,o)).map(([u,d])=>[u,Ne(d,a)]))]))}return e.cwds!==void 0&&(s.cwds=Ne(e.cwds,n)),s}catch(e){return f.warn("TRANSCRIPT","Failed to load watch state, starting fresh",{statePath:r,error:e instanceof Error?e.message:String(e)}),{offsets:{}}}}var xp=64*1024,ja=new WeakMap;function Lp(r){let e=ja.get(r);return e||(e=(r.toolInput===void 0?0:Buffer.byteLength(JSON.stringify(r.toolInput)??""))<=xp?r:{toolName:r.toolName},ja.set(r,e)),e}function Fp(r){let e={};for(let[t,n]of Object.entries(r)){e[t]={};for(let[s,i]of Object.entries(n)){e[t][s]={};for(let[o,a]of Object.entries(i))e[t][s][o]=Lp(a)}}return e}function Qt(r,e){try{let t=(0,Ka.dirname)(r);(0,Xt.existsSync)(t)||(0,Xt.mkdirSync)(t,{recursive:!0});let n=e.pendingTools?{...e,pendingTools:Fp(e.pendingTools)}:e;j(r,n,{mode:384})}catch(t){f.warn("TRANSCRIPT","Failed to save watch state",{statePath:r,error:t instanceof Error?t.message:String(t)})}}var Hr=Ee(require("path"),1);var D=Ee(require("path"),1),hl=require("crypto"),I=require("fs");C();var ii=class extends Error{constructor(t){super(`SSE event exceeded ${t} bytes`);this.maxEventBytes=t;this.name="SseEventTooLargeError"}maxEventBytes},oi=class extends Error{constructor(t){super(`SSE stream ended before a terminal event (${t.join(", ")})`);this.terminalEventNames=t;this.name="StreamEndedEarlyError"}terminalEventNames},za=13,Va=10,Np=58;async function*Up(r){if(!(r instanceof ReadableStream)){yield*r;return}let e=r.getReader(),t=!1;try{for(;;){let{done:n,value:s}=await e.read();if(n){t=!0;return}yield s}}finally{try{t||await e.cancel()}finally{e.releaseLock()}}}function $p(r,e){if(r.length===1)return r[0];let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.length;return t}async function*Ya(r,e={}){let t=e.maxEventBytes??1048576,n=new TextDecoder,s=[],i=0,o=!1,a=0,c=null,l,u=null,d=!1,p=m=>{if(a+m>t)throw new ii(t)},g=m=>{if(m.length===0){let T=c!==null||u!==null?{event:c??"message",data:(u??[]).join(`
|
|
16
|
+
`),...l!==void 0?{id:l}:{}}:null;return c=null,l=void 0,u=null,a=0,T}if(m[0]===Np)return e.onActivity?.(),null;p(m.length),a+=m.length;let h=n.decode(m),E=h.indexOf(":"),_=E===-1?h:h.slice(0,E),b=E===-1?"":h.slice(E+1);return b.startsWith(" ")&&(b=b.slice(1)),_==="event"?c=b:_==="data"?(u??=[]).push(b):_==="id"&&(l=b),null};for await(let m of Up(r)){let h=[],E=0;for(let _=0;_<m.length;_++){let b=m[_];if(o&&(o=!1,b===Va)){E=_+1;continue}if(b!==za&&b!==Va)continue;s.push(m.subarray(E,_));let w=$p(s,i+(_-E));s=[],i=0;let T=g(w);T&&h.push(T),o=b===za,E=_+1}if(E<m.length){let _=m.slice(E);s.push(_),i+=_.length,p(i)}for(let _ of h)e.terminalEventNames?.includes(_.event)&&(d=!0),yield _}if(e.terminalEventNames&&e.terminalEventNames.length>0&&!d)throw new oi(e.terminalEventNames)}U();U();var Zr=null;function le(){return Zr!==null||(Zr=B.loadFromFile(ie)),Zr}function en(r){return(r.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}function ai(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var at=require("fs");C();var ci=require("node:child_process");function li(r,e,t){return(0,ci.spawn)(r,e??[],{...t,windowsHide:!0})}var Bp=new Set([".cmd",".bat"]),Wp=new Set([".exe",".com"]),Zb=new Set([...Wp,...Bp]);var ot=require("fs"),tc=Ee(require("path"),1);C();ce();var Hp=["CLAUDECODE_","CLAUDE_CODE_"],jp=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Kp=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"]),Gp=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",...Kp]);function Ge(r=process.env){let e={};for(let[t,n]of Object.entries(r))if(n!==void 0){if(Gp.has(t)){e[t]=n;continue}jp.has(t)||Hp.some(s=>t.startsWith(s))||(e[t]=n)}return e}U();var di=require("child_process"),Ja=require("fs");C();var zp=5e3,qa=new Map,ui=0;function Xa(r,e,t){if(t.status!==0)return null;if(typeof t.stdout!="string")return f.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:r,status:t.status}),null;let n=t.stdout.trim();return n.length>0?n:null}function Vp(r){ui+=1;let e=(0,di.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${r}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Ge(process.env),LC_ALL:"C",LANG:"C"}});return Xa("powershell-cim",r,e)}function Yp(r,e=!1){if(!e){let n=qa.get(r);if(n&&(r===process.pid||Date.now()-n.capturedAtMs<zp))return n.token}let t=null;try{t=Vp(r)}catch(n){f.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:r,error:n instanceof Error?n.message:String(n)}),t=null}return(t!==null||r!==process.pid)&&qa.set(r,{token:t,capturedAtMs:Date.now()}),t}function Qa(r,e){if(!Number.isInteger(r)||r<=0)return null;if(process.platform==="linux"){ui+=1;try{let t=(0,Ja.readFileSync)(`/proc/${r}/stat`,"utf-8"),n=t.lastIndexOf(") ");if(n<0)return null;let i=t.slice(n+2).split(" ")[19];return i&&/^\d+$/.test(i)?i:null}catch(t){return f.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}if(process.platform==="win32")return Yp(r,e);ui+=1;try{let t=(0,di.spawnSync)("ps",["-p",String(r),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Ge(process.env),LC_ALL:"C",LANG:"C"}});return Xa("ps-lstart",r,t)}catch(t){return f.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}function Me(r){return Qa(r,!1)}function ye(r,e){if(e===null)return!0;let t=Qa(r,!0);return t===null?!0:t===e}var Za=require("child_process"),nn=require("fs"),ec=require("util");C();var fi=(0,ec.promisify)(Za.execFile),qp=128,Jp=/not found|no running instance|no tasks/i,tn=class extends Error{pid;constructor(e,t,n){super(t,n),this.name="ProcessTreeKillError",this.pid=e}};async function ue(r,e={}){let t=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:Me(r),s=()=>ye(r,n);if(!s()){f.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:r});return}if(f.debug("PROCESS",`Killing process tree rooted at PID ${r}`,{immediate:t}),process.platform==="win32"){try{await fi("taskkill",["/PID",String(r),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(i){let o=i.code,a=String(i.stderr??""),c=i instanceof Error?i.message:String(i);if(o===qp||Jp.test(`${a} ${c}`)){f.debug("PROCESS","taskkill reported the process was already gone",{pid:r});return}throw new tn(r,`taskkill failed for PID ${r} (exit ${String(o)}): ${a.trim()||c}`,{cause:i})}return}try{let i=t?"SIGKILL":"SIGTERM",o=await rn(r);for(let l of o){if(!ye(l.pid,l.startToken)){f.debug("PROCESS",`Skipping ${i}: descendant PID was reused since enumeration`,{pid:l.pid,rootPid:r});continue}try{process.kill(l.pid,i)}catch{}}if(s())try{process.kill(r,i)}catch(l){let u=l instanceof Error?l:new Error(String(l)),d=u.code;d!=="ESRCH"&&f.debug("PROCESS",`Failed to ${i} PID ${r}`,{code:d},u)}else f.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:r,signal:i});t||await new Promise(l=>setTimeout(l,500));let a=s()?await rn(r):[],c=new Map;for(let l of o)c.set(l.pid,l.startToken);for(let l of a)c.set(l.pid,l.startToken);for(let[l,u]of c){if(!ye(l,u)){f.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:l,rootPid:r});continue}try{process.kill(l,"SIGKILL")}catch{}}if(!t&&s())try{process.kill(r,"SIGKILL")}catch{}}catch(i){throw new tn(r,`tree-kill failed for PID ${r}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function Xp(){return process.platform==="win32"?eg():process.platform==="linux"?Qp():Zp()}function Qp(){let r=[],e;try{e=(0,nn.readdirSync)("/proc")}catch(t){return f.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),r}for(let t of e){if(!/^\d+$/.test(t))continue;let n;try{n=(0,nn.readFileSync)(`/proc/${t}/stat`,"utf-8")}catch{continue}let s=n.lastIndexOf(") ");if(s<0)continue;let i=n.slice(s+2).split(" "),o=Number.parseInt(i[1]??"",10),a=i[19];Number.isFinite(o)&&r.push({pid:Number.parseInt(t,10),ppid:o,startToken:a&&/^\d+$/.test(a)?a:null})}return r}async function Zp(){let r;try{r=(await fi("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(t){return f.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(`
|
|
17
|
+
`)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function eg(){let r;try{r=(await fi("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(t){return f.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(/\r?\n/).slice(1)){let n=t.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function rn(r){let e=await Xp(),t=new Map;for(let o of e){let a=t.get(o.ppid);a?a.push(o):t.set(o.ppid,[o])}let n=new Set([r]),s=[],i=o=>{for(let a of t.get(o)??[])n.has(a.pid)||(n.add(a.pid),i(a.pid),s.push({pid:a.pid,startToken:a.startToken}))};return i(r),s}var tg=5e3,rg=1e3,ng=$.supervisorRegistry(),sg=null;function z(r){if(!Number.isInteger(r)||r<0||r===0)return!1;try{return process.kill(r,0),!0}catch(e){if(e instanceof Error){let t=e.code;return t==="EPERM"?!0:(f.debug("SYSTEM","PID check failed",{pid:r,code:t}),!1)}return f.warn("SYSTEM","PID check threw non-Error",{pid:r,error:String(e)}),!1}}async function sn(r,e){let t=Date.now()+e;for(;Date.now()<t;){if(r.every(n=>!z(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function rc(r){if(!r||!z(r.pid))return!1;if(!r.startToken)return!0;let e=Me(r.pid);if(e===null)return!0;let t=e===r.startToken;return t||f.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:r.pid,stored:r.startToken,current:e}),t}var ig={platform:process.platform,readCommandLine:r=>(0,ot.readFileSync)(`/proc/${r}/cmdline`,"utf-8")};function on(r,e=ig){if(!rc(r))return!1;if(r.startToken||e.platform!=="linux")return!0;let t;try{t=e.readCommandLine(r.pid)}catch(s){return f.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:r.pid,error:s instanceof Error?s.message:String(s)}),!0}let n=t.split("\0").some(s=>tc.default.basename(s)==="worker-service.cjs");return n||f.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:r.pid}),n}function ze(r=$.workerPid()){if(!(0,ot.existsSync)(r))return null;let e;try{e=JSON.parse((0,ot.readFileSync)(r,"utf-8"))}catch{return null}return e!==null&&on(e)?e:null}var mi=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=ng){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!(0,ot.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,ot.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(n))this.entries.set(s,i)}catch(t){t instanceof Error?f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},t):f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(t)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&f.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,t){let n=this.entries.get(e);if(!n||n.pid===t||!z(n.pid))return;let s=`${e}#superseded:${n.pid}`;this.entries.set(s,n);let i=this.runtimeProcesses.get(e);i&&(this.runtimeProcesses.set(s,i),this.runtimeProcesses.delete(e)),f.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:s,supersededPid:n.pid,incomingPid:t})}register(e,t,n){this.initialize(),this.retainSupersededEntry(e,t.pid),this.entries.set(e,t),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e,t){this.initialize();let n=e,s=this.entries.get(n);t!==void 0&&s?.pid!==t&&(n=`${e}#superseded:${t}`,s=this.entries.get(n),s?.pid!==t)||s&&(this.entries.delete(n),this.runtimeProcesses.delete(n),this.persist(),s?.type==="sdk"&&gi())}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,t])=>({id:e,...t})).sort((e,t)=>{let n=Date.parse(e.startedAt),s=Date.parse(t.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}getBySession(e){let t=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===t)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,t=0;for(let[n,s]of this.entries)z(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(t+=1));e>0&&this.persist();for(let n=0;n<t;n+=1)gi();return e}async reapSession(e){this.initialize();let t=this.getBySession(e);if(t.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;f.info("SYSTEM",`Reaping ${t.length} process(es) for session ${e}`,{sessionId:n,pids:t.map(a=>a.pid)});let s=t.filter(a=>z(a.pid)),i=new Map(s.map(a=>[a.pid,Me(a.pid)]));for(let a of s)try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:i.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):f.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}await sn(s,tg);let o=s.filter(a=>z(a.pid));for(let a of o){f.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});let c=i.get(a.pid)??null;if(!ye(a.pid,c)){f.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:n});continue}try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:c}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(l){l instanceof Error?l.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):f.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}}if(o.length>0){let a=Date.now()+rg;for(;Date.now()<a&&o.filter(l=>z(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of t)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of t)a.type==="sdk"&&gi();return f.info("SYSTEM",`Reaped ${t.length} process(es) for session ${e}`,{sessionId:n,reaped:t.length}),t.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};try{j(this.registryPath,e),this.persistDegraded=!1}catch(t){this.reportPersistFailure(t)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let t=e instanceof Error?e:new Error(String(e));f.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},t);try{sg?.({errorCategory:t.code??"unknown"})}catch{}}},pi=null;function an(){return pi||(pi=new mi),pi}var Sw=180*1e3,og=[];function gi(){let r=og.shift();r&&r.notify()}var Rt=require("fs");C();U();var ag=$.workerPid();async function sc(r){let e=r.currentPid??process.pid,t=r.pidFilePath??ag,n=r.registry.getAll(),s=[...n].filter(c=>c.pid!==e).sort((c,l)=>Date.parse(l.startedAt)-Date.parse(c.startedAt)),i=new Map,o=new Map;for(let c of s){if(!z(c.pid)){r.registry.unregister(c.id);continue}o.set(c.id,Me(c.pid)),i.set(c.id,await rn(c.pid));try{await nc(c,"SIGTERM")}catch(l){l instanceof Error?f.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:c.pid,pgid:c.pgid,type:c.type},l):f.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(l)})}}await sn(s,5e3);let a=s.filter(c=>z(c.pid)||(i.get(c.id)??[]).some(l=>z(l.pid)));for(let c of a){let l=ye(c.pid,o.get(c.id)??null);l||f.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:c.pid,type:c.type});try{l&&await nc(c,"SIGKILL")}catch(u){u instanceof Error?f.debug("SYSTEM","Failed to force kill child process",{pid:c.pid,pgid:c.pgid,type:c.type},u):f.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(u)})}finally{cg(i.get(c.id)??[],c.pid)}}await sn(a,1e3);for(let c of s)r.registry.unregister(c.id);for(let c of n.filter(l=>l.pid===e))r.registry.unregister(c.id);ic(t,e),r.registry.pruneDeadEntries()}function ic(r,e,t=!1){if(!(0,Rt.existsSync)(r))return;let n=null;try{let o=JSON.parse((0,Rt.readFileSync)(r,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){f.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:r,error:o instanceof Error?o.message:String(o)});return}let s=e!==null&&n===e,i=n===null||!z(n);if(!s&&!(t&&i)){f.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:r,recordedPid:n,currentPid:e});return}try{(0,Rt.rmSync)(r,{force:!0})}catch(o){o instanceof Error?f.debug("SYSTEM","Failed to remove PID file",{pidFilePath:r},o):f.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:r,error:String(o)})}}function cg(r,e){for(let{pid:t,startToken:n}of r)if(!(t===e||!z(t))){if(!ye(t,n)){f.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:t,rootPid:e});continue}try{process.kill(t,"SIGKILL"),f.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:t,rootPid:e})}catch(s){let i=s instanceof Error?s.code:void 0;i!=="ESRCH"&&f.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:t,rootPid:e,errno:i})}}}async function nc(r,e){let{pid:t,pgid:n}=r;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}if(e==="SIGKILL"){await ue(t,{signalMode:"immediate"});return}try{process.kill(t,e)}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}return}await ue(t)}C();var oc=3e4,Mt=null;function lg(){let e=an().pruneDeadEntries();e>0&&f.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function ac(){Mt===null&&(Mt=setInterval(lg,oc),Mt.unref(),f.debug("SYSTEM","Health checker started",{intervalMs:oc}))}function cc(){Mt!==null&&(clearInterval(Mt),Mt=null,f.debug("SYSTEM","Health checker stopped"))}var lc=require("child_process"),uc=require("util");C();var ug=(0,uc.promisify)(lc.execFile),dg=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function fg(r){let e=[];for(let t of r.split(`
|
|
18
|
+
`)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function pg(){let r=await ug("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return fg(r.stdout)}function gg(r,e){let t=r.filter(o=>dg.test(o.command)&&o.pid!==e.selfPid),n=new Set(t.map(o=>o.pid)),s=t.filter(o=>!n.has(o.ppid)),i=s.filter(o=>o.ppid===e.selfPid?!1:o.ppid===1?!0:!e.isAlive(o.ppid));return{matched:t,roots:s,orphans:i}}async function dc(r={}){let e=r.platform??process.platform,t={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return t.skipped="windows",t;let n=r.readTable??pg,s=r.isAlive??z,i=r.killTree??(g=>ue(g,{signalMode:"graceful"})),o=r.selfPid??process.pid,a;try{a=await n()}catch(g){return f.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:g instanceof Error?g.message:String(g)}),t.skipped="unreadable",t}let{matched:c,roots:l,orphans:u}=gg(a,{isAlive:s,selfPid:o});if(t.matched=c.length,t.trees=l.length,t.orphans=u.length,u.length===0)return f.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:t.matched,trees:t.trees}),t;f.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(g=>g.pid)});let d=new Set,p=8;for(let g=0;g<u.length;g+=p){let m=u.slice(g,g+p);(await Promise.allSettled(m.map(E=>i(E.pid)))).forEach((E,_)=>{let b=m[_];E.status==="fulfilled"?(t.killed+=1,d.add(b.pid)):(t.failed+=1,f.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:b.pid,ppid:b.ppid,error:E.reason instanceof Error?E.reason.message:String(E.reason)}))})}if(r.registry)for(let g of r.registry.getAll())g.type==="chroma"&&d.has(g.pid)&&(r.registry.unregister(g.id),t.unregistered+=1);return f.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:t.orphans,killed:t.killed,failed:t.failed,unregistered:t.unregistered}),t}U();var mg=$.workerPid(),hi=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(),fc({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,dc({registry:this.registry}).catch(t=>{f.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:t instanceof Error?t.message:String(t)})}),ac()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let t=async n=>{if(this.shutdownInitiated){f.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,f.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?f.error("SYSTEM","Error during shutdown",{},s):f.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?f.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):f.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{t("SIGTERM")}),process.on("SIGINT",()=>{t("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{f.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{t("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}cc(),this.stopPromise=sc({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,t,n){this.registry.register(e,t,n)}unregisterProcess(e,t){this.registry.unregister(e,t)}getRegistry(){return this.registry}},$w=new hi(an());function fc(r={}){let e=r.pidFilePath??mg;if(!(0,at.existsSync)(e))return"missing";let t=null;try{t=JSON.parse((0,at.readFileSync)(e,"utf-8"))}catch(s){return s instanceof Error?f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),(0,at.rmSync)(e,{force:!0}),"invalid"}return on(t)&&t?((r.logAlive??!0)&&f.info("SYSTEM","Worker already running (PID alive)",{existingPid:t.pid,existingPort:t.port,startedAt:t.startedAt}),"alive"):(r.removeStale===!1||(f.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:t?.pid,port:t?.port,startedAt:t?.startedAt}),(0,at.rmSync)(e,{force:!0})),"stale")}zr();var _i=require("path"),ln=require("fs"),gc=require("crypto");U();var cn=require("fs");ce();function pc(r,e){if(!(0,cn.existsSync)(r))return e;try{return zt((0,cn.readFileSync)(r,"utf-8"))}catch(t){throw new Error(`Corrupt JSON file, refusing to overwrite: ${r}: ${t instanceof Error?t.message:String(t)}`)}}C();var mc="telemetry.json";function hg(r){let e=r.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function _g(r,e){if(hg(r))return{enabled:!1,source:"DO_NOT_TRACK"};let t=r.CLAUDE_MEM_TELEMETRY?.toLowerCase();return t==="0"||t==="false"||t==="off"?{enabled:!1,source:"env"}:t==="1"||t==="true"||t==="on"?{enabled:!0,source:"env"}:e?.enabled===!0?{enabled:!0,source:"config"}:e?.enabled===!1?{enabled:!1,source:"config"}:{enabled:!0,source:"default"}}function un(r,e){return _g(r,e).enabled}function hc(r){let e=r.CLAUDE_MEM_TELEMETRY_ERRORS?.toLowerCase();return!(e==="0"||e==="false"||e==="off")}function Eg(){return(0,_i.join)(se(),mc)}function Zt(){let r;try{r=pc(Eg(),null)}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.warn("SYSTEM","Telemetry: corrupt telemetry.json; treating as no recorded consent",void 0,t),null}return!r||typeof r!="object"||typeof r.installId!="string"||r.enabled!==void 0&&typeof r.enabled!="boolean"?null:{enabled:r.enabled,installId:r.installId,decidedAt:typeof r.decidedAt=="string"?r.decidedAt:""}}function Sg(r){let e=se();(0,ln.mkdirSync)(e,{recursive:!0}),(0,ln.writeFileSync)((0,_i.join)(e,mc),JSON.stringify(r,null,2)+`
|
|
19
|
+
`)}function dn(){let r=Zt();if(r?.installId)return r.installId;let e=(0,gc.randomUUID)();return Sg({installId:e,decidedAt:""}),e}var Sc=Ee(require("os"),1);C();var _c=500;var Ec=8192,de="[REDACTED]";function yc(r){try{if(typeof r!="string"){if(r==null)return"";try{r=String(r)}catch(t){let n=t instanceof Error?t:new Error(String(t));return f.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,n),""}}let e=r;return e.length>Ec?e.slice(0,Ec):e}catch{return""}}function Ei(r){if(typeof r!="string"||r.length===0)return r??"";let e="";try{e=Sc.default.homedir()||""}catch(n){let s=n instanceof Error?n:new Error(String(n));f.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,s),e=""}if(!e)return r;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return r.replace(new RegExp(t,"g"),"~")}catch(n){let s=n instanceof Error?n:new Error(String(n));return f.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,s),r.split(e).join("~")}}function Si(r){return typeof r!="string"||r.length===0?r??"":r.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function yg(r){return typeof r!="string"||r.length===0?r??"":r.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${de}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${de}@`))}function bg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\?[^\s"'()]*/g,"")}function wg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let t=e.indexOf("=");return`${e.slice(0,t+1)}${de}`})}function Tg(r){if(typeof r!="string"||r.length===0)return r??"";let e=r;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,de),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,de),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,de),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,de),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,de),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,de),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,de),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,de),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,de),e}function Ag(r){return typeof r!="string"||r.length===0?r??"":r.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
|
|
20
|
+
`).trim()}function yi(r){let e=yc(r);return e.length===0?"":(e=Ei(e),e=yg(e),e=Si(e),e=bg(e),e=wg(e),e=Tg(e),e)}function bc(r){try{let e=Ag(yi(yc(r)));return e.length>_c?e.slice(0,_c):e}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.warn("SYSTEM","error-scrub: message scrub failed; emitting empty message",void 0,t),""}}function wc(r){return(typeof r=="string"?r:"").replace(/\[REDACTED\]/g,"\xA7").replace(/'[^']*'/g,"'\xA7'").replace(/"[^"]*"/g,'"\xA7"').replace(/\b\d+\b/g,"\xA7").replace(/[ \t]+/g," ").trim().slice(0,200)}var vg=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"]),Tc=200;function Rg(r,e){if(!(!r||typeof r!="object"))for(let t of Object.keys(r)){if(!vg.has(t))continue;let n=r[t];if(typeof n=="string"){let s=n.length>Tc?n.slice(0,Tc):n;e[t]=yi(s)}else(typeof n=="number"&&Number.isFinite(n)||typeof n=="boolean")&&(e[t]=n)}}function fn(r){let e={};try{Rg(r,e)}catch{}return e}var bi=Ee(require("os"),1);C();var Mg="13.35.0",Cg="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Ig="https://us.i.posthog.com";function pn(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||Cg}function gn(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Ig}var Pg=["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"];function mn(r){let e={};for(let t of Pg)r[t]!==void 0&&(e[t]=r[t]);return e}function Og(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||bi.default.release().toLowerCase().includes("microsoft")}catch(r){let e=r instanceof Error?r:new Error(String(r));return f.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function hn(){return{version:Mg,os:process.platform,os_version:bi.default.release(),is_wsl:Og(),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 kg=2e3;async function Ac(r,e,t){try{if(!un(process.env,Zt()))return;let n=fn({...hn(),...e??{}});if(t?.person?n.$set=mn(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
|
|
21
|
+
`);return}let s=pn(),i=new AbortController,o=setTimeout(()=>i.abort(),kg);try{await Dg(s,r,n,i.signal)}finally{clearTimeout(o)}}catch{}}async function Dg(r,e,t,n){await fetch(`${gn()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r,event:e,distinct_id:dn(),properties:t}),signal:n})}var re=Ee(require("path"),1),Oi=require("os"),oe=require("fs"),wn=require("child_process");C();C();C();var Q=Ee(require("path"),1),Ct=require("fs"),bn=require("os"),Mi=require("child_process");Vt();U();C();var _n=require("fs"),Ve=Ee(require("path"),1);C();var er={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function vc(r){let e=Ve.default.join(r,".git"),t;try{t=(0,_n.statSync)(e)}catch(c){return c instanceof Error&&c.code!=="ENOENT"&&f.warn("GIT","Unexpected error checking .git",{error:c instanceof Error?c.message:String(c)}),er}if(!t.isFile())return er;let n;try{n=(0,_n.readFileSync)(e,"utf-8").trim()}catch(c){return f.warn("GIT","Failed to read .git file",{error:c instanceof Error?c.message:String(c)}),er}let s=n.match(/^gitdir:\s*(.+)$/);if(!s)return er;let i=Ve.default.resolve(Ve.default.dirname(e),s[1]),o=i.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(o){let c=o[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}let a=i.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let c=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}return er}var Mc=require("fs");var wi=require("path");Vt();C();function Rc(r){let e=ve(r.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return t=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${t}$`)}function Ti(r,e){if(!e.length)return!1;let t=r.replace(/\\/g,"/"),n=(0,wi.basename)(t);for(let s of e){let i=s.trim();if(i)try{let o=Rc(i);if(o.test(t)||o.test(n))return!0}catch(o){f.warn("PROJECT_NAME","Invalid glob pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}}return!1}function En(r,e){if(!e||!e.trim())return!1;let t=r.replace(/\\/g,"/"),n=(0,wi.basename)(t),s=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of s)try{let o=Rc(i);if(o.test(t)||o.test(n))return!0}catch(o){f.warn("PROJECT_NAME","Invalid exclusion pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}return!1}C();function Cc(r){let e=r;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(n){return f.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:n instanceof Error?n.message:String(n)}),[]}}if(!Array.isArray(e))return e!=null&&f.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let t=[];for(let n of e){let s=typeof n?.name=="string"?n.name.trim():"",i=Array.isArray(n?.patterns)?n.patterns.filter(o=>typeof o=="string"&&o.trim()!==""):[];if(!s||i.length===0){f.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:s});continue}t.push({name:s,patterns:i})}return t}function xg(r){try{return(0,Mc.realpathSync)(r)}catch{return r}}function Ai(r,e){if(e.length===0)return null;let t=[...new Set([r,xg(r)])].flatMap(n=>[n,`${n.replace(/[\\/]+$/,"")}/`]);for(let n of e)if(t.some(s=>Ti(s,n.patterns)))return n.name;return null}var Ci="unknown-project";function Oc(r){try{return(0,Mi.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:r},t),null}}var Lg=[".claude-mem-project",".claude-mem.json"],Fg=64;function kc(r){try{return(0,Ct.realpathSync)(r)}catch{return r}}function Ng(r,e){let t=Q.default.relative(e,r);return t===""||!t.startsWith("..")&&!Q.default.isAbsolute(t)}function Ug(){return[(0,bn.homedir)(),(0,bn.tmpdir)(),rt].flatMap(r=>{let e=Q.default.resolve(r);return[e,kc(e)]})}function Dc(r){let e=Ug(),t=Q.default.resolve(r);if([Q.default.resolve(rt),kc(Q.default.resolve(rt))].some(s=>Ng(t,s)))return null;for(let s=0;s<Fg;s++){if(e.includes(t))return null;let i=Q.default.dirname(t);if(i===t)return null;if(Lg.some(o=>(0,Ct.existsSync)(Q.default.join(t,o))))return t;t=i}return null}function Ri(r,e){let t=Q.default.basename(e);if(t===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return f.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return f.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),Ci}return t}var $g="CLAUDE_MEM_PROJECT_NAME_SOURCE",Sn=null;function Ic(){try{return(0,Ct.statSync)(ie).mtimeMs}catch{return-1}}function xc(){let r=Ic();if(r===-1)return B.getAllDefaults();if(Sn&&Sn.mtimeMs===r)return Sn.settings;let e=B.loadFromFile(ie);return Sn={mtimeMs:Ic(),settings:e},e}function Bg(){let r=process.env[$g]??xc().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(r??"path").trim().toLowerCase()==="git-remote"}var Wg="CLAUDE_MEM_PROJECT_ENVIRONMENTS",yn=null;function Lc(){let r=process.env[Wg]??xc().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!yn||yn.raw!==r)&&(yn={raw:r,environments:Cc(r)}),yn.environments}function Hg(r){let e=(r??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let n=e.replace(/\/+$/,"").replace(/\.git$/i,""),s=n.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),i=s?null:n.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),o=s?.[1]??i?.[1];if(!o)return null;let a=o.split("/").filter(c=>c&&c!=="_git");return a.length>=2?a.slice(-2).join("/"):a.length===1?a[0]:null}function jg(r){try{let e=(0,Mi.execFileSync)("git",["remote","get-url","origin"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return Hg(e)}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:r},t),null}}var vi=new Map;function Fc(r){return Bg()?(vi.has(r)||vi.set(r,jg(r)),vi.get(r)??null):null}function Kg(r,e=process.platform){if(!r||r.trim()==="")return f.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),Ci;let t=ve(r,e),n=Ai(t,Lc());if(n)return n;let s=Oc(t),i=s?Fc(s):null;if(i)return i;let o=s??Dc(t)??t;return Ri(r,o)}function Nc(r,e){return e===r?r:`${r}/${e}`}function Gg(r,e){if(!r.isSubmodule||!r.parentRepoPath)return null;let t=Q.default.relative(r.parentRepoPath,e);return!t||t.startsWith("..")||Q.default.isAbsolute(t)?null:t.split(Q.default.sep).join("/")}function ct(r,e=process.platform){if(!r||r.trim()===""){let c=Kg(r,e);return{primary:c,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[c],keySource:"path"}}let t=ve(r,e),n=Oc(t),s=zg(r,t,n),i=n?Fc(n):null,o=i?Pc(s,i,"git-remote"):s,a=Ai(t,Lc());return a?Pc(o,a,"environment"):o}function Pc(r,e,t){return{primary:e,parent:null,isWorktree:r.isWorktree,isSubmodule:r.isSubmodule,allProjects:[...r.allProjects.filter(n=>n!==e),e],keySource:t}}function zg(r,e,t){let n=t?null:Dc(e),s=Ri(r,t??n??e),i=t??e,o=vc(i);if((o.isWorktree||o.isSubmodule)&&o.parentProjectName){let a=o.parentProjectName,c,l;return o.isSubmodule?(c=`${a}/${Gg(o,i)??s}`,l=s!==a?[s]:[]):(c=Nc(a,s),l=c===a?[`${a}/${s}`]:[]),{primary:c,parent:a,isWorktree:o.isWorktree,isSubmodule:o.isSubmodule,allProjects:[...new Set([a,...l,c])].filter(u=>u!==c).concat(c),keySource:"path"}}if(n&&Q.default.resolve(n)!==Q.default.resolve(e)){let a=Ri(r,e);if(a!==s&&a!==Ci)return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a,s],keySource:"path"}}return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[s],keySource:"path"}}U();var Uc=Re(Y.POWERSHELL_COMMAND);function Yg(r){return r===void 0?Uc:Math.max(1,Math.min(Uc,r))}var $T=$.dataDir(),BT=$.workerPid(),qg="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.";function Jg(r){try{return(0,oe.realpathSync)(r)}catch{return null}}function Ii(r){return r?/(^|[\\/])bun(\.exe)?$/i.test(r.trim()):!1}function Xg(r,e){let t=e==="win32"?"where.exe":"which",n=[r],s;try{s=(0,wn.execFileSync)(t,n,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(o){return o instanceof Error?f.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},o):f.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},new Error(String(o))),null}return s.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0)||null}var Pi;function ki(r={}){let e=Object.keys(r).length===0;if(e&&Pi!==void 0)return Pi;let t=Qg(r);return e&&t!==null&&(Pi=t),t}function $c(r,e){let t=r?.trim();return t?e==="win32"?[re.default.join(t,"bin","bun.exe"),re.default.join(t,"bin","bun"),re.default.join(t,"bun.exe")]:[re.default.join(t,"bin","bun"),re.default.join(t,"bun")]:[]}function Qg(r){let e=r.platform??process.platform,t=r.execPath??process.execPath;if(Ii(t))return t;let n=r.env??process.env,s=r.homeDirectory??(0,Oi.homedir)(),i=r.pathExists??oe.existsSync,o=r.lookupInPath??Xg,a=r.realpath??Jg,c=e==="win32"?[n.BUN,n.BUN_PATH,...$c(n.BUN_INSTALL,e),re.default.join(s,".bun","bin","bun.exe"),re.default.join(s,".bun","bin","bun"),n.USERPROFILE?re.default.join(n.USERPROFILE,".bun","bin","bun.exe"):void 0,n.LOCALAPPDATA?re.default.join(n.LOCALAPPDATA,"bun","bun.exe"):void 0,n.LOCALAPPDATA?re.default.join(n.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,n.npm_config_prefix?re.default.join(n.npm_config_prefix,"bun.exe"):void 0]:[n.BUN,n.BUN_PATH,...$c(n.BUN_INSTALL,e),re.default.join(s,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun",n.npm_config_prefix?re.default.join(n.npm_config_prefix,"bin","bun"):void 0];for(let d of c){let p=d?.trim();if(p&&(Ii(p)&&i(p)||p.toLowerCase()==="bun"))return p}let l=o("bun",e)?.trim();if(!l||!Ii(l))return null;let u=a(l)??l;return i(u)?u:null}function Di(){let r=$.dataDir();return(0,oe.mkdirSync)(r,{recursive:!0}),r}function Zg(r,e,t=Di()){let n=s=>s.replace(/'/g,"''");return`Start-Process -FilePath '${n(r)}' -ArgumentList @('"${n(e)}"','--daemon') -WorkingDirectory '${n(t)}' -WindowStyle Hidden`}function em(r=process.env){let e=r.SystemRoot||r.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function tm(r,e,t=Di()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(Zg(r,e,t),"utf16le").toString("base64")]}function xi(r,e,t,n=process.platform,s){if(n==="win32"){let u=em(t),d=tm(r,e),p=Yg(s);try{let g=(0,wn.spawnSync)(u,d,{stdio:"ignore",windowsHide:!0,env:t,timeout:p,killSignal:"SIGTERM"});if(g.error)throw g.error;if(g.signal)throw new Error(`powershell Start-Process killed by signal=${g.signal} after ${p}ms`);if(g.status!==0)throw new Error(`powershell Start-Process exited ${g.status??"null"}`);return 0}catch(g){let m=g instanceof Error?g:new Error(String(g));f.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:r,powershell:u},m);return}}let i="/usr/bin/setsid",o=(0,oe.existsSync)(i),a=o?i:r,l=li(a,o?[r,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:Di(),env:t});if(l.on("error",u=>{f.error("SYSTEM",qg,{runtimePath:r,execPath:a},u)}),l.pid!==void 0)return l.unref(),l.pid}var Wc=Ee(require("net"),1);C();U();function Bc(r){let e=r?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var Li="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";function Fi(){return B.loadFromFile(ie).CLAUDE_MEM_WORKER_HOST}function Hc(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var lt=5e3;async function jc(r,e,t="GET",n=lt){let s=await fetch(`http://${Hc(Fi())}:${r}${e}`,{method:t,signal:AbortSignal.timeout(Math.max(1,n))}),i="";try{i=await s.text()}catch{}return{ok:s.ok,statusCode:s.status,body:i}}async function Kc(r,e=lt){let t=Date.now()+e;if(process.platform==="win32")try{let s=await fetch(`http://${Hc(Fi())}:${r}/api/health`,{signal:AbortSignal.timeout(Math.max(1,t-Date.now()))});if(s.ok)return!0;f.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:r,status:s.status})}catch(s){s instanceof Error?f.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,message:s.message}):f.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,error:String(s)})}let n=await Tn(r,Math.max(1,t-Date.now()));return n==="occupied"||n==="indeterminate"}async function Tn(r,e=lt){return(await rm(r,e)).occupancy}function rm(r,e=lt){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(t=>{let n=!1,s=!1,i=!1,o;try{o=Wc.default.createServer()}catch{t({occupancy:"indeterminate"});return}let a=u=>{if(i){u?.();return}i=!0;try{o.close(u)}catch(d){u?.(d instanceof Error?d:new Error(String(d)))}},c=setTimeout(()=>{if(s)a();else try{o.close()}catch{}l({occupancy:"indeterminate"})},e),l=u=>{n||(n=!0,clearTimeout(c),t(u))};o.once("error",u=>{if(s)a();else try{o.close()}catch{}u.code==="EADDRINUSE"?l({occupancy:"occupied"}):Bc(u)?l({occupancy:"unbindable",bindErrorCode:u.code}):l({occupancy:"indeterminate"})}),o.once("listening",()=>{if(s=!0,n){a();return}try{a(u=>l({occupancy:u?"indeterminate":"free"}))}catch{l({occupancy:"indeterminate"})}});try{o.listen(r,Fi())}catch{try{o.close()}catch{}l({occupancy:"indeterminate"})}})}async function nm(r,e,t,n){let s=Date.now()+t;for(;Date.now()<s;){try{let o=s-Date.now();if((await jc(r,e,"GET",Math.min(lt,o))).ok)return!0}catch(o){o instanceof Error?f.debug("SYSTEM",n,{},o):f.debug("SYSTEM",n,{error:String(o)})}let i=Math.min(500,s-Date.now());i>0&&await new Promise(o=>setTimeout(o,i))}return!1}function Gc(r,e=3e4){return nm(r,"/api/health",e,"Service not ready yet, will retry")}async function sm(r,e=lt){try{let t=await jc(r,"/api/health","GET",e);return t.ok?JSON.parse(t.body).version:null}catch{return f.debug("SYSTEM","Could not fetch worker version",{}),null}}async function zc(r,e,t=lt){let n=e??"unknown",s=await sm(r,t);return!s||n==="unknown"?{matches:!0,pluginVersion:n,workerVersion:s}:{matches:n===s,pluginVersion:n,workerVersion:s}}C();var An=require("path"),q=require("fs");U();C();var Yc=9e4,iA=Yc/3;function qc(){return(0,An.join)(se(),"spawn.lock")}function Vc(r){try{let e=JSON.parse((0,q.readFileSync)(r,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function im(r){if(r===null)return null;try{return process.kill(r,0),!0}catch(e){return e?.code==="EPERM"}}function Ni(){let r=qc(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let t=0;t<2;t++)try{return(0,q.mkdirSync)((0,An.dirname)(r),{recursive:!0}),(0,q.writeFileSync)(r,e,{flag:"wx"}),!0}catch(n){let s=n instanceof Error?n:new Error(String(n)),i=s.code;if(i!=="EEXIST")return f.warn("SYSTEM","Spawn lock write failed for a non-contention reason; failing open (spawning unlocked)",{lockPath:r,code:i},s),!0;if(t>0)return!1;let o;try{o=(0,q.statSync)(r).mtimeMs}catch{continue}let a=Vc(r),c=null;if(a===null)try{c=(0,q.readFileSync)(r,"utf-8")}catch{continue}if(Date.now()-o<=Yc&&im(a)!==!1)return!1;let u;try{u=(0,q.statSync)(r).mtimeMs}catch{continue}if(u!==o)return!1;if(a!==null){if(Vc(r)!==a)return!1}else try{if((0,q.readFileSync)(r,"utf-8")!==c)return!1}catch{continue}try{(0,q.unlinkSync)(r)}catch{return!1}}return!1}function Ui(){let r=qc();try{if(JSON.parse((0,q.readFileSync)(r,"utf-8")).pid!==process.pid)return;(0,q.unlinkSync)(r)}catch{}}var Qc=require("node:child_process"),Zc=require("node:util");C();U();var vn=(0,Zc.promisify)(Qc.execFile),om=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;function Jc(r){return om.test(r.trim())}function am(r,e){if(!r)return!1;let t=r.toLowerCase().replace(/\\/g,"/"),n=t.indexOf("--data-dir");if(n<0)return!1;let s=t.slice(n+10).trim();if(s.startsWith('"')){let o=s.indexOf('"',1);s=o<0?s.slice(1):s.slice(1,o)}let i=e.toLowerCase().replace(/\\/g,"/");return s===i||s.startsWith(i)&&s[i.length]==="/"}function Rn(r,e){return e===void 0?r:Math.max(1,Math.min(r,e))}async function cm(r){try{let e=await vn("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:Rn(3e4,r),windowsHide:!0,maxBuffer:33554432}),t=JSON.parse(e.stdout),n=Array.isArray(t)?t:t===null?[]:[t],s=[];for(let i of n){let o=typeof i.Name=="string"?i.Name.trim():"";if(!o)continue;let a=typeof i.ProcessId=="number"?i.ProcessId:Number.parseInt(String(i.ProcessId),10),c=typeof i.ParentProcessId=="number"?i.ParentProcessId:Number.parseInt(String(i.ParentProcessId),10);!Number.isInteger(a)||!Number.isInteger(c)||s.push({pid:a,ppid:c,name:o,cmdline:typeof i.CommandLine=="string"?i.CommandLine:null,startToken:typeof i.StartToken=="string"&&i.StartToken.length>0?i.StartToken:null})}return s}catch(e){return f.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 lm(r,e){try{let t=await vn("netstat",["-ano"],{timeout:Rn(15e3,e),windowsHide:!0,maxBuffer:16777216});return pm(t.stdout,r)}catch(t){return f.warn("PROCESS","netstat failed \u2014 ghost-port reclaim disabled for this attempt",{port:r,error:t instanceof Error?t.message:String(t)}),null}}async function um(r,e){try{let t=await vn("lsof",["-nP",`-iTCP:${r}`,"-sTCP:LISTEN","-t"],{timeout:Rn(1e4,e),maxBuffer:1048576});return dm(t.stdout)}catch(t){let n=t;return n.code===1&&typeof n.stdout=="string"&&n.stdout.trim()===""?[]:(f.warn("PROCESS","lsof failed \u2014 cannot verify the worker port owner",{port:r,error:t instanceof Error?t.message:String(t)}),null)}}function dm(r){let e=new Set;for(let t of r.split(/\r?\n/)){let n=Number.parseInt(t.trim(),10);Number.isInteger(n)&&n>0&&e.add(n)}return[...e]}async function fm(r,e){try{let n=(await vn("ps",["-p",String(r),"-o","command="],{timeout:Rn(5e3,e)})).stdout.trim();return n.length>0?n:null}catch{return null}}function pm(r,e){let t=new Set,n=`:${e}`;for(let s of r.split(/\r?\n/)){let i=s.trim();if(!/^TCP\b/i.test(i))continue;let o=i.split(/\s+/);if(!o[1]?.endsWith(n)||o[3]!=="LISTENING")continue;let c=Number.parseInt(o[4]??"",10);Number.isInteger(c)&&c>0&&t.add(c)}return[...t]}var gm=/worker-service/i,el=1500,tl=1e3,$i=5500,Xc=2*el+tl+$i;async function mm(r,e){let t=e.readOwnedWorker();if(t===null||t.port!==r)return null;let n=(l,u={})=>(f.info("PROCESS","Wedged-worker reclaim declined",{port:r,pid:t.pid,reason:l,...u}),{reclaimed:!1,reason:l,killedPids:[]}),s=(e.now()-Date.parse(t.startedAt))/1e3;if(!Number.isFinite(s)||s<e.minOwnerAgeSeconds)return n("owner-booting",{ageSeconds:s,minOwnerAgeSeconds:e.minOwnerAgeSeconds});for(let l=0;l<2;l++)if(l>0&&await e.sleep(tl),await e.probeHealth(r))return n("owner-responding");let i=await e.listOwners(r);if(i===null)return n("netstat-unreadable");if(!i.includes(t.pid))return f.info("PROCESS","Wedged-worker reclaim: our worker does not own the port \u2014 deferring to the ghost-listener check",{port:r,pid:t.pid,listeners:i}),null;let o=await e.readIdentity(t.pid),a=t.startToken!==void 0&&o.startToken!==null&&o.startToken!==t.startToken;if(a||o.cmdline===null||!gm.test(o.cmdline))return n("owner-identity-mismatch",{tokenMismatch:a,hasCmdline:o.cmdline!==null});if(!e.hasKillBudget())return n("out-of-budget");f.warn("PROCESS","Reclaiming wedged worker: past its boot grace, silent on two health probes, and still holding the port",{port:r,pid:t.pid,ageSeconds:Math.round(s)});try{await e.killTree(t.pid,{expectedStartToken:o.startToken??t.startToken??void 0,signalMode:"graceful"})}catch(l){return f.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:r,pid:t.pid},l instanceof Error?l:new Error(String(l))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let c=await e.listOwners(r);return c!==null&&c.length===0?(f.info("PROCESS","Wedged worker reclaimed \u2014 port is free again",{port:r,killedPids:[t.pid]}),{reclaimed:!0,killedPids:[t.pid]}):(f.warn("PROCESS","Wedged-worker reclaim killed the worker but the port is still bound",{port:r,pid:t.pid,stillOwnedBy:c}),{reclaimed:!1,reason:"still-bound",killedPids:[t.pid]})}async function hm(r,e,t,n){let s=Me(r),i=e?(await t(n))?.find(o=>o.pid===r)?.cmdline??null:await fm(r,n);return ye(r,s)?{startToken:s,cmdline:i}:{startToken:null,cmdline:null}}async function rl(r,e={}){let t=e.isWin32??(()=>process.platform==="win32"),n=e.now??Date.now,s=e.deadlineAt??null,i=S=>s!==null&&s-n()<S,o=()=>s===null?void 0:Math.max(1,s-n());if(i(Xc))return f.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:r,remainingMs:o(),neededMs:Xc}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((S,P)=>t()?lm(S,P):um(S,P)),c=S=>a(S,o()),l=e.readTable??cm,u=()=>l(o()),d=e.killTree??((S,P)=>ue(S,P)),p=e.dataDir??(()=>F),g=e.readIdentity??((S,P)=>hm(S,t(),l,P)),m=await mm(r,{listOwners:c,killTree:d,readOwnedWorker:e.readOwnedWorker??ze,probeHealth:e.probeHealth??(S=>Gc(S,el)),readIdentity:S=>g(S,o()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??Ma(),now:n,sleep:e.sleep??(S=>new Promise(P=>setTimeout(P,S))),hasKillBudget:()=>!i($i)});if(m!==null)return m;if(!t())return{reclaimed:!1,reason:"not-supported",killedPids:[]};let h=await c(r);if(h===null)return{reclaimed:!1,reason:"netstat-unreadable",killedPids:[]};if(h.length===0)return{reclaimed:!1,reason:"no-listener",killedPids:[]};let E=await u();if(E===null)return{reclaimed:!1,reason:"table-unreadable",killedPids:[]};if(h.filter(S=>z(S)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let b=new Map;for(let S of E){let P=b.get(S.ppid);P?P.push(S):b.set(S.ppid,[S])}let w=new Map,T=new Set,M=S=>{for(let P of b.get(S)??[])T.has(P.pid)||(T.add(P.pid),M(P.pid),Jc(P.name)&&w.set(P.pid,P))};for(let S of h)M(S);let R=p();if(R)for(let S of E)w.has(S.pid)||Jc(S.name)&&am(S.cmdline,R)&&w.set(S.pid,S);if(w.size===0)return f.info("PROCESS","Ghost listener owner is dead but no chroma-sidecar descendants found",{port:r,deadOwners:h,processTableRows:E.length,dataDir:R??"(unresolved)"}),{reclaimed:!1,reason:"no-chroma-descendants",killedPids:[]};f.warn("PROCESS","Reclaiming ghost listener: killing dead worker's surviving chroma sidecar chain",{port:r,deadOwners:h,targets:[...w.values()].map(S=>({pid:S.pid,name:S.name}))});let y=[];for(let S of w.values()){if(i($i))return f.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:r,killedPids:y}),{reclaimed:!1,reason:"out-of-budget",killedPids:y};try{await d(S.pid,{expectedStartToken:S.startToken,signalMode:"immediate"}),y.push(S.pid)}catch(P){return f.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:r,pid:S.pid},P instanceof Error?P:new Error(String(P))),{reclaimed:!1,reason:"kill-failed",killedPids:y}}}let A=await c(r);return A!==null&&A.length===0?(f.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:r,killedPids:y}),{reclaimed:!0,killedPids:y}):(f.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:r,killedPids:y,stillOwnedBy:A}),{reclaimed:!1,reason:"still-bound",killedPids:y})}ce();var It=require("fs"),sl=require("module"),Ye=Ee(require("path"),1),_m=["zod/v3","zod/v4","zod/v4-mini"];function nl(r){try{return(0,It.realpathSync)(r)}catch{return r}}function Em(r,e){let t=Ye.default.relative(e,r);return t!==""&&!t.startsWith("..")&&!Ye.default.isAbsolute(t)}function il(r){let e;try{let s=JSON.parse((0,It.readFileSync)(Ye.default.join(r,"package.json"),"utf-8"));e=Object.keys(s?.dependencies??{})}catch{return[]}if(e.length===0)return[];let t=Ye.default.join(r,"node_modules"),n=e.filter(s=>!(0,It.existsSync)(Ye.default.join(t,...s.split("/"),"package.json")));if(e.includes("zod")&&!n.includes("zod")){let s=(0,sl.createRequire)(Ye.default.join(t,"noop.js")),i=nl(Ye.default.join(t,"zod"));for(let o of _m)try{let a=s.resolve(o,{paths:[t]});Em(nl(a),i)||n.push(o)}catch{n.push(o)}}return n}function _l(r,e,t){let n=process.env[r];if(n){let s=parseInt(n,10);if(Number.isFinite(s)&&s>=t.min&&s<=t.max)return s;f.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max})}return e}var ft=_l("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Re(Y.HEALTH_CHECK),{min:500,max:3e5}),tr=_l("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Re(Y.HOOK_READINESS_WAIT),{min:0,max:3e5}),Sm=5e3,ym={min:500,max:3e5},bm={min:500,max:Y.SESSION_INIT_REQUEST_MAX},Hi=100;function El(r=process.env){let e=r.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="on"||t==="yes"}function wm(r){return El()?{...r,verbose:!0}:r}function Tm(r){let e={},t=r;for(let n=0;t&&n<4;n++){let s=n===0?"error":`cause${n}`;if(t instanceof Error){let i=t;e[s]={name:t.name,message:t.message,...i.code!==void 0?{code:i.code}:{}},t=t.cause;continue}e[s]=String(t);break}return e}function Am(r,e,t){let n=typeof e.method=="string"?e.method:"GET",s=Tm(t),i=JSON.stringify(s);f.warn("SYSTEM","Worker IPC fetch failed",{url:r,method:n},i),Le(`[claude-mem] fetch verbose: ${n} ${r} ${i}
|
|
22
|
+
`)}async function ji(r,e={}){let t=wm(e);try{return await fetch(r,t)}catch(n){throw El()&&Am(r,e,n),n}}async function Ki(r,e={},t){try{return await ji(r,{...e,signal:AbortSignal.timeout(t)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${t}ms`):n}}function vm(r,e){let t=new AbortController,n=null,s=null,i=null,o=!1,a=()=>{s!==null&&(clearTimeout(s),s=null)},c=()=>{o=!0,a(),i!==null&&(clearTimeout(i),i=null)},l=d=>{o||(n=d,c(),t.abort(d))},u=()=>{o||(a(),s=setTimeout(()=>l(new Error(`Request timed out after ${r.idleTimeoutMs}ms idle`)),r.idleTimeoutMs))};if(r.absoluteCapMs!==void 0&&r.absoluteCapMs>0){let d=r.absoluteCapMs;i=setTimeout(()=>l(new Error(`Request timed out after ${d}ms`)),d)}return u(),{signal:e?AbortSignal.any([e,t.signal]):t.signal,touch:u,pause:a,dispose:c,translate:d=>n??d}}async function Sl(r,e,t){let n=vm(t,e.signal),s;try{s=await ji(r,{...e,signal:n.signal})}catch(l){throw n.dispose(),n.translate(l)}n.touch();let i=s.body,o=i?i.getReader():null,a=!1;async function*c(){if(!o){a=!0,n.dispose();return}try{for(;;){n.touch();let l;try{l=await o.read()}catch(u){throw a=!0,n.translate(u)}if(l.done){a=!0;return}n.pause(),t.onChunk?.(l.value),yield l.value}}finally{n.dispose(),a||await o.cancel()}}return{status:s.status,statusText:s.statusText,ok:s.ok,headers:s.headers,chunks:c(),cancel:async()=>{n.dispose(),o&&!a&&(a=!0,await o.cancel())}}}async function Rm(r,e,t){let n=await Sl(r,e,t),s=new TextDecoder,i="";for await(let o of n.chunks)i+=s.decode(o,{stream:!0});return i+=s.decode(),{status:n.status,statusText:n.statusText,ok:n.ok,headers:n.headers,text:i}}var Mn=null,Cn=null,In=null,Pn=null,On=null;function Mm(){return D.default.join(B.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Gi(){return In!==null||(In=B.loadFromFile(Mm())),In}function ol(r,e){if(!r)return null;let t=parseInt(r,10);return Number.isFinite(t)&&t>=e.min&&t<=e.max?t:null}function yl(r,e,t){let n=process.env[r];if(n!==void 0){let o=ol(n,t);return o!==null?o:(f.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max}),e)}let s=Gi()[r],i=ol(s,t);return i!==null?i:(f.warn("SYSTEM",`Invalid ${r} in settings.json, using default`,{value:s,min:t.min,max:t.max}),e)}function fe(){if(Mn!==null)return Mn;let r=Gi();return Mn=parseInt(r.CLAUDE_MEM_WORKER_PORT,10),Mn}function zi(){return Cn!==null||(Cn=Gi().CLAUDE_MEM_WORKER_HOST),Cn}function Cm(){return Pn!==null||(Pn=yl("CLAUDE_MEM_API_TIMEOUT_MS",Re(Y.API_REQUEST),ym)),Pn}function bl(){return On!==null||(On=Math.min(yl("CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS",Yt(),bm),Ca())),On}function Vi(r){return r===null?null:Math.max(0,r-Date.now())}function Dn(r){let e=Vi(r);return e!==null&&e<Hi}function qe(r,e){let t=Vi(e);return t===null?r:Math.max(1,Math.min(r,t))}function wl(r){return`http://${ai(zi())}:${fe()}${r}`}function Ce(r,e={}){let t=e.method??"GET",n=wl(r),s={method:t};if(e.headers&&(s.headers=e.headers),e.body&&(s.body=e.body),e.idleTimeoutMs!==void 0&&e.idleTimeoutMs>0)return Rm(n,s,{idleTimeoutMs:e.idleTimeoutMs,absoluteCapMs:e.timeoutMs}).then(o=>new Response(o.text.length>0?o.text:null,{status:o.status,statusText:o.statusText,headers:o.headers}));let i=e.timeoutMs??Cm();return i>0?Ki(n,s,i):ji(n,s)}async function Im(r){return(await Ce("/api/health",{timeoutMs:r})).ok}async function al(r=ft){return(await Ce("/api/readiness",{timeoutMs:r})).ok}function Tl(r){let e=(0,I.existsSync)(D.default.join(r,"plugin","scripts"))?D.default.join(r,"plugin"):r;return D.default.join(e,"scripts","worker-service.cjs")}function Pm(r,e){let t=d=>{let p=d.split("-")[0].split(".");return[parseInt(p[0],10)||0,parseInt(p[1],10)||0,parseInt(p[2],10)||0]},[n,s,i]=t(r),[o,a,c]=t(e);if(o!==n)return o-n;if(a!==s)return a-s;if(c!==i)return c-i;let l=r.includes("-")?1:0,u=e.includes("-")?1:0;return l!==u?l-u:r<e?1:r>e?-1:0}function Om(r=D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem")){try{return(0,I.readdirSync)(r).filter(e=>/^\d/.test(e)).map(e=>D.default.join(r,e)).filter(e=>{try{if(!(0,I.statSync)(e).isDirectory())return!1}catch{return!1}return!(0,I.existsSync)(D.default.join(e,".orphaned_at"))}).map(e=>({scriptPath:Tl(e),version:D.default.basename(e)}))}catch{return[]}}function cl(r){try{let e=JSON.parse((0,I.readFileSync)(r,"utf-8"));return typeof e.version=="string"?e.version:null}catch(e){let t=e.code;return t!=="ENOENT"&&f.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:r,code:t}),null}}function km(){return{cacheRoot:D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem"),marketplaceRoot:At,cwd:process.cwd()}}function Yi(r=km()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if((0,I.existsSync)(e))return{scriptPath:e,version:null};f.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let t=[...Om(r.cacheRoot),{scriptPath:Tl(D.default.join(r.marketplaceRoot,"plugin")),version:cl(D.default.join(r.marketplaceRoot,"package.json"))},{scriptPath:D.default.join(r.cwd,"plugin","scripts","worker-service.cjs"),version:cl(D.default.join(r.cwd,"package.json"))}];return Lm(t)}function Dm(r){return D.default.dirname(D.default.dirname(r))}function xm(r){return il(Dm(r.scriptPath)).length===0}function Lm(r,e=xm){let t=r.filter(n=>(0,I.existsSync)(n.scriptPath));return t.length===0?null:(t.sort((n,s)=>n.version===null&&s.version===null?0:n.version===null?1:s.version===null?-1:Pm(n.version,s.version)),t.find(e)??t[0])}function Fm(){return Yi()?.scriptPath??null}async function Nm(r){let e=r.deadlineAt??null,t=r.backoffMs;for(let n=1;n<=r.attempts;n++){if(Dn(e))return!1;if(await kl(e??Number.POSITIVE_INFINITY))return!0;n<r.attempts&&(await new Promise(s=>setTimeout(s,qe(t,e))),t*=2)}return!1}function ll(r){return r instanceof Error&&/^Request timed out after \d+ms idle$/.test(r.message)}function ul(r){return r instanceof Error&&/^Request timed out after \d+ms$/.test(r.message)}async function Um(r){let e;try{e=await Sl(wl("/api/ready"),{method:"GET"},{idleTimeoutMs:Sm,absoluteCapMs:Math.max(1,r)})}catch(i){return ll(i)?{outcome:"unresponsive",detail:"no response headers within the idle window"}:ul(i)?{outcome:"still_booting",detail:"budget spent before response headers"}:(f.debug("SYSTEM","Worker /api/ready connection failed",{error:i instanceof Error?i.message:String(i)}),{outcome:"not_running"})}let t=()=>e.cancel().catch(i=>{f.debug("SYSTEM","Releasing the /api/ready body failed",{error:i instanceof Error?i.message:String(i)})}),n=e.headers?.get("content-type")??"";if(!e.ok||!n.includes("text/event-stream"))return xn(),await t(),{outcome:"unsupported"};let s=null;try{for await(let i of Ya(e.chunks)){if(i.event!=="phase")continue;let o=JSON.parse(i.data);if(s=typeof o.phase=="string"?o.phase:null,s==="ready")return xn(),await t(),{outcome:"ready"};if(s==="failed")return await t(),{outcome:"failed",detail:typeof o.message=="string"?o.message:"unknown init failure"}}}catch(i){return ul(i)?(xn(),{outcome:"still_booting",detail:`last phase ${s??"none"}`}):ll(i)?{outcome:"unresponsive",detail:`silent past the idle window after response headers (last phase ${s??"none"})`}:{outcome:"wedged",detail:`stream error: ${i instanceof Error?i.message:String(i)} (last phase ${s??"none"})`}}return{outcome:"wedged",detail:`stream closed before ready/failed (last phase ${s??"none"})`}}async function $m(r){if(r<=0)try{return await al()?{outcome:"ready"}:{outcome:"still_booting"}}catch(t){return f.debug("SYSTEM","Worker readiness check threw",{},t instanceof Error?t:new Error(String(t))),{outcome:"still_booting"}}let e=Date.now();do{let t=r-(Date.now()-e);try{if(await al(Math.max(1,Math.min(ft,t))))return{outcome:"ready"}}catch(s){f.debug("SYSTEM","Worker readiness check threw",{error:s instanceof Error?s.message:String(s)})}let n=r-(Date.now()-e);if(n<=0)break;await new Promise(s=>setTimeout(s,Math.min(250,n)))}while(Date.now()-e<r);return{outcome:"still_booting",detail:"legacy /api/readiness never reported ready"}}async function Pt(r=tr){let e=r>0?r:ft,t=await Um(e);return t.outcome==="ready"&&zm(),t.outcome!=="unsupported"?t:(f.debug("SYSTEM","Worker has no /api/ready stream; falling back to /api/readiness"),$m(r))}async function Bm(r=ft){try{let t=await(await Ce("/api/health",{timeoutMs:r})).json();return typeof t.version=="string"?t.version:null}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("SYSTEM","Worker health-version fetch failed",{},t),null}}async function Wm(r=5e3){let e=Date.now()+r;for(;;){let t=e-Date.now();if(t<=0)return!1;if(await Tn(fe(),Math.min(1e3,t))==="free")return!0;let n=Math.min(200,e-Date.now());n>0&&await new Promise(s=>setTimeout(s,n))}}function Al(r,e){if(!r)return null;try{let t=(0,I.statSync)(r.scriptPath);return JSON.stringify([r.scriptPath,e,t.size,t.mtimeMs,t.ctimeMs])}catch{return null}}function vl(){return D.default.join(se(),"worker-version-recycle.json")}function Hm(r,e){if(r===null||e===null)return!1;try{let t=JSON.parse((0,I.readFileSync)(vl(),"utf-8"));return t?.buildKey===r&&t?.workerVersion===e}catch{return!1}}async function dl(r,e=null,t=ft){let n=await Bm(t);if(n!==null&&n!==r){if(e!==null)try{j(vl(),{buildKey:e,workerVersion:n})}catch(s){f.warn("SYSTEM","Could not persist the failed worker version recycle",{error:s instanceof Error?s.message:String(s)})}f.warn("SYSTEM","Worker is ready but still reports a stale version; rebuild or reinstall the worker bundle before retrying",{pluginVersion:r,workerVersion:n})}}var Rl=3e4;function qi(){return D.default.join(se(),"worker-unresponsive.json")}function jm(){try{let r=JSON.parse((0,I.readFileSync)(qi(),"utf-8"));return typeof r?.pid!="number"||typeof r?.firstUnresponsiveAtEpochMs!="number"?null:{pid:r.pid,firstUnresponsiveAtEpochMs:r.firstUnresponsiveAtEpochMs}}catch{return null}}function xn(){let r=qi();if((0,I.existsSync)(r))try{(0,I.unlinkSync)(r)}catch(e){f.debug("SYSTEM","Could not clear the unresponsive-worker record",{error:e instanceof Error?e.message:String(e)})}}function Km(r=Date.now()){let e=ze()?.pid??null;if(e===null)return!1;let t=jm();if(t!==null&&t.pid===e)return r-t.firstUnresponsiveAtEpochMs>=Rl;try{j(qi(),{pid:e,firstUnresponsiveAtEpochMs:r})}catch(n){f.warn("SYSTEM","Could not persist the unresponsive-worker record",{error:n instanceof Error?n.message:String(n)})}return!1}function Ji(){return D.default.join(se(),"worker-never-ready-recycle.json")}function Gm(){try{let r=JSON.parse((0,I.readFileSync)(Ji(),"utf-8"));return typeof r?.buildKey!="string"||typeof r?.failureMessage!="string"?null:{buildKey:r.buildKey,failureMessage:r.failureMessage,refusalLogged:r.refusalLogged===!0}}catch{return null}}function Ml(r){try{j(Ji(),r)}catch(e){f.warn("SYSTEM","Could not persist the never-ready worker recycle",{error:e instanceof Error?e.message:String(e)})}}function zm(){let r=Ji();if((0,I.existsSync)(r))try{(0,I.unlinkSync)(r)}catch(e){f.debug("SYSTEM","Could not clear the never-ready worker recycle record",{error:e instanceof Error?e.message:String(e)})}}function Cl(r){return Al(r,r?.version??"unknown")??"unresolved-worker-bundle"}function Il(r){return r.outcome==="failed"?r.detail??"unknown init failure":r.outcome}function Pl(r,e){if(r.outcome==="unresponsive"&&!Km())return f.warn("SYSTEM","Worker went silent on /api/ready; skipping this hook without killing it",{detail:r.detail,wedgedAfterMs:Rl}),!1;let t=Il(r),n=Gm();return n!==null&&n.buildKey===e&&n.failureMessage===t?(n.refusalLogged?f.debug("SYSTEM","Never-ready worker recycle already refused for this bundle and failure",{failureMessage:t}):(f.error("SYSTEM","Worker keeps failing to start the same way after a recycle; not recycling again. Run `npx claude-mem doctor` and check the worker logs",{outcome:r.outcome,failureMessage:t,logsDir:D.default.join(se(),"logs")}),Ml({...n,refusalLogged:!0})),!1):!0}function Ol(r,e){Ml({buildKey:e,failureMessage:Il(r)}),xn()}async function kl(r=Number.POSITIVE_INFINITY){let e=r-Date.now();if(e<=0)return!1;let t;try{t=await Im(Math.min(ft,e))}catch(n){return f.debug("SYSTEM","Worker health check threw",{error:n instanceof Error?n.message:String(n)}),!1}return t}async function Dl(r,e){let t=ze();if(t===null||t.port!==fe())return f.error("SYSTEM","Stale worker is serving the port but the PID file does not identify it; kill the claude-mem worker process manually",{port:fe(),pidFilePid:t?.pid??null,pidFilePort:t?.port??null}),!1;if(e("stale-worker recycle"))return!1;try{await ue(t.pid,{signalMode:"immediate"})}catch(n){return f.error("SYSTEM","Could not kill stale worker",{pid:t.pid,port:t.port},n instanceof Error?n:new Error(String(n))),!1}return await Wm(qe(5e3,r))?!0:(e("stale port release")||(dt=fe(),f.error("SYSTEM","Stale worker port still open after SIGKILL; skipping spawn this hook event",{pid:t.pid,port:fe(),fix:Fn})),!1)}async function Ln(r){let e=r===void 0?null:Date.now()+r,t=h=>Dn(e)?(f.warn("SYSTEM","Worker check ran out of the hook budget; skipping the rest this hook event",{step:h,budgetMs:r}),!0):!1,n=()=>e===null?void 0:qe(ft,e),s=Math.min(Date.now()+5e3,e??Number.POSITIVE_INFINITY),i=Yi(),o=null,a=null,c=!1,l=null,u=null,d=en(le());if(t("health probe"))return!1;if(await kl(s)){if(t("version probe"))return!1;let{matches:h,pluginVersion:E,workerVersion:_}=await zc(fe(),i?.version??null,n());if(E!=="unknown"&&(o=E),h){if(t("readiness wait"))return!1;let b=await Pt(qe(tr,e));if(b.outcome==="ready")return o!==null&&!Dn(e)&&await dl(o,null,n()),!0;if(b.outcome==="still_booting"||b.outcome==="not_running")return f.warn("SYSTEM","Worker is healthy but not ready yet; skipping hook API call",{outcome:b.outcome,detail:b.detail}),!1;if(d)return f.warn("SYSTEM","Worker will never become ready; CLAUDE_MEM_WORKER_AUTOSTART=false, so leaving it to whatever manages it",{outcome:b.outcome,detail:b.detail}),!1;if(u=Cl(i),!Pl(b,u))return!1;l=b,f.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:b.outcome,detail:b.detail,version:_})}else{if(d)return f.warn("SYSTEM","Worker version differs from the installed plugin; CLAUDE_MEM_WORKER_AUTOSTART=false, so using it as is",{pluginVersion:E,workerVersion:_}),t("readiness wait")?!1:(await Pt(qe(tr,e))).outcome==="ready";if(a=Al(i,E),Hm(a,_))return f.warn("SYSTEM","Skipping repeated worker recycle: the unchanged bundle still reports a stale version; rebuild or reinstall it",{pluginVersion:E,workerVersion:_,scriptPath:i?.scriptPath}),t("readiness wait")?!1:(await Pt(qe(tr,e))).outcome==="ready";f.info("SYSTEM","Worker version mismatch \u2014 killing stale worker",{pluginVersion:E,workerVersion:_})}if(!await Dl(e,t))return!1;l!==null&&u!==null&&Ol(l,u),c=!0}if(d)return f.debug("SYSTEM","Worker not running and CLAUDE_MEM_WORKER_AUTOSTART=false \u2014 not lazy-spawning"),!1;let p=i?.scriptPath??null;if(t("lazy spawn"))return!1;let g=Ni();try{if(g){if(!c&&!await Vm(s,e))return!1;let E=ki();if(!E)return f.warn("SYSTEM","Cannot lazy-spawn worker: Bun runtime not found (PATH, BUN / BUN_PATH / BUN_INSTALL, or ~/.bun/bin)"),!1;if(!p)return f.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;f.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:E,scriptPath:p});try{if(xi(E,p,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Vi(e)??void 0)===void 0)return!1}catch(_){return _ instanceof Error?f.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:E,scriptPath:p},_):f.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:E,scriptPath:p,error:String(_)}),!1}}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await Nm({attempts:6,backoffMs:500,deadlineAt:e}))return t("cold-boot port wait")||(f.warn("SYSTEM",g?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),ze()===null&&await Kc(fe(),e===null?void 0:qe(5e3,e))&&(dt=fe(),f.error("SYSTEM","Worker port is occupied by an unreachable process that no PID file claims (likely an orphaned OS socket); every lazy-spawn on this port will be silently refused",{port:dt,fix:Fn}))),!1}finally{g&&Ui()}if(t("readiness wait"))return!1;let m=await Pt(qe(tr,e));return m.outcome!=="ready"?(f.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout",{outcome:m.outcome,detail:m.detail}),!1):(o!==null&&!Dn(e)&&await dl(o,a,n()),!0)}var Fn="Set CLAUDE_MEM_WORKER_PORT to a different port in claude-mem settings, or reboot to release the stuck port",dt=null,Wi=null;async function Vm(r,e){let t=fe(),n=r-Date.now();if(n<=0)return!1;let s=await Tn(t,n);if(s==="free")return!0;if(s==="unbindable")return Wi=t,f.error("SYSTEM","Worker port cannot be bound (EACCES or EADDRNOTAVAIL) \u2014 skipping lazy-spawn",{port:t,host:zi(),fix:Li}),!1;if(s==="indeterminate")return f.warn("SYSTEM","Worker port state could not be determined in time \u2014 skipping lazy-spawn",{port:t}),!1;let i=await rl(t,{deadlineAt:e});return i.reclaimed?(f.info("SYSTEM","Reclaimed the worker port before lazy-spawn",{port:t,killedPids:i.killedPids}),!0):(ze()===null&&(dt=t),f.warn("SYSTEM","Worker port is held by a listener that does not answer health \u2014 skipping lazy-spawn",{port:t,reclaimReason:i.reason,...dt===t?{fix:Fn}:{}}),!1)}var kn=null;async function Ym(r){return kn!==null||(kn=await Ln(r)),kn}async function qm(r){let e=Date.now()+r,t=()=>e-Date.now(),n=l=>t()>=Hi?!1:(f.debug("SYSTEM","Bounded worker startup ran out of budget",{step:l,budgetMs:r}),!0),s=await Pt(Math.max(1,t()));if(s.outcome==="ready")return!0;if(s.outcome==="still_booting")return f.warn("SYSTEM","Worker is still booting; bounded startup budget spent, skipping this call",{detail:s.detail,budgetMs:r}),!1;if(!!en(le()))return fl(e);let o=ki(),a=Fm();if(!o||!a)return!1;if(s.outcome==="failed"||s.outcome==="wedged"||s.outcome==="unresponsive"){let l=Cl(Yi());if(!Pl(s,l)||(f.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:s.outcome,detail:s.detail}),!await Dl(e,n)))return!1;Ol(s,l)}let c=Ni();try{return c&&xi(o,a,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Math.max(1,t()))===void 0?!1:await fl(e)}catch(l){return f.debug("SYSTEM","Bounded worker startup failed",{error:l instanceof Error?l.message:String(l)}),!1}finally{c&&Ui()}}async function fl(r){for(;r-Date.now()>0;){let e=await Pt(Math.max(1,r-Date.now()));if(e.outcome==="ready")return!0;if(e.outcome!=="not_running")return f.debug("SYSTEM","Bounded worker startup did not reach ready",{outcome:e.outcome,detail:e.detail}),!1;let t=Math.min(100,r-Date.now());t>0&&await new Promise(n=>setTimeout(n,t))}return!1}var Jm=3,xl=20,Ll=1e3,Xm=10,Fl=5e3,Qm=Fl+Ll;function Nn(){return D.default.join(F,"state")}function Nl(){return D.default.join(Nn(),"hook-failures.json")}function Ul(){return D.default.join(Nn(),"hook-failures.lock")}async function Xi(r=Ll){let e=Nn(),t=Ul(),n=(0,hl.randomUUID)(),s=JSON.stringify({pid:process.pid,token:n}),i=Date.now()+r;for(;Date.now()<=i;)try{return(0,I.mkdirSync)(e,{recursive:!0}),(0,I.writeFileSync)(t,s,{flag:"wx"}),n}catch(o){let a=o instanceof Error?o:new Error(String(o)),c=a.code;if(c!=="EEXIST")return f.warn("SYSTEM","Hook-failure lock unavailable; skipping failure-state update",{lockPath:t,code:c},a),null;let l;try{l=(0,I.statSync)(t).mtimeMs}catch{continue}if(Date.now()-l>Fl){let u;try{u=(0,I.statSync)(t).mtimeMs}catch{continue}if(u===l)try{(0,I.unlinkSync)(t);continue}catch{}}await new Promise(u=>setTimeout(u,Xm))}return f.warn("SYSTEM","Timed out waiting for hook-failure lock; skipping failure-state update",{lockPath:t,waitMs:r}),null}function Qi(r){let e=Ul();try{if(JSON.parse((0,I.readFileSync)(e,"utf-8")).token!==r)return;(0,I.unlinkSync)(e)}catch{}}function Zm(r){let e=JSON.parse(r);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0,thresholdTripped:e.thresholdTripped===!0,notifiedSessionIds:Array.isArray(e.notifiedSessionIds)?e.notifiedSessionIds.filter(t=>typeof t=="string").slice(-xl):void 0}}function rr(){try{return Zm((0,I.readFileSync)(Nl(),"utf-8"))}catch{return{consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1}}}function Zi(r){let e=Nn(),t=Nl(),n=`${t}.tmp`;try{return(0,I.existsSync)(e)||(0,I.mkdirSync)(e,{recursive:!0}),(0,I.writeFileSync)(n,JSON.stringify(r),"utf-8"),(0,I.renameSync)(n,t),!0}catch(s){return f.debug("SYSTEM","Failed to persist hook-failure counter",{error:s instanceof Error?s.message:String(s)}),!1}}function eh(){try{let e=le().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,t=parseInt(e,10);if(Number.isFinite(t)&&t>=1)return t}catch{}return Jm}var pl=null;function $l(r){let e=Wi!==null?`The worker cannot bind port ${Wi} on ${zi()}: the system refuses it (EACCES or EADDRNOTAVAIL). ${Li}.`:dt!==null?`Port ${dt} is held by an unreachable process that no PID file claims, so the worker cannot bind it. ${Fn}.`:"Run `npx claude-mem restart`; if it keeps failing, run `npx claude-mem doctor`.";return`claude-mem worker unreachable for ${r} consecutive hooks \u2014 memory features are degraded, but your prompts are not blocked. ${e}`}var th=!1,gl=!1;async function Bi(){if(th){if(gl)return rr().consecutiveFailures;gl=!0}let r=await Xi();if(r===null)return rr().consecutiveFailures;let e,t=!1;try{let n=rr();e={consecutiveFailures:n.consecutiveFailures+1,lastFailureAt:Date.now(),thresholdTripped:n.thresholdTripped,notifiedSessionIds:n.notifiedSessionIds};let s=eh();t=e.consecutiveFailures>=s&&!e.thresholdTripped,t&&(e.thresholdTripped=!0);let i=Zi(e);t=t&&i}finally{Qi(r)}return t&&(await Ac("hook_failed",{...pl!==null?{hook_type:pl}:{},error_mode:"worker_unavailable",consecutive_failures:e.consecutiveFailures,threshold_tripped:!0}),Le(`${$l(e.consecutiveFailures)}
|
|
23
|
+
`)),e.consecutiveFailures}async function Bl(r){if(!r)return null;let e=await Xi();if(e===null)return null;try{let t=rr(),n=t.notifiedSessionIds??[];return!t.thresholdTripped||n.includes(r)?null:Zi({...t,notifiedSessionIds:[...n,r].slice(-xl)})?$l(t.consecutiveFailures):null}finally{Qi(e)}}async function ml(){let r=await Xi(Qm);if(r!==null)try{let e=rr();if(e.consecutiveFailures===0&&!e.thresholdTripped)return;Zi({consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1})}finally{Qi(r)}}var ut=Symbol.for("claude-mem/worker-fallback");function Wl(r){return typeof r=="object"&&r!==null&&r[ut]===!0}async function Hl(r,e,t,n={}){let s=Date.now(),i=n.workerStartupTimeoutMs!==void 0;if(!(i?await qm(n.workerStartupTimeoutMs):await Ym(n.timeoutMs)))return en(le())?{continue:!0,reason:"worker_autostart_disabled",[ut]:!0}:(i||await Bi(),{continue:!0,reason:"worker_unreachable",[ut]:!0});let a={method:e};if(t!==void 0&&(a.headers={"Content-Type":"application/json"},a.body=JSON.stringify(t)),n.timeoutMs!==void 0){let u=i?n.timeoutMs:n.timeoutMs-(Date.now()-s);if(u<Hi)return f.debug("SYSTEM","Hook budget spent before the worker request; skipping it",{url:r}),i||await Bi(),{continue:!0,reason:"worker_budget_exhausted",[ut]:!0};a.timeoutMs=u}let c;try{c=await Ce(r,a)}catch(u){if(!i)throw u;return f.debug("SYSTEM","Worker unavailable for best-effort hook call",{error:u instanceof Error?u.message:String(u)}),{continue:!0,reason:"worker_unreachable",[ut]:!0}}if(!c.ok){let u=await c.text().catch(()=>"");if(await ml(),c.status===429||c.status>=500)return f.warn("SYSTEM",`Worker API ${e} ${r} returned ${c.status}; skipping hook API call`,{body:u.substring(0,200)}),{continue:!0,reason:`worker_api_${c.status}`,[ut]:!0};let d=u;try{d=JSON.parse(u)}catch{}return d}let l;try{l=await c.text()}catch(u){return f.debug("SYSTEM","Worker response body could not be read; treating the worker as unreachable",{error:u instanceof Error?u.message:String(u)}),i||await Bi(),{continue:!0,reason:"worker_body_read_failed",[ut]:!0}}if(await ml(),l.length!==0)try{return JSON.parse(l)}catch{return l}}C();var Ie=require("path");U();var rh="plugins",nh="cache",sh="thedotmack",ih="claude-mem",oh="plugin",ah=(0,Ie.join)(rt,rh,nh,sh,ih),ch=(0,Ie.join)(At,oh);function eo(r,e){let t=(0,Ie.normalize)(r),n=(0,Ie.normalize)(e);if(t===n)return!0;let s=(0,Ie.relative)(n,t);return s.length>0&&!s.startsWith("..")&&!(0,Ie.isAbsolute)(s)}function Un(r){if(process.env.CLAUDE_MEM_INTERNAL==="1")return!1;if(!r)return!0;if(eo(r,qr)||eo(r,ah)||eo(r,ch))return!1;let e=le();return!En(r,e.CLAUDE_MEM_EXCLUDED_PROJECTS)}var jl="claude";function lh(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function Z(r){if(!r)return jl;let e=lh(r);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:jl}C();var $n=require("fs");C();U();ce();var uh=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s*[=:]\s*['"]?)[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}],dh=1024*1024,fh="<redacted type='oversize'/>";function zl(r,e){if(!e.enabled||r.length===0)return{redacted:r,counts:{},oversize:!1};if(r.length>dh)return f.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:r.length}),{redacted:fh,counts:{oversize:1},oversize:!0};let t=new Set(e.disabledBuiltinPatterns??[]),n={},s=r,i=[];for(let a of e.customPatterns??[]){if(!a.name||a.name.length===0){f.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:a});continue}try{i.push({name:a.name,regex:new RegExp(a.regex,"g")})}catch(c){f.warn("REDACT","custom pattern skipped: invalid regex",{name:a.name},c instanceof Error?c:new Error(String(c)))}}let o=[...i,...uh];for(let a of o)t.has(a.name)||(a.regex.lastIndex=0,s=s.replace(a.regex,()=>(n[a.name]=(n[a.name]??0)+1,`<redacted type='${a.name}'/>`)));return e.logMatches&&Object.keys(n).length>0&&f.debug("REDACT","patterns matched",void 0,{counts:n}),{redacted:s,counts:n,oversize:!1}}function ph(r){if(!r||r.trim()==="")return[];try{let e=JSON.parse(r);return Array.isArray(e)?e.filter(t=>t&&typeof t.name=="string"&&typeof t.regex=="string"):(f.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return f.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function gh(r){return{enabled:r.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(r.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:ph(r.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:r.CLAUDE_MEM_REDACT_LOG_MATCHES==="true"}}var nr=null,Kl=0,mh=5e3,sr=null,Gl=!1,hh={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},_h=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;function Eh(r){if(!(0,$n.existsSync)(r))return null;try{return(0,$n.readFileSync)(r,"utf-8")}catch{return""}}function Sh(r){if(r===null)return!1;try{let e=JSON.parse(Js(r));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function yh(r,e,t){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(sr?.enabled===!0||_h.test(e))?t:(Gl||(Gl=!0,f.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:r,using:sr?.enabled?"the last configuration that loaded":"the built-in patterns"})),sr?.enabled?sr:hh)}function Vl(r=ie){let e=Date.now();if(nr&&e-Kl<mh)return nr;let t=B.loadFromFile(r),n=gh(t),s=n.enabled?null:Eh(r);return Sh(s)?nr=yh(r,s,n):(nr=n,sr=n),Kl=e,nr}var Jl=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Yl=new RegExp(`<(${Jl.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g");var ql=100;function bh(r){let e=Object.fromEntries(Jl.map(i=>[i,0]));Yl.lastIndex=0;let t=0,n=r.replace(Yl,(i,o)=>(e[o]=(e[o]??0)+1,t+=1,""));return t>ql&&f.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:t,maxAllowed:ql,contentLength:r.length}),{stripped:zl(n.trim(),Vl()).redacted,counts:e}}function to(r){return bh(r).stripped}var wh=["task-notification"],Th=new RegExp(`^\\s*<(${wh.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),Ah=256*1024;function Xl(r){return!r||r.length>Ah?!1:Th.test(r)}var vh=[/^You are a helpful assistant\. You will be presented with a user prompt, and your job is to provide a short title/,/^## Memory Writing Agent: Phase 2 \(Consolidation\)/,/^# Overview\r?\n(?:\r?\n)?Generate 0 to 3 hyperpersonalized suggestions/];function Ql(r){let e=r.trimStart();return vh.some(t=>t.test(e))}C();var Rh=Re(Y.API_REQUEST),Ue=class extends Error{kind;status;cause;constructor(e,t,n={}){super(t),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Wn=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=Mh(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??Rh}async startSession(e,t={}){let n=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",n,t)}async recordEvent(e){let t=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,t)}async endSession(e){if(!e.sessionId)throw new Ue("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e,t={}){let n={projectId:e.projectId};return e.query!==void 0&&(n.query=e.query),e.limit!==void 0&&(n.limit=e.limit),e.platformSource!==void 0&&(n.platformSource=Bn(e.platformSource)),e.folderProjects&&e.folderProjects.length>0&&(n.folderProjects=e.folderProjects),e.excludeSubagents!==void 0&&(n.excludeSubagents=e.excludeSubagents),this.request("POST","/v1/context",n,t)}async getJobStatus(e){if(!e)throw new Ue("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let t=e.content,n=e.kind??"manual",s=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,content:t,...s?{title:s}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,t,n,s={}){if(!this.apiKey||!this.apiKey.trim())throw new Ue("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let i=`${this.baseUrl}${t}`,o={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(o.body=JSON.stringify(n));let a,c=s.timeoutMs??this.timeoutMs;try{a=await Ki(i,o,c)}catch(u){let d=u instanceof Error?u.message:String(u),p=/timed out|timeout/i.test(d);throw new Ue(p?"timeout":"transport",`Server ${e} ${t} failed: ${d}`,{cause:u})}if(!a.ok){let u=await a.text().catch(()=>"");throw new Ue("http_error",`Server ${e} ${t} returned ${a.status}: ${Ch(u,200)}`,{status:a.status})}let l=await a.text();if(!l||l.length===0)return{};try{return JSON.parse(l)}catch(u){let d=u instanceof Error?u:new Error(String(u));throw new Ue("invalid_response",`Server ${e} ${t} returned non-JSON response`,{cause:d})}}};function Zl(r){return r instanceof Ue}function Mh(r){return r.replace(/\/+$/,"")}function Bn(r){return typeof r=="string"?Z(r):null}function Ch(r,e){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function Ih(){let e=(le().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Ph(){let r=le(),e=(...o)=>{for(let a of o){let c=(a??"").trim();if(c.length>0)return c}return""},t=e(r.CLAUDE_MEM_SERVER_URL,r.CLAUDE_MEM_SERVER_BETA_URL),n=e(r.CLAUDE_MEM_SERVER_API_KEY,r.CLAUDE_MEM_SERVER_BETA_API_KEY),s=e(r.CLAUDE_MEM_SERVER_PROJECT_ID,r.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!t)return f.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return f.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!s)return f.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let i={serverBaseUrl:t,apiKey:n};return{runtime:"server",client:new Wn(i),projectId:s,serverBaseUrl:t}}function eu(){if(Ih()!=="server")return{runtime:"worker"};let r=Ph();return r||{runtime:"worker"}}function tu(r,e){f.warn("HOOK",`[server-fallback] reason=${r}`,e??{})}var Oh={executeWithWorkerFallback:Hl,getSessionInitRequestTimeoutMs:bl,isWorkerFallback:Wl,consumeWorkerOutageNotice:Bl,loadFromFileOnce:le,resolveRuntimeContext:eu,logServerFallback:tu,shouldTrackProject:Un,readHookEnvironment:()=>process.env},be=Oh,kh=2,ro=500,Dh=2e3;var Hn=class extends Error{constructor(t){super(`session-init did not record the prompt (${t})`);this.reason=t;this.name="SessionPromptNotRecordedError"}reason};function su(r){return Fh.run(r,!0)}var xh=r=>r?r.replace(/\\/g,"/").includes("/.qwen/"):!1,Lh=(r,e=process.env)=>r?e.QWEN_PROJECT_DIR?!0:xh(r):!1,Fh={async run(r,e){let{sessionId:t,prompt:n,submittedPrompt:s}=r,i=r.cwd??process.cwd();if(!t)return f.warn("HOOK","session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"),{continue:!0,suppressOutput:!0,exitCode:je.SUCCESS};if(!be.shouldTrackProject(i))return f.info("HOOK","Project excluded from tracking",{cwd:i}),{continue:!0,suppressOutput:!0};if(n&&Xl(n))return f.debug("HOOK","session-init: skipping internal protocol payload",{preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(n&&Z(r.platform)==="codex"&&Ql(n))return f.debug("HOOK","session-init: skipping a Codex internal helper prompt",{reason:"internal_system_prompt",preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(s===null)return f.debug("HOOK","session-init: host reported no user-submitted text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};if(s===void 0&&!n?.trim()&&Lh(r.transcriptPath,be.readHookEnvironment()))return f.debug("HOOK","session-init: Qwen send carried no submitted_prompt and no prompt text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};let o=s??n,a=!o||!o.trim()?"[media prompt]":o,c=ct(i),l=c.primary,u=Z(r.platform),d=be.loadFromFileOnce(),p=String(d.CLAUDE_MEM_SEMANTIC_INJECT).toLowerCase()==="true",g=be.resolveRuntimeContext(),m=Date.now(),h=be.getSessionInitRequestTimeoutMs();if(g.runtime==="server")try{return await Nh(g,r,t,u,l,a,Math.max(ro,Math.floor(h/kh))),{continue:!0,suppressOutput:!0}}catch(M){if(Zl(M)&&M.isFallbackEligible())be.logServerFallback(M.kind,{status:M.status,message:M.message,route:"/v1/sessions/start"});else return f.error("HOOK","Server session-start failed (non-recoverable)",{error:M instanceof Error?M.message:String(M)}),{continue:!0,suppressOutput:!0,exitCode:je.SUCCESS}}f.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:t,project:l});let E=ru(m,h);if(E<ro){if(f.warn("HOOK","session-init: skipping the worker call because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:E}),e)throw new Hn("budget_exhausted");return{continue:!0,suppressOutput:!0,exitCode:je.SUCCESS}}let _=await be.executeWithWorkerFallback("/api/sessions/init","POST",{contentSessionId:t,project:l,prompt:a,platformSource:u,cwd:i,projectKeySource:c.keySource},nu(u,E));if(be.isWorkerFallback(_)){if(e)throw new Hn("reason"in _?_.reason:"worker_fallback");let M=await be.consumeWorkerOutageNotice(t);return{continue:!0,suppressOutput:!0,exitCode:je.SUCCESS,...M?{systemMessage:M}:{}}}if(typeof _?.sessionDbId!="number")return f.failure("HOOK","Session initialization returned malformed response",{contentSessionId:t,project:l}),{continue:!0,suppressOutput:!0,exitCode:je.SUCCESS};let b=_.sessionDbId,w=_.promptNumber;if(f.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:b,promptNumber:w,skipped:_.skipped,contextInjected:_.contextInjected}),f.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${t} | prompt#=${w} | sessionDbId=${b}`),_.skipped&&_.reason==="private")return f.info("HOOK",`INIT_COMPLETE | sessionDbId=${b} | promptNumber=${w} | skipped=true | reason=private`,{sessionId:b}),{continue:!0,suppressOutput:!0};let T="";if(p&&a&&a.length>=20&&a!=="[media prompt]"){let M=d.CLAUDE_MEM_SEMANTIC_INJECT_LIMIT||"5",R=ru(m,h);if(R<ro)f.warn("HOOK","session-init: skipping semantic injection because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:R});else{let y=await be.executeWithWorkerFallback("/api/context/semantic","POST",{q:a,project:l,projects:c.allProjects,limit:M,platformSource:u},nu(u,R));!be.isWorkerFallback(y)&&y?.context&&(f.debug("HOOK",`Semantic injection: ${y.count} observations for prompt`,{sessionId:b,count:y.count}),T=y.context)}}return f.info("HOOK",`INIT_COMPLETE | sessionDbId=${b} | promptNumber=${w} | project=${l}`,{sessionId:b}),T?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:T}}:{continue:!0,suppressOutput:!0}}};async function Nh(r,e,t,n,s,i,o){await r.client.startSession({projectId:r.projectId,externalSessionId:t,contentSessionId:t,agentId:e.agentId??null,agentType:e.agentType??null,platformSource:n,metadata:{project:s,prompt:i}},{timeoutMs:o}),f.info("HOOK","session-init: server session started",{contentSessionId:t,project:s})}function ru(r,e){return Math.max(0,e-(Date.now()-r))}function nu(r,e){return r==="codex"?{workerStartupTimeoutMs:Y.POST_SPAWN_WAIT,timeoutMs:Math.min(Dh,e)}:{timeoutMs:e}}var io=require("crypto"),K=require("fs"),Pe=require("path");ce();U();C();var Uh=["observation","file_edit","summarize","session_end","advisor_calls"],$h=/^[a-z_]+-[A-Za-z0-9_-]+\.json$/,au=/^[A-Za-z0-9_-]{1,128}$/,Bh="corrupt",Wh="expired",iu=10080*60*1e3;function Hh(){return(0,Pe.join)(se(),"state","hook-spool")}function oo(r){if(r===null||typeof r!="object")return JSON.stringify(r)??"null";if(Array.isArray(r))return`[${r.map(oo).join(",")}]`;let e=r;return`{${Object.keys(e).filter(n=>e[n]!==void 0).sort().map(n=>`${JSON.stringify(n)}:${oo(e[n])}`).join(",")}}`}function jh(r,e){let t=e.toolUseId;return typeof t=="string"&&au.test(t)?`${(0,io.createHash)("sha256").update(e.contentSessionId).update("\0").update(Z(e.platformSource)).digest("hex")}-${t}`:(0,io.createHash)("sha256").update(r).update("\0").update(e.contentSessionId).update("\0").update(oo(e)).digest("hex")}function ou(r){return typeof r=="string"&&r.length>0}function no(r){let e;try{e=JSON.parse(r)}catch(i){return{corruptReason:`invalid JSON: ${i instanceof Error?i.message:String(i)}`}}if(e===null||typeof e!="object")return{corruptReason:"not an object"};let t=e;if(!Uh.includes(t.kind))return{corruptReason:`unknown kind ${JSON.stringify(t.kind)}`};if(typeof t.enqueuedAtEpochMs!="number"||!Number.isFinite(t.enqueuedAtEpochMs))return{corruptReason:"missing enqueuedAtEpochMs"};let n=t.payload;if(n===null||typeof n!="object"||!ou(n.contentSessionId))return{corruptReason:"payload missing contentSessionId"};let s=t.kind;return(s==="observation"||s==="file_edit")&&!ou(n.toolName)?{corruptReason:"observation payload missing toolName"}:s==="summarize"&&typeof n.lastAssistantMessage!="string"?{corruptReason:"summarize payload missing lastAssistantMessage"}:s==="advisor_calls"&&(!Array.isArray(n.calls)||n.calls.length===0)?{corruptReason:"advisor_calls payload has no calls"}:{kind:s,payload:{...n,platformSource:Z(n.platformSource)},enqueuedAtEpochMs:t.enqueuedAtEpochMs}}var so=0;function Kh(){return so=Math.max(Date.now(),so+1),so}var jn=class{constructor(e=Hh()){this.directory=e}directory;get corruptDirectory(){return(0,Pe.join)(this.directory,Bh)}get expiredDirectory(){return(0,Pe.join)(this.directory,Wh)}enqueue(e,t,n){let s={...t,platformSource:Z(t.platformSource)},i=(0,Pe.join)(this.directory,`${e}-${jh(e,s)}.json`),o=s.toolUseId;if(typeof o=="string"&&au.test(o)){let c=(0,Pe.join)(this.directory,`${e}-${o}.json`);try{let l=no((0,K.readFileSync)(c,"utf8"));!("corruptReason"in l)&&l.kind===e&&l.payload.contentSessionId===s.contentSessionId&&l.payload.platformSource===s.platformSource&&(i=c)}catch{}}let a=this.existingEnqueuedAt(i)??n??Kh();return j(i,{kind:e,payload:s,enqueuedAtEpochMs:a}),i}entries(){return this.readEntries().files.map(e=>e.entry)}async drain(e,t){let{files:n,quarantined:s}=this.readEntries(),i=0,o=0,a=0;t?.pruneConsumedBefore(Date.now()-iu);let c=new Set;for(let l of n){let u=l.filename.replace(/\.json$/,"");if(t?.isConsumed(u)){f.info("HOOK","Hook spool entry was already handed to ingest before a restart; removing it without ingesting again",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename}),this.unlinkEntry(l)?(t.clearConsumed(u),i++):o++;continue}let d=JSON.stringify([l.entry.payload.contentSessionId,l.entry.payload.platformSource]);if((l.entry.kind==="summarize"||l.entry.kind==="session_end")&&c.has(d)){o++;continue}let p=!1,g=()=>{if(!p){p=!0;try{t?.markConsumed(u,Date.now())}catch(h){f.error("HOOK","Could not record a hook spool hand-off marker; a crash before the file is removed would ingest it twice",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h)))}}},m;try{m=await e(l.entry,g)}catch(h){f.warn("HOOK",p?"Hook spool entry failed after ingest accepted it; removing it (a retry would send it twice)":"Hook spool entry failed to ingest; keeping it for the next drain",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h))),m=!1}if(p&&(m=!0),!m){this.expireIfPastRetryWindow(l)?a++:((l.entry.kind==="observation"||l.entry.kind==="file_edit")&&c.add(d),o++);continue}this.unlinkEntry(l)?(t?.clearConsumed(u),i++):o++}return{drained:i,retained:o,quarantined:s,expired:a}}unlinkEntry(e){try{return(0,K.unlinkSync)(e.path),!0}catch(t){return t.code==="ENOENT"?!0:(f.warn("HOOK","Hook spool entry was ingested but could not be removed",{kind:e.entry.kind,file:e.filename},t instanceof Error?t:new Error(String(t))),!1)}}expireIfPastRetryWindow(e){let t=Date.now()-e.entry.enqueuedAtEpochMs;if(t<=iu)return!1;let n={kind:e.entry.kind,contentSessionId:e.entry.payload.contentSessionId,ageHours:Math.round(t/36e5),file:e.filename,expiredDirectory:this.expiredDirectory};try{(0,K.mkdirSync)(this.expiredDirectory,{recursive:!0}),(0,K.renameSync)(e.path,(0,Pe.join)(this.expiredDirectory,e.filename))}catch(s){return f.error("HOOK","Hook spool entry is past its retry window but could not be moved to expired/; keeping it",n,s instanceof Error?s:new Error(String(s))),!1}return f.error("HOOK","Hook spool entry was never accepted within its retry window; moved to expired/",n),!0}existingEnqueuedAt(e){if(!(0,K.existsSync)(e))return null;try{let t=no((0,K.readFileSync)(e,"utf-8"));return"corruptReason"in t?null:t.enqueuedAtEpochMs}catch(t){return f.debug("HOOK","Could not read existing hook spool entry; writing a fresh one",{entryPath:e},t instanceof Error?t:new Error(String(t))),null}}quarantine(e,t){let n=(0,Pe.join)(this.directory,e);try{return(0,K.mkdirSync)(this.corruptDirectory,{recursive:!0}),(0,K.renameSync)(n,(0,Pe.join)(this.corruptDirectory,e)),f.error("HOOK","Quarantined corrupt hook spool entry",{file:e,reason:t,corruptDirectory:this.corruptDirectory}),!0}catch(s){return f.error("HOOK","Corrupt hook spool entry could not be quarantined; leaving it in place",{file:e,reason:t},s instanceof Error?s:new Error(String(s))),!1}}readEntries(){if(!(0,K.existsSync)(this.directory))return{files:[],quarantined:0};let e;try{e=(0,K.readdirSync)(this.directory).filter(s=>$h.test(s))}catch(s){return f.warn("HOOK","Could not list hook spool entries",{directory:this.directory},s instanceof Error?s:new Error(String(s))),{files:[],quarantined:0}}let t=[],n=0;for(let s of e){let i=(0,Pe.join)(this.directory,s),o;try{o=(0,K.readFileSync)(i,"utf-8")}catch(c){c.code!=="ENOENT"&&f.warn("HOOK","Could not read hook spool entry; will retry",{file:s},c instanceof Error?c:new Error(String(c)));continue}let a=no(o);if("corruptReason"in a){this.quarantine(s,a.corruptReason)&&n++;continue}t.push({entry:a,path:i,filename:s})}return t.sort((s,i)=>s.entry.enqueuedAtEpochMs-i.entry.enqueuedAtEpochMs||s.filename.localeCompare(i.filename)),{files:t,quarantined:n}}};C();var Gh=250,cu=new Set,ir=null;function zh(){if(ir)return ir;let r=(async()=>{try{await(await Ce("/api/spool/nudge",{method:"POST",timeoutMs:Gh})).body?.cancel()}catch(e){f.debug("HOOK","Hook spool nudge not delivered (worker will pick the entry up on its own)",{error:e instanceof Error?e.message:String(e)})}})();return ir=r,cu.add(r),r.finally(()=>{cu.delete(r),ir===r&&(ir=null)}),r}function or(r,e){let t=new jn().enqueue(r,e);return f.debug("HOOK","Hook event spooled for the worker",{kind:r,entryPath:t}),zh(),t}C();var lu={async execute(r){let{sessionId:e,cwd:t,filePath:n,edits:s}=r,i=Z(r.platform);if(!n)throw new Error("fileEditHandler requires filePath");if(f.dataIn("HOOK",`FileEdit: ${n}`,{editCount:s?.length??0}),!t)throw new Error(`Missing cwd in FileEdit hook input for session ${e}, file ${n}`);return Un(t)?(or("file_edit",{contentSessionId:e,platformSource:i,toolName:"write_file",toolInput:{filePath:n,edits:s},toolResponse:{success:!0},cwd:t}),f.debug("HOOK","File edit observation spooled",{filePath:n}),{continue:!0,suppressOutput:!0}):(f.debug("HOOK","Project excluded from tracking, skipping file edit observation",{cwd:t,filePath:n}),{continue:!0,suppressOutput:!0,exitCode:je.SUCCESS})}};U();C();var we=require("fs"),Gn=require("path");C();C();U();var ar="<claude-mem-context>",Kn="</claude-mem-context>";function uu(r){let e=r.indexOf(ar);if(e===-1)return null;let t=r.indexOf(Kn,e+ar.length);return t===-1?null:{start:r.lastIndexOf(ar,t),end:t+Kn.length}}var Jv=$.settings();function du(r,e){let t=`${ar}
|
|
24
24
|
${e}
|
|
25
25
|
${Kn}`;if(!r)return t;let n=uu(r);return n?r.substring(0,n.start)+t+r.substring(n.end):r+`
|
|
26
26
|
|
|
27
27
|
${t}`}C();function fu(r,e){if(!r)return;let t=(0,Gn.resolve)(r);if(t.includes("/.git/")||t.includes("\\.git\\")||t.endsWith("/.git")||t.endsWith("\\.git"))return;let n=(0,Gn.dirname)(r);(0,we.existsSync)(n)||(0,we.mkdirSync)(n,{recursive:!0});let s="";(0,we.existsSync)(r)&&(s=(0,we.readFileSync)(r,"utf-8"));let i=`# Memory Context
|
|
28
28
|
|
|
29
|
-
${e}`,o=du(s,i),a=`${r}.tmp`;try{(0,we.writeFileSync)(a,o),(0,we.renameSync)(a,r)}catch(c){f.error("AGENTS_MD","Failed to write AGENTS.md",{agentsPath:r},c instanceof Error?c:new Error(String(c)))}}C();function Gh(r){let e=r.trim().replace(/^\$\.?/,"");if(!e)return[];let t=[],n=e.split(".");for(let s of n){let i=/([^[\]]+)|\[(\d+)\]/g,o;for(;(o=i.exec(s))!==null;)o[1]?t.push(o[1]):o[2]&&t.push(parseInt(o[2],10))}return t}function cr(r,e){if(!e)return;let t=Gh(e),n=r;for(let s of t){if(n==null)return;n=n[s]}return n}function pu(r){return r==null||r===""}function gu(r,e){if(r.startsWith("$watch.")){let t=r.slice(7);return e.watch[t]}if(r.startsWith("$schema.")){let t=r.slice(8);return e.schema[t]}if(r.startsWith("$session.")){let t=r.slice(9);return e.session?e.session[t]:void 0}if(r==="$cwd")return e.watch.workspace;if(r==="$project")return e.watch.project}function Ot(r,e,t){if(r!==void 0){if(typeof r=="string"){let n=gu(r,t);return n!==void 0?n:cr(e,r)}if(r.coalesce&&Array.isArray(r.coalesce))for(let n of r.coalesce){let s=Ot(n,e,t);if(!pu(s))return s}if(r.path){let n=gu(r.path,t);if(n!==void 0)return n;let s=cr(e,r.path);if(!pu(s))return s}if(r.value!==void 0)return r.value;if(r.default!==void 0)return r.default}}function mu(r,e,t){let n={};if(!r)return n;for(let[s,i]of Object.entries(r))n[s]=Ot(i,e,t);return n}function lr(r,e,t){if(!e)return!0;if(e.all!==void 0){if(!Array.isArray(e.all))return!1;for(let o of e.all)if(!lr(r,o,t))return!1}if(e.any!==void 0&&(!Array.isArray(e.any)||!e.any.some(o=>lr(r,o,t))))return!1;let n=e.path||t.eventTypePath||"type",s=n?cr(r,n):void 0,i=s==null||s==="";if(e.exists!==void 0&&(e.exists&&i||!e.exists&&!i)||e.equals!==void 0&&s!==e.equals||e.not_equals!==void 0&&s===e.not_equals||e.in&&Array.isArray(e.in)&&!e.in.includes(s)||e.not_in&&Array.isArray(e.not_in)&&e.not_in.includes(s)||e.contains!==void 0&&(typeof s!="string"||!s.includes(e.contains))||e.not_contains!==void 0&&typeof s=="string"&&s.includes(e.not_contains)||e.starts_with!==void 0&&(typeof s!="string"||!s.startsWith(e.starts_with))||e.not_starts_with!==void 0&&typeof s=="string"&&s.startsWith(e.not_starts_with))return!1;if(e.regex)try{if(!new RegExp(e.regex).test(String(s??"")))return!1}catch(o){return f.debug("WORKER","Invalid regex in match rule",{regex:e.regex},o instanceof Error?o:void 0),!1}return!0}C();function hu(r,e){return!!r&&!!e}var _u={skip:!1};function zh(r){return new Set((r??"").split(",").map(e=>e.trim()).filter(Boolean))}function Eu(r,e,t){return hu(r,e)?t.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS==="true"?{skip:!0,reason:"subagent_observation"}:e&&zh(t.CLAUDE_MEM_SKIP_AGENT_TYPES).has(e)?{skip:!0,reason:"agent_type_excluded"}:_u:_u}U();C();var zn=class{static checkUserPromptPrivacy(e,t,n,s,i,o){let a=e.getUserPrompt(t,n,i);return a===null?(f.warn("HOOK",`${s}: no user_prompts row for prompt #${n} \u2014 ingesting anyway (session-init likely raced worker boot; see #2794/#2795)`,{sessionId:i,contentSessionId:t,promptNumber:n,...o}),{allow:!0,prompt:""}):a.trim()===""?(f.debug("HOOK",`Skipping ${s} - user prompt was entirely private`,{sessionId:i,promptNumber:n,...o}),{allow:!1,reason:"private"}):{allow:!0,prompt:a}}};var kt=require("path");function yu(){let r=Vh();return async e=>{for(let t of e)t.module=r(t.filename);return e}}function Vh(r=process.argv[1]?(0,kt.dirname)(process.argv[1]):process.cwd(),e=kt.sep==="\\"){let t=e?Su(r):r;return n=>{if(!n)return;let s=e?Su(n):n,{dir:i,base:o,ext:a}=kt.posix.parse(s);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,-1*a.length));let c=decodeURIComponent(o);i||(i=".");let l=i.lastIndexOf("/node_modules");if(l>-1)return`${i.slice(l+14).replace(/\//g,".")}:${c}`;if(i.startsWith(t)){let u=i.slice(t.length+1).replace(/\//g,".");return u?`${u}:${c}`:c}return c}}function Su(r){return r.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var G={};op(G,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>us,DOMExceptionCoercer:()=>Ao,EXCEPTION_STEP_INTERNAL_FIELDS:()=>Sr,ErrorCoercer:()=>mr,ErrorEventCoercer:()=>vo,ErrorPropertiesBuilder:()=>gr,EventCoercer:()=>Ro,ExceptionStepsBuffer:()=>Io,ObjectCoercer:()=>_r,PrimitiveCoercer:()=>Er,PromiseRejectionEventCoercer:()=>Mo,ReduceableCache:()=>Co,StringCoercer:()=>hr,chromeStackLineParser:()=>yo,createDefaultStackParser:()=>To,createStackParser:()=>cd,geckoStackLineParser:()=>bo,getInjectedReleaseId:()=>aE,getUtf8ByteLength:()=>ud,nodeStackLineParser:()=>rd,opera10StackLineParser:()=>Zu,opera11StackLineParser:()=>ed,resolveExceptionStepsConfig:()=>Po,reverseAndStripFrames:()=>ad,stripReservedExceptionStepFields:()=>sE,winjsStackLineParser:()=>Qu});var ne=(function(r){return r.AnonymousId="anonymous_id",r.DistinctId="distinct_id",r.Props="props",r.EnablePersonProcessing="enable_person_processing",r.PersonMode="person_mode",r.FeatureFlagDetails="feature_flag_details",r.FeatureFlags="feature_flags",r.FeatureFlagPayloads="feature_flag_payloads",r.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",r.BootstrapFeatureFlags="bootstrap_feature_flags",r.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",r.OverrideFeatureFlags="override_feature_flags",r.Queue="queue",r.AiQueue="ai_queue",r.AiCaptureQueue="ai_capture_queue",r.LogsQueue="logs_queue",r.OptedOut="opted_out",r.SessionId="session_id",r.SessionStartTimestamp="session_start_timestamp",r.SessionLastTimestamp="session_timestamp",r.PersonProperties="person_properties",r.GroupProperties="group_properties",r.InstalledAppBuild="installed_app_build",r.InstalledAppVersion="installed_app_version",r.SessionReplay="session_replay",r.PushRegistered="push_registered",r.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",r.SurveyLastSeenDate="survey_last_seen_date",r.SurveysInProgress="surveys_in_progress",r.SurveysSeen="surveys_seen",r.Surveys="surveys",r.RemoteConfig="remote_config",r.FlagsEndpointWasHit="flags_endpoint_was_hit",r.DeviceId="device_id",r})({});function Je(r){let e=[];return JSON.stringify(r,function(t,n){if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;e.length>0&&e[e.length-1]!==this;)e.pop();if(e.includes(n))return"[Circular]";e.push(n)}return n}})??"null"}var Yh=Array.isArray,wu=Object.prototype,dR=wu.hasOwnProperty,Vn=wu.toString,ae=Yh||function(r){return Vn.call(r)==="[object Array]"};var ur=r=>r===Object(r)&&!ae(r);var $e=r=>r===void 0,J=r=>Vn.call(r)=="[object String]",ao=r=>J(r)&&r.trim().length===0,co=r=>r===null,Te=r=>$e(r)||co(r),Dt=r=>Vn.call(r)=="[object Number]"&&r===r;var Tu=r=>Vn.call(r)==="[object Boolean]";function Yn(r){return r===null||typeof r!="object"}function pt(r,e){return Object.prototype.toString.call(r)===`[object ${e}]`}function Xe(r){switch(Object.prototype.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Ru(r,Error)}}function Au(r){return pt(r,"ErrorEvent")}function xt(r){return"u">typeof Event&&Ru(r,Event)}function vu(r){return pt(r,"Object")}function Ru(r,e){try{return r instanceof e}catch{return!1}}var qh=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterestbot","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],qn=new Map,Jh=256;function Xh(r,e){let t="";for(let n=0;n<e.length;n++){let s=e[n];t+=s.length+":"+s}return r.length+":"+r+"|"+e.length+":"+t}var Mu=function(r,e=[]){if(!r)return!1;let t=Xh(r,e),n=qn.get(t);if(n!==void 0)return n;let s=r.toLowerCase(),i=qh.concat(e).some(o=>s.indexOf(o.toLowerCase())!==-1);return qn.size>=Jh&&qn.clear(),qn.set(t,i),i};function dr(r,e,t,n,s){return e>t&&(n.warn("min cannot be greater than max."),e=t),Dt(r)?r>t?(n.warn(" cannot be greater than max: "+t+". Using max value instead."),t):r<e?(n.warn(" cannot be less than min: "+e+". Using min value instead."),e):r:(n.warn(" must be a number. using max or fallback. max: "+t+", fallback: "+s),dr(s??t,e,t,n))}var Qh=864e5,Zh=1,e_=10;function Cu(r={}){return{refillRate:r.exceptionRateLimiterRefillRate??r.__exceptionRateLimiterRefillRate??Zh,bucketSize:r.exceptionRateLimiterBucketSize??r.__exceptionRateLimiterBucketSize??e_}}var Jn=class{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=dr(e.bucketSize,0,100,e._logger),this._refillRate=dr(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=dr(e.refillInterval,0,Qh,e._logger)}_applyRefill(e,t){let n=t-e.lastAccess,s=Math.floor(n/this._refillInterval);if(s>0){let i=s*this._refillRate;e.tokens=Math.min(e.tokens+i,this._bucketSize),e.lastAccess=e.lastAccess+s*this._refillInterval}}consumeRateLimit(e){let t=Date.now(),n=String(e),s=this._buckets[n];return s?this._applyRefill(s,t):(s={tokens:this._bucketSize,lastAccess:t},this._buckets[n]=s),s.tokens===0?!0:(s.tokens--,s.tokens===0&&this._onBucketRateLimited?.(e),s.tokens===0)}stop(){this._buckets={}}};var Xn="0123456789abcdef",Qn=class r{constructor(e){this.bytes=e}static ofInner(e){if(e.length===16)return new r(e);throw new TypeError("not 128-bit length")}static fromFieldsV7(e,t,n,s){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(s)||e<0||t<0||n<0||s<0||e>0xffffffffffff||t>4095||n>1073741823||s>4294967295)throw new RangeError("invalid field value");let i=new Uint8Array(16);return i[0]=e/2**40,i[1]=e/2**32,i[2]=e/2**24,i[3]=e/2**16,i[4]=e/256,i[5]=e,i[6]=112|t>>>8,i[7]=t,i[8]=128|n>>>24,i[9]=n>>>16,i[10]=n>>>8,i[11]=n,i[12]=s>>>24,i[13]=s>>>16,i[14]=s>>>8,i[15]=s,new r(i)}static parse(e){let t;switch(e.length){case 32:t=/^[0-9a-f]{32}$/i.exec(e)?.[0];break;case 36:t=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;case 38:t=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e)?.slice(1,6).join("");break;case 45:t=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;default:break}if(t){let n=new Uint8Array(16);for(let s=0;s<16;s+=4){let i=parseInt(t.substring(2*s,2*s+8),16);n[s+0]=i>>>24,n[s+1]=i>>>16,n[s+2]=i>>>8,n[s+3]=i}return new r(n)}throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let t=0;t<this.bytes.length;t++)e+=Xn.charAt(this.bytes[t]>>>4),e+=Xn.charAt(15&this.bytes[t]),(t===3||t===5||t===7||t===9)&&(e+="-");return e}toHex(){let e="";for(let t=0;t<this.bytes.length;t++)e+=Xn.charAt(this.bytes[t]>>>4),e+=Xn.charAt(15&this.bytes[t]);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(t=>t===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(t=>t===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new r(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let t=0;t<16;t++){let n=this.bytes[t]-e.bytes[t];if(n!==0)return Math.sign(n)}return 0}},lo=class{constructor(e){this.timestamp=0,this.counter=0,this.random=e??t_()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,t){let n=this.generateOrAbortCore(e,t);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(e,t)),n}generateOrAbortCore(e,t){if(!Number.isInteger(e)||e<1||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(t<0||t>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+t>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return Qn.fromFieldsV7(this.timestamp,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,Qn.ofInner(e)}},t_=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),Pu,ee=()=>r_().toString(),r_=()=>(Pu||(Pu=new lo)).generate();var Zn=class{add(e){let t=ee(),n=++this.nextId;return this.promiseByIds[t]={id:n,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length;for(;t>0;)await Promise.all(e),e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length}getPromises(e=[],t=this.nextId){let n=new Set(e);return Object.values(this.promiseByIds).filter(s=>s.id<=t&&!n.has(s.promise)).map(s=>s.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}};function n_(r=console){return{log:r.log.bind(r),warn:r.warn.bind(r),error:r.error.bind(r),debug:r.debug.bind(r)}}var Iu=(r,e,t)=>{function n(i,...o){e(()=>{let a=t[i];a(r,...o)})}return{debug:(...i)=>{n("debug",...i)},info:(...i)=>{n("log",...i)},warn:(...i)=>{n("warn",...i)},error:(...i)=>{n("error",...i)},critical:(...i)=>{t.error(r,...i)},createLogger:i=>Iu(`${r} ${i}`,e,t)}},s_=r=>r();function Ou(r,e=s_){return Iu(r,e,n_())}var Ft="Mobile",ts="iOS",Lt="Android",Fu="Tablet",RR=Lt+" "+Fu;var o_="Apple",MR=o_+" Watch",Nu="Safari",rs="BlackBerry",Uu="Samsung",a_=Uu+"Browser",c_=Uu+" Internet",ns="Chrome",l_=ns+" OS",u_=ns+" "+ts,$u="Internet Explorer",d_=$u+" "+Ft,po="Opera",CR=po+" Mini",Bu="Edge",f_="Microsoft "+Bu,go="Firefox",p_=go+" "+ts,mo="Nintendo",ho="PlayStation",es="Xbox",g_=Lt+" "+Ft,m_=Ft+" "+Nu,fr="Windows",h_=fr+" Phone";var Wu="Generic",PR=Wu+" "+Ft.toLowerCase(),IR=Wu+" "+Fu.toLowerCase(),__="Konqueror",E_="Oculus Browser",ku="Vivaldi",S_="Yandex",Du="Whale",y_="DuckDuckGo",b_="Pale Moon",xu="Waterfox",Lu="Brave",ju="Claude",Hu="Codex",Ku="ChatGPT",w_="Google Search App",L="(\\d+(\\.\\d+)?)",uo=new RegExp("Version/"+L),fo=new RegExp("("+ju+"|"+Hu+"|"+Ku+")\\/"+L);var OR=new RegExp(es,"i"),kR=new RegExp(ho+" \\w+","i"),DR=new RegExp(mo+" \\w+","i"),T_=new RegExp(rs+"|PlayBook|BB10","i"),A_={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var xR={[d_]:[new RegExp("rv:"+L)],[f_]:[new RegExp(Bu+"?\\/"+L)],[ns]:[new RegExp("("+ns+"|CrMo)\\/"+L)],[u_]:[new RegExp("CriOS\\/"+L)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+L)],[Nu]:[uo],[m_]:[uo],[po]:[new RegExp("("+po+"|OPR)\\/"+L)],[go]:[new RegExp(go+"\\/"+L)],[p_]:[new RegExp("FxiOS\\/"+L)],[__]:[new RegExp("Konqueror[:/]?"+L,"i")],[rs]:[new RegExp(rs+" "+L),uo],[g_]:[new RegExp("android\\s"+L,"i")],[c_]:[new RegExp(a_+"\\/"+L)],[E_]:[new RegExp("OculusBrowser\\/"+L)],[ku]:[new RegExp(ku+"\\/"+L)],[S_]:[new RegExp("YaBrowser\\/"+L)],[Du]:[new RegExp(Du+"\\/"+L)],[Lu]:[new RegExp(Lu+"\\/"+L)],[ju]:[fo],[Hu]:[fo],[Ku]:[fo],[y_]:[new RegExp("(DuckDuckGo|Ddg)\\/"+L)],[b_]:[new RegExp("PaleMoon\\/"+L)],[xu]:[new RegExp(xu+"\\/"+L)],[w_]:[new RegExp("GSA\\/"+L)],[$u]:[new RegExp("(rv:|MSIE )"+L)],Mozilla:[new RegExp("rv:"+L)]};var LR=[[new RegExp(es+"; "+es+" (.*?)[);]","i"),r=>[es,r&&r[1]||""]],[new RegExp(mo,"i"),[mo,""]],[new RegExp(ho,"i"),[ho,""]],[T_,[rs,""]],[new RegExp(fr,"i"),(r,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[h_,""];if(new RegExp(Ft).test(e)&&!/IEMobile\b/.test(e))return[fr+" "+Ft,""];let t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){let n=t[1],s=A_[n]||"";return/arm/i.test(e)&&(s="RT"),[fr,s]}return[fr,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,r=>{if(r&&r[3]){let e=[r[3],r[4],r[5]||"0"];return[ts,e.join(".")]}return[ts,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,r=>{let e="";return r&&r.length>=3&&(e=$e(r[2])?r[3]:r[2]),["watchOS",e]}],[new RegExp("("+Lt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Lt+")","i"),r=>{if(r&&r[2]){let e=[r[2],r[3],r[4]||"0"];return[Lt,e.join(".")]}return[Lt,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,r=>{let e=["Mac OS X",""];if(r&&r[1]){let t=[r[1],r[2],r[3]||"0"];e[1]=t.join(".")}return e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[l_,""]],[/Linux|debian/i,["Linux",""]]];var ss="[Circular]",is="[Truncated]",pe="[Unserializable]",Gu="[Function]",UR=Date.prototype.getTime,$R=Date.prototype.toISOString;function Oe(r){let e="";for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n>=55296&&n<=56319){let s=r.charCodeAt(t+1);s>=56320&&s<=57343?(e+=r[t]+r[t+1],t++):e+="\uFFFD"}else e+=n>=56320&&n<=57343?"\uFFFD":r[t]}return e}function Be(r,e){if(!e)return r;let t=[];try{t=Object.keys(e)}catch{t=[]}for(let n of t){let s;try{s=e[n]}catch{s=pe}Object.defineProperty(r,n,{value:s,enumerable:!0,writable:!0,configurable:!0})}return r}function _o(r,e=Date.now()){if(typeof r!="string"||!r)return;let t=r.trim(),n=/^\d+\s*,/.test(t)?t.slice(0,t.indexOf(",")).trim():t;if(/^\d+$/.test(n)){let o=1e3*Math.min(Number(n),300);return o>0?o:void 0}if(!/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*[ ,]/.test(n))return;let s=/^\w{3} \w{3} /.test(n)?n+" GMT":n,i=Date.parse(s)-e;if(!(!Number.isFinite(i)||i<=0))return Math.min(i,3e5)}var gt=class{record(e){if(e.kind==="too-large")return;if(e.kind!=="retry-later")return void this.reset();if(!e.retryAfterMs)return;let t=this.isOpen(),n=Date.now(),s=Math.min(e.retryAfterMs,3e5);if(!t){this._installedAt=n,this._until=n+s;return}this._until=Math.max(this._until,Math.min(n+s,this._installedAt+3e5))}remainingMs(){let e=Date.now();if(e<this._installedAt-5e3)return this.reset(),0;let t=Math.min(3e5,Math.max(0,this._until-e));return t===0&&this.reset(),t}isOpen(){return this.remainingMs()>0}reset(){this._until=0,this._installedAt=0}constructor(){this._until=0,this._installedAt=0}};var zu="utf8",v_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function R_(r){return typeof r=="string"&&v_.test(r)}function mt(r,e){return R_(r)?r:e()}function Nt(r,e){let t=new Error(e);try{Object.defineProperty(t,"name",{value:r,writable:!0,enumerable:!0,configurable:!0})}catch{}return t}function Vu(r){return r?.replace(/\/+$/,"")}async function Yu(r,e){let t=null;for(let n=0;n<e.retryCount+1;n++){n>0&&await new Promise(s=>setTimeout(s,e.retryDelay));try{return await r()}catch(s){if(t=s,!e.retryCheck(s))throw s}}throw t}function Eo(){return new Date().toISOString()}function te(r,e){let t=setTimeout(r,e);return t?.unref&&t?.unref(),t}async function Qe(r,e,t){let n;try{return await Promise.race([r,new Promise((s,i)=>{n=te(()=>{try{t?.(),s()}catch(o){i(o)}},e)})])}finally{clearTimeout(n)}}var qu=r=>r&&typeof r.then=="function";function pr(r){return Promise.all(r.map(e=>(e??Promise.resolve()).then(t=>({status:"fulfilled",value:t}),t=>({status:"rejected",reason:t}))))}var os,Ju,as;function Xu(r){let e=globalThis._posthogChunkIds;if(!e)return;let t=Object.keys(e);return as&&t.length===Ju||(Ju=t.length,as=t.reduce((n,s)=>{os||(os={});let i=os[s];if(i)n[i[0]]=i[1];else{let o=r(s);for(let a=o.length-1;a>=0;a--){let l=o[a]?.filename,u=e[s];if(l&&u){n[l]=u,os[s]=[l,u];break}}}return n},{})),as}var So=50,M_=1e3,C_=100,P_=4,gr=class{constructor(e,t,n=[]){this.coercers=e,this.stackParser=t,this.modifiers=n}buildFromUnknown(e,t={}){let s=t&&t.mechanism||{handled:!0,type:"generic"},o=this.buildCoercingContext(s,t,0).apply(e),a=this.buildParsingContext(t),c=this.parseStacktrace(o,a);return{$exception_list:this.convertToExceptionList(c,s),$exception_level:"error"}}async modifyFrames(e){for(let t of e)t.stacktrace&&t.stacktrace.frames&&ae(t.stacktrace.frames)&&(t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames));return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let n;e.cause!=null&&(n=this.parseStacktrace(e.cause,t));let s;if(e.stack!=""&&e.stack!=null)try{s=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)}catch{}return{...e,cause:n,stack:s,errors:e.errors?.map(i=>this.parseStacktrace(i,t))}}applyChunkIds(e,t){return e.map(n=>(n.filename&&t&&(n.chunk_id=t[n.filename]),n))}applyCoercers(e,t){for(let n of this.coercers)if(n.match(e))return n.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let n of this.modifiers)t=await n(t);return t}convertToExceptionList(e,t){let n=[],s=(i,o,a)=>{let c=n.length,l=o===void 0?{type:typeof t.type=="string"&&t.type.length>0?t.type:"generic",...typeof t.handled=="boolean"?{handled:t.handled}:t.handled===void 0?{handled:!0}:{},synthetic:typeof t.synthetic=="boolean"?t.synthetic:i.synthetic,exception_id:c}:{type:"chained",source:a,synthetic:i.synthetic,exception_id:c,parent_id:o},u={type:i.type,value:i.value,mechanism:l};i.stack&&(u.stacktrace={type:"raw",frames:i.stack}),n.push(u),i.cause&&s(i.cause,c,"cause");for(let d of i.errors??[])s(d,c,"member")};return s(e),n}buildParsingContext(e){return{chunkIdMap:Xu(this.stackParser),skipFirstLines:e.skipFirstLines??1}}getAggregateErrors(e){try{if(Xe(e)){let t=Object.getPrototypeOf(e);for(let n=0;t&&n<C_;n++){let s=Object.getOwnPropertyDescriptor(t,"constructor")?.value;if(typeof s=="function"&&s.name==="AggregateError"){let i=e.errors;return ae(i)?i:void 0}t=Object.getPrototypeOf(t)}}}catch{}}buildCoercingContext(e,t,n=0){let s=0,i=0,o=!1,a=new Set,c=[],l={},u=(g,m,h=0)=>{let E=d(m,h),_=E.apply;if(E.apply=y=>{c.push(g);try{return _(y)}finally{c.pop()}},h>P_||h>0&&c.indexOf(g)!==-1)return this.coerceFallback(E);let b=typeof g=="object"&&g!==null||typeof g=="function";if(h===0&&s>=So||b&&a.has(g))return;b&&a.add(g),h===0&&s++;let w=this.getAggregateErrors(g);o||=!!w;let T;try{if(T=this.applyCoercers(g,E),!T)throw l}catch(y){if(y===l){h===0&&s--;return}if(!o)throw y;T=this.coerceFallback(E)}if(!w||s>=So)return T;let M;try{M=w.length}catch{return T}if(!Number.isInteger(M)||M<0||M>4294967295)return T;let R=[];for(let y=0;s<So&&i<M_&&y<M;y++){i++;let A;try{A=E.next(w[y])}catch{s++,A=this.coerceFallback(d(m+1))}A&&R.push(A)}return{...T,errors:R}},d=(g,m=0)=>({...t,syntheticException:g==0?t.syntheticException:void 0,mechanism:g==0?e:{},apply:h=>{let E=u(h,g,m+1);if(!E)throw l;return E},next:h=>u(h,g+1)}),p=d(n);return{...p,apply:g=>u(g,n)??this.coerceFallback(p)}}};var V="?",I_="<anonymous>",O_=/^([a-z][a-z0-9.+-]+):/i,k_=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function D_(r){if(!r||r===I_)return!1;let e=O_.exec(r);return!e||k_.includes(e[1].toLowerCase())}function ke(r,e,t,n,s){let i={platform:r,filename:e,function:t==="<anonymous>"?V:t,in_app:D_(e)};return $e(n)||(i.lineno=n),$e(s)||(i.colno=s),i}var cs=(r,e)=>{let t=r.indexOf("safari-extension")!==-1,n=r.indexOf("safari-web-extension")!==-1;return t||n?[r.indexOf("@")!==-1?r.split("@")[0]:V,t?`safari-extension:${e}`:`safari-web-extension:${e}`]:[r,e]};var x_=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,L_=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,F_=/\((\S*)(?::(\d+))(?::(\d+))\)/,yo=(r,e)=>{let t=x_.exec(r);if(t){let[,s,i,o]=t;return ke(e,s,V,+i,+o)}let n=L_.exec(r);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=F_.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[i,o]=cs(n[1]||V,n[2]);return ke(e,o,i,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var N_=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,U_=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,bo=(r,e)=>{let t=N_.exec(r);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){let o=U_.exec(t[3]);o&&(t[1]=t[1]||"eval",t[3]=o[1],t[4]=o[2],t[5]="")}let s=t[3],i=t[1]||V;return[i,s]=cs(i,s),ke(e,s,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}};var $_=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Qu=(r,e)=>{let t=$_.exec(r);return t?ke(e,t[2],t[1]||V,+t[3],t[4]?+t[4]:void 0):void 0};var B_=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Zu=(r,e)=>{let t=B_.exec(r);return t?ke(e,t[2],t[3]||V,+t[1]):void 0},W_=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,ed=(r,e)=>{let t=W_.exec(r);return t?ke(e,t[5],t[3]||t[4]||V,+t[1],+t[2]):void 0};var j_=/^\s*[-]{4,}$/,H_=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,K_=/^Promise\.(?:all|any)$/,G_=/^index \d+$/,z_="node:internal/promise",rd=(r,e)=>{let t=r.match(H_);if(t){let n,s,i,o,a;if(t[1]){i=t[1];let u=i.lastIndexOf(".");if(i[u-1]==="."&&u--,u>0){n=i.slice(0,u),s=i.slice(u+1);let d=n.indexOf(".Module");d>0&&(i=i.slice(d+1),n=n.slice(0,d))}o=void 0}s&&(o=n,a=s),s==="<anonymous>"&&(a=void 0,i=void 0),i===void 0&&(a=a||V,i=o?`${o}.${a}`:a);let c=t[2]?.startsWith("file://")?t[2].slice(7):t[2],l=t[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&t[5]&&!l&&(c=t[5]),K_.test(i)&&G_.test(c||"")&&(c=z_),{filename:c?decodeURI(c):void 0,module:void 0,function:i,lineno:td(t[3]),colno:td(t[4]),in_app:V_(c||"",l),platform:e}}if(r.match(j_))return{filename:r,platform:e}};function V_(r,e=!1){return!(e||r&&!r.startsWith("/")&&!r.match(/^[A-Z]:/)&&!r.startsWith(".")&&!r.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&r!==void 0&&!r.includes("node_modules/")}function td(r){return parseInt(r||"",10)||void 0}var nd=/\(error: (.*)\)/,sd=50,Y_=10,q_=1e3;function wo(r,e){return r.filename===e.filename&&r.function===e.function&&r.module===e.module&&r.lineno===e.lineno&&r.colno===e.colno}function J_(r){for(let e=1;e<=Y_;e++){let t=r.length-2*e;if(t<0)break;let n=!0;for(let s=0;s<e;s++){let i=r[t+s];if(!wo(i,r[t+e+s])){n=!1;break}}if(n){for(let s=0;s<e;s++)r[t+s]=r[t+e+s];return r.length=t+e,{start:t,length:e}}}}function X_(r,e){let t=e.start+e.length,n=od(r,e);n&&r.splice(t+n===r.length?t:e.start,n)}function id(r,e){let t=e.start;for(;t>0&&wo(r[t-1],r[t-1+e.length]);)t--;return e.start-t}function od(r,e){let t=e.start+e.length,n=t;for(;n<r.length&&wo(r[n],r[n-e.length]);)n++;return n-t}function Q_(r,e){let t=e[0],n=r.length-(t?id(r,t):0);for(let s of e)n-=od(r,s);return n}function Z_(r){let e=r.map(n=>`${n.function}|${n.filename}|${n.lineno}|${n.colno}|${n.module}`),t=0;for(let n=1;n<e.length;n++)eE(e,n,t)&&(t=n);r.push(...r.splice(0,t))}function eE(r,e,t){for(let n=0;n<r.length;n++){let s=r[(e+n)%r.length],i=r[(t+n)%r.length];if(s!==i)return s<i}return!1}function ad(r){if(!r.length)return[];let e=Array.from(r);return e.reverse(),e.slice(0,sd).map(t=>({...t,filename:t.filename||tE(e).filename,function:t.function||V}))}function tE(r){return r[r.length-1]||{}}function To(){return cd("web:javascript",yo,bo)}function cd(r,...e){return(t,n=0)=>{let s=[],i=t.split(`
|
|
30
|
-
`),o=Math.min(i.length,n+
|
|
31
|
-
at ${t.filename}:${n}:${s}`}};var rE=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,hr=class{match(e){return typeof e=="string"}coerce(e,t){let[n,s]=this.getInfos(e);return{type:n??"Error",value:s??e,stack:t.syntheticException?.stack,synthetic:!0}}getInfos(e){let t="Error",n=e,s=e.match(rE);return s&&(t=s[1],n=s[2]),[t,n]}};var ld=["fatal","error","warning","log","info","debug"];function ls(r,e=40){let t=Object.keys(r);if(t.sort(),!t.length)return"[object has no keys]";for(let n=t.length;n>0;n--){let s=t.slice(0,n).join(", ");if(!(s.length>e))return n===t.length||s.length<=e?s:`${s.slice(0,e)}...`}return""}var _r=class{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let n=this.getErrorPropertyFromObject(e);return n?t.apply(n):{type:this.getType(e),value:this.getValue(e),stack:this.getStack(e)??t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){if(xt(e))return e.constructor.name;let t="name"in e?e.name:void 0;return J(t)&&!ao(t)?t:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){let s=`'${e.name}' captured as exception`;return"message"in e&&typeof e.message=="string"&&(s+=` with message: '${e.message}'`),s}if("message"in e&&typeof e.message=="string")return e.message;let t=this.getObjectClassName(e),n=ls(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(e){return J(e)&&!ao(e)&&ld.indexOf(e)>=0}getStack(e){try{return J(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:J(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];if(Xe(n))return n}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}};var Ro=class{match(e){return xt(e)}coerce(e,t){let n=e.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${ls(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Er=class{match(e){return Yn(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Mo=class{match(e){return pt(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!xt(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let n=this.getUnhandledRejectionReason(e);return Yn(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:t.syntheticException?.stack,synthetic:!0}:t.apply(n)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}};var Co=class{constructor(e){this._maxSize=e,this._cache=new Map}get(e){let t=this._cache.get(e);if(t!==void 0)return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.set(e,t)}reduce(){for(;this._cache.size>=this._maxSize;){let e=this._cache.keys().next().value;e&&this._cache.delete(e)}}};var Sr={MESSAGE:"$message",TIMESTAMP:"$timestamp"},nE=new Set([Sr.MESSAGE,Sr.TIMESTAMP]),us={enabled:!0,max_bytes:32768};function Po(r){return r?{enabled:r.enabled??us.enabled,max_bytes:iE(r.max_bytes,us.max_bytes)}:{...us}}function sE(r){if(!r)return{sanitizedProperties:{},droppedKeys:[]};let e=[];return{sanitizedProperties:Object.keys(r).reduce((n,s)=>nE.has(s)?(e.push(s),n):(n[s]=r[s],n),{}),droppedKeys:e}}var Io=class{constructor(e){this._entries=[],this._totalBytes=0,this._config=Po(e)}setConfig(e){this._config=Po(e),this._trimToMaxBytes()}add(e){let t=oE(e);if(!t)return;let n=ud(t.json);n>this._config.max_bytes||(this._entries.push({step:t.step,bytes:n}),this._totalBytes+=n,this._trimToMaxBytes())}getAttachable(){return this._entries.map(e=>e.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){for(;this._totalBytes>this._config.max_bytes&&this._entries.length>0;){let e=this._entries.shift();e&&(this._totalBytes-=e.bytes)}}};function iE(r,e){if(!Dt(r)||r===1/0||r===-1/0)return e;let t=Math.floor(r);return t<0?e:t}function oE(r){let e;try{e=Je(r)}catch{return}try{let t=JSON.parse(e);if(!ur(t))return;let n=t,s=n[Sr.MESSAGE],i=n[Sr.TIMESTAMP];return!J(s)||s.trim().length===0||!J(i)&&!Dt(i)?void 0:{step:n,json:e}}catch{return}}function ud(r){if("u">typeof TextEncoder)return new TextEncoder().encode(r).length;let e=encodeURIComponent(r),t=0;for(let n=0;n<e.length;n++)e[n]==="%"?(t+=1,n+=2):t+=1;return t}function aE(){let r=globalThis._posthogReleaseId;return typeof r=="string"&&r.length>0?r:void 0}var Oo=r=>{if("flags"in r){let e=dd(r.flags),t=fd(r.flags);return{...r,featureFlags:e,featureFlagPayloads:t}}{let e=r.featureFlags??{},t=Object.fromEntries(Object.entries(r.featureFlagPayloads||{}).map(([s,i])=>[s,Ut(i)])),n=Object.fromEntries(Object.entries(e).map(([s,i])=>[s,cE(s,i,t[s])]));return{...r,featureFlags:e,featureFlagPayloads:t,flags:n}}};function cE(r,e,t){return{key:r,enabled:typeof e=="string"?!0:e,variant:typeof e=="string"?e:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:t?JSON.stringify(t):void 0,description:void 0}}}var dd=r=>Object.fromEntries(Object.entries(r??{}).map(([e,t])=>[e,yr(t)]).filter(([,e])=>e!==void 0)),fd=r=>{let e=r??{};return Object.fromEntries(Object.keys(e).filter(t=>{let n=e[t];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(t=>{let n=e[t].metadata?.payload;return[t,n?Ut(n):void 0]}))},yr=r=>r===void 0?void 0:r.variant??r.enabled,Ut=r=>{if(typeof r!="string")return r;try{return JSON.parse(r)}catch{return r}};var pd=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","oppref","irclid","_kx"],lE=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain",...pd,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server","$react_native_version"],br=(r,e=[])=>{let t={},n=s=>{r[s]!==void 0&&(t[s]=r[s])};return lE.forEach(n),e.forEach(n),t};var ds=class{constructor(){this.events={},this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),()=>{this.events[e]=this.events[e].filter(n=>n!==t)}}emit(e,t){for(let n of this.events[e]||[])n(t);for(let n of this.events["*"]||[])n(e,t)}};function ko(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var dE="NativeGzipValidationError",fE=31,pE=139,gE=8,mE=r=>r.length>=2&&r[0]===fE&&r[1]===pE;var wr,hE=()=>{if(wr)return wr;wr=[];for(let r=0;r<256;r++){let e=r;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;wr[r]=e>>>0}return wr},_E=r=>{let e=hE(),t=4294967295;for(let n=0;n<r.length;n++)t=e[(t^r[n])&255]^t>>>8;return(4294967295^t)>>>0},fs=r=>{throw Nt(dE,`Native gzip produced invalid output: ${r}`)},EE=async(r,e)=>{r.size<18&&fs("too-short");let t=new Uint8Array(await r.slice(0,10).arrayBuffer());(!mE(t)||t[2]!==gE)&&fs("invalid-header");let n=new DataView(await r.slice(r.size-8).arrayBuffer());n.getUint32(0,!0)!==_E(e)&&fs("invalid-crc");let s=e.length>>>0;n.getUint32(4,!0)!==s&&fs("invalid-size")};async function Tr(r,e=!0,t){try{let n=new TextEncoder().encode(r),s=new globalThis.CompressionStream("gzip"),i=s.writable.getWriter(),o=i.write(n).then(()=>i.close()).catch(async l=>{try{await i.abort(l)}catch{}throw l}),a=new Response(s.readable).blob(),[c]=await Promise.all([a,o]);return await EE(c,n),c}catch(n){if(t?.rethrow)throw n;return e&&console.error("Failed to gzip compress data",n),null}}var ge=class extends Error{constructor(e,t,n,s){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.responseBodyDeadline=n,this.abortController=s,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return _o(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let e=Nt("AbortError","Response body read timed out");this.cancelResponseBody(e),this.responseBodyTextPromise=Promise.reject(e)}else{let e=new Promise((n,s)=>{this.responseBodyTimer=te(()=>{this._bodyReadTimedOut=!0;let i=Nt("AbortError","Response body read timed out");s(i),this.cancelResponseBody(i)},this.responseBodyDeadline-Date.now())}),t;try{t=Promise.resolve(this.response.text())}catch(n){t=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([t,e]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(e=>JSON.parse(e))}cancelResponseBody(e){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(e),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},We=class extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}};var Ed=(r,e)=>{for(let t of Object.keys(e))(t.startsWith("$feature/")||t==="$active_feature_flags")&&(r[t]=e[t])};async function gd(r){if(r instanceof ge){let e="";try{e=await r.text}catch{r.bodyReadTimedOut&&(e="<response body read timed out>")}console.error(`Error while flushing PostHog: message=${r.message}, response body=${e}`,r)}else console.error("Error while flushing PostHog",r);return Promise.resolve()}function SE(r){return typeof r=="object"&&(r instanceof ge||Sd(r))}function Sd(r){return r instanceof We}function yE(r){if(r instanceof ge)return r.status===502||r.status===504;if(!(r instanceof We))return!1;let e=r.error;return(e?.code??e?.cause?.code)!=="ECONNREFUSED"}var md=10485760;function hd(r){try{return typeof r!="string"?r instanceof Uint8Array?r.byteLength:r.size:"u">typeof Buffer?Buffer.byteLength(r,zu):new TextEncoder().encode(r).length}catch{return 0}}function $t(r){return typeof r=="object"&&r instanceof ge&&r.status===413}function ps(r){return r instanceof ge?r.status===408||r.status===429||r.status>=500:Sd(r)}function _d(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}var Do="default",Ar=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new gr([new mr,new _r,new hr,new Er],To())}getEvaluationRuntime(){}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new Zn,this._events=new ds,this._isInitialized=!1;let n=typeof e=="string"?e.trim():"",s=typeof t.host=="string"?t.host.trim():"",i=!n;this._logger=Ou("[PostHog]",this.logMsgIfDebug.bind(this)),i&&this._logger.error("You must pass your PostHog project's api key. The client will be disabled."),this.apiKey=n,this.host=Vu(s||"https://us.i.posthog.com"),this.flushAt=t.flushAt?Math.max(t.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,t.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,t.maxQueueSize??1e3),this.flushInterval=t.flushInterval??1e4,this.preloadFeatureFlags=t.preloadFeatureFlags??!0,this.defaultOptIn=t.defaultOptIn??!0,this.disableSurveys=t.disableSurveys??!1,this._retryOptions={retryCount:t.fetchRetryCount??3,retryDelay:t.fetchRetryDelay??3e3,retryCheck:ps},this.requestTimeout=t.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=t.featureFlagsRequestTimeoutMs??3e3,this.featureFlagsRequestMaxRetries=t.featureFlagsRequestMaxRetries??1,this.remoteConfigRequestTimeoutMs=t.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=t.disableGeoip??!0,this.disabled=(t.disabled??!1)||i,this.historicalMigration=t?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=t?.evaluationContexts??t?.evaluationEnvironments,t?.evaluationEnvironments&&!t?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!ko()||(t?.disableCompression??!1)}logMsgIfDebug(e){this.isDebug&&e()}wrap(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return e();this._initPromise.then(()=>e())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(ne.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(ne.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(ne.OptedOut,!0)})}on(e,t){return this._events.on(e,t)}debug(e=!0){if(this.removeDebugCallback?.(),e){let t=this.on("*",(n,s)=>this._logger.info(n,s));this.removeDebugCallback=()=>{t(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(e){let t=e.properties||{},n={...t,...this.getCommonEventProperties()};return Ed(n,t),e.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=br(n)),{distinct_id:e.distinct_id,event:e.event,properties:n}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,n){this.wrap(()=>{let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",s,n)})}async identifyStatelessImmediate(e,t,n){let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",s,n)}captureStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({distinct_id:e,event:t,properties:n});this.enqueue("capture",i,s)})}async captureStatelessImmediate(e,t,n,s){let i=this.buildPayload({distinct_id:e,event:t,properties:n});await this.sendImmediate("capture",i,s)}aliasStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});this.enqueue("alias",i,s)})}async aliasStatelessImmediate(e,t,n,s){let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",i,s)}groupIdentifyStateless(e,t,n,s,i,o){this.wrap(()=>{let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});this.enqueue("capture",a,s)})}async groupIdentifyStatelessImmediate(e,t,n,s,i,o){let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});await this.sendImmediate("capture",a,s)}async getRemoteConfig(){await this._initPromise;let e=this.host;e==="https://us.i.posthog.com"?e="https://us-assets.i.posthog.com":e==="https://eu.i.posthog.com"&&(e="https://eu-assets.i.posthog.com");let t=`${e}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,n,{type:"required",consume:s=>s.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).catch(s=>{this._logger.error("Remote config could not be loaded",s),this._events.emit("error",s)})}async getFlags(e,t={},n={},s={},i={},o=!1){await this._initPromise;let a=o?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,l={token:this.apiKey,distinct_id:e,groups:t,person_properties:n,group_properties:s,...i};n.$device_id&&(l.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(l.evaluation_contexts=this.evaluationContexts);let u=this.getEvaluationRuntime();u&&(l.evaluation_runtime=u);let d={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(l)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,d,{type:"required",consume:p=>p.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:yE},this.featureFlagsRequestTimeoutMs).then(p=>({success:!0,response:Oo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(e){if(e instanceof ge)return{type:"api_error",statusCode:e.status};if(e instanceof We){let t=e.error;return t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(e,t,n,s,i,o);if(a===void 0)return{response:void 0,requestId:void 0};let c=yr(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,n,s,i,o,[e]);return a===void 0?void 0:{response:a.flags[e],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(t,n,s,i,o,[e]);if(!a)return;let c=a[e];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(e,t={},n={},s={},i,o){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)).payloads}async getFeatureFlagsStateless(e,t={},n={},s={},i,o){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)}async getFeatureFlagsAndPayloadsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(e,t,n,s,i,o);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a={geoip_disable:i??this.disableGeoip};o&&(a.flag_keys_to_evaluate=o);let c=await this.getFlags(e,t,n,s,a);if(!c.success)return;let l=c.response;return l.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),l.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:l?.requestId,quotaLimited:l.quotaLimited}):l}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let e=`${this.host}/api/surveys/?token=${this.apiKey}`,t={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},s=(await this.fetchWithRetry(e,t,{type:"required",consume:i=>{if(i.status!==200||!i.json){let o=`Surveys API could not be loaded: ${i.status}`,a=new Error(o);return this._logger.error(a),this._events.emit("error",new Error(o)),Promise.resolve(void 0)}return i.json()}}).catch(i=>{this._logger.error("Surveys API could not be loaded",i),this._events.emit("error",i)}))?.surveys;return s&&this._logger.info("Surveys fetched from API: ",JSON.stringify(s)),s??[]}get props(){return this._props||(this._props=this.getPersistedProperty(ne.Props)),this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(ne.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(ne.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return Do}persistedQueueKeyForRoute(e){return ne.Queue}getActiveQueueRoutes(){return[Do]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,n,s){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i===null)return;i=this.normalizeMessage(i);let o=this.persistedQueueKeyForRoute(s??this.getQueueRouteKey(i)),a=this.getPersistedProperty(o)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:i}),this.setPersistedProperty(o,a),this._events.emit(e,i),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=te(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(e,t,n,s){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i!==null){i=this.normalizeMessage(i);try{await this.sendBatch([i],void 0,s??this.getQueueRouteKey(i))}catch(o){this._events.emit("error",o)}}}normalizeMessage(e){let{type:t,library:n,library_version:s,...i}=e,o=_d(i.properties)?i.properties:void 0;return n!==void 0&&o?.$lib===void 0&&(o={...o||{},$lib:n}),s!==void 0&&o?.$lib_version===void 0&&(o={...o||{},$lib_version:s}),o&&(i.properties=o),i.uuid=mt(i.uuid,ee),i}normalizeTimestampForWire(e){let t=e instanceof Date?e:typeof e=="string"?new Date(e):null;if(!t||Number.isNaN(t.getTime()))return e;let n=t.toISOString(),s=typeof e=="string"?e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}prepareMessage(e,t){let n={...e,timestamp:t?.timestamp?t?.timestamp:Eo(),uuid:mt(t?.uuid,ee)};return(t?.disableGeoip??this.disableGeoip)&&(_d(n.properties)||(n.properties={}),n.properties.$geoip_disable=!0),n.distinctId&&(n.distinct_id=n.distinctId,delete n.distinctId),n}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.pendingFlushPromise||this.flushAutomatic().catch(async e=>{await gd(e)})}flushAutomatic(){return this.flush()}async waitForPendingPromises(e,t=[]){let n=t.filter(i=>!!i),s=0;for(;;){let i=this.promiseQueue.getPromises([...n,...this.flushPromises],e);if(i.length===0)return;s>0&&this._logger.debug(`flush() re-checking ${i.length} pending promise(s) before flushing`),await Promise.all(i.map(o=>o.catch(()=>{}))),s++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(e){if(this.disabled)return Promise.resolve();if(!e&&this.pendingFlushPromise)return this.pendingFlushPromise;let t=this.flushPromise,n=this.promiseQueue.maxId,s=Promise.resolve().then(()=>{if(e)return this.waitForPendingPromises(n,[t,s])}).then(()=>pr([t])).then(()=>(this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=s,this.flushPromise=s,this.flushPromises.add(s),this.addPendingPromise(s),pr([s]).then(()=>{this.flushPromises.delete(s),this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this.flushPromise===s&&(this.flushPromise=null)}),s}getCustomHeaders(){let e=this.getCustomUserAgent(),t={};return e&&e!==""&&(t["User-Agent"]=e),t}compressPayload(e){return Tr(e,this.isDebug)}getBatchEndpointPath(e){return"/batch/"}async sendBatch(e,t,n=Do){let s={api_key:this.apiKey,batch:e.map(l=>{if(!l)return l;let u=this.normalizeTimestampForWire(l.timestamp);return u===l.timestamp?l:{...l,timestamp:u}}),sent_at:Eo()};this.historicalMigration&&(s.historical_migration=!0);let i=Je(s),o=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(i),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||i};await this.fetchWithRetry(o,c,{type:"successful-write"},t)}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some(s=>this.getRouteQueue(s).length>0))return;let t=[],n;for(let s of e)try{await this._flushRoute(s,t)}catch(i){n===void 0&&(n=i)}if(n!==void 0)throw n;this._events.emit("flush",t)}async _flushRoute(e,t){let n=this.persistedQueueKeyForRoute(e),s=this.getPersistedProperty(n)||[];if(!s.length)return;let i=s.length,o=0;for(;s.length>0&&o<i;){let a=s.slice(0,this.maxBatchSize),c=a.map(d=>d.message===void 0?d.message:this.normalizeMessage(d.message)),l=async()=>{let d=this.getPersistedProperty(n)||[],p=[...a],g=d.filter(m=>{let h=m.message?.uuid,E=p.findIndex(_=>_===m||typeof h=="string"&&h.length>0&&_.message?.uuid===h);return E===-1?!0:(p.splice(E,1),!1)});this.setPersistedProperty(n,g),s=g,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},u={retryCheck:d=>$t(d)?!1:ps(d)};try{await this.sendBatch(c,u,e)}catch(d){if($t(d)&&c.length>1){this.maxBatchSize=Math.max(1,Math.floor(c.length/2)),this._logger.warn(`Received 413 when sending batch of size ${c.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw d instanceof We||await l(),this._events.emit("error",d),d}await l(),t.push(...c),o+=c.length}}async _sendOtlpBatch({path:e,auth:t,payload:n}){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let s;try{s=JSON.stringify(n)}catch(u){return this.logMsgIfDebug(()=>console.warn(`[PostHog] Could not serialize a ${e} batch; reporting it as too large`,u)),{kind:"too-large",measuredLocally:!0}}let i=hd(s);if(i>md)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${e} batch of ${i} bytes: the endpoint accepts at most ${md}`)),{kind:"too-large",measuredLocally:!0};let o=t==="bearer"?`${this.host}/i/v1/${e}`:`${this.host}/i/v1/${e}?token=${encodeURIComponent(this.apiKey)}`,a=this.disableCompression?null:await this.compressPayload(s),c=a||s,l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...t==="bearer"&&{Authorization:`Bearer ${this.apiKey}`},...a!==null&&{"Content-Encoding":"gzip"}},body:c};try{return await this.fetchWithRetry(o,l,{type:"successful-write"},{retryCheck:u=>$t(u)||u instanceof ge&&u.retryAfterMs!==void 0?!1:ps(u)}),{kind:"ok"}}catch(u){if($t(u))return{kind:"too-large"};if(ps(u)){let d=u instanceof ge?u.retryAfterMs:void 0;return{kind:"retry-later",error:u,...d!==void 0&&{retryAfterMs:d}}}return{kind:"fatal",error:u}}}async _sendLogsBatch(e){return this._sendOtlpBatch({path:"logs",auth:"query-token",payload:e})}async _sendMetricsBatch(e){return this._sendOtlpBatch({path:"metrics",auth:"query-token",payload:e})}async _sendTracesBatch(e){return this._sendOtlpBatch({path:"traces",auth:"bearer",payload:e})}async fetchWithRetry(e,t,n,s,i){let o=t.body?t.body:"",a=hd(o),c={...this._retryOptions,...s},l=0;return await Yu(async()=>{l++;let u=new AbortController,d=i??this.requestTimeout,p=Date.now()+d,g,m=new Promise((w,T)=>{g=te(()=>{let M=Nt("AbortError",`Request timed out after ${d}ms`);T(M),u.abort(M)},d)}),h,E=!1,_,b=()=>_??=(async()=>{try{await h?.body?.cancel()}catch{}})();try{let w;try{w=this.fetch(e,{signal:u.signal,...t})}catch(R){throw new We(R)}w.then(R=>{u.signal.aborted&&!E&&Promise.resolve(R.body?.cancel()).catch(()=>{})}).catch(()=>{});try{h=await Promise.race([w,m]),E=!0}catch(R){throw new We(R)}let T=t.mode==="no-cors",M=n.type==="successful-write"?300:400;if(!T&&(h.status<200||h.status>=M))throw new ge(h,a,p,u);if(n.type==="successful-write"){try{await Promise.race([b(),m])}catch{}return}try{return await Promise.race([n.consume(h),m])}catch(R){throw u.signal.aborted?new We(R):R}}finally{clearTimeout(g),u.signal.aborted&&h&&b()}},{...c,retryCheck:u=>{let d=c.retryCheck(u);return d&&l<=c.retryCount&&u instanceof ge&&u.cancelResponseBody(),d}})}async _shutdown(e=3e4){await this._initPromise;let t=!1;return this.clearFlushTimer(),this.disabled?void 0:Qe((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(o=>this.getRouteQueue(o).length>0);){let i=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===i){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(s){if(!SE(s))throw s;await gd(s)}})(),e,()=>{this._logger.critical("Timeout while shutting down PostHog. Some events may not have been sent.",{shutdownTimeoutMs:e}),t=!0})}async shutdown(e=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(e).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var vE=/[a-z][a-z0-9+.-]{0,63}:[^\s<>"]+/gi;var GC=new RegExp(vE.source,"i"),yd=/[a-z][a-z0-9+.-]{0,63}:\/\//i,zC=new RegExp(`^${yd.source}`,"i"),VC=new RegExp(yd.source,"gi");var RE=["is_not","is_set"],ME=1152921504606847e3,v=class r extends Error{constructor(e){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,r.prototype)}};function xo(r){if(typeof r=="boolean")return!0;if(typeof r=="string"){let e=r.toLowerCase();return e==="true"||e==="false"}if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!xo(e in r?r[e]:null))return!1;return!0}function Lo(r){if(typeof r=="boolean")return r;if(typeof r=="string")return r.toLowerCase()==="true";if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!Lo(e in r?r[e]:null))return!1;return!0}function vr(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t>=55296&&t<=56319){let n=r.charCodeAt(e+1);if(e+1>=r.length||n<56320||n>57343)throw new v("Cannot stringify an unpaired surrogate like the flags service");e++}else if(t>=56320&&t<=57343)throw new v("Cannot stringify an unpaired surrogate like the flags service")}}function ms(r,e=new Set){if(!(r===null||typeof r=="boolean")){if(typeof r=="string")return void vr(r);if(typeof r=="number"){if(!Number.isFinite(r))throw new v(`Cannot represent non-finite number ${r} like the flags service`);return}if(Array.isArray(r)){if(e.has(r))throw new v("Cannot represent a circular array during local evaluation");e.add(r);try{for(let t=0;t<r.length;t++)t in r&&ms(r[t],e)}finally{e.delete(r)}return}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new v("Cannot represent a non-JSON object like the flags service");if(e.has(r))throw new v("Cannot represent a circular object during local evaluation");e.add(r);try{for(let n of Object.keys(r))vr(n),ms(r[n],e)}finally{e.delete(r)}return}throw new v(`Cannot represent ${typeof r} like the flags service`)}}function CE(r,e){let t=0,n=0;for(;t<r.length&&n<e.length;){let s=r.charCodeAt(t),i=e.charCodeAt(n),o=s>=55296&&s<=56319,a=i>=55296&&i<=56319,c=o?r.charCodeAt(t+1):0,l=a?e.charCodeAt(n+1):0,u=o?(s-55296)*1024+c-56320+65536:s,d=a?(i-55296)*1024+l-56320+65536:i;if(u!==d)return u-d;t+=o?2:1,n+=a?2:1}return r.length-e.length}function Fo(r,e=new Set){if(r===null)return"null";if(typeof r=="string")return vr(r),JSON.stringify(r);if(typeof r=="boolean")return r?"true":"false";if(typeof r=="number"){if(!Number.isFinite(r))throw new v(`Cannot stringify non-finite number ${r} like the flags service`);if(Number.isInteger(r))throw new v(`Cannot distinguish integer ${r} from an integral JSON float during local evaluation`);return String(r)}if(Array.isArray(r)){if(e.has(r))throw new v("Cannot stringify a circular array during local evaluation");e.add(r);try{let t=[];for(let n=0;n<r.length;n++)t.push(n in r?Fo(r[n],e):"null");return`[${t.join(",")}]`}finally{e.delete(r)}}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new v("Cannot stringify a non-JSON object like the flags service");if(e.has(r))throw new v("Cannot stringify a circular object during local evaluation");e.add(r);try{let n=Object.keys(r);return n.forEach(vr),`{${n.sort(CE).map(s=>`${JSON.stringify(s)}:${Fo(r[s],e)}`).join(",")}}`}finally{e.delete(r)}}throw new v(`Cannot stringify ${typeof r} like the flags service`)}function gs(r){return typeof r=="string"?(vr(r),r):Fo(r)}function bd(r){try{return new RegExp(r),!0}catch{return!1}}function me(r){return String(r).replace(/[A-Z]/g,e=>e.toLowerCase())}function Td(r,e,t){if(!/^\d+$/.test(r)||t==="strict"&&r.length>1&&r[0]==="0")throw new v(`Invalid semver: ${e}`);return parseInt(r,10)}function W(r,e="strict"){let n=String(r).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new v(`Invalid semver: ${r}`);let s=n.split("."),i=o=>o===void 0||o===""?0:Td(o,r,e);return[i(s[0]),i(s[1]),i(s[2])]}function he(r,e){for(let t=0;t<3;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return 0}function PE(r,e){let t=W(r,e);return{lower:[t[0],t[1],t[2]],upper:[t[0],t[1]+1,0]}}function IE(r,e){let[t,n,s]=W(r,e),i=[t,n,s],o;return o=t>0?[t+1,0,0]:n>0?[0,n+1,0]:[0,0,s+1],{lower:i,upper:o}}function OE(r,e){let n=String(r).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new v(`Invalid wildcard semver: ${r}`);let s=n.split("."),i=c=>{if(e==="legacy-permissive"){let l=parseInt(c,10);if(!isNaN(l))return l}else try{return Td(c,r,e)}catch{}throw new v(`Invalid wildcard semver: ${r}`)},o=i(s[0]);if(s.length===1)return{lower:[o,0,0],upper:[o+1,0,0]};let a=i(s[1]);return{lower:[o,a,0],upper:[o,a+1,0]}}function wd(r){if(r instanceof Date)return r;if(typeof r=="string"||typeof r=="number"){let e=new Date(r);if(!isNaN(e.valueOf()))return e;throw new v(`${r} is in an invalid date format`)}throw new v(`The date provided ${r} must be a string, number, or date object`)}function No(r){let e=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,t=r.match(e),n=new Date(new Date().toISOString());if(!t||!t.groups)return null;let s=parseInt(t.groups.number);if(s>=1e4)return null;let i=t.groups.interval;if(i==="h")n.setUTCHours(n.getUTCHours()-s);else if(i==="d")n.setUTCDate(n.getUTCDate()-s);else if(i==="w")n.setUTCDate(n.getUTCDate()-7*s);else if(i==="m")n.setUTCMonth(n.getUTCMonth()-s);else{if(i!=="y")return null;n.setUTCFullYear(n.getUTCFullYear()-s)}return n}function Uo(r,e,t={}){let n=r.key,s=r.value,i=r.operator||"exact",o=t.semverParsingPolicy??"strict";if(Object.prototype.hasOwnProperty.call(e,n)){if(i==="is_not_set")return!1;if(i==="is_set")return!0}else throw new v(`Property ${n} not found in propertyValues`);let c=e[n];if(c===void 0)return t.warnFunction?.(`Property ${n} cannot have a value of undefined with the ${i} operator`),i==="is_not";if(c===null&&!RE.includes(i)&&i!=="exact"&&i!=="is_not")return t.warnFunction?.(`Property ${n} cannot have a value of null with the ${i} operator`),!1;let l=(d,p)=>{if(t.propertyMatchingVersion!==2&&xo(d)||Array.isArray(d)&&d.length===0)return ms(p),Lo(d)===Lo(p);if(t.propertyMatchingVersion===2&&typeof p=="number"&&xo(d))return ms(p),!1;if(Array.isArray(d)){let g=gs(p).toLowerCase();return d.some(m=>gs(m).toLowerCase()===g)}return gs(d).toLowerCase()===gs(p).toLowerCase()},u=(d,p,g)=>{if(g==="gt")return d>p;if(g==="gte")return d>=p;if(g==="lt")return d<p;if(g==="lte")return d<=p;throw new Error(`Invalid operator: ${g}`)};switch(i){case"exact":return l(s,c);case"is_not":return!l(s,c);case"is_set":return!0;case"icontains":return me(c).includes(me(s));case"not_icontains":return!me(c).includes(me(s));case"starts_with":return me(c).startsWith(me(s));case"not_starts_with":return!me(c).startsWith(me(s));case"ends_with":return me(c).endsWith(me(s));case"not_ends_with":return!me(c).endsWith(me(s));case"regex":return bd(String(s))&&String(c).match(String(s))!==null;case"not_regex":return bd(String(s))&&String(c).match(String(s))===null;case"gt":case"gte":case"lt":case"lte":{let d=typeof s=="number"?s:parseFloat(String(s)),p=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(d)&&Number.isFinite(p)?u(p,d,i):u(String(c),String(s),i)}case"is_date_after":case"is_date_before":{if(typeof s=="boolean")throw new v("Date operations cannot be performed on boolean values");let d=No(String(s));d==null&&(d=wd(s));let p=wd(c);return i==="is_date_before"?p<d:p>d}case"semver_eq":return he(W(String(c),o),W(String(s),o))===0;case"semver_neq":return he(W(String(c),o),W(String(s),o))!==0;case"semver_gt":return he(W(String(c),o),W(String(s),o))>0;case"semver_gte":return he(W(String(c),o),W(String(s),o))>=0;case"semver_lt":return he(W(String(c),o),W(String(s),o))<0;case"semver_lte":return he(W(String(c),o),W(String(s),o))<=0;case"semver_tilde":{let d=W(String(c),o),{lower:p,upper:g}=PE(String(s),o);return he(d,p)>=0&&he(d,g)<0}case"semver_caret":{let d=W(String(c),o),{lower:p,upper:g}=IE(String(s),o);return he(d,p)>=0&&he(d,g)<0}case"semver_wildcard":{let d=W(String(c),o),{lower:p,upper:g}=OE(String(s),o);return he(d,p)>=0&&he(d,g)<0}default:throw new v(`Unknown operator: ${i}`)}}async function Ad(r){let e=globalThis.crypto?.subtle;if(!e)throw new Error("SubtleCrypto API not available");let t=await e.digest("SHA-1",new TextEncoder().encode(r));return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}async function Rr(r,e,t="",n="."){let s=await Ad(`${r}${n}${e}${t}`);return parseInt(s.slice(0,15),16)/ME}async function $o(r,e){if(r==null||r.id==null||r.exclusion_percentage==null)return;let t=Number(r.exclusion_percentage);if(!Number.isFinite(t))return;let n=Math.min(Math.max(t,0),100);if(!(n!==100&&await Rr("holdout",e,"","-")>n/100))return`holdout-${r.id}`}function hs(r){let e=[],t=0;for(let n of r){let s=t+n.rollout_percentage/100;e.push({valueMin:t,valueMax:s,key:n.key}),t=s}return e}async function Bo(r,e,t){let n=await Rr(r,e,"variant");return hs(t).find(s=>n>=s.valueMin&&n<s.valueMax)?.key}function Wo(r,e){if(e===!1||e==null||!r)return null;let t=typeof e=="boolean"?e.toString():e,n=r[t]||null;return n==null?null:Ut(n)}var vd=9223372036854776e3,kE="9223372036854775808",DE=Object.prototype.propertyIsEnumerable;function xE(){return{ancestors:new WeakSet,remainingNodes:1e4}}function De(r,e){try{return Rd(r,e,xE(),0)}catch{return[]}}function LE(r,e){let t=r.toString(),n=BigInt(kE);return r>=n||r<-n?(e?.debug(`Attribute ${t} is outside the int64 range; encoding it as a string`),{stringValue:t}):{intValue:t}}function Ko(r,e,t,n){if(t.remainingNodes<=0)return{stringValue:is};if(t.remainingNodes--,Tu(r))return{boolValue:r};if(typeof r=="bigint")return LE(r,e);if(typeof r=="number"){if(!Number.isFinite(r))return{stringValue:String(r)};if(Number.isInteger(r)){if(Number.isSafeInteger(r))return{intValue:String(r)};if("u"<typeof BigInt)return{stringValue:String(r)};let s=BigInt(r).toString();return r>=vd||r<-vd?(e?.debug(`Attribute ${s} is outside the int64 range; encoding it as a string`),{stringValue:s}):{intValue:s}}return{doubleValue:r}}if(typeof r=="string")return{stringValue:Oe(r)};if(typeof r=="function")return{stringValue:Gu};if(typeof r=="symbol")return{stringValue:String(r)};if(typeof r=="object"&&r!==null){if(t.ancestors.has(r))return{stringValue:ss};if(n>=20)return{stringValue:is};if(r instanceof Date){let s=r.getTime(),i=Number.isFinite(s)?r.toISOString():String(r);return{stringValue:typeof i=="string"?Oe(i):String(i)}}t.ancestors.add(r);try{try{let s=r.toJSON;if(typeof s=="function")return Ko(s.call(r),e,t,n+1)}catch{}return ae(r)?{arrayValue:{values:FE(r,e,t,n+1)}}:{kvlistValue:{values:Rd(r,e,t,n+1)}}}finally{t.ancestors.delete(r)}}return{stringValue:Oe(String(r))}}function FE(r,e,t,n){let s=[],i=Math.min(r.length,1e3),o=0;for(;o<i&&t.remainingNodes>0;o++)try{let a=o in r?r[o]:void 0;if(Te(a))continue;s.push(Ko(a,e,t,n))}catch{s.push({stringValue:pe})}return r.length>o&&s.push({stringValue:is}),s}function Rd(r,e,t,n){let s=[];for(let i in r)if(DE.call(r,i)){if(!i){e?.debug("Dropping an attribute with an empty key");continue}if(s.length>=1e3||t.remainingNodes<=0){e?.debug("Attributes truncated: the value exceeds the OTLP encoder budget");break}try{let o=r[i];if(co(o)||$e(o))continue;s.push({key:Oe(i),value:Ko(o,e,t,n)})}catch{s.push({key:Oe(i),value:{stringValue:pe}})}}return s}function Cr(r,e,t){return{...Be({},r.resourceAttributes),"service.name":r.serviceName||"unknown_service",...r.environment&&{"deployment.environment":r.environment},...r.serviceVersion&&{"service.version":r.serviceVersion},"telemetry.sdk.name":e,"telemetry.sdk.version":t}}var NE=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function Pr(r,e){let t=Be({},r),n={};for(let s of NE)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s],delete t[s]);return[...De(t,e),...De(n,e)]}var Md={darwin:"macOS",win32:"Windows",cygwin:"Windows",linux:"Linux",android:"Android",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",sunos:"SunOS",aix:"AIX",haiku:"Haiku","Mac OS X":"macOS"};function UE(r){if(r)return Object.prototype.hasOwnProperty.call(Md,r)?Md[r]:r}function Go(r,e){let t=UE(r);return{...t?{"os.name":t}:{},...e?{"os.version":e}:{}}}var $E={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},lP=$E.info;var ht=class{constructor(e){this._onFire=e,this._firesAt=0}get pending(){return!!this._timer}arm(e){this.clear(),this._firesAt=Date.now()+e,this._timer=te(()=>{this._timer=void 0,this._onFire()},e)}armNoEarlierThan(e){this._timer&&Date.now()+e<=this._firesAt||this.arm(e)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function Ir(){return 1-.25+Math.random()*.25*2}var _e=1;function Or(r,e,t,n){let s=Math.min(Math.max(0,e-1),6),i=r*2**s,o=n===void 0?i:Math.min(i,Math.max(n,r));return Math.round(o*t)}var kr=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function zo(r){return String(r)+"000000"}function Vo(r,e,t,n){let s="";return n&&(s=Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${JSON.stringify(n[o])}`).join(",")),`${r}\0${e}\0${t??""}\0${s}`}function Cd(r,e){for(let t=0;t<e.length;t++)if(r<=e[t])return t;return e.length}function Yo(r,e,t){return Cr(r,e,t)}function qo(r,e,t,n){return{resourceMetrics:[{resource:{attributes:Pr(e)},scopeMetrics:[{scope:{name:t,version:n},metrics:r}]}]}}function Es(r){let e=r?.resourceAttributes;return{serviceName:e?.["service.name"]??r?.serviceName,serviceVersion:e?.["service.version"]??r?.serviceVersion,environment:e?.["deployment.environment"]??r?.environment,resourceAttributes:e,beforeSend:r?.beforeSend,flushIntervalMs:r?.flushIntervalMs??1e4,maxSeriesPerFlush:r?.maxSeriesPerFlush??1e3}}var Pd=1,Dr=class{constructor(e,t,n){this._instance=e,this._config=t,this._logger=n,this._series=new Map,this._flushTimer=new ht(()=>this.flush().catch(s=>{this._logger.error("Metrics flush failed:",s)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new gt,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._generation=0}count(e,t=1,n){this._capture({name:e,type:"count",value:t,unit:n?.unit,attributes:n?.attributes})}gauge(e,t,n){this._capture({name:e,type:"gauge",value:t,unit:n?.unit,attributes:n?.attributes})}histogram(e,t,n){this._capture({name:e,type:"histogram",value:t,unit:n?.unit,attributes:n?.attributes})}flush(){let e=this._flushPromise,n=(async()=>{e&&await e.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let n,s;try{n=t.attributes?{...t.attributes}:void 0,s=Vo(t.type,t.name,t.unit,n)}catch(a){this._logger.warn(`Dropping metric '${t.name}': attributes could not be serialized`,a);return}let i=this._series.get(s);if(!i){if(!this._admitNewSeries())return;i={name:t.name,type:t.type,unit:t.unit,attributes:n,windowStartMs:Date.now()},this._series.set(s,i)}let o=this._typeByName.get(t.name);o===void 0?this._typeByName.set(t.name,t.type):o!==t.type&&!this._typeCollisionWarned.has(t.name)&&(this._typeCollisionWarned.add(t.name),this._logger.warn(`Metric name '${t.name}' is already used as a ${o}; recording it as a ${t.type} too will blend both series in charts. Use a distinct name.`)),this._fold(i,t.value),this._armFlushTimer()}_admitNewSeries(){return this._series.size<this._config.maxSeriesPerFlush?!0:(this._seriesCapWarned||(this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`)),!1)}_fold(e,t){switch(e.type){case"count":e.total=(e.total??0)+t;break;case"gauge":e.last=t;break;case"histogram":{e.hist||(e.hist={count:0,sum:0,min:t,max:t,bucketCounts:new Array(kr.length+1).fill(0)});let n=e.hist;n.count+=1,n.sum+=t,n.min=Math.min(n.min,t),n.max=Math.max(n.max,t),n.bucketCounts[Cd(t,kr)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let n=ae(t)?t:[t],s=e;for(let i of n)try{let o=i(s);if(!o)return this._logger.info("Metric was rejected in beforeSend function"),null;s=o}catch(o){return this._logger.error("Error in beforeSend function for metric:",o),null}return s}_armFlushTimer(){this._flushTimer.pending||this._flushTimer.arm(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Or(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}async _doFlush(){if(this._flushTimer.clear(),this._series.size===0)return;let e=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let t=this._generation,n=await this._instance._sendMetricsBatch(this._buildPayload(e));if(t===this._generation)switch(this._retryAfter.record(n),n.kind==="retry-later"?(this._consecutiveFlushFailures++,this._flushJitter=Ir()):(this._consecutiveFlushFailures=0,this._flushJitter=_e),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(e){return qo(this._buildMetrics(e),Yo(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=zo(Date.now()),n=new Map;for(let s of e.values()){let i=Vo(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o={name:s.name,...s.unit&&{unit:s.unit}},s.type==="count"?o.sum={aggregationTemporality:Pd,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:Pd,dataPoints:[]},n.set(i,o));let a=De(s.attributes??{},this._logger),c=zo(s.windowStartMs);if(s.type==="count"){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,asDouble:s.total??0};o.sum.dataPoints.push(l)}else if(s.type==="gauge"){let l={attributes:a,timeUnixNano:t,asDouble:s.last??0};o.gauge.dataPoints.push(l)}else if(s.hist){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,count:s.hist.count,sum:s.hist.sum,min:s.hist.min,max:s.hist.max,bucketCounts:s.hist.bucketCounts,explicitBounds:kr};o.histogram.dataPoints.push(l)}}return Array.from(n.values())}_mergeWindowBack(e){for(let[t,n]of e){let s=this._series.get(t);if(!s){this._admitNewSeries()&&this._series.set(t,n);continue}switch(s.windowStartMs=Math.min(s.windowStartMs,n.windowStartMs),s.type){case"count":s.total=(s.total??0)+(n.total??0);break;case"gauge":break;case"histogram":if(n.hist)if(s.hist){s.hist.count+=n.hist.count,s.hist.sum+=n.hist.sum,s.hist.min=Math.min(s.hist.min,n.hist.min),s.hist.max=Math.max(s.hist.max,n.hist.max);for(let i=0;i<s.hist.bucketCounts.length;i++)s.hist.bucketCounts[i]+=n.hist.bucketCounts[i]}else s.hist=n.hist;break}}}};var HE="0".repeat(32),KE="0".repeat(16),GE=/^[0-9a-f]+$/;function zE(r){let e=new Uint8Array(r),t=globalThis.crypto;if(t&&typeof t.getRandomValues=="function")try{return t.getRandomValues(e),e}catch{}for(let n=0;n<r;n++)e[n]=Math.floor(256*Math.random());return e}function VE(r){let e="";for(let t=0;t<r.length;t++)e+=r[t].toString(16).padStart(2,"0");return e}function Id(r){let e=VE(zE(r));return/[^0]/.test(e)?e:e.slice(0,-1)+"1"}function Od(){return Id(16)}function kd(){return Id(8)}function Dd(r,e,t){return typeof r=="string"&&r.length===e&&r!==t&&GE.test(r)}function xd(r){return Dd(r,32,HE)}function Ld(r){return Dd(r,16,KE)}var YE=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Fd(r){let e=Nd(r);return e&&{traceId:e.traceId,spanId:e.spanId,flags:qE(e.flags)}}function qE(r){return 1&parseInt(r,16)?ys:JE}function Nd(r){if(typeof r!="string")return;let e=YE.exec(r.trim());if(!e)return;let[,t,n,s,i,o]=e;if(t!=="ff"&&!(t==="00"&&o)&&!(!xd(n)||!Ld(s)))return{version:t,traceId:n,spanId:s,flags:i}}function Ud(r){return Nd(r)&&r.trim()}function Ss(r){return Array.isArray(r)&&r.length===1?r[0]:r}var ys="01",JE="00";function $d(r,e,t=ys){return`00-${r}-${e}-${t}`}var XE=32,Jo=512;function bs(r){if(typeof r!="string")return;let e=r.trim();if(!e||/[^\x20-\x7e\t]/.test(e))return;let t=e.split(",");if(!(t.length>XE)){for(let n of t)if(n.trim()&&!n.includes("="))return;return e.length<=Jo?e:ZE(t)}}var QE=128;function ZE(r){let e=[...r],t=()=>e.reduce((n,s)=>n+s.length,0)+e.length-1;for(let n=e.length-1;n>=0&&t()>Jo;n--)e[n].length>QE&&e.splice(n,1);for(;e.length&&t()>Jo;)e.pop();return e.length?e.join(","):void 0}var Bd="unknown";function _t(r,e,t,n){return typeof r=="string"&&r.trim()?r.length>t?r.slice(0,t):r:(n?.debug(`${e} must be a non-empty string; using "${Bd}"`),Bd)}function Bt(r){if(r==null)return;let e=r;if(r instanceof Date)try{e=r.getTime()}catch{return}if(!(typeof e!="number"||!Number.isFinite(e))&&!(e<0||e>9223372036854))return e}function Wd(r,e,t){let n=Bt(r);return n===void 0?(r!==void 0&&t?.debug("Span startTime is out of range or not a valid time; using the current time"),e):(e-n>864e5?t?.debug("Span startTime is more than 24 hours in the past; the server will clamp it to receive time and keep the original in $originalTimestamp"):n>e&&t?.debug("Span startTime is in the future; the span may export with a zero duration"),n)}function ws(r,e){return r<e?e:r}function xr(r,e,t,n){let s=Bt(r);return s===void 0?(r!==void 0&&n?.debug(`Span ${t} is out of range or not a valid time; using the derived time`),e):s}function As(){let r=globalThis.performance;return typeof r?.now=="function"?r.now():void 0}var Wt=class{constructor(e,t,n){this._onEnd=t,this._logger=n,this._events=[],this._ended=!1,this._userAttributeCount=0,this._userEventCount=0,this._droppedAttributes=0,this._droppedEvents=0,this._traceId=e.traceId,this._spanId=e.spanId,this._parentSpanId=e.parentSpanId,this._traceState=e.traceState,this._traceFlags=e.traceFlags??ys,this._parentIsRemote=e.parentIsRemote??!1,this._name=e.name,this._kind=e.kind,this._autoKeys=new Set(e.autoAttributeKeys),this._maxAttributes=e.maxAttributes,this._maxEvents=e.maxEvents,this._maxAttributesPerEvent=e.maxAttributesPerEvent,this._maxAttributeValueLength=e.maxAttributeValueLength,this._attributes=Object.create(null);for(let s of Object.keys(e.attributes))this._writeAttribute(s,e.attributes[s]);this._startMono=e.backdated?void 0:As(),this._startTime=e.clockAnchor&&this._startMono!==void 0?e.clockAnchor.wall+(this._startMono-e.clockAnchor.mono):e.startTime,this._startMono!==void 0&&(this._clockAnchor=e.clockAnchor??{wall:this._startTime,mono:this._startMono})}_now(){if(this._startMono!==void 0){let e=As();if(e!==void 0)return this._startTime+Math.max(0,e-this._startMono)}return Date.now()}_mutable(e){return this._ended?(this._logger?.debug(`Ignoring ${e} on a span that has already ended`),!1):!0}_writeAttribute(e,t){if(Te(t)){e in this._attributes&&!this._autoKeys.has(e)&&this._userAttributeCount--,delete this._attributes[e];return}if(!this._autoKeys.has(e)&&!(e in this._attributes)){if(this._userAttributeCount>=this._maxAttributes)return void this._droppedAttributes++;this._userAttributeCount++}this._attributes[e]=Rs(t,this._maxAttributeValueLength)}setAttribute(e,t){return this._mutable("setAttribute")&&this._writeAttribute(e,t),this}setAttributes(e){if(this._mutable("setAttributes")){let t=Be({},e);for(let n of Object.keys(t))this._writeAttribute(n,t[n])}return this}addEvent(e,t,n){if(this._mutable("addEvent")){if(this._userEventCount>=this._maxEvents)return this._droppedEvents++,this;this._userEventCount++;let s=t&&Gd(t,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:_t(e,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:xr(n,this._now(),"event timestamp",this._logger),...s&&{attributes:s.attributes,...s.dropped&&{droppedAttributesCount:s.dropped}}})}return this}setStatus(e,t){if(this._mutable("setStatus")){if(e!=="ok"&&e!=="error")return this._logger?.debug(`Ignoring unknown span status "${String(e)}"; expected "ok" or "error"`),this;this._status={code:e,...t&&{message:Xo(t,this._maxAttributeValueLength)}}}return this}get statusIsExplicitlyOk(){return this._status?.code==="ok"}recordException(e){if(!this._mutable("recordException"))return this;let{type:t,message:n,stack:s}=Qo(e);return this.addEvent(eS,{"exception.type":t,"exception.message":n,...s&&{"exception.stacktrace":s}}),this.setStatus("error",n)}updateName(e){return this._mutable("updateName")&&(this._name=_t(e,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return $d(this._traceId,this._spanId,this._traceFlags)}tracestate(){return this._traceState??null}childContext(){return{traceId:this._traceId,parentSpanId:this._spanId,traceState:this._traceState,traceFlags:this._traceFlags,clockAnchor:this._clockAnchor}}end(e){if(this._ended)return void this._logger?.debug("Ignoring end() on a span that has already ended");this._ended=!0;let t=this._now(),n=xr(e,t,"end time",this._logger);this._onEnd({traceId:this._traceId,spanId:this._spanId,...this._parentSpanId&&{parentSpanId:this._parentSpanId},...this._traceState&&{traceState:this._traceState},traceFlags:this._traceFlags,parentIsRemote:this._parentIsRemote,name:this._name,kind:this._kind,...this._status&&{status:this._status},attributes:{...this._attributes},events:this._events,startTime:this._startTime,endTime:ws(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},eS="exception",tS=4294967295;function rS(r){try{return typeof r=="string"?r:String(r)}catch{return pe}}function Et(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),tS)}function nS(r,e){if(!e.length)return Object.keys(r);let t=e.filter(s=>Object.prototype.propertyIsEnumerable.call(r,s)),n=new Set(t);return[...t,...Object.keys(r).filter(s=>!n.has(s))]}function Hd(r,e,t,n,s,i,o=[]){let a=0,c=0,l={};for(let g of nS(r.attributes,o)){let m=r.attributes[g];if(!Te(m)){if(!e.has(g)){if(a>=t){c++;continue}a++}Object.defineProperty(l,g,{value:Rs(m,i),enumerable:!0,writable:!0,configurable:!0})}}r.attributes=l,c&&(r.droppedAttributesCount=Et(r.droppedAttributesCount)+c);let u=0,d=0,p=[];for(let g of r.events){if(u>=n){d++;continue}if(u++,g.attributes){let m=Gd(g.attributes,s,i);g.attributes=m.attributes,m.dropped&&(g.droppedAttributesCount=Et(g.droppedAttributesCount)+m.dropped)}p.push(g)}r.events=p,d&&(r.droppedEventsCount=Et(r.droppedEventsCount)+d),r.status?.message&&(r.status={...r.status,message:Xo(rS(r.status.message),i)})}var vs=class{setAttribute(){return this}setAttributes(){return this}addEvent(){return this}setStatus(){return this}recordException(){return this}updateName(){return this}traceparent(){return null}tracestate(){return null}end(){}},Kd=new vs,Lr=class extends vs{constructor(e,t){super(),this._traceparent=e,this._tracestate=t}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function sS(r){try{let e=r.stack;return typeof e=="string"&&e?{stack:e}:{}}catch{return{}}}function Ze(r,e){let t=Ss(r?.parent)??e,n=typeof t=="string"||t==null?t:jd(t,"traceparent"),s=Ud(n);if(!s)return Kd;let i=typeof t=="string"||t==null?r?.tracestate:jd(t,"tracestate");return new Lr(s,bs(i))}function jd(r,e){try{let t=r[e];return typeof t=="function"?t.call(r):void 0}catch{return}}function Xo(r,e){return r.length>e?r.slice(0,e):r}function Rs(r,e){return Ts(r,e,{ancestors:new WeakSet,remainingNodes:1e4},0)}function Ts(r,e,t,n){if(r===null||typeof r!="object")return Te(r)||t.remainingNodes<=0?r:(t.remainingNodes--,typeof r=="string"?Xo(r,e):r);if(t.ancestors.has(r))return ss;if(t.remainingNodes<=0||n>=20)return r;t.remainingNodes--,t.ancestors.add(r);try{if(r instanceof Date)return r;let s=iS(r);if(s.selfDescribed)return Te(s.value)?String(s.value):Ts(s.value,e,t,n+1);if(ae(r)){let a=Math.min(r.length,1e3),c=[];for(let l=0;l<a;l++)try{c.push(Ts(r[l],e,t,n+1))}catch{c.push(pe)}return r.length>a&&(c.length=r.length),c}let i={},o=0;for(let a of Object.keys(r)){if(o>=1e3)break;let c;try{c=Ts(r[a],e,t,n+1)}catch{c=pe}a&&!Te(c)&&o++,Object.defineProperty(i,a,{value:c,enumerable:!0,writable:!0,configurable:!0})}return i}catch{return r}finally{t.ancestors.delete(r)}}function iS(r){try{let e=r.toJSON;if(typeof e=="function")return{selfDescribed:!0,value:e.call(r)}}catch{}return{selfDescribed:!1}}function Gd(r,e,t){let n;try{n=Object.keys(r)}catch{return{attributes:{},dropped:0}}let s={},i=0,o=0;for(let a of n){if(i>=e){o++;continue}let c;try{c=Rs(r[a],t)}catch{c=pe}Te(c)||(i++,Object.defineProperty(s,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:s,dropped:o}}function zd(r,e){for(let t of Object.keys(r))r[t]=Rs(r[t],e);return r}function Fr(r,e,t){return e===Kd?t(e):r.with(e,()=>t(e))}function Qo(r){try{let e=sS(r);if(Xe(r))return{type:r.name||"Error",message:r.message||"",...e};if(typeof r=="string")return{type:"string",message:r};if(r&&typeof r=="object"){let t=r;if(typeof t.message=="string")return{type:typeof t.name=="string"?t.name:"Object",message:t.message,...e}}return{type:typeof r,message:String(r)}}catch{return{type:typeof r,message:""}}}var Zo={internal:1,server:2,client:3,producer:4,consumer:5},oS={ok:1,error:2},aS=1,cS=256,lS=512;function uS(r){let e=parseInt(r.traceFlags,16);return(Number.isFinite(e)?255&e:aS)|cS|(r.parentIsRemote?lS:0)}function Ms(r){if(typeof r=="string")return Oe(r);try{return Oe(String(r))}catch{return pe}}function dS(r){return r&&Object.prototype.hasOwnProperty.call(Zo,r)?Zo[r]:Zo.internal}function ea(r){let e=Math.floor(r),t=Math.round((r-e)*1e6);return t>=1e6&&(e+=1,t=0),String(e)+String(t).padStart(6,"0")}function fS(r,e){let t={name:Ms(r.name),timeUnixNano:ea(r.timestamp)};if(r.attributes){let s=De(r.attributes,e);s.length&&(t.attributes=s)}let n=Et(r.droppedAttributesCount);return n&&(t.droppedAttributesCount=n),t}function Vd(r,e){let t={traceId:r.traceId,spanId:r.spanId,name:Ms(r.name),kind:dS(r.kind),startTimeUnixNano:ea(r.startTime),endTimeUnixNano:ea(r.endTime),flags:uS(r)};r.parentSpanId&&(t.parentSpanId=r.parentSpanId),r.traceState&&(t.traceState=Ms(r.traceState));let n=De(r.attributes,e);n.length&&(t.attributes=n),r.events.length&&(t.events=r.events.map(o=>fS(o,e)));let s=Et(r.droppedAttributesCount);s&&(t.droppedAttributesCount=s);let i=Et(r.droppedEventsCount);return i&&(t.droppedEventsCount=i),r.status&&(t.status={code:oS[r.status.code],...r.status.message&&{message:Ms(r.status.message)}}),t}function Yd(r,e,t){return Cr(r,e,t)}function qd(r,e,t,n,s){return{resourceSpans:[{resource:{attributes:Pr(e,s)},scopeSpans:[{scope:{name:t,version:n},spans:r}]}]}}var Jd=8;function Cs(){return As()??Date.now()}function ta(r){try{return r instanceof Wt}catch{return!1}}function Xd(r,e){let t=Fd(r);if(t)return{traceId:t.traceId,parentSpanId:t.spanId,traceState:bs(e),traceFlags:t.flags,isRemote:!0}}function pS(r){try{return typeof r.traceparent=="function"}catch{return!1}}function gS(r){return!!r.attributes&&typeof r.attributes=="object"&&!Array.isArray(r.attributes)&&Array.isArray(r.events)&&r.name!==void 0&&r.kind!==void 0&&r.startTime!==void 0&&r.endTime!==void 0}function Ps(r,e,t){r[e]!==t&&(r[e]=t)}function mS(r,e){try{let t=Object.getOwnPropertyDescriptors(r);for(let n of["traceId","spanId","parentSpanId","traceState"])t[n]={value:e[n],enumerable:!0,writable:!0,configurable:!0};return Object.create(Object.getPrototypeOf(r),t)}catch{return r}}var Nr=class{constructor(e,t,n,s,i,o){this._instance=e,this._config=t,this._logger=n,this._getContext=s,this._contextManager=i,this._onSpanQueued=o,this._queue=[],this._flushTimer=new ht(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter=new gt,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=t.maxExportBatchSize}startSpan(e,t){if(this._instance.isDisabled||this._instance.optedOut)return Ze(t,this._contextManager.active());let n=Ss(t?.parent);if(n&&typeof n!="string"&&!ta(n)){if(pS(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),Ze(t,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let s=this._resolveParent(n,t);if(this._liveSpans.size>=this._config.maxLiveSpans&&this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),Ze(t,this._contextManager.active());let i=Date.now(),o=Wd(t?.startTime,i,this._logger),a=kd();this._liveSpans.set(a,Cs());let c=this._autoContextAttributes();return new Wt({traceId:s?.traceId??Od(),spanId:a,parentSpanId:s?.parentSpanId,traceState:s?.traceState,traceFlags:s?.traceFlags,parentIsRemote:s?.isRemote,name:_t(e,"Span name",this._config.maxAttributeValueLength,this._logger),kind:t?.kind??"internal",attributes:Be({...c},t?.attributes),autoAttributeKeys:Object.keys(c),maxAttributes:this._config.maxAttributesPerSpan,maxEvents:this._config.maxEventsPerSpan,maxAttributesPerEvent:this._config.maxAttributesPerEvent,maxAttributeValueLength:this._config.maxAttributeValueLength,startTime:o,backdated:o!==i,clockAnchor:Bt(t?.startTime)===void 0?s?.clockAnchor:void 0},(l,u)=>this._onSpanEnd(l,u),this._logger)}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this.startSpan(e,s);try{let a=Fr(this._contextManager,o,i);return qu(a)?a.then(c=>(o.end(),c),c=>{throw this._recordCallbackError(o,c),o.end(),c}):(o.end(),a)}catch(a){throw this._recordCallbackError(o,a),o.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let e=this._generation,t=Promise.resolve().then(()=>e===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===t&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=t,t}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(e,t){if(typeof e=="string"){let s=Xd(e,t?.tracestate);return s||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),s}if(ta(e))return e.childContext();let n=this._contextManager.active();if(ta(n))return n.childContext();if(n instanceof Lr)return Xd(n.traceparent(),n.tracestate()??void 0)}_autoContextAttributes(){let e;try{e=this._getContext()}catch(n){return this._logger.debug("Failed to read tracing context; span will carry no PostHog attributes",n),{}}let t={};return e.distinctId&&(t.posthogDistinctId=e.distinctId),e.sessionId&&(t.sessionId=e.sessionId),e.currentUrl&&(t["url.full"]=e.currentUrl),e.screenName&&(t["screen.name"]=e.screenName),e.appState&&(t["app.state"]=e.appState),t}_recordCallbackError(e,t){if(!(e instanceof Wt))return;let{type:n,message:s,stack:i}=Qo(t);e.addEvent("exception",{"exception.type":n,"exception.message":s,...i&&{"exception.stacktrace":i}}),e.statusIsExplicitlyOk||e.setStatus("error",s)}_evictAgedSpans(){let e=Cs()-this._config.maxSpanAgeMs,t=0;for(let[n,s]of this._liveSpans){if(s>e)break;this._liveSpans.delete(n),t++}t&&this._recordDrop(t,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(e,t){if(!this._liveSpans.delete(e.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(e,t);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(s){this._logger.debug("Span queue notification failed",s)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(e){let t=e.droppedAttributesCount??0,n=e.droppedEventsCount??0,s=0;for(let i of e.events)s+=i.droppedAttributesCount??0;(t||n||s)&&this._logger.debug(`Span limits discarded data from "${e.name}": ${t} attributes, ${n} events, ${s} event attributes`)}_runBeforeSpanSend(e,t){if(!this._config.beforeSpanSend.length)return e;let n={traceId:e.traceId,spanId:e.spanId,parentSpanId:e.parentSpanId,traceState:e.traceState},s={startTime:e.startTime,endTime:e.endTime},i={attributes:e.droppedAttributesCount,events:e.droppedEventsCount},o=Object.keys(e.attributes),a={traceFlags:e.traceFlags,parentIsRemote:e.parentIsRemote},c=e.status&&{...e.status},l=e,u=e;try{for(let g of this._config.beforeSpanSend){let m=g(l);if(!m)return this._recordDrop(1,"beforeSpanSend dropped it"),null;l=this._keepSpanIdentity(m,n)}if(u={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:l.name,kind:l.kind,status:l.status,attributes:l.attributes,events:l.events,startTime:l.startTime,endTime:l.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:i.attributes,droppedEventsCount:i.events},!gS(u))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;u.name=_t(u.name,"Span name",this._config.maxAttributeValueLength,this._logger),u.status&&u.status.code!=="ok"&&u.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),u.status=c),u.startTime=Bt(u.startTime)??s.startTime,u.endTime=ws(Bt(u.endTime)??s.endTime,u.startTime);let p=[];for(let g of u.events)try{p.push({...g,name:_t(g.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:xr(g.timestamp,u.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return u.events=p,Hd(u,t,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,o),u}catch(d){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",d),this._recordDrop(1,"beforeSpanSend failed"),null}}_keepSpanIdentity(e,t){(e.traceId!==t.traceId||e.spanId!==t.spanId||e.parentSpanId!==t.parentSpanId)&&this._logger.debug("beforeSpanSend changed a span identity field; keeping the original ids");try{Ps(e,"traceId",t.traceId),Ps(e,"spanId",t.spanId),Ps(e,"parentSpanId",t.parentSpanId),Ps(e,"traceState",t.traceState)}catch{return mS(e,t)}return e}_recordDrop(e,t){this._droppedSinceWarning+=e,this._dropReasons.add(t),Date.now()-this._lastDropWarningAt>=this._config.flushIntervalMs&&this._warnAboutDrops()}_warnAboutDrops(){this._droppedSinceWarning&&(this._lastDropWarningAt=Date.now(),this._logger.warn(`Dropping ${this._droppedSinceWarning} span(s): ${[...this._dropReasons].join("; ")}`),this._droppedSinceWarning=0,this._dropReasons.clear())}_encodeBatch(e){let t=[];for(let n of e)try{t.push(Vd(n,this._logger))}catch(s){this._logger.debug("Failed to encode a span; dropping it",s),this._recordDrop(1,"its attributes could not be encoded")}return t}_discardQueueIfConsentWithdrawn(){if(!this._instance.isDisabled&&!this._instance.optedOut)return 0;let e=this._queue.length;return this._queue=[],this._resetHeadBatchBudget(),this._recordDrop(e,"the user has opted out"),this._warnAboutDrops(),e}async _flushInner(){if(!this._queue.length)return 0;let e=this._discardQueueIfConsentWithdrawn();if(e)return e;let t=zd(Yd(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._config.maxAttributeValueLength),n=this._instance.getLibraryId(),s=this._instance.getLibraryVersion(),i=this._queue.length,o=0,a=1/0,c=this._generation;try{for(;i>0&&this._queue.length>0;){let l=this._discardQueueIfConsentWithdrawn();if(l)return o+l;let u=this._headBatchFailures>0?Math.min(this._maxExportBatchSize,this._headBatchSize):this._maxExportBatchSize,d=Math.max(1,Math.min(u,a,i,this._queue.length)),p=this._queue.slice(0,d),g=this._encodeBatch(p);if(!g.length){this._queue.splice(0,d),i-=d,o+=d,this._resetHeadBatchBudget();continue}let m=Cs()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),h=await this._instance._sendTracesBatch(qd(g,t,n,s,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(h),h.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._queue.splice(0,d),i-=d,o+=d,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(h.kind==="too-large"){if(d===1){this._queue.splice(0,1),i-=1,o+=1,this._recordDrop(1,"it is too large for the ingestion endpoint"),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget();continue}let E=Math.max(1,Math.floor(d/2));h.measuredLocally?a=E:this._maxExportBatchSize=E,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${E}`);continue}if(h.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=Ir(),this._headBatchSize=d,m&&(this._headBatchFailures++,this._headBatchChargeableAt=Cs()+this._nextFlushDelay()),this._headBatchFailures<Jd)return this._logger.debug("Span export failed; retrying on the next flush",h.error),o;if(this._queue.splice(0,d),i-=d,o+=d,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(d,`the ingestion endpoint failed ${Jd} times in a row`),this._retryAfter.isOpen())return o;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",h.error),this._queue.splice(0,d),i-=d,o+=d,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(d,"the ingestion endpoint rejected the batch")}return o}finally{this._warnAboutDrops()}}_flushInBackground(){this._backgroundFlush||(this._backgroundFlush=this.flush().catch(e=>{this._logger.debug("Background span flush failed",e)}).finally(()=>{this._backgroundFlush=void 0,this._armFlushTimerIfQueuedNoEarlierThan()}))}_armFlushTimerIfQueued(){this._flushTimer.pending||!this._queue.length||this._flushTimer.arm(this._nextFlushDelay())}_armFlushTimerIfQueuedNoEarlierThan(){this._queue.length&&this._flushTimer.armNoEarlierThan(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Or(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var Ur=class{active(){return this._active}with(e,t){let n=this._active;this._active=e;try{return t()}finally{this._active=n}}};var hS=5e3,_S=512,ES=2048,SS=128,yS=128,bS=128,wS=8192,TS=1e4,AS=36e5;function et(r,e){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:e}var Qd=["service.name","service.version","deployment.environment"];function vS(r){if(!(!r||typeof r!="object"||Array.isArray(r)))try{if(Qd.every(t=>!(t in r)||typeof r[t]=="string"))return r;let e={...r};for(let t of Qd)t in e&&typeof e[t]!="string"&&delete e[t];return e}catch{return}}function RS(r,e){if(!r)return[];let t=[r].flat().filter(s=>!!s),n=t.filter(s=>typeof s=="function");return n.length!==t.length&&e?.critical(`beforeSpanSend: ignoring ${t.length-n.length} of ${t.length} entries that are not functions. Spans export without them, so whatever they were redacting is not redacted.`),n}function ra(r,e,t){let n=Be({...e},vS(r?.resourceAttributes)),s=et(r?.maxExportBatchSize,_S);return{serviceName:n?.["service.name"]??r?.serviceName,serviceVersion:n?.["service.version"]??r?.serviceVersion,environment:n?.["deployment.environment"]??r?.environment,resourceAttributes:n,beforeSpanSend:RS(r?.beforeSpanSend,t),maxAttributesPerSpan:et(r?.maxAttributesPerSpan,SS),maxEventsPerSpan:et(r?.maxEventsPerSpan,yS),maxAttributesPerEvent:bS,maxAttributeValueLength:et(r?.maxAttributeValueLength,wS),flushIntervalMs:et(r?.flushIntervalMs,hS),maxExportBatchSize:s,maxQueueSize:Math.max(et(r?.maxQueueSize,ES),s),maxLiveSpans:et(r?.maxLiveSpans,TS),maxSpanAgeMs:et(r?.maxSpanAgeMs,AS)}}var na=require("node:fs"),tf=require("node:fs/promises"),ia=require("node:path"),rf=require("node:readline"),Is=new G.ReduceableCache(25),$r=new G.ReduceableCache(20),oa=7,MS=1e3,CS=1e4,sa=10485760;async function nf(r,e=tf.open,t){let n={},s;try{s=process.cwd()}catch{}for(let a=r.length-1;a>=0;a--){let c=r[a],l=c?.filename;if(!c||typeof l!="string"||typeof c.lineno!="number"||DS(l)||xS(c)||!(0,ia.isAbsolute)(l)&&s===void 0)continue;n[l]||(n[l]=[]),n[l].push(c.lineno)}let i=Object.keys(n);if(i.length==0)return r;let o=[];for(let a of i){let c=sf(a,s);if(c===void 0||$r.get(c))continue;let l=n[a];if(!l)continue;l.sort((p,g)=>p-g);let u=FS(l);if(u.every(p=>LS(c,p)))continue;let d=NS(Is,c,{});o.push(IS(a,u,d,c,e,t))}return await Promise.all(o).catch(()=>{}),r&&r.length>0&&OS(r,Is,s),Is.reduce(),r}async function PS(r,e,t){let n,s=!1;try{n=await e(r,na.constants.O_RDONLY|na.constants.O_NONBLOCK);let i=await n.stat();return i.isFile()?i.size>sa?void t?.debug(`Skipping source context for oversized file ${r}: ${i.size} bytes exceeds ${sa}`):(s=!0,n):void 0}catch{return}finally{n&&!s&&await n.close().catch(()=>{})}}async function IS(r,e,t,n,s,i){let o=await PS(r,s,i);if(o===void 0)return void $r.set(n,1);let a=o;return new Promise(c=>{let l=!1;function u(w){l||(l=!0,w?.destroy(),a.close().then(c,c))}let d;try{d=a.createReadStream({autoClose:!1,start:0,end:sa-1})}catch{$r.set(n,1),u();return}let p;try{p=(0,rf.createInterface)({input:d})}catch{$r.set(n,1),u(d);return}let g=0,m=0,h=e[m];if(h===void 0)return void u(d);let E=h[0],_=h[1];function b(){$r.set(n,1),p.close(),p.removeAllListeners(),u(d)}d.on("error",b),p.on("error",b),p.on("close",()=>u(d)),p.on("line",w=>{if(g++,!(g<E)&&(t[g]=US(w,0),g>=_)){if(m===e.length-1){p.close(),p.removeAllListeners();return}m++;let T=e[m];if(T===void 0){p.close(),p.removeAllListeners();return}E=T[0],_=T[1]}})})}function OS(r,e,t){for(let n of r)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let s=sf(n.filename,t),i=s===void 0?void 0:e.get(s);if(i===void 0)continue;kS(n.lineno,n,i)}}function kS(r,e,t){if(e.lineno===void 0||t===void 0)return;e.pre_context=[];for(let s=of(r);s<r;s++){let i=t[s];if(i===void 0)return void Zd(e);e.pre_context.push(i)}if(t[r]===void 0)return void Zd(e);e.context_line=t[r];let n=af(r);e.post_context=[];for(let s=r+1;s<=n;s++){let i=t[s];if(i===void 0)break;e.post_context.push(i)}}function Zd(r){delete r.pre_context,delete r.context_line,delete r.post_context}function DS(r){return r.startsWith("node:")||r.endsWith(".min.js")||r.endsWith(".min.cjs")||r.endsWith(".min.mjs")||r.startsWith("data:")}function xS(r){return r.lineno!==void 0&&r.lineno>CS||r.colno!==void 0&&r.colno>MS}function sf(r,e){return(0,ia.isAbsolute)(r)?JSON.stringify([null,r]):e===void 0?void 0:JSON.stringify([e,r])}function LS(r,e){let t=Is.get(r);if(t===void 0)return!1;for(let n=e[0];n<=e[1];n++)if(t[n]===void 0)return!1;return!0}function FS(r){if(!r.length)return[];let e=0,t=r[0];if(typeof t!="number")return[];let n=ef(t),s=[];for(;;){if(e===r.length-1){s.push(n);break}let i=r[e+1];if(typeof i!="number")break;i<=n[1]?n[1]=i+oa:(s.push(n),n=ef(i)),e++}return s}function ef(r){return[of(r),af(r)]}function of(r){return Math.max(1,r-oa)}function af(r){return r+oa}function NS(r,e,t){let n=r.get(e);return n===void 0?(r.set(e,t),t):n}function US(r,e){let t=r,n=t.length;if(n<=150)return t;e>n&&(e=n);let s=Math.max(e-60,0);s<5&&(s=0);let i=Math.min(s+140,n);return i>n-5&&(i=n),i===n&&(s=Math.max(i-140,0)),t=t.slice(s,i),s>0&&(t=`...${t}`),i<n&&(t+="..."),t}var jt=require("path");function cf(r=process.cwd()){let e=jt.sep==="\\",t=s=>e?s.replace(/\\/g,"/"):s,n=t(r);return async s=>{for(let i of s)!i.filename||i.filename.startsWith("node:")||i.filename.startsWith("data:")||(0,jt.isAbsolute)(i.filename)&&(i.filename=t((0,jt.relative)(n,t(i.filename))));return s}}var lf="5.55.0";var je={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var tt=class r{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e,t={}){let n=this._flags[e];return this._recordAccess(e),n?.enabled??t.defaultValue??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!!t)return t.enabled?t.variant??!0:!1}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let n=this._flags[t];n&&(e[t]=n)}return this._cloneWith(e)}only(e){let t={},n=[];for(let s of e){let i=this._flags[s];i?t[s]=i:n.push(s)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[n,s]of Object.entries(this._flags)){let i=s.enabled===!1?!1:s.variant??!0;e[`$feature/${n}`]=i,s.enabled&&t.push(n)}return t.length>0&&(t.sort(),e.$active_feature_flags=t),e}_cloneWith(e){return new r({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId===""||this._isSlice&&!(e in this._flags))return;let t=this._flags[e],n=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,s={$feature_flag:e,$feature_flag_response:n,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};t?.hasExperiment!==void 0&&(s.$feature_flag_has_experiment=t.hasExperiment),t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(s.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let i=[];this._errorsWhileComputing&&i.push(je.ERRORS_WHILE_COMPUTING),this._quotaLimited&&i.push(je.QUOTA_LIMITED),t===void 0&&i.push(je.FLAG_MISSING),i.length>0&&(s.$feature_flag_error=i.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:s})}};var $S=6e4;function uf(r){return r==="client"||r==="server"?r:"all"}function BS(r,e){return r===e||r==="all"||e==="all"}var Ht=class r extends Error{constructor(e){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,r.prototype)}};function WS(r,e){r.name=e.name,Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype)}var xe=class r extends Error{constructor(e){super(e),WS(this,r)}},Os=class{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:n,timeout:s,host:i,customHeaders:o,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollerStopped=!1,this.filteredOutFlagKeys=new Set,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=s,this.projectApiKey=n,this.host=i,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=o,this.onLoad=a.onLoad,this.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){this.debugMode&&e()}withEvaluationSnapshot(e){return e.definitions?e:{...e,evaluationCache:{},definitions:{featureFlagsByKey:this.featureFlagsByKey,groupTypeMapping:this.groupTypeMapping,cohorts:this.cohorts,filteredOutFlagKeys:this.filteredOutFlagKeys,propertyMatchingVersion:this.propertyMatchingVersion}}}createEvaluationContext(e,t={},n={},s={},i={}){return{distinctId:e,groups:t,personProperties:n,groupProperties:s,evaluationCache:i}}async getFeatureFlag(e,t,n={},s={},i={}){await this.loadFeatureFlags();let o,a;if(!this.loadedSuccessfullyOnce)return o;if(a=this.featureFlagsByKey[e],a!==void 0){let c=this.createEvaluationContext(t,n,s,i);try{o=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${o}`))}catch(l){l instanceof xe||l instanceof v?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${e}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${e}: ${l}`))}}return o}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let n={},s={},i=this.featureFlags.length==0,o=t?t.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a=this.withEvaluationSnapshot({...e,definitions:void 0});return await Promise.all(o.map(async c=>{try{let{value:l,payload:u}=await this.computeFlagAndPayloadLocally(c,a,{skipLoadCheck:!0});n[c.key]=l,u&&(s[c.key]=u)}catch(l){l instanceof xe||l instanceof v?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${c.key}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${l}`)),i=!0}})),{response:n,payloads:s,fallbackToFlags:i}}async computeFlagAndPayloadLocally(e,t,n={}){let{matchValue:s,skipLoadCheck:i=!1}=n;if(this.loadedSuccessfullyOnce&&(t=this.withEvaluationSnapshot(t)),i||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};t=this.withEvaluationSnapshot(t),e=t.definitions.featureFlagsByKey[e.key]??e;let o;o=s!==void 0?s:await this.computeFlagValueLocally(e,t);let a=Wo(e.filters?.payloads,o);return{value:o,payload:a}}async computeFlagValueLocally(e,t){let{distinctId:n,groups:s,personProperties:i,groupProperties:o}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new v("Flag has experience continuity enabled");let c=(e.filters||{}).aggregation_group_type_index;if(c!=null){let l=t.definitions.groupTypeMapping[String(c)];if(!l)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${e.key}`)),new v("Flag has unknown group type index");if(!(l in s))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${e.key} without group names passed in`)),!1;e.bucketing_identifier==="device_id"&&(i?.$device_id===void 0||i?.$device_id===null||i?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${e.key}`));let u=o[l];return await this.matchFeatureFlagProperties(e,s[l],u,t)}{let l=this.getBucketingValueForFlag(e,n,i);if(l===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${e.key} without $device_id, falling back to server evaluation`)),new v(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,l,i,t)}}getBucketingValueForFlag(e,t,n){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let s=n?.$device_id;return s==null||s===""?void 0:s}return t}async evaluateFlagDependency(e,t,n){let{evaluationCache:s}=n,i=e.key;if(!n.definitions.featureFlagsByKey)throw new v("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new v(`Flag dependency property for '${i}' is missing required 'dependency_chain' field`);let o=e.dependency_chain;if(!Array.isArray(o))throw new v(`Flag dependency property for '${i}' has an invalid 'dependency_chain' (expected array, got ${typeof o})`);if(o.length===0)throw new v(`Circular dependency detected for flag '${i}' (empty dependency chain)`);for(let c of o){if(!(c in s)){let u=n.definitions.featureFlagsByKey[c];if(u)if(u.active)try{let d=await this.computeFlagValueLocally(u,n);s[c]=d}catch(d){throw new v(`Error evaluating flag dependency '${c}' for flag '${i}': ${d}`)}else s[c]=!1;else if(n.definitions.filteredOutFlagKeys.has(c))s[c]=!1;else throw new v(`Missing flag dependency '${c}' for flag '${i}'`)}if(s[c]==null)throw new v(`Dependency '${c}' could not be evaluated`)}let a=s[i];return this.flagEvaluatesToExpectedValue(e.value,a)}flagEvaluatesToExpectedValue(e,t){return typeof e=="boolean"?e===t||typeof t=="string"&&t!==""&&e===!0:typeof e=="string"?t===e:!1}async matchFeatureFlagProperties(e,t,n,s){s=this.withEvaluationSnapshot(s);let i=e.filters||{},o=await $o(i.holdout,t);if(o!==void 0)return o;let a=i.groups||[],c=i.aggregation_group_type_index,l=i.early_exit??!1,{groups:u,groupProperties:d}=s,p=!1,g;for(let m of a)try{let h=m.aggregation_group_type_index!==void 0?m.aggregation_group_type_index:c,E=n,_=t;if(h!==c&&h!=null){let w=s.definitions.groupTypeMapping[String(h)];if(!w||!(w in u)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${h} not available`));continue}if(!(w in d)){p=!0;continue}E=d[w],_=u[w]}let b=await this.isConditionMatch(e,_,m,E,s);if(b==="match"){let w=m.variant,T=i.multivariate?.variants||[];g=w&&T.some(M=>M.key===w)?w:await this.getMatchingVariant(e,_)||!0;break}if(l&&b==="out_of_rollout_bound"){if(p)break;return!1}}catch(h){if(h instanceof xe)throw h;if(h instanceof v)p=!0;else throw h}if(g!==void 0)return g;if(p)throw new v("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,n,s,i){i=this.withEvaluationSnapshot(i);let o=i.definitions,a=n.rollout_percentage,c=l=>{this.logMsgIfDebug(()=>console.warn(l))};if((n.properties||[]).length>0){for(let l of n.properties){let u=l.type,d=!1;if(u==="cohort"){let p=await ff(l,s,o.cohorts,this.debugMode,g=>this.evaluateFlagDependency(g,s,i),o.propertyMatchingVersion);d=l.operator==="not_in"?!p:p}else d=u==="flag"?await this.evaluateFlagDependency(l,s,i):df(l,s,c,o.propertyMatchingVersion);if(!d)return"no_match"}if(a==null)return"match"}return a!=null&&await Rr(e.key,t)>a/100?"out_of_rollout_bound":"match"}async getMatchingVariant(e,t){return Bo(e.key,t,e.filters?.multivariate?.variants||[])}variantLookupTable(e){return hs(e.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(e){if(!this.evaluationContexts||this.evaluationContexts.length===0)return e;let t=new Set(this.evaluationContexts);return e.filter(n=>{let s=n.evaluation_contexts??n.evaluation_tags;return!s||s.length===0?!0:s.some(i=>t.has(i))})}getEvaluationRuntimeForFlag(e){let t=this.featureFlagsByKey[e];return t?uf(t.evaluation_runtime):void 0}getFlagKeysByEvaluationRuntime(e){return this.featureFlags.filter(t=>BS(uf(t.evaluation_runtime),e)).map(t=>t.key)}updateFlagState(e){let t=this.filterFlagsByEvaluationContexts(e.flags);this.featureFlags=t,this.featureFlagsByKey=t.reduce((s,i)=>(s[i.key]=i,s),{});let n=new Set(t.map(s=>s.key));this.filteredOutFlagKeys=new Set(e.flags.filter(s=>!n.has(s.key)).map(s=>s.key)),this.groupTypeMapping=e.group_type_mapping??e.groupTypeMapping??{},this.cohorts=e.cohorts,this.propertyMatchingVersion=e.property_matching_version??e.propertyMatchingVersion,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.((e.minimal_flag_called_events??e.minimalFlagCalledEvents)===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter(n=>n.ensure_experience_continuity);t.length>0&&console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();return t?(this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags),!0):!1}catch(t){return this.onError?.(new Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(!(this.loadedSuccessfullyOnce&&!e))return!e&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(t=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){let e=this.pollingInterval??3e4;return this.shouldBeginExponentialBackoff?Math.min($S,e*2**this.backOffCount):e}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0);try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!e&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Ht(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.propertyMatchingVersion=void 0,this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Ht(`Your secret key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Ht(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await t.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let s=n.group_type_mapping||{},i=n.minimal_flag_called_events===!0,o={flags:n.flags??[],group_type_mapping:s,cohorts:n.cohorts||{},minimal_flag_called_events:i,property_matching_version:n.property_matching_version,propertyMatchingVersion:n.property_matching_version,groupTypeMapping:s,minimalFlagCalledEvents:i};if(this.updateFlagState(o),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(o)}catch(a){this.onError?.(new Error(`Failed to store in cache: ${a}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(e){e instanceof Ht&&this.onError?.(e)}finally{!this.pollerStopped&&this.pollingInterval!==null&&(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}getPersonalApiKeyRequestOptions(e="GET",t){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return t&&(n["If-None-Match"]=t),{method:e,headers:n}}async _requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=te(()=>{i.abort()},this.timeout),t.signal=i.signal}let s=()=>clearTimeout(n);try{let i=this.fetch,o=await i(e,t);return o.status!==200?(s(),o):{status:o.status,headers:o.headers,body:o.body,text:async()=>{try{return await o.text()}finally{s()}},json:async()=>{try{return await o.json()}finally{s()}}}}catch(i){throw s(),i}}async stopPoller(e=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let t=this.cacheProvider.shutdown();t instanceof Promise&&await Qe(t,e,()=>{throw new Error(`Cache shutdown timeout after ${e}ms`)})}catch(t){this.onError?.(new Error(`Error during cache shutdown: ${t}`))}}};function df(r,e,t,n){return Uo(r,e,{warnFunction:t,propertyMatchingVersion:n})}function jS(r,e){if(!(r in e))throw new xe(`cohort ${r} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function ff(r,e,t,n=!1,s,i){let o=String(r.value);jS(o,t);let a=t[o];return pf(a,e,t,n,s,i)}async function pf(r,e,t,n=!1,s,i){if(!r)return!0;let o=r.type,a=r.values;if(!a||a.length===0)return!0;let c=!1;if("values"in a[0]){for(let l of a)try{let u=await pf(l,e,t,n,s,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof xe)throw u;if(u instanceof v)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new v("Can't match cohort without a given cohort property value");return o==="AND"}for(let l of a)try{let u;if(l.type==="cohort")u=await ff(l,e,t,n,s,i);else if(l.type==="flag"){if(!s)throw new v(`Flag dependency '${l.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await s(l)}else u=df(l,e,void 0,i);let d=l.negation||!1;if(o==="AND"){if(!u&&!d||u&&d)return!1}else if(u&&!d||!u&&d)return!0}catch(u){if(u instanceof xe)throw u;if(u instanceof v)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new v("can't match cohort without a given cohort property value");return o==="AND"}var HS=["--unhandled-rejections","--unhandled_rejections"],KS=new Set(["throw","strict","warn","warn-with-error-code","none"]),GS=[...globalThis.process?.execArgv??[]],zS=globalThis.process?.env?.NODE_OPTIONS;function VS(r){let e=[],t="",n=!1;for(let s=0;s<r.length;s++){let i=r[s];i==="\\"&&n&&s+1<r.length?t+=r[++s]:i!==" "||n?i==='"'?n=!n:t+=i:t&&(e.push(t),t="")}return t&&e.push(t),e}function gf(r){let e;for(let t=0;t<r.length;t++){let n=r[t],s=HS.find(o=>n===o||n.startsWith(`${o}=`));if(!s)continue;let i=n===s?r[++t]:n.slice(s.length+1);KS.has(i)&&(e=i)}return e}function YS(r=GS,e=zS){return gf(r)??gf(VS(e??""))??"throw"}var mf=YS();function hf(r,e,t){r(e,{mechanism:{type:t==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function qS(r,e){let t=!1;return Object.assign((n,s)=>{let i=global.process.listeners("uncaughtException").filter(o=>o.name!=="domainUncaughtExceptionClear"&&o._posthogErrorHandler!==!0).length;hf(r,n,s),!t&&i===0&&(t=!0,e(n))},{_posthogErrorHandler:!0})}function _f(r,e,t=mf){let n=globalThis.process;if(n){if(t==="strict")return void n.on("uncaughtExceptionMonitor",(s,i)=>hf(r,s,i));n.on("uncaughtException",qS(r,e))}}function Ef(r,e=mf){let t=globalThis.process;!t||e==="throw"||e==="strict"||e==="warn-with-error-code"||t.on("unhandledRejection",n=>{r(n,{mechanism:{type:"onunhandledrejection",handled:!1}})})}var JS=2e3,aa=class r{constructor(e,t,n){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new Jn({...Cu(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return ur(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,n,s,i){let o={...i},a=e.buildFromUnknown(t,n);a.$exception_list=await e.modifyFrames(a.$exception_list);let c=G.getInjectedReleaseId();return c&&(o.$release_id=c),{event:"$exception",distinctId:s,properties:{...a,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(_f(this.onException.bind(this),this.onFatalError.bind(this)),Ef(this.onException.bind(this)))}onException(e,t){this.client.addPendingPromise((async()=>{if(!r.isPreviouslyCapturedError(e)){let n=await r.buildEventMessage(this.client.getErrorPropertiesBuilder(),e,t),i=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(i)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:i}):this.client._capturePreparedEvent(n,!1)}})())}async onFatalError(e){console.error(e),await this.client.shutdown(JS),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},St=aa;var ks=class{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}};function XS(r){return r==="v0"||r==="v1"}function Sf(){let r="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return XS(r)?r:"v0"}var QS="$ai_",Br="analytics";function yf(r){return typeof r.event=="string"&&r.event.startsWith(QS)}var Kt=class r extends Error{constructor({requestId:e,drops:t,retryExhausted:n,cause:s}){super(r.buildMessage(e,t,n,s)),this.name="CaptureV1Error",this.requestId=e,this.drops=t,this.retryExhausted=n,this.cause=s}static buildMessage(e,t,n,s){let i=`Capture V1 batch ${e} did not fully deliver: ${t.length} dropped, ${n.length} undelivered`;return s instanceof Error&&(i+=` (${s.message})`),i}};function ca(r){if(typeof r=="boolean")return r;if(typeof r=="number")return r!==0;if(typeof r=="string"){let e=r.trim().toLowerCase();if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1}}function ZS(r){return typeof r=="string"?r:void 0}var ey=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:ca},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:ca},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:ca},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:ZS}],ty=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function ry(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ny(r){if(typeof r=="string"){let t=new Date(r);if(Number.isNaN(t.getTime()))return new Date().toISOString();let n=t.toISOString(),s=r.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1];return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}if(r instanceof Date)return Number.isNaN(r.getTime())?new Date().toISOString():r.toISOString();let e=r==null?new Date:new Date(r);return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString()}function bf(r,e,t){t!==void 0&&!(e in r)&&(r[e]=t)}function sy(r){let t={...ry(r.properties)?r.properties:{}},n={};for(let{property:i,optionKey:o,coerce:a}of ey)if(i in t){let c=a(t[i]);c!==void 0&&(n[o]=c),delete t[i]}let s={};for(let{property:i,field:o}of ty)if(i in t){let a=t[i];typeof a=="string"&&(s[o]=a),delete t[i]}return delete t.$lib,delete t.$lib_version,bf(t,"$set",r.$set),bf(t,"$set_once",r.$set_once),{event:String(r.event??""),uuid:String(r.uuid??""),distinct_id:String(r.distinct_id??""),timestamp:ny(r.timestamp),...s,options:n,properties:t}}function wf(r,{createdAt:e,historicalMigration:t}){let n={created_at:e,batch:r.map(sy)};return t&&(n.historical_migration=!0),n}var iy="/i/v1/analytics/events",oy=3e4,ay=new Set([408,500,502,503,504]),Ds=class{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??oy,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??(n=>new Promise(s=>te(s,n))),this.generateRequestId=t.generateRequestId??ee,this.compress=t.compress??Tr}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:s}=wf(e,{createdAt:n,historicalMigration:this.config.historicalMigration}),i=`${this.config.host}${iy}`,o=[],a=s,c=Math.max(1,this.config.maxAttempts);for(let l=1;l<=c;l++){let u=l===c,d=Je({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),p,g;try{p=await this.sendOnce(i,d,l,t);let{response:m,signal:h}=p,{status:E}=m;if(E<200||E>=300)if(!u&&ay.has(E)){let _=this.parseRetryAfter(m);await p.waitFor(p.cancelBody()).catch(()=>{}),g=this.backoffDelay(l,_)}else{let _=await this.buildHttpError(m,E,p.waitFor);return this.surfaceBatchFailure(t,o,a,_)}else{let _;try{_=await p.waitFor(this.parseResponse(m))}catch(T){if(h.aborted)throw T;return this.surfaceBatchFailure(t,o,a,new Error(`Capture V1 returned an unparseable ${E} response body`))}let b=this.classify(a,_,o);if(b.length===0)return this.surfacePartialDrops(t,o);if(u)return void this.onError(new Kt({requestId:t,drops:o,retryExhausted:b.map(T=>T.uuid)}));a=b;let w=this.parseRetryAfter(m);g=this.backoffDelay(l,w)}}catch(m){if(p&&!p.signal.aborted)throw m;if(u)return this.surfaceBatchFailure(t,o,a,m);g=this.backoffDelay(l)}finally{p?.cleanup()}g!==void 0&&await this.sleep(g)}}async sendOnce(e,t,n,s){let i=this.buildHeaders(n,s),o=t;if(this.config.compressionEnabled){let d=await this.compress(t,this.config.isDebug);d!==null&&(o=d,i["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",l,u=new Promise((d,p)=>{l=te(()=>{let g=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);g.name="AbortError",p(g),a.abort(g)},this.config.requestTimeoutMs)});try{let d=this.fetchFn(e,{method:"POST",headers:i,body:o,signal:a.signal}),p=!1;d.then(_=>{a.signal.aborted&&!p&&this.cancelBody(_)}).catch(()=>{});let g=await Promise.race([d,u]);p=!0,c="while reading the response body";let m=!1,h,E=()=>h??=this.cancelBody(g);return{response:g,signal:a.signal,waitFor:_=>Promise.race([_,u]),cancelBody:E,cleanup:()=>{m||(m=!0,clearTimeout(l),a.signal.aborted&&E())}}}catch(d){throw clearTimeout(l),d}}buildHeaders(e,t){let n=`${this.config.libraryId}/${this.config.libraryVersion}`,s={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":n,"PostHog-Attempt":String(e),"PostHog-Request-Id":t,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};return this.config.userAgent&&(s["User-Agent"]=this.config.userAgent),s}classify(e,t,n){let s=t.results??{},i=[];for(let o of e){let a=s[o.uuid];a&&(a.result==="drop"?n.push({uuid:o.uuid,details:a.details??void 0}):a.result==="retry"&&i.push(o))}return i}backoffDelay(e,t){let n=Math.min(this.config.initialRetryDelayMs*2**(e-1),this.maxBackoffMs);return t===void 0?n:Math.max(n,Math.min(t,this.maxBackoffMs))}parseRetryAfter(e){let t=e.headers?.get("Retry-After");if(!t)return;let n=t.trim();if(/^\d+$/.test(n)){let o=parseInt(n,10);return Number.isFinite(o)&&o>0?1e3*o:void 0}let s=Date.parse(n);if(Number.isNaN(s))return;let i=s-this.now();return i>0?i:void 0}async parseResponse(e){let t=await e.text(),n=JSON.parse(t);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("unexpected response shape");let s=n.results;if(s!==void 0&&(typeof s!="object"||s===null||Array.isArray(s)))throw new Error("unexpected results shape");return{results:s??{}}}async buildHttpError(e,t,n){let s="";try{s=(await n(e.text())).slice(0,512)}catch{}let i=s?`: ${s}`:"";return new Error(`Capture V1 request failed with HTTP ${t}${i}`)}surfaceBatchFailure(e,t,n,s){this.onError(new Kt({requestId:e,drops:t,retryExhausted:n.map(i=>i.uuid),cause:s}))}surfacePartialDrops(e,t){t.length>0&&this.onError(new Kt({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){try{await e.body?.cancel()}catch{}}};var yt="ai-capture",xs="/i/v0/ai/batch/";var ly=new TextEncoder;function ua(r){return ly.encode(Je(r)).length}function Tf(r,e=8388608,t=5242880){let n=[],s=[],i=[],o=0;for(let a of r){if(a===void 0)continue;let c=ua(a);if(c>e){s.push({event:typeof a.event=="string"?a.event:"unknown",bytes:c});continue}i.length>0&&o+c>t&&(n.push(i),i=[],o=0),i.push(a),o+=c}return i.length>0&&n.push(i),{batches:n,dropped:s}}var uy=100,Af=3e4,dy=5e4,fy=50,py=500,gy="https://us.i.posthog.com",vf=new Set;function Fs(r,e){vf.has(r)||(vf.add(r),console.warn(`[PostHog] ${e}`))}function my(r){return typeof r=="string"?r.trim():""}function hy(r){return(typeof r=="string"?r.trim():"")||void 0}function _y(r){return(typeof r=="string"?r.trim():"")||gy}function Ey(r){return(Array.isArray(r)?r:[r]).filter(t=>typeof t=="string"&&t.trim().length>0)}function Sy(r){if(!r)return{};let e={};for(let[n,s]of Object.entries(r))e[`$feature/${n}`]=s;let t=Object.keys(r).filter(n=>r[n]!==!1).sort();return t.length>0&&(e.$active_feature_flags=t),e}var Ns=class extends Ar{constructor(e,t={}){let n=my(e),s={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5e3,host:_y(t.host),personalApiKey:hy(t.secretKey??t.personalApiKey)};if(super(n,s),this._memoryStorage=new ks,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=s,this.captureMode=Sf(),this.enableFullAiCapture=s.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof s.featureFlagsPollingInterval=="number"?Math.max(s.featureFlagsPollingInterval,uy):s.featureFlagsPollingInterval===null?null:Af,typeof s.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(s.waitUntilDebounceMs,0)),typeof s.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(s.waitUntilMaxWaitMs,0)),!this.disabled&&s.personalApiKey){if(s.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');s.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new Os({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:s.personalApiKey,projectApiKey:n,timeout:s.requestTimeout??1e4,host:this.host,fetch:s.fetch,onError:o=>{this._events.emit("error",o)},onLoad:o=>{this._events.emit("localEvaluationFlagsLoaded",o)},onMinimalFlagCalledEvents:o=>{this._minimalFlagCalledEvents=o},customHeaders:this.getCustomHeaders(),cacheProvider:s.flagDefinitionCacheProvider,strictLocalEvaluation:s.strictLocalEvaluation,evaluationContexts:s.evaluationContexts??s.evaluationEnvironments}))}this.errorTracking=new St(this,s,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=s.maxCacheSize||dy}enqueue(e,t,n,s){super.enqueue(e,t,n,s),this.scheduleDebouncedFlush()}_flushEventsAndSpans(e=!1){let t=this.flushWithPendingPromises();return!this._traces||e&&this._traces.throttled?t:pr([t,this._traces.flush().catch(()=>{})]).then(([n])=>{if(n.status==="rejected")throw n.reason})}flushAutomatic(){return this._flushKeepingRuntimeAlive(!0)}async flush(){return this._flushKeepingRuntimeAlive(!1)}_flushKeepingRuntimeAlive(e){let t=this._flushEventsAndSpans(e),n=this.options.waitUntil;if(n&&!this._waitUntilCycle)try{n(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let e=this.options.waitUntil;if(!e||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let o,a=new Promise(c=>{o=c});try{e(a)}catch{return}this._waitUntilCycle={resolve:o,startedAt:Date.now(),timer:void 0}}let t=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??py,s=t>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),s)return void this.resolveWaitUntilFlush();let i=this.options.waitUntilDebounceMs??fy;this._waitUntilCycle.timer=te(()=>{this.resolveWaitUntilFlush()},i)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;return e&&(clearTimeout(e.timer),this._waitUntilCycle=void 0),e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this._flushEventsAndSpans()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&yf(e)?"ai":Br}persistedQueueKeyForRoute(e){return e===yt?ne.AiCaptureQueue:e==="ai"?ne.AiQueue:ne.Queue}getActiveQueueRoutes(){let e=this.captureMode==="v1"?[Br,"ai"]:[Br];return this._aiCaptureRouteActive&&e.push(yt),e}getBatchEndpointPath(e){return e===yt?xs:super.getBatchEndpointPath(e)}async sendBatch(e,t,n=Br){if(n===yt)return this.sendAiCaptureBatch(e,t);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(e,t,n);let s=e.filter(i=>i!==void 0);await this.getV1Sender().sendV1Batch(s)}async sendAiCaptureBatch(e,t){let{batches:n,dropped:s}=Tf(e);for(let{event:i,bytes:o}of s){let a=`Event ${i} (${o} bytes) exceeds the ${8388608/1048576}MiB limit for ${xs}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let i of n)await this.sendAiSubBatch(i,t)}async sendAiSubBatch(e,t){try{await super.sendBatch(e,t,yt)}catch(n){if(!$t(n))throw n;if(e.length===1){let[i]=e,a=`Event ${typeof i.event=="string"?i.event:"unknown"} (${ua(i)} bytes) was rejected with 413 by ${xs} on its own, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a));return}let s=Math.ceil(e.length/2);await this.sendAiSubBatch(e.slice(0,s),t),await this.sendAiSubBatch(e.slice(s),t)}}getV1Sender(){return this._v1Sender||(this._v1Sender=new Ds({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3e3,isDebug:this.isDebug},{fetch:(e,t)=>this.fetch(e,t),onError:e=>this._events.emit("error",e),compress:e=>this.compressPayload(e)})),this._v1Sender}getLibraryVersion(){return lf}get metrics(){return this._metrics||(this._metrics=new Dr(this,Es(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new Ur}hostResourceAttributes(){return{}}get _spanContextManager(){return this._spanContext||(this._spanContext=this.initializeSpanContextManager()),this._spanContext}get _tracesPipeline(){if(this.options.traces)return this._traces||(this._traces=new Nr(this,ra(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let e=this.context?.get();return{distinctId:e?.distinctId,sessionId:e?.sessionId}}startSpan(e,t){return this._tracesPipeline?.startSpan(e,t)??Ze(t,this._spanContextManager.active())}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this._tracesPipeline;return o?s?o.withSpan(e,s,i):o.withSpan(e,i):Fr(this._spanContextManager,Ze(s,this._spanContextManager.active()),i)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let e=super.getCommonEventProperties();return(this.options.isServer??!0)&&(e.$is_server=!0),e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,n){typeof e=="string"&&this._logger.warn(t),e.event==="$exception"&&!e._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(e,t,n,s,i){return this.addPendingPromise(this._prepareEventMessage(t,s).then(({distinctId:o,event:a,properties:c,options:l})=>{let u={timestamp:l.timestamp,disableGeoip:l.disableGeoip,uuid:l.uuid},d={distinctId:o,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(e,d,u,i):this.enqueue(e,d,u,i)}).catch(o=>{o&&console.error(o)}))}_capturePreparedEvent(e,t){return this._sendPreparedEvent("capture",e,t)}capture(e){this._warnIfInvalidCapture(e,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(e,!1)}async captureImmediate(e){return this._warnIfInvalidCapture(e,"Called captureImmediate() with a string as the first argument when an object was expected.","Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this._capturePreparedEvent(e,!0)}captureAi(e){if(this.disabled)return;let t=mt(e.uuid,ee);return this._sendPreparedAiEvent({...e,uuid:t},!1),t}async captureAiImmediate(e){if(this.disabled)return;let t=mt(e.uuid,ee);return await this._sendPreparedAiEvent({...e,uuid:t},!0),t}_sendPreparedAiEvent(e,t){return typeof e?.event=="string"&&!e.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${e.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",e,t,void 0,yt)}identify({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:n={}}){if(Object.keys(t).length===0&&Object.keys(n).length===0)return;let s={};Object.keys(t).length>0&&(s.$set=t),Object.keys(n).length>0&&(s.$set_once=n),this.capture({distinctId:e,event:"$set",properties:s})}unsetPersonProperties({distinctId:e,properties:t}){let n=Ey(t);n.length!==0&&this.capture({distinctId:e,event:"$set",properties:{$unset:n}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}getFeatureFlagEvaluationRuntime(e){return this.featureFlagsPoller?.getEvaluationRuntimeForFlag(e)}getFeatureFlagKeysByEvaluationRuntime(e){return this.featureFlagsPoller?.getFlagKeysByEvaluationRuntime(e)??[]}async waitForLocalEvaluationReady(e=Af){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(t=>{let n=setTimeout(()=>{s(),t(!1)},e),s=this._events.on("localEvaluationFlagsLoaded",i=>{clearTimeout(n),s(),t(i>0)})})}_resolveDistinctId(e,t){return typeof e=="string"?{distinctId:e,options:t}:{distinctId:this.context?.get()?.distinctId,options:e}}async _getFeatureFlagResult(e,t,n={},s){if(this.disabled)return void this._logger.warn("The client is disabled");let i=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&e in this._flagOverrides){let y=this._flagOverrides[e];if(y===void 0)return;let A=this._payloadOverrides?.[e];return{key:e,enabled:y!==!1,variant:typeof y=="string"?y:void 0,payload:A}}let{groups:o,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=n,d=this.addLocalPersonAndGroupProperties(t,o,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(t,o,this.personPropertiesForLocalEvaluation(t,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g,m=!1,h,E,_,b,w,T,M;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let y=this.featureFlagsPoller?.featureFlagsByKey[e];if(y)try{let A=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(y,p,{matchValue:s});if(A){m=!0;let S=A.value;b=y.id,T="Evaluated locally",M=y.has_experiment,g={key:e,enabled:S!==!1,variant:typeof S=="string"?S:void 0,payload:A.payload??void 0,reason:T,reasonCode:y.active===!1?"flag_disabled":void 0}}}catch(A){if(A instanceof xe||A instanceof v)this._logger?.info(`${A.name} when computing flag locally: ${e}: ${A.message}`);else throw A}}if(!m&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,a,[e]);if(y===void 0)_=je.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,h=y.requestId,E=y.evaluatedAt;let A=[];y.errorsWhileComputingFlags&&A.push(je.ERRORS_WHILE_COMPUTING),y.quotaLimited?.includes("feature_flags")&&A.push(je.QUOTA_LIMITED);let S=y.flags[e];if(S===void 0)A.push(je.FLAG_MISSING);else{b=S.metadata?.id,w=S.metadata?.version,T=S.reason?.description??S.reason?.code,M=S.metadata?.has_experiment;let I;if(S.metadata?.payload!==void 0)try{I=JSON.parse(S.metadata.payload)}catch{I=S.metadata.payload}g={key:e,enabled:S.enabled,variant:S.variant??void 0,payload:I,reason:T,reasonCode:S.reason?.code}}A.length>0&&(_=A.join(","))}}if(i){let y=g===void 0?void 0:g.enabled===!1?!1:g.variant??!0,A={$feature_flag:e,$feature_flag_response:y,$feature_flag_id:b,$feature_flag_version:w,$feature_flag_reason:T,locally_evaluated:m,[`$feature/${e}`]:y,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():E};if(M!==void 0&&(A.$feature_flag_has_experiment=M),m&&this.featureFlagsPoller){let S=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();S!==void 0&&(A.$feature_flag_definitions_loaded_at=S)}_&&(A.$feature_flag_error=_),this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:y,groups:o,disableGeoip:a,properties:A})}return g!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides&&(g={...g,payload:this._payloadOverrides[e]}),g}async getFeatureFlag(e,t,n){Fs("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(s!==void 0)return s.enabled===!1?!1:s.variant??!0}async getFeatureFlagPayload(e,t,n,s){if(Fs("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&e in this._payloadOverrides)return this._payloadOverrides[e];let i=await this._getFeatureFlagResult(e,t,{...s,sendFeatureFlagEvents:!1},n);if(i!==void 0)return i.payload??null}async getFeatureFlagResult(e,t,n){let{distinctId:s,options:i}=this._resolveDistinctId(t,n);return s?this._getFeatureFlagResult(e,s,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let t=await this._requestRemoteConfigPayload(e);if(!t)return;let n=await t.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(e,t,n){Fs("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return s===void 0?void 0:s.enabled===!1?!1:!!(s.variant??!0)||!1}async getAllFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);return n?(await this.getAllFlagsAndPayloads(n,s)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{featureFlags:{},featureFlagPayloads:{}};let{groups:i,disableGeoip:o,flagKeys:a}=s||{},{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},d=this.addLocalPersonAndGroupProperties(n,i,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),m={},h={},E=!0;if(g&&(m=g.response,h=g.payloads,E=g.fallbackToFlags),E&&!c){let _=await super.getFeatureFlagsAndPayloadsStateless(p.distinctId,p.groups,l,u,o,a);m={...m,..._.flags||{}},h={...h,..._.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}async evaluateFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:i,disableGeoip:o}=s||{},a=s?.flagKeys??void 0;if(a?.length===0)return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:{}});let{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},d=this.addLocalPersonAndGroupProperties(n,i,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=a?new Set(a):void 0,m={},h,E,_=!1,b=!1,w=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),T=new Set;if(w)for(let[y,A]of Object.entries(w.response)){let S=this.featureFlagsPoller?.featureFlagsByKey[y];m[y]={key:y,enabled:A!==!1,variant:typeof A=="string"?A:void 0,payload:w.payloads[y],id:S?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:S?.has_experiment},T.add(y)}let M=g!==void 0&&Array.from(g).some(y=>this.featureFlagsPoller?.featureFlagsByKey[y]===void 0);if((w?w.fallbackToFlags||M:!0)&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,o,a);if(y){this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,h=y.requestId,E=y.evaluatedAt,_=!!y.errorsWhileComputingFlags,b=Array.isArray(y.quotaLimited)&&y.quotaLimited.includes("feature_flags");for(let[A,S]of Object.entries(y.flags)){if(T.has(A))continue;let I;if(S.metadata?.payload!==void 0)try{I=JSON.parse(S.metadata.payload)}catch{I=S.metadata.payload}m[A]={key:A,enabled:S.enabled,variant:S.variant,payload:I,id:S.metadata?.id,version:S.metadata?.version,reason:S.reason?.description??S.reason?.code,locallyEvaluated:!1,hasExperiment:S.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[y,A]of Object.entries(this._flagOverrides)){if(A===void 0){delete m[y];continue}let S=m[y];m[y]={key:y,enabled:A!==!1,variant:typeof A=="string"?A:void 0,payload:S?.payload,id:S?.id,version:S?.version,reason:S?.reason,locallyEvaluated:S?.locallyEvaluated??!1,hasExperiment:S?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[y,A]of Object.entries(this._payloadOverrides)){let S=m[y];S&&(m[y]={...S,payload:A})}if(g!==void 0)for(let y of Object.keys(m))g.has(y)||delete m[y];return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:m,requestId:h,evaluatedAt:E,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:_,quotaLimited:b})}_shouldSendMinimalFlagCalledEvent(e,t){return e==="$feature_flag_called"&&this._minimalFlagCalledEvents&&t.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(e){let{distinctId:t,key:n,response:s,groups:i,disableGeoip:o,properties:a}=e,c=i&&Object.keys(i).length>0?`_${JSON.stringify(Object.entries(i).sort(([u],[d])=>u<d?-1:u>d?1:0))}`:"",l=`${n}_${s}${c}`;t in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[t].has(l)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),this.distinctIdHasSentFlagCalls[t]instanceof Set?this.distinctIdHasSentFlagCalls[t].add(l):this.distinctIdHasSentFlagCalls[t]=new Set([l]),this.capture({distinctId:t,event:"$feature_flag_called",properties:a,groups:i,disableGeoip:o}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:e=>this._captureFlagCalledEventIfNeeded(e),logWarning:e=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${e}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){await this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=n=>Object.fromEntries(n.map(s=>[s,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){"flags"in e&&(e.flags===!1?this._flagOverrides=void 0:Array.isArray(e.flags)?this._flagOverrides=t(e.flags):e.flags!==void 0&&(this._flagOverrides={...e.flags})),"payloads"in e&&(e.payloads===!1?this._payloadOverrides=void 0:e.payloads!==void 0&&(this._payloadOverrides={...e.payloads}));return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let n=t.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in t){let n=t.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(e,t,n){return this.context?this.context.run(e,t,n):t()}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics&&(await Qe(this._metrics.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._metrics.reset()),this._traces&&(await Qe(this._traces.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},n?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},s=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let i=new AbortController;s=te(()=>{i.abort()},this.options.requestTimeout),n.signal=i.signal}try{return await this.fetch(t,n)}catch(i){this._events.emit("error",i);return}finally{s&&clearTimeout(s)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let n={},s={};for(let[i,o]of Object.entries(e))if(vu(o)&&t&&i in t){let a={};for(let[c,l]of Object.entries(o))a[String(c)]=String(l);s[String(i)]=a}else n[String(i)]=String(o);return{personProperties:n,groupProperties:s}}async getFeatureFlagsForEvent(e,t,n,s){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");let i=s?.personProperties||{},o=s?.groupProperties||{},a=s?.flagKeys;if(s?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,d]of Object.entries(t||{}))l[u]=String(d);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,d]of Object.entries(t||{}))l[u]=String(d);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(e,t,i,o,n)).flags}addLocalPersonAndGroupProperties(e,t,n,s){let i={...n||{}},o={};if(t)for(let a of Object.keys(t))o[a]={$group_key:t[a],...s?.[a]||{}};return{allPersonProperties:i,allGroupProperties:o}}personPropertiesForLocalEvaluation(e,t){return{distinct_id:e,...t||{}}}createFeatureFlagEvaluationContext(e,t,n,s){return{distinctId:e,groups:t||{},personProperties:n||{},groupProperties:s||{},evaluationCache:{}}}captureException(e,t,n,s,i){if(!St.isPreviouslyCapturedError(e)){let o=new Error("PostHog syntheticException");this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,n).then(a=>this._capturePreparedEvent({...a,uuid:s,flags:i},!1)))}}async captureExceptionImmediate(e,t,n,s){if(!St.isPreviouslyCapturedError(e)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:i},t,n).then(o=>this.captureImmediate({...o,flags:s})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:n,event:s,properties:i,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:d}=e,p=this.context?.get(),g=t.includeContextProperties??!0,m=n||p?.distinctId,h=g?{...this.props,...p?.properties||{},...i||{}}:{...i||{}};m||(m=ee(),h.$process_person_profile=!1),g&&p?.sessionId&&!h.$session_id&&(h.$session_id=p.sessionId);let E=this._shouldSendMinimalFlagCalledEvent(s,h)?br(h):h,_=this._runBeforeSend({distinctId:m,event:s,properties:E,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:d});if(!_)return Promise.reject(null);let b=await Promise.resolve().then(async()=>{if(a)return c&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),a._getEventProperties();if(c){Fs("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let w=typeof c=="object"?c:void 0,T=await this.getFeatureFlagsForEvent(_.distinctId,o,u,w);return Sy(T)}return{}}).catch(()=>({})).then(w=>{let T=_.groups||o;return{...w,..._.properties||{},...T!==void 0&&Object.keys(T).length>0?{$groups:T}:{}}});return _.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof b.$raw_user_agent=="string"&&Mu(b.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(_.event="$bot_pageview",b.$browser_type="bot"),{distinctId:_.distinctId,event:_.event,properties:b,options:{timestamp:_.timestamp,disableGeoip:_.disableGeoip,uuid:_.uuid}}}_runBeforeSend(e){let t=this.options.before_send;if(!t)return e;let n=Array.isArray(t)?t:[t],s=e;for(let i of n)try{if(s=i(s),!s)return this._logger.info(`Event '${e.event}' was rejected in beforeSend function`),null;if(!s.properties||Object.keys(s.properties).length===0){let o=`Event '${s.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(o)}}catch(o){return this._logger.error(`Error in before_send function for event '${e.event}':`,o),null}return s}};var Rf=require("node:async_hooks"),Us=class{constructor(){this.storage=new Rf.AsyncLocalStorage}get(){return this.storage.getStore()}run(e,t,n){return this.storage.run(this.resolve(e,n),t)}enter(e,t){this.storage.enterWith(this.resolve(e,t))}resolve(e,t){if(t?.fresh===!0)return e;let n=this.get()||{};return{distinctId:e.distinctId??n.distinctId,sessionId:e.sessionId??n.sessionId,properties:{...n.properties||{},...e.properties||{}}}}};var Mf=require("node:async_hooks"),$s=class{active(){return this._storage.getStore()}with(e,t){return this._storage.run(e,t)}constructor(){this._storage=new Mf.AsyncLocalStorage}};var Cf=require("node:zlib"),Pf=require("node:util"),yy=(0,Pf.promisify)(Cf.gzip);async function If(r,e=!0){try{let t=await yy(r);return new Uint8Array(t)}catch(t){return e&&console.error("Failed to gzip compress data",t),null}}var Bs=require("node:os");function Of(){let r,e;try{r=(0,Bs.platform)(),e=(0,Bs.release)()}catch{}return Go(r,e)}var kf="posthog-node";function by(r,{organization:e,projectId:t,prefix:n,severityAllowList:s=["error"],sendExceptionsToPostHog:i=!0}={}){return o=>{if(!(s==="*"||s.includes(o.level)))return o;o.tags||(o.tags={});let c=o.tags[da.POSTHOG_ID_TAG];if(c===void 0)return o;let l=r.options.host??"https://us.i.posthog.com",u=new URL(`/project/${r.apiKey}/person/${c}`,l).toString();o.tags["PostHog Person URL"]=u;let d=o.exception?.values||[],p=d.map(h=>({...h,stacktrace:h.stacktrace?{...h.stacktrace,type:"raw",frames:(h.stacktrace.frames||[]).map(E=>({...E,platform:"node:javascript"}))}:void 0})),g={$exception_message:d[0]?.value||o.message,$exception_type:d[0]?.type,$exception_level:o.level,$exception_list:p,$sentry_event_id:o.event_id,$sentry_exception:o.exception,$sentry_exception_message:d[0]?.value||o.message,$sentry_exception_type:d[0]?.type,$sentry_tags:o.tags},m=G.getInjectedReleaseId();return m&&(g.$release_id=m),e&&t&&(g.$sentry_url=(n||"https://sentry.io/organizations/")+e+"/issues/?project="+t+"&query="+o.event_id),i&&r.capture({event:"$exception",distinctId:c,properties:g}),o}}var da=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(e,t,n,s,i){this.name=kf,this.name=kf,this.setupOnce=function(o,a){let c=a()?.getClient()?.getDsn()?.projectId;o(by(e,{organization:t,projectId:c,prefix:n,severityAllowList:s,sendExceptionsToPostHog:i??!0}))}}};var Ws=class extends Ns{getLibraryId(){return"posthog-node"}compressPayload(e){return If(e,this.isDebug)}initializeContext(){return new Us}initializeSpanContextManager(){return new $s}hostResourceAttributes(){return Of()}createErrorPropertiesBuilder(){return new G.ErrorPropertiesBuilder([new G.EventCoercer,new G.ErrorCoercer,new G.ObjectCoercer,new G.StringCoercer,new G.PrimitiveCoercer],G.createStackParser("node:javascript",G.nodeStackLineParser),[yu(),e=>nf(e,void 0,this._logger),cf()])}};var _k=300*1e3,Ek=3600*1e3;C();var pa=null,wy=!1,Ty=3e4,js=null;function xf(){let r=Date.now();if(js&&r<js.expiresAt)return js.value;let e=un(process.env,Zt());return js={value:e,expiresAt:r+Ty},e}var Ay=!1;function vy(){if(!pa){let r=Ay&&hc(process.env)&&xf();pa=new Ws(pn(),{host:gn(),flushAt:20,flushInterval:1e4,disableGeoip:!1,enableExceptionAutocapture:r,before_send:xy})}return pa}var Ry=6e4,My=500,Wr=new Map;function Cy(r,e,t){let n="";try{let s=(t||"").split(`
|
|
32
|
-
`).map(i=>i.trim()).filter(Boolean);n=s.find(i=>i.startsWith("at "))??s[1]??""}catch(s){let i=s instanceof Error?s:new Error(String(s));f.warn("SYSTEM","Telemetry: stack parse failed while fingerprinting; using empty top frame",void 0,i),n=""}return`${r}::${wc(e)}::${n}`.slice(0,400)}function
|
|
33
|
-
`);return}vy().capture({distinctId:dn(),event:r,properties:n})}var Fy=["agent-cost-report","babysit","ccs-align","cloud-sync","design-is","do","handoff","how-it-works","knowledge-agent","learn-codebase","make-plan","mem-search","mode-creator","oh-my-issues","pathfinder","smart-explore","standup","timeline-report","version-bump","weekly-digests","what-the","wowerpoint"],Ny=new Set(Fy),Lf={skill_id:"other",skill_source:"third_party"};function Ff(r){let e=Uy(r);return e&&Ny.has(e)?{skill_id:e,skill_source:"first_party"}:Lf}function Nf(r,e){if(r==="Skill"&&!(!e||typeof e!="object"))return e.skill}function Uy(r){if(typeof r!="string")return null;let e=r.trim().toLowerCase();if(!e)return null;e=e.replace(/^\/+/,"");let t=e.lastIndexOf(":");return t!==-1&&(e=e.slice(t+1).replace(/^\/+/,"")),e||null}var Uf=null,$y=new Set(["SetTodoList","TodoList","TaskList","TaskOutput","TaskStop","CronCreate","CronList","CronDelete"]),$f=new Map;function By(r){let e=$f.get(r);if(e!==void 0)return e;let t=null;try{t=new RegExp(r)}catch(n){f.warn("INGEST","Invalid CLAUDE_MEM_SKIP_BASH_PATTERNS regex \u2014 ignoring",{pattern:r,error:n instanceof Error?n.message:String(n)})}return $f.set(r,t),t}function Wy(r,e){if(!e||typeof e!="object")return"";let t=e,n=r==="Bash"?t.command:r==="exec_command"?t.cmd:void 0;return typeof n=="string"?n:""}function jy(){if(!Uf)throw new Error("ingest helpers used before setIngestContext() \u2014 wiring bug");return Uf}async function Bf(r,e={}){let{sessionManager:t,dbManager:n,eventBroadcaster:s,ensureGeneratorRunning:i}=jy(),o=Z(r.platformSource),a=typeof r.cwd=="string"?r.cwd:"",c=a.trim()?ct(a):null,l=c?.primary??"",u=B.loadFromFile(ie);if(a&&En(a,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return{ok:!0,status:"skipped",reason:"project_excluded"};if(new Set(u.CLAUDE_MEM_SKIP_TOOLS.split(",").map(R=>R.trim().toLowerCase()).filter(Boolean)).has(r.toolName.toLowerCase())){if(r.toolName==="Skill"){let{skill_id:R,skill_source:y}=Ff(Nf(r.toolName,r.toolInput));fa("skill_invoked",{skill_id:R,skill_source:y,skill_trigger:"tool",ide:o})}return{ok:!0,status:"skipped",reason:"tool_excluded"}}if(o==="kimi"&&$y.has(r.toolName))return{ok:!0,status:"skipped",reason:"tool_excluded"};let p=u.CLAUDE_MEM_SKIP_BASH_PATTERNS.trim(),g=p?Wy(r.toolName,r.toolInput):"";if(g){let R=By(p);if(R&&R.test(g))return{ok:!0,status:"skipped",reason:"bash_pattern_excluded"}}let m=Eu(r.agentId,r.agentType,u);if(m.skip)return{ok:!0,status:"skipped",reason:m.reason};if(new Set(["Edit","Write","Read","NotebookEdit"]).has(r.toolName)&&r.toolInput&&typeof r.toolInput=="object"){let R=r.toolInput,y=R.file_path||R.notebook_path;if(y&&y.includes("session-memory"))return{ok:!0,status:"skipped",reason:"session_memory_meta"}}let E=n.getSessionStore(),_,b;try{_=E.createSDKSession(r.contentSessionId,l,"",void 0,o),a&&E.setSessionCwd(_,a,c?.keySource),b=E.getPromptNumberFromUserPrompts(r.contentSessionId,_,r.enqueuedAtEpochMs)}catch(R){let y=R instanceof Error?R.message:String(R);return f.error("INGEST","Observation session resolution failed",{contentSessionId:r.contentSessionId,toolName:r.toolName},R instanceof Error?R:new Error(y)),{ok:!1,reason:y,status:500}}if(!zn.checkUserPromptPrivacy(E,r.contentSessionId,b,"observation",_,{tool_name:r.toolName}).allow)return{ok:!0,status:"skipped",reason:"private"};let T=r.toolInput!==void 0?to(JSON.stringify(r.toolInput)):"{}",M=r.toolResponse!==void 0?to(JSON.stringify(r.toolResponse)):"{}";if(r.toolUseId)try{E.upsertToolUse({toolUseId:r.toolUseId,contentSessionId:r.contentSessionId,sessionDbId:_,project:l,platformSource:o,toolName:r.toolName,toolInput:T,toolResponse:M,cwd:a||null,promptNumber:b,agentType:typeof r.agentType=="string"?r.agentType:null,agentId:typeof r.agentId=="string"?r.agentId:null,orGenerationId:typeof r.orGenerationId=="string"?r.orGenerationId:null,orSessionId:typeof r.orSessionId=="string"?r.orSessionId:null})}catch(R){f.warn("INGEST","tool_uses backup write failed (observation still queued)",{sessionId:_,toolName:r.toolName,toolUseId:r.toolUseId},R instanceof Error?R:new Error(String(R)))}return t.queueObservation(_,{tool_name:r.toolName,tool_input:T,tool_response:M,prompt_number:b,cwd:a||(f.error("INGEST","Missing cwd when ingesting observation",{sessionId:_,toolName:r.toolName}),""),agentId:typeof r.agentId=="string"?r.agentId:void 0,agentType:typeof r.agentType=="string"?r.agentType:void 0,toolUseId:typeof r.toolUseId=="string"?r.toolUseId:void 0}),e.markHandedOff?.(),await i?.(_,"observation"),s.broadcastObservationQueued(_),{ok:!0,sessionDbId:_}}var Hy=/agent-transcripts[/\\]([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/\\]|$)/i;function Ky(r){let e=typeof r.agentId=="string"?r.agentId.trim():"";return e&&e!=="*"?e:r.path.match(Hy)?.[1]}var Hr=class extends Error{constructor(e,t){super(`session init failed for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptAnchorError",this.cause=t}},Kr=class extends Error{constructor(e,t){super(`observation not accepted for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptObservationError",this.cause=t}},bt=class extends Error{constructor(e,t){super(`transcript event not persisted for session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptSpoolError",this.cause=t}},Gy=4096,zy=64,Hs=class{constructor(e="in-process"){this.observationTransport=e}observationTransport;sessions=new Map;fileContexts=new Set;fileSessionKeys=new WeakMap;registerFileContext(e){this.fileContexts.add(e)}pendingToolOwners=new WeakMap;subagentSessionKeys=new Set;resetFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t);n&&n.cwd===e.cwd&&(n.cwd=void 0)}this.retireFileContext(e),e.cwd=void 0,e.sessionId=void 0}retireFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t)?.pendingTools;for(let[s,i]of n??[])this.pendingToolOwners.get(i)===e&&n.delete(s)}this.fileContexts.delete(e),this.fileSessionKeys.delete(e),e.pendingTools={}}sessionKeysOf(e){return new Set([...Object.keys(e.pendingTools??{}),...this.fileSessionKeys.get(e)??[]])}async processEntry(e,t,n,s,i){i&&this.registerFileContext(i);for(let o of n.events)lr(e,o.match,n)&&await this.handleEvent(e,t,n,o,s??void 0,i)}getSessionKey(e,t){return`${e.name}:${t}`}getOrCreateSession(e,t){let n=this.getSessionKey(e,t),s=this.sessions.get(n);return s||(s={sessionId:t,platformSource:Z(e.name),...this.subagentSessionKeys.has(n)?{isSubagent:!0}:{}},this.sessions.set(n,s)),s}rememberSubagentSession(e){if(this.subagentSessionKeys.delete(e),this.subagentSessionKeys.add(e),this.subagentSessionKeys.size>Gy){let t=this.subagentSessionKeys.values().next().value;t!==void 0&&this.subagentSessionKeys.delete(t)}}async primeSessionContext(e,t,n,s,i){for(let o of n.events)o.action!=="session_context"||!lr(e,o.match,n)||await this.handleEvent(e,t,n,o,s??void 0,i)}resolveSessionId(e,t,n,s,i){let o={watch:t,schema:n},a=s.fields?.sessionId??(n.sessionIdPath?{path:n.sessionIdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:typeof c=="number"?String(c):i&&i.trim()?i:null}resolveCwd(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.cwd??(n.cwdPath?{path:n.cwdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.workspace?t.workspace:i.cwd}resolveProject(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.project??(n.projectPath?{path:n.projectPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.project?t.project:i.cwd?ct(i.cwd).primary:i.project}async handleEvent(e,t,n,s,i,o){let a=this.resolveSessionId(e,t,n,s,o?.sessionId??i);if(!a){f.debug("TRANSCRIPT","Skipping event without sessionId",{event:s.name,watch:t.name});return}o&&(o.sessionId=a);let c=this.getOrCreateSession(t,a),l=this.getSessionKey(t,a);if(o){let g=this.fileSessionKeys.get(o)??new Set;g.add(l),this.fileSessionKeys.set(o,g)}if(o?.pendingTools?.[l]){c.pendingTools??=new Map;for(let[g,m]of Object.entries(o.pendingTools[l]))this.pendingToolOwners.set(m,o),c.pendingTools.has(g)||c.pendingTools.set(g,m)}!c.cwd&&o?.cwd&&(c.cwd=o.cwd);let u=this.resolveCwd(e,t,n,s,c);u&&(c.cwd=u);let d=this.resolveProject(e,t,n,s,c);if(d&&(c.project=d),t.subagentSource&&!c.isSubagent){let g=cr(e,t.subagentSource.path);g!=null&&(c.isSubagent=!0,this.rememberSubagentSession(this.getSessionKey(t,a)))}if(t.subagentOnly&&!c.isSubagent&&s.action!=="session_context"&&s.action!=="session_end")return;let p=mu(s.fields,e,{watch:t,schema:n,session:c});s.action==="session_context"&&this.applySessionContext(c,p),o&&c.cwd&&(o.cwd=c.cwd);try{switch(s.action){case"session_context":break;case"session_init":await this.handleSessionInit(c,p),t.context?.updateOn?.includes("session_start")&&await this.updateContext(c,t);break;case"user_message":{let g=this.resolveMessageText(p.message)??this.resolveMessageText(p.prompt);g&&await this.anchorUserPrompt(c,g);break}case"assistant_message":c.lastAssistantMessage=this.resolveMessageText(p.message)??c.lastAssistantMessage;break;case"tool_use":await this.handleToolUse(c,t,p,o);break;case"tool_result":await this.handleToolResult(c,t,p,o);break;case"observation":await this.sendObservation(c,t,p);break;case"file_edit":await this.sendFileEdit(c,p);break;case"session_end":await this.handleSessionEnd(c,t);break;default:break}}finally{o&&this.snapshotPendingTools(o,c,l,s.action==="session_end")}}snapshotPendingTools(e,t,n,s){let i=s?{}:{...e.pendingTools?.[n]};for(let[a,c]of t.pendingTools??[])this.pendingToolOwners.get(c)===e&&(i[a]=c);e.pendingTools={...e.pendingTools,[n]:i},Object.keys(i).length===0&&delete e.pendingTools[n];let o=Object.entries(e.pendingTools).flatMap(([a,c])=>Object.keys(c).map(l=>[a,l]));for(let[a,c]of o.slice(0,Math.max(0,o.length-zy))){let l=e.pendingTools[a],u=l[c];delete l[c],Object.keys(l).length===0&&delete e.pendingTools[a];let d=this.sessions.get(a)?.pendingTools;d?.get(c)===u&&d.delete(c)}}applySessionContext(e,t){let n=typeof t.cwd=="string"?t.cwd:void 0,s=typeof t.project=="string"?t.project:void 0;n&&(e.cwd=n),s&&(e.project=s)}resolveMessageText(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=[];for(let n of e)n&&typeof n=="object"&&typeof n.text=="string"&&t.push(n.text);return t.length>0?t.join(`
|
|
34
|
-
`):void 0}async handleSessionInit(e,t){let n=typeof t.prompt=="string"?t.prompt:"";await this.anchorUserPrompt(e,n)}async anchorUserPrompt(e,t){t&&(e.lastUserMessage=t);let n=e.cwd;if(!n){this.skipWithoutCwd(e,"user prompt");return}try{await su({sessionId:e.sessionId,cwd:n,prompt:t,platform:e.platformSource})}catch(s){throw new
|
|
35
|
-
`);for(let s of n){let i=s.trim();if(i.startsWith("*** Update File: "))t.push(i.replace("*** Update File: ","").trim());else if(i.startsWith("*** Add File: "))t.push(i.replace("*** Add File: ","").trim());else if(i.startsWith("*** Delete File: "))t.push(i.replace("*** Delete File: ","").trim());else if(i.startsWith("*** Move to: "))t.push(i.replace("*** Move to: ","").trim());else if(i.startsWith("+++ ")){let o=i.replace("+++ ","").replace(/^b\//,"").trim();o&&o!=="/dev/null"&&t.push(o)}}return Array.from(new Set(t))}async handleSessionEnd(e,t){(!t.subagentOnly||e.isSubagent)&&(await this.queueSummary(e),await this.updateContext(e,t)),e.pendingTools?.clear();let n=this.getSessionKey(t,e.sessionId);this.sessions.delete(n)}async queueSummary(e){if(this.observationTransport==="spool"){try{or("summarize",{contentSessionId:e.sessionId,platformSource:e.platformSource,lastAssistantMessage:e.lastAssistantMessage??"",...e.cwd?{cwd:e.cwd}:{}})}catch(i){throw new bt(e.sessionId,i)}return}if(!await Ln())return;let n=e.lastAssistantMessage??"",s=JSON.stringify({contentSessionId:e.sessionId,last_assistant_message:n,platformSource:e.platformSource,...e.cwd?{cwd:e.cwd}:{}});try{await Ce("/api/sessions/summarize",{method:"POST",headers:{"Content-Type":"application/json"},body:s})}catch(i){f.warn("TRANSCRIPT","Summary request failed",{error:i instanceof Error?i.message:String(i)})}}async updateContext(e,t){if(!t.context||t.context.mode!=="agents"||Ua(t)||!await Ln())return;let s=e.cwd??t.workspace;if(!s)return;let o=ct(s).allProjects.join(","),a=`/api/context/inject?projects=${encodeURIComponent(o)}&platformSource=${encodeURIComponent(e.platformSource)}`,c=X(t.context.path??`${s}/AGENTS.md`),l=
|
|
36
|
-
`);return s<0?null:n.slice(0,s)}async function
|
|
37
|
-
`),u=l.pop()??"";for(let d=this.frameLinesDone;d<l.length;d++){if(this.closed){this.frameLinesDone=d,this.checkpoint(o.start,c);return}let p=l[d].trim();if(p){try{await this.onLine(p)}catch{this.frameLinesDone=d,this.tailState.readOffset=o.start,this.checkpoint(o.start,c);return}++i%zf===0&&await Gr()}}this.frameLinesDone=0,this.tailState.offset=o.end,this.tailState.readOffset=o.end,this.tailState.partial=u}this.checkpoint(this.tailState.offset,this.tailState.partial),n.tornStart===null&&this.tailState.offset<e&&(this.readPending=!0)}},Ys=class{constructor(e,t,n="in-process"){this.config=e;this.statePath=t;this.processor=new Hs(n),this.state=Ga(t)}config;statePath;processor;tailers=new Map;state;fileContexts=new Map;retirementCandidates=new Set;retirementTimer=null;missingTranscriptGraceMs=qy;rootWatchers=[];rootWatchSettleTimers=new Set;startedAtMs=0;warnedZstdUnsupported=!1;startingTailers=new Set;stopped=!1;async start(){this.stopped=!1,this.startedAtMs=Date.now();for(let e of this.config.watches)await this.setupWatch(e);if(!this.stopped)for(let e of Object.keys(this.state.pendingTools??{}))this.tailers.has(e)||this.scheduleRetirementCheck(e)}stop(){this.stopped=!0;for(let e of this.tailers.values())e.close();this.tailers.clear();for(let e of this.rootWatchers)e.close();this.rootWatchers=[];for(let e of this.rootWatchSettleTimers)clearTimeout(e);this.rootWatchSettleTimers.clear(),this.retirementTimer&&clearTimeout(this.retirementTimer),this.retirementTimer=null,this.retirementCandidates.clear()}async setupWatch(e){let t=this.resolveSchema(e);if(!t){f.warn("TRANSCRIPT","Missing schema for watch",{watch:e.name});return}let n=X(e.path),s=this.resolveWatchFiles(n);for(let o of s)this.getFileContext(o);let i={stateChanged:!1};for(let o of s)await this.addTailer(o,e,t,!1,i),await Gr();i.stateChanged&&Qt(this.statePath,this.state),this.watchTranscriptRoot(n,e,t)}watchTranscriptRoot(e,t,n,s=!1){let i=this.selectWatchRoot(e);if(!i){f.debug("TRANSCRIPT","Watch root does not exist, skipping fs.watch",{watch:t.name,path:e});return}let{root:o,recursive:a}=i;try{let c=(0,N.watch)(o,{recursive:a,persistent:!0},(l,u)=>{a?this.handleRootWatchEvent(o,e,t,n,u):this.handleAncestorWatchEvent(c,o,e,t,n,u)});this.rootWatchers.push(c),(s||!a)&&this.settleRootWatch(c,o,a,e,t,n),f.info("TRANSCRIPT",a?"Watching transcript root recursively":"Transcript root does not exist yet; watching its closest existing directory",{watch:t.name,watchRoot:o})}catch(c){f.warn("TRANSCRIPT","Failed to start fs.watch on transcript root",{watch:t.name,watchRoot:o},c instanceof Error?c:void 0)}}handleRootWatchEvent(e,t,n,s,i){if(!i)return;let o=(0,j.resolve)(e,i).replace(/\\/g,"/"),a=this.tailers.get(o);if(a){if(!(0,N.existsSync)(o)){a.close(),this.tailers.delete(o),this.scheduleRetirementCheck(o);return}a.poke();return}this.touchesLiteralPrefix(o,t)&&this.addDiscoveredTailers(t,n,s)}handleAncestorWatchEvent(e,t,n,s,i,o){if(this.stopped||!this.rootWatchers.includes(e)||o&&!this.touchesLiteralPrefix((0,j.resolve)(t,o),n))return;let a=this.selectWatchRoot(n);a&&a.root===t&&!a.recursive||(e.close(),this.rootWatchers=this.rootWatchers.filter(c=>c!==e),this.watchTranscriptRoot(n,s,i,!0),this.addDiscoveredTailers(n,s,i))}settleRootWatch(e,t,n,s,i,o){let a=setTimeout(()=>{this.rootWatchSettleTimers.delete(a),!(this.stopped||!this.rootWatchers.includes(e))&&(n?this.addDiscoveredTailers(s,i,o):this.handleAncestorWatchEvent(e,t,s,i,o,null))},Qy);this.rootWatchSettleTimers.add(a)}getFileContext(e){let t=this.fileContexts.get(e);return t||(t={cwd:this.state.cwds?.[e],pendingTools:this.state.pendingTools?.[e],isCurrent:()=>this.isCheckpointedFile(e)},this.fileContexts.set(e,t)),this.processor.registerFileContext(t),t}isCheckpointedFile(e){try{let t=(0,N.statSync)(e);return zs(t)===this.state.fileIdentities?.[e]&&t.size>=(this.state.offsets[e]??0)}catch{return!1}}scheduleRetirementCheck(e){this.retirementCandidates.add(e),this.retirementTimer??=setTimeout(()=>this.retireMissingTranscripts(),this.missingTranscriptGraceMs)}retireMissingTranscripts(){this.retirementTimer=null;let e=[...this.retirementCandidates];if(this.retirementCandidates.clear(),this.stopped)return;let t=!1;for(let n of e){if(this.tailers.has(n)||!tb(n))continue;let s=this.fileContexts.get(n);s&&this.processor.retireFileContext(s),this.fileContexts.delete(n),this.state.pendingTools?.[n]&&(delete this.state.pendingTools[n],t=!0)}t&&Qt(this.statePath,this.state)}forgetReplacedTranscript(e,t){this.processor.resetFileContext(t),delete this.state.pendingTools?.[e],delete this.state.cwds?.[e]}addDiscoveredTailers(e,t,n){for(let s of this.resolveWatchFiles(e))this.tailers.has(s)||this.addTailer(s,t,n,!0).catch(i=>{f.debug("TRANSCRIPT","Failed to add transcript tailer",{file:s,watch:t.name},i instanceof Error?i:void 0)})}touchesLiteralPrefix(e,t){let n=e.replace(/\\/g,"/"),s=(0,j.resolve)(this.literalWatchPrefix(t)).replace(/\\/g,"/"),i=(o,a)=>o.startsWith(a.endsWith("/")?a:a+"/");return n===s||i(n,s)||i(s,n)}literalWatchPrefix(e){let t=e;if(this.hasGlob(e)){let n=e.split(/[/\\]/),s=[];for(let i of n){if(/[*?[\]{}()]/.test(i))break;s.push(i)}if(s.length===0||s.length===1&&s[0]==="")return"";t=s.join(j.sep)}return t}selectWatchRoot(e){let t=this.literalWatchPrefix(e);if(!t)return null;let n=(0,j.resolve)(t);try{return{root:(0,N.statSync)(n).isDirectory()?n:(0,j.resolve)(n,".."),recursive:!0}}catch{}for(let s=(0,j.resolve)(n,"..");(0,j.resolve)(s,"..")!==s;s=(0,j.resolve)(s,".."))try{if((0,N.statSync)(s).isDirectory())return{root:s,recursive:!1}}catch{}return null}resolveSchema(e){return typeof e.schema=="string"?this.config.schemas?.[e.schema]??null:e.schema}resolveWatchFiles(e){if(this.hasGlob(e))return this.scanGlob(this.normalizeGlobPattern(e));if((0,N.existsSync)(e))try{return(0,N.statSync)(e).isDirectory()?[...this.scanGlob(this.normalizeGlobPattern((0,j.join)(e,"**","*.jsonl"))),...this.scanGlob(this.normalizeGlobPattern((0,j.join)(e,"**",`*${Gs}`)))]:[e]}catch(t){return f.debug("WORKER","Failed to stat watch path",{path:e},t instanceof Error?t:void 0),[]}return[]}scanGlob(e){try{return Array.from(new Bun.Glob(e).scanSync({absolute:!0,onlyFiles:!0,dot:!0}))}catch(t){let n=t?.code;if(n==="ENOENT"||n==="ENOTDIR")return[];throw t}}normalizeGlobPattern(e){return e.replace(/\\/g,"/")}hasGlob(e){return/[*?[\]{}()]/.test(e)}async addTailer(e,t,n,s=!1,i){if(e=X(e),!(this.tailers.has(e)||this.startingTailers.has(e))){this.startingTailers.add(e);try{await this.startTailer(e,t,n,s,i)}finally{this.startingTailers.delete(e)}}}async startTailer(e,t,n,s,i){let o=e.endsWith(Gs);if(o&&!Hf()){this.warnedZstdUnsupported||(this.warnedZstdUnsupported=!0,f.warn("TRANSCRIPT","Skipping zstd transcripts: this runtime has no zlib.zstdDecompressSync (update Bun or Node)",{file:e}));return}let a=this.extractSessionIdFromPath(e),c=this.getFileContext(e),l=this.state.offsets[e],u=l??0,d=!1;if(l===void 0&&t.startAtEnd)try{let m=(0,N.statSync)(e);if(s&&m.mtimeMs>=this.startedAtMs-Kf&&await this.startedAfterThisWatcher(e,o,m.size)||(u=o?await Zy(e,m.size):m.size),this.stopped)return;this.state.offsets[e]=u,d=!0}catch(m){f.debug("WORKER","Failed to stat file for startAtEnd offset",{file:e},m instanceof Error?m:void 0),u=0}try{let m=(0,N.statSync)(e),h=zs(m),E=this.state.fileIdentities?.[e],_=l!==void 0&&E!==void 0&&!Xf(e,h,m.size,l,this.state.checkpointFingerprints?.[e]);if(_&&(u=0,this.state.offsets[e]=0,delete this.state.partials?.[e],delete this.state.frameLines?.[e],this.forgetReplacedTranscript(e,c)),_||h!==E){(this.state.fileIdentities??={})[e]=h;let b=ha(e,u,h);b!==null?(this.state.checkpointFingerprints??={})[e]=b:delete this.state.checkpointFingerprints?.[e],d=!0}}catch(m){f.debug("WORKER","Failed to stat transcript file for its identity",{file:e},m instanceof Error?m:void 0)}d&&(s?Qt(this.statePath,this.state):i&&(i.stateChanged=!0));let p=u>0&&(!!n.sessionIdPath||!!t.subagentSource||!c.cwd),g=new ma(e,u,async m=>{try{p&&(p=!1,await this.primeFromFirstLine(e,u,t,n,a,c)),await this.handleLine(m,t,n,e,a,c)}finally{c.pendingTools&&((this.state.pendingTools??={})[e]=c.pendingTools),c.cwd&&c.cwd!==this.state.cwds?.[e]&&((this.state.cwds??={})[e]=c.cwd)}},(m,h,E,_,b)=>{_!==void 0&&((this.state.fileIdentities??={})[e]=_),b!==void 0?(this.state.checkpointFingerprints??={})[e]=b:this.state.checkpointFingerprints&&delete this.state.checkpointFingerprints[e],this.state.offsets[e]=m,h?(this.state.partials??={})[e]=h:this.state.partials&&delete this.state.partials[e],E>0?(this.state.frameLines??={})[e]=E:this.state.frameLines&&delete this.state.frameLines[e],Qt(this.statePath,this.state)},this.state.partials?.[e]??"",this.state.frameLines?.[e]??0,this.state.fileIdentities?.[e],this.state.checkpointFingerprints?.[e],()=>this.forgetReplacedTranscript(e,c));g.start(),this.tailers.set(e,g),f.info("TRANSCRIPT","Watching transcript file",{file:e,watch:t.name,schema:n.name})}async startedAfterThisWatcher(e,t,n){let s=await eb(e,t,n);return s!==null?s>=this.startedAtMs-Kf:n<=Jy}async primeFromFirstLine(e,t,n,s,i,o){try{let a=await Jf(e,e.endsWith(Gs),t);if(a===null)return;await this.processor.primeSessionContext(JSON.parse(a),n,s,i,o)}catch(a){f.debug("TRANSCRIPT","Could not read the first line of a resumed transcript",{watch:n.name,file:(0,j.basename)(e)},a instanceof Error?a:void 0)}}async handleLine(e,t,n,s,i,o){try{let a=JSON.parse(e);await this.processor.processEntry(a,t,n,i??void 0,o)}catch(a){if(a instanceof Hr||a instanceof Kr||a instanceof bt)throw f.warn("TRANSCRIPT","Transcript event not accepted; it is retried from its own line",{watch:t.name,file:(0,j.basename)(s),error:a.message}),a;a instanceof Error?f.debug("TRANSCRIPT","Failed to parse transcript line",{watch:t.name,file:(0,j.basename)(s)},a):f.warn("TRANSCRIPT","Failed to parse transcript line (non-Error thrown)",{watch:t.name,file:(0,j.basename)(s),error:String(a)})}}extractSessionIdFromPath(e){let t=e.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return t?t[0]:null}};function _a(r,e){let t=r.indexOf(e);return t===-1?null:r[t+1]??null}function Qf(r){(0,Zf.existsSync)(X(r))||(si(r),console.log(`Created sample config: ${X(r)}`))}async function ep(r,e){switch(r){case"init":{let t=_a(e,"--config")??vt;return si(t),console.log(`Created sample config: ${X(t)}`),0}case"watch":{let t=_a(e,"--config")??vt;Qf(t);let n=B.loadFromFile(ie),{config:s,scoped:i,removed:o}=$a(ni(t),n);if(i>0&&console.log(`Scoped ${i} Codex transcript watch(es) to subagent sessions (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true); native hooks capture top-level sessions.`),o>0&&console.log(`Skipped ${o} Codex transcript watch(es): native hooks capture top-level Codex sessions, and subagent capture is opt-in (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true).`),s.watches.length===0)return console.log(`No active transcript watches in ${X(t)}; nothing to watch.`),1;let a=X(s.stateFile??Qr),c=new Ys(s,a,"spool");await c.start(),console.log("Transcript watcher running. Press Ctrl+C to stop.");let l=()=>{c.stop(),process.exit(0)};return process.on("SIGINT",l),process.on("SIGTERM",l),await new Promise(()=>{})}case"validate":{let t=_a(e,"--config")??vt;return Qf(t),ni(t),console.log(`Config OK: ${X(t)}`),0}default:return console.log("Usage: claude-mem transcript <init|watch|validate> [--config <path>]"),1}}var nb=process.argv[2],sb=process.argv.slice(3);ep(nb,sb).then(r=>{process.exit(r)}).catch(r=>{console.error(r),process.exit(1)});
|
|
29
|
+
${e}`,o=du(s,i),a=`${r}.tmp`;try{(0,we.writeFileSync)(a,o),(0,we.renameSync)(a,r)}catch(c){f.error("AGENTS_MD","Failed to write AGENTS.md",{agentsPath:r},c instanceof Error?c:new Error(String(c)))}}C();function Yh(r){let e=r.trim().replace(/^\$\.?/,"");if(!e)return[];let t=[],n=e.split(".");for(let s of n){let i=/([^[\]]+)|\[(\d+)\]/g,o;for(;(o=i.exec(s))!==null;)o[1]?t.push(o[1]):o[2]&&t.push(parseInt(o[2],10))}return t}function cr(r,e){if(!e)return;let t=Yh(e),n=r;for(let s of t){if(n==null)return;n=n[s]}return n}function pu(r){return r==null||r===""}function gu(r,e){if(r.startsWith("$watch.")){let t=r.slice(7);return e.watch[t]}if(r.startsWith("$schema.")){let t=r.slice(8);return e.schema[t]}if(r.startsWith("$session.")){let t=r.slice(9);return e.session?e.session[t]:void 0}if(r==="$cwd")return e.watch.workspace;if(r==="$project")return e.watch.project}function Ot(r,e,t){if(r!==void 0){if(typeof r=="string"){let n=gu(r,t);return n!==void 0?n:cr(e,r)}if(r.coalesce&&Array.isArray(r.coalesce))for(let n of r.coalesce){let s=Ot(n,e,t);if(!pu(s))return s}if(r.path){let n=gu(r.path,t);if(n!==void 0)return n;let s=cr(e,r.path);if(!pu(s))return s}if(r.value!==void 0)return r.value;if(r.default!==void 0)return r.default}}function mu(r,e,t){let n={};if(!r)return n;for(let[s,i]of Object.entries(r))n[s]=Ot(i,e,t);return n}function lr(r,e,t){if(!e)return!0;if(e.all!==void 0){if(!Array.isArray(e.all))return!1;for(let o of e.all)if(!lr(r,o,t))return!1}if(e.any!==void 0&&(!Array.isArray(e.any)||!e.any.some(o=>lr(r,o,t))))return!1;let n=e.path||t.eventTypePath||"type",s=n?cr(r,n):void 0,i=s==null||s==="";if(e.exists!==void 0&&(e.exists&&i||!e.exists&&!i)||e.equals!==void 0&&s!==e.equals||e.not_equals!==void 0&&s===e.not_equals||e.in&&Array.isArray(e.in)&&!e.in.includes(s)||e.not_in&&Array.isArray(e.not_in)&&e.not_in.includes(s)||e.contains!==void 0&&(typeof s!="string"||!s.includes(e.contains))||e.not_contains!==void 0&&typeof s=="string"&&s.includes(e.not_contains)||e.starts_with!==void 0&&(typeof s!="string"||!s.startsWith(e.starts_with))||e.not_starts_with!==void 0&&typeof s=="string"&&s.startsWith(e.not_starts_with))return!1;if(e.regex)try{if(!new RegExp(e.regex).test(String(s??"")))return!1}catch(o){return f.debug("WORKER","Invalid regex in match rule",{regex:e.regex},o instanceof Error?o:void 0),!1}return!0}C();function hu(r,e){return!!r&&!!e}var _u={skip:!1};function qh(r){return new Set((r??"").split(",").map(e=>e.trim()).filter(Boolean))}function Eu(r,e,t){return hu(r,e)?t.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS==="true"?{skip:!0,reason:"subagent_observation"}:e&&qh(t.CLAUDE_MEM_SKIP_AGENT_TYPES).has(e)?{skip:!0,reason:"agent_type_excluded"}:_u:_u}U();C();var zn=class{static checkUserPromptPrivacy(e,t,n,s,i,o){let a=e.getUserPrompt(t,n,i);return a===null?(f.warn("HOOK",`${s}: no user_prompts row for prompt #${n} \u2014 ingesting anyway (session-init likely raced worker boot; see #2794/#2795)`,{sessionId:i,contentSessionId:t,promptNumber:n,...o}),{allow:!0,prompt:""}):a.trim()===""?(f.debug("HOOK",`Skipping ${s} - user prompt was entirely private`,{sessionId:i,promptNumber:n,...o}),{allow:!1,reason:"private"}):{allow:!0,prompt:a}}};var kt=require("path");function yu(){let r=Jh();return async e=>{for(let t of e)t.module=r(t.filename);return e}}function Jh(r=process.argv[1]?(0,kt.dirname)(process.argv[1]):process.cwd(),e=kt.sep==="\\"){let t=e?Su(r):r;return n=>{if(!n)return;let s=e?Su(n):n,{dir:i,base:o,ext:a}=kt.posix.parse(s);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,-1*a.length));let c=decodeURIComponent(o);i||(i=".");let l=i.lastIndexOf("/node_modules");if(l>-1)return`${i.slice(l+14).replace(/\//g,".")}:${c}`;if(i.startsWith(t)){let u=i.slice(t.length+1).replace(/\//g,".");return u?`${u}:${c}`:c}return c}}function Su(r){return r.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var G={};lp(G,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>us,DOMExceptionCoercer:()=>Ao,EXCEPTION_STEP_INTERNAL_FIELDS:()=>Sr,ErrorCoercer:()=>mr,ErrorEventCoercer:()=>vo,ErrorPropertiesBuilder:()=>gr,EventCoercer:()=>Ro,ExceptionStepsBuffer:()=>Po,ObjectCoercer:()=>_r,PrimitiveCoercer:()=>Er,PromiseRejectionEventCoercer:()=>Mo,ReduceableCache:()=>Co,StringCoercer:()=>hr,chromeStackLineParser:()=>yo,createDefaultStackParser:()=>To,createStackParser:()=>cd,geckoStackLineParser:()=>bo,getInjectedReleaseId:()=>uE,getUtf8ByteLength:()=>ud,nodeStackLineParser:()=>rd,opera10StackLineParser:()=>Zu,opera11StackLineParser:()=>ed,resolveExceptionStepsConfig:()=>Io,reverseAndStripFrames:()=>ad,stripReservedExceptionStepFields:()=>aE,winjsStackLineParser:()=>Qu});var ne=(function(r){return r.AnonymousId="anonymous_id",r.DistinctId="distinct_id",r.Props="props",r.EnablePersonProcessing="enable_person_processing",r.PersonMode="person_mode",r.FeatureFlagDetails="feature_flag_details",r.FeatureFlags="feature_flags",r.FeatureFlagPayloads="feature_flag_payloads",r.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",r.BootstrapFeatureFlags="bootstrap_feature_flags",r.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",r.OverrideFeatureFlags="override_feature_flags",r.Queue="queue",r.AiQueue="ai_queue",r.AiCaptureQueue="ai_capture_queue",r.LogsQueue="logs_queue",r.OptedOut="opted_out",r.SessionId="session_id",r.SessionStartTimestamp="session_start_timestamp",r.SessionLastTimestamp="session_timestamp",r.PersonProperties="person_properties",r.GroupProperties="group_properties",r.InstalledAppBuild="installed_app_build",r.InstalledAppVersion="installed_app_version",r.SessionReplay="session_replay",r.PushRegistered="push_registered",r.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",r.SurveyLastSeenDate="survey_last_seen_date",r.SurveysInProgress="surveys_in_progress",r.SurveysSeen="surveys_seen",r.Surveys="surveys",r.RemoteConfig="remote_config",r.FlagsEndpointWasHit="flags_endpoint_was_hit",r.DeviceId="device_id",r})({});function Je(r){let e=[];return JSON.stringify(r,function(t,n){if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;e.length>0&&e[e.length-1]!==this;)e.pop();if(e.includes(n))return"[Circular]";e.push(n)}return n}})??"null"}var Xh=Array.isArray,wu=Object.prototype,mR=wu.hasOwnProperty,Vn=wu.toString,ae=Xh||function(r){return Vn.call(r)==="[object Array]"};var ur=r=>r===Object(r)&&!ae(r);var $e=r=>r===void 0,J=r=>Vn.call(r)=="[object String]",ao=r=>J(r)&&r.trim().length===0,co=r=>r===null,Te=r=>$e(r)||co(r),Dt=r=>Vn.call(r)=="[object Number]"&&r===r;var Tu=r=>Vn.call(r)==="[object Boolean]";function Yn(r){return r===null||typeof r!="object"}function pt(r,e){return Object.prototype.toString.call(r)===`[object ${e}]`}function Xe(r){switch(Object.prototype.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Ru(r,Error)}}function Au(r){return pt(r,"ErrorEvent")}function xt(r){return"u">typeof Event&&Ru(r,Event)}function vu(r){return pt(r,"Object")}function Ru(r,e){try{return r instanceof e}catch{return!1}}var Qh=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterestbot","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],qn=new Map,Zh=256;function e_(r,e){let t="";for(let n=0;n<e.length;n++){let s=e[n];t+=s.length+":"+s}return r.length+":"+r+"|"+e.length+":"+t}var Mu=function(r,e=[]){if(!r)return!1;let t=e_(r,e),n=qn.get(t);if(n!==void 0)return n;let s=r.toLowerCase(),i=Qh.concat(e).some(o=>s.indexOf(o.toLowerCase())!==-1);return qn.size>=Zh&&qn.clear(),qn.set(t,i),i};function dr(r,e,t,n,s){return e>t&&(n.warn("min cannot be greater than max."),e=t),Dt(r)?r>t?(n.warn(" cannot be greater than max: "+t+". Using max value instead."),t):r<e?(n.warn(" cannot be less than min: "+e+". Using min value instead."),e):r:(n.warn(" must be a number. using max or fallback. max: "+t+", fallback: "+s),dr(s??t,e,t,n))}var t_=864e5,r_=1,n_=10;function Cu(r={}){return{refillRate:r.exceptionRateLimiterRefillRate??r.__exceptionRateLimiterRefillRate??r_,bucketSize:r.exceptionRateLimiterBucketSize??r.__exceptionRateLimiterBucketSize??n_}}var Jn=class{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=dr(e.bucketSize,0,100,e._logger),this._refillRate=dr(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=dr(e.refillInterval,0,t_,e._logger)}_applyRefill(e,t){let n=t-e.lastAccess,s=Math.floor(n/this._refillInterval);if(s>0){let i=s*this._refillRate;e.tokens=Math.min(e.tokens+i,this._bucketSize),e.lastAccess=e.lastAccess+s*this._refillInterval}}consumeRateLimit(e){let t=Date.now(),n=String(e),s=this._buckets[n];return s?this._applyRefill(s,t):(s={tokens:this._bucketSize,lastAccess:t},this._buckets[n]=s),s.tokens===0?!0:(s.tokens--,s.tokens===0&&this._onBucketRateLimited?.(e),s.tokens===0)}stop(){this._buckets={}}};var Xn="0123456789abcdef",Qn=class r{constructor(e){this.bytes=e}static ofInner(e){if(e.length===16)return new r(e);throw new TypeError("not 128-bit length")}static fromFieldsV7(e,t,n,s){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(s)||e<0||t<0||n<0||s<0||e>0xffffffffffff||t>4095||n>1073741823||s>4294967295)throw new RangeError("invalid field value");let i=new Uint8Array(16);return i[0]=e/2**40,i[1]=e/2**32,i[2]=e/2**24,i[3]=e/2**16,i[4]=e/256,i[5]=e,i[6]=112|t>>>8,i[7]=t,i[8]=128|n>>>24,i[9]=n>>>16,i[10]=n>>>8,i[11]=n,i[12]=s>>>24,i[13]=s>>>16,i[14]=s>>>8,i[15]=s,new r(i)}static parse(e){let t;switch(e.length){case 32:t=/^[0-9a-f]{32}$/i.exec(e)?.[0];break;case 36:t=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;case 38:t=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e)?.slice(1,6).join("");break;case 45:t=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;default:break}if(t){let n=new Uint8Array(16);for(let s=0;s<16;s+=4){let i=parseInt(t.substring(2*s,2*s+8),16);n[s+0]=i>>>24,n[s+1]=i>>>16,n[s+2]=i>>>8,n[s+3]=i}return new r(n)}throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let t=0;t<this.bytes.length;t++)e+=Xn.charAt(this.bytes[t]>>>4),e+=Xn.charAt(15&this.bytes[t]),(t===3||t===5||t===7||t===9)&&(e+="-");return e}toHex(){let e="";for(let t=0;t<this.bytes.length;t++)e+=Xn.charAt(this.bytes[t]>>>4),e+=Xn.charAt(15&this.bytes[t]);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(t=>t===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(t=>t===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new r(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let t=0;t<16;t++){let n=this.bytes[t]-e.bytes[t];if(n!==0)return Math.sign(n)}return 0}},lo=class{constructor(e){this.timestamp=0,this.counter=0,this.random=e??s_()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,t){let n=this.generateOrAbortCore(e,t);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(e,t)),n}generateOrAbortCore(e,t){if(!Number.isInteger(e)||e<1||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(t<0||t>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+t>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return Qn.fromFieldsV7(this.timestamp,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,Qn.ofInner(e)}},s_=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),Iu,ee=()=>i_().toString(),i_=()=>(Iu||(Iu=new lo)).generate();var Zn=class{add(e){let t=ee(),n=++this.nextId;return this.promiseByIds[t]={id:n,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length;for(;t>0;)await Promise.all(e),e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length}getPromises(e=[],t=this.nextId){let n=new Set(e);return Object.values(this.promiseByIds).filter(s=>s.id<=t&&!n.has(s.promise)).map(s=>s.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}};function o_(r=console){return{log:r.log.bind(r),warn:r.warn.bind(r),error:r.error.bind(r),debug:r.debug.bind(r)}}var Pu=(r,e,t)=>{function n(i,...o){e(()=>{let a=t[i];a(r,...o)})}return{debug:(...i)=>{n("debug",...i)},info:(...i)=>{n("log",...i)},warn:(...i)=>{n("warn",...i)},error:(...i)=>{n("error",...i)},critical:(...i)=>{t.error(r,...i)},createLogger:i=>Pu(`${r} ${i}`,e,t)}},a_=r=>r();function Ou(r,e=a_){return Pu(r,e,o_())}var Ft="Mobile",ts="iOS",Lt="Android",Fu="Tablet",PR=Lt+" "+Fu;var l_="Apple",OR=l_+" Watch",Nu="Safari",rs="BlackBerry",Uu="Samsung",u_=Uu+"Browser",d_=Uu+" Internet",ns="Chrome",f_=ns+" OS",p_=ns+" "+ts,$u="Internet Explorer",g_=$u+" "+Ft,po="Opera",kR=po+" Mini",Bu="Edge",m_="Microsoft "+Bu,go="Firefox",h_=go+" "+ts,mo="Nintendo",ho="PlayStation",es="Xbox",__=Lt+" "+Ft,E_=Ft+" "+Nu,fr="Windows",S_=fr+" Phone";var Wu="Generic",DR=Wu+" "+Ft.toLowerCase(),xR=Wu+" "+Fu.toLowerCase(),y_="Konqueror",b_="Oculus Browser",ku="Vivaldi",w_="Yandex",Du="Whale",T_="DuckDuckGo",A_="Pale Moon",xu="Waterfox",Lu="Brave",Hu="Claude",ju="Codex",Ku="ChatGPT",v_="Google Search App",L="(\\d+(\\.\\d+)?)",uo=new RegExp("Version/"+L),fo=new RegExp("("+Hu+"|"+ju+"|"+Ku+")\\/"+L);var LR=new RegExp(es,"i"),FR=new RegExp(ho+" \\w+","i"),NR=new RegExp(mo+" \\w+","i"),R_=new RegExp(rs+"|PlayBook|BB10","i"),M_={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var UR={[g_]:[new RegExp("rv:"+L)],[m_]:[new RegExp(Bu+"?\\/"+L)],[ns]:[new RegExp("("+ns+"|CrMo)\\/"+L)],[p_]:[new RegExp("CriOS\\/"+L)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+L)],[Nu]:[uo],[E_]:[uo],[po]:[new RegExp("("+po+"|OPR)\\/"+L)],[go]:[new RegExp(go+"\\/"+L)],[h_]:[new RegExp("FxiOS\\/"+L)],[y_]:[new RegExp("Konqueror[:/]?"+L,"i")],[rs]:[new RegExp(rs+" "+L),uo],[__]:[new RegExp("android\\s"+L,"i")],[d_]:[new RegExp(u_+"\\/"+L)],[b_]:[new RegExp("OculusBrowser\\/"+L)],[ku]:[new RegExp(ku+"\\/"+L)],[w_]:[new RegExp("YaBrowser\\/"+L)],[Du]:[new RegExp(Du+"\\/"+L)],[Lu]:[new RegExp(Lu+"\\/"+L)],[Hu]:[fo],[ju]:[fo],[Ku]:[fo],[T_]:[new RegExp("(DuckDuckGo|Ddg)\\/"+L)],[A_]:[new RegExp("PaleMoon\\/"+L)],[xu]:[new RegExp(xu+"\\/"+L)],[v_]:[new RegExp("GSA\\/"+L)],[$u]:[new RegExp("(rv:|MSIE )"+L)],Mozilla:[new RegExp("rv:"+L)]};var $R=[[new RegExp(es+"; "+es+" (.*?)[);]","i"),r=>[es,r&&r[1]||""]],[new RegExp(mo,"i"),[mo,""]],[new RegExp(ho,"i"),[ho,""]],[R_,[rs,""]],[new RegExp(fr,"i"),(r,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[S_,""];if(new RegExp(Ft).test(e)&&!/IEMobile\b/.test(e))return[fr+" "+Ft,""];let t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){let n=t[1],s=M_[n]||"";return/arm/i.test(e)&&(s="RT"),[fr,s]}return[fr,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,r=>{if(r&&r[3]){let e=[r[3],r[4],r[5]||"0"];return[ts,e.join(".")]}return[ts,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,r=>{let e="";return r&&r.length>=3&&(e=$e(r[2])?r[3]:r[2]),["watchOS",e]}],[new RegExp("("+Lt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Lt+")","i"),r=>{if(r&&r[2]){let e=[r[2],r[3],r[4]||"0"];return[Lt,e.join(".")]}return[Lt,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,r=>{let e=["Mac OS X",""];if(r&&r[1]){let t=[r[1],r[2],r[3]||"0"];e[1]=t.join(".")}return e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[f_,""]],[/Linux|debian/i,["Linux",""]]];var ss="[Circular]",is="[Truncated]",pe="[Unserializable]",Gu="[Function]",HR=Date.prototype.getTime,jR=Date.prototype.toISOString;function Oe(r){let e="";for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n>=55296&&n<=56319){let s=r.charCodeAt(t+1);s>=56320&&s<=57343?(e+=r[t]+r[t+1],t++):e+="\uFFFD"}else e+=n>=56320&&n<=57343?"\uFFFD":r[t]}return e}function Be(r,e){if(!e)return r;let t=[];try{t=Object.keys(e)}catch{t=[]}for(let n of t){let s;try{s=e[n]}catch{s=pe}Object.defineProperty(r,n,{value:s,enumerable:!0,writable:!0,configurable:!0})}return r}function _o(r,e=Date.now()){if(typeof r!="string"||!r)return;let t=r.trim(),n=/^\d+\s*,/.test(t)?t.slice(0,t.indexOf(",")).trim():t;if(/^\d+$/.test(n)){let o=1e3*Math.min(Number(n),300);return o>0?o:void 0}if(!/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*[ ,]/.test(n))return;let s=/^\w{3} \w{3} /.test(n)?n+" GMT":n,i=Date.parse(s)-e;if(!(!Number.isFinite(i)||i<=0))return Math.min(i,3e5)}var gt=class{record(e){if(e.kind==="too-large")return;if(e.kind!=="retry-later")return void this.reset();if(!e.retryAfterMs)return;let t=this.isOpen(),n=Date.now(),s=Math.min(e.retryAfterMs,3e5);if(!t){this._installedAt=n,this._until=n+s;return}this._until=Math.max(this._until,Math.min(n+s,this._installedAt+3e5))}remainingMs(){let e=Date.now();if(e<this._installedAt-5e3)return this.reset(),0;let t=Math.min(3e5,Math.max(0,this._until-e));return t===0&&this.reset(),t}isOpen(){return this.remainingMs()>0}reset(){this._until=0,this._installedAt=0}constructor(){this._until=0,this._installedAt=0}};var zu="utf8",C_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function I_(r){return typeof r=="string"&&C_.test(r)}function mt(r,e){return I_(r)?r:e()}function Nt(r,e){let t=new Error(e);try{Object.defineProperty(t,"name",{value:r,writable:!0,enumerable:!0,configurable:!0})}catch{}return t}function Vu(r){return r?.replace(/\/+$/,"")}async function Yu(r,e){let t=null;for(let n=0;n<e.retryCount+1;n++){n>0&&await new Promise(s=>setTimeout(s,e.retryDelay));try{return await r()}catch(s){if(t=s,!e.retryCheck(s))throw s}}throw t}function Eo(){return new Date().toISOString()}function te(r,e){let t=setTimeout(r,e);return t?.unref&&t?.unref(),t}async function Qe(r,e,t){let n;try{return await Promise.race([r,new Promise((s,i)=>{n=te(()=>{try{t?.(),s()}catch(o){i(o)}},e)})])}finally{clearTimeout(n)}}var qu=r=>r&&typeof r.then=="function";function pr(r){return Promise.all(r.map(e=>(e??Promise.resolve()).then(t=>({status:"fulfilled",value:t}),t=>({status:"rejected",reason:t}))))}var os,Ju,as;function Xu(r){let e=globalThis._posthogChunkIds;if(!e)return;let t=Object.keys(e);return as&&t.length===Ju||(Ju=t.length,as=t.reduce((n,s)=>{os||(os={});let i=os[s];if(i)n[i[0]]=i[1];else{let o=r(s);for(let a=o.length-1;a>=0;a--){let l=o[a]?.filename,u=e[s];if(l&&u){n[l]=u,os[s]=[l,u];break}}}return n},{})),as}var So=50,P_=1e3,O_=100,k_=4,gr=class{constructor(e,t,n=[]){this.coercers=e,this.stackParser=t,this.modifiers=n}buildFromUnknown(e,t={}){let s=t&&t.mechanism||{handled:!0,type:"generic"},o=this.buildCoercingContext(s,t,0).apply(e),a=this.buildParsingContext(t),c=this.parseStacktrace(o,a);return{$exception_list:this.convertToExceptionList(c,s),$exception_level:"error"}}async modifyFrames(e){for(let t of e)t.stacktrace&&t.stacktrace.frames&&ae(t.stacktrace.frames)&&(t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames));return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let n;e.cause!=null&&(n=this.parseStacktrace(e.cause,t));let s;if(e.stack!=""&&e.stack!=null)try{s=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)}catch{}return{...e,cause:n,stack:s,errors:e.errors?.map(i=>this.parseStacktrace(i,t))}}applyChunkIds(e,t){return e.map(n=>(n.filename&&t&&(n.chunk_id=t[n.filename]),n))}applyCoercers(e,t){for(let n of this.coercers)if(n.match(e))return n.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let n of this.modifiers)t=await n(t);return t}convertToExceptionList(e,t){let n=[],s=(i,o,a)=>{let c=n.length,l=o===void 0?{type:typeof t.type=="string"&&t.type.length>0?t.type:"generic",...typeof t.handled=="boolean"?{handled:t.handled}:t.handled===void 0?{handled:!0}:{},synthetic:typeof t.synthetic=="boolean"?t.synthetic:i.synthetic,exception_id:c}:{type:"chained",source:a,synthetic:i.synthetic,exception_id:c,parent_id:o},u={type:i.type,value:i.value,mechanism:l};i.stack&&(u.stacktrace={type:"raw",frames:i.stack}),n.push(u),i.cause&&s(i.cause,c,"cause");for(let d of i.errors??[])s(d,c,"member")};return s(e),n}buildParsingContext(e){return{chunkIdMap:Xu(this.stackParser),skipFirstLines:e.skipFirstLines??1}}getAggregateErrors(e){try{if(Xe(e)){let t=Object.getPrototypeOf(e);for(let n=0;t&&n<O_;n++){let s=Object.getOwnPropertyDescriptor(t,"constructor")?.value;if(typeof s=="function"&&s.name==="AggregateError"){let i=e.errors;return ae(i)?i:void 0}t=Object.getPrototypeOf(t)}}}catch{}}buildCoercingContext(e,t,n=0){let s=0,i=0,o=!1,a=new Set,c=[],l={},u=(g,m,h=0)=>{let E=d(m,h),_=E.apply;if(E.apply=y=>{c.push(g);try{return _(y)}finally{c.pop()}},h>k_||h>0&&c.indexOf(g)!==-1)return this.coerceFallback(E);let b=typeof g=="object"&&g!==null||typeof g=="function";if(h===0&&s>=So||b&&a.has(g))return;b&&a.add(g),h===0&&s++;let w=this.getAggregateErrors(g);o||=!!w;let T;try{if(T=this.applyCoercers(g,E),!T)throw l}catch(y){if(y===l){h===0&&s--;return}if(!o)throw y;T=this.coerceFallback(E)}if(!w||s>=So)return T;let M;try{M=w.length}catch{return T}if(!Number.isInteger(M)||M<0||M>4294967295)return T;let R=[];for(let y=0;s<So&&i<P_&&y<M;y++){i++;let A;try{A=E.next(w[y])}catch{s++,A=this.coerceFallback(d(m+1))}A&&R.push(A)}return{...T,errors:R}},d=(g,m=0)=>({...t,syntheticException:g==0?t.syntheticException:void 0,mechanism:g==0?e:{},apply:h=>{let E=u(h,g,m+1);if(!E)throw l;return E},next:h=>u(h,g+1)}),p=d(n);return{...p,apply:g=>u(g,n)??this.coerceFallback(p)}}};var V="?",D_="<anonymous>",x_=/^([a-z][a-z0-9.+-]+):/i,L_=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function F_(r){if(!r||r===D_)return!1;let e=x_.exec(r);return!e||L_.includes(e[1].toLowerCase())}function ke(r,e,t,n,s){let i={platform:r,filename:e,function:t==="<anonymous>"?V:t,in_app:F_(e)};return $e(n)||(i.lineno=n),$e(s)||(i.colno=s),i}var cs=(r,e)=>{let t=r.indexOf("safari-extension")!==-1,n=r.indexOf("safari-web-extension")!==-1;return t||n?[r.indexOf("@")!==-1?r.split("@")[0]:V,t?`safari-extension:${e}`:`safari-web-extension:${e}`]:[r,e]};var N_=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,U_=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,$_=/\((\S*)(?::(\d+))(?::(\d+))\)/,yo=(r,e)=>{let t=N_.exec(r);if(t){let[,s,i,o]=t;return ke(e,s,V,+i,+o)}let n=U_.exec(r);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=$_.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[i,o]=cs(n[1]||V,n[2]);return ke(e,o,i,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var B_=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,W_=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,bo=(r,e)=>{let t=B_.exec(r);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){let o=W_.exec(t[3]);o&&(t[1]=t[1]||"eval",t[3]=o[1],t[4]=o[2],t[5]="")}let s=t[3],i=t[1]||V;return[i,s]=cs(i,s),ke(e,s,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}};var H_=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Qu=(r,e)=>{let t=H_.exec(r);return t?ke(e,t[2],t[1]||V,+t[3],t[4]?+t[4]:void 0):void 0};var j_=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Zu=(r,e)=>{let t=j_.exec(r);return t?ke(e,t[2],t[3]||V,+t[1]):void 0},K_=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,ed=(r,e)=>{let t=K_.exec(r);return t?ke(e,t[5],t[3]||t[4]||V,+t[1],+t[2]):void 0};var G_=/^\s*[-]{4,}$/,z_=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,V_=/^Promise\.(?:all|any)$/,Y_=/^index \d+$/,q_="node:internal/promise",rd=(r,e)=>{let t=r.match(z_);if(t){let n,s,i,o,a;if(t[1]){i=t[1];let u=i.lastIndexOf(".");if(i[u-1]==="."&&u--,u>0){n=i.slice(0,u),s=i.slice(u+1);let d=n.indexOf(".Module");d>0&&(i=i.slice(d+1),n=n.slice(0,d))}o=void 0}s&&(o=n,a=s),s==="<anonymous>"&&(a=void 0,i=void 0),i===void 0&&(a=a||V,i=o?`${o}.${a}`:a);let c=t[2]?.startsWith("file://")?t[2].slice(7):t[2],l=t[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&t[5]&&!l&&(c=t[5]),V_.test(i)&&Y_.test(c||"")&&(c=q_),{filename:c?decodeURI(c):void 0,module:void 0,function:i,lineno:td(t[3]),colno:td(t[4]),in_app:J_(c||"",l),platform:e}}if(r.match(G_))return{filename:r,platform:e}};function J_(r,e=!1){return!(e||r&&!r.startsWith("/")&&!r.match(/^[A-Z]:/)&&!r.startsWith(".")&&!r.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&r!==void 0&&!r.includes("node_modules/")}function td(r){return parseInt(r||"",10)||void 0}var nd=/\(error: (.*)\)/,sd=50,X_=10,Q_=1e3;function wo(r,e){return r.filename===e.filename&&r.function===e.function&&r.module===e.module&&r.lineno===e.lineno&&r.colno===e.colno}function Z_(r){for(let e=1;e<=X_;e++){let t=r.length-2*e;if(t<0)break;let n=!0;for(let s=0;s<e;s++){let i=r[t+s];if(!wo(i,r[t+e+s])){n=!1;break}}if(n){for(let s=0;s<e;s++)r[t+s]=r[t+e+s];return r.length=t+e,{start:t,length:e}}}}function eE(r,e){let t=e.start+e.length,n=od(r,e);n&&r.splice(t+n===r.length?t:e.start,n)}function id(r,e){let t=e.start;for(;t>0&&wo(r[t-1],r[t-1+e.length]);)t--;return e.start-t}function od(r,e){let t=e.start+e.length,n=t;for(;n<r.length&&wo(r[n],r[n-e.length]);)n++;return n-t}function tE(r,e){let t=e[0],n=r.length-(t?id(r,t):0);for(let s of e)n-=od(r,s);return n}function rE(r){let e=r.map(n=>`${n.function}|${n.filename}|${n.lineno}|${n.colno}|${n.module}`),t=0;for(let n=1;n<e.length;n++)nE(e,n,t)&&(t=n);r.push(...r.splice(0,t))}function nE(r,e,t){for(let n=0;n<r.length;n++){let s=r[(e+n)%r.length],i=r[(t+n)%r.length];if(s!==i)return s<i}return!1}function ad(r){if(!r.length)return[];let e=Array.from(r);return e.reverse(),e.slice(0,sd).map(t=>({...t,filename:t.filename||sE(e).filename,function:t.function||V}))}function sE(r){return r[r.length-1]||{}}function To(){return cd("web:javascript",yo,bo)}function cd(r,...e){return(t,n=0)=>{let s=[],i=t.split(`
|
|
30
|
+
`),o=Math.min(i.length,n+Q_),a=[];for(let u=n;u<o;u++){let d=i[u];if(d.length>1024)continue;let p=nd.test(d)?d.replace(nd,"$1"):d;if(!p.match(/\S*Error: /)){for(let g of e){let m=g(p,r);if(m){s.push(m);let h=Z_(s);if(h){for(let E=a.length-1;E>=0;E--){let _=a[E];if(_.start+_.length<=h.start)break;a.pop()}a.push(h)}break}}if(tE(s,a)>=sd)break}}let c=[...a].sort((u,d)=>d.start-u.start),l=c[c.length-1];if(l){let u=id(s,l);s.splice(l.start-u,u);for(let d of c)d.start-=u}for(let u of c)eE(s,u);return a.some(u=>u.start===0&&s.length===u.length)&&rE(s),ad(s)}}var Ao=class{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let n=J(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:n?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){let t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?`${t}: ${e.message}`:t}isDOMException(e){return pt(e,"DOMException")}isDOMError(e){return pt(e,"DOMError")}};var mr=class{match(e){return Xe(e)}coerce(e,t){let n=this.getStack(e),s=n===void 0?t.syntheticException?.stack:void 0,i=!!s;return{type:this.getType(e),value:this.getMessage(e,t),stack:n??s,cause:e.cause?t.next(e.cause):void 0,synthetic:i}}getType(e){return e.name||e.constructor.name}getMessage(e,t){let n=e.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(e){try{let t=e.stacktrace;if(typeof t=="string"&&t.length>0)return t;let n=e.stack;return typeof n=="string"&&n.length>0?n:void 0}catch{return}}};var vo=class{match(e){if(!Au(e))return!1;let t=e;return t.error!=null||this._hasUsableMessage(t)}coerce(e,t){if(e.error!=null)return t.apply(e.error);let n=t.apply(e.message);return{...n,stack:this._buildLocationStack(e)??n.stack,synthetic:!0}}_hasUsableMessage(e){return J(e.message)&&e.message.length>0}_buildLocationStack(e){let t=e,n=t.lineno??0,s=t.colno??0;if(!(!J(t.filename)||t.filename.length===0)&&n!==0)return`Error
|
|
31
|
+
at ${t.filename}:${n}:${s}`}};var iE=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,hr=class{match(e){return typeof e=="string"}coerce(e,t){let[n,s]=this.getInfos(e);return{type:n??"Error",value:s??e,stack:t.syntheticException?.stack,synthetic:!0}}getInfos(e){let t="Error",n=e,s=e.match(iE);return s&&(t=s[1],n=s[2]),[t,n]}};var ld=["fatal","error","warning","log","info","debug"];function ls(r,e=40){let t=Object.keys(r);if(t.sort(),!t.length)return"[object has no keys]";for(let n=t.length;n>0;n--){let s=t.slice(0,n).join(", ");if(!(s.length>e))return n===t.length||s.length<=e?s:`${s.slice(0,e)}...`}return""}var _r=class{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let n=this.getErrorPropertyFromObject(e);return n?t.apply(n):{type:this.getType(e),value:this.getValue(e),stack:this.getStack(e)??t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){if(xt(e))return e.constructor.name;let t="name"in e?e.name:void 0;return J(t)&&!ao(t)?t:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){let s=`'${e.name}' captured as exception`;return"message"in e&&typeof e.message=="string"&&(s+=` with message: '${e.message}'`),s}if("message"in e&&typeof e.message=="string")return e.message;let t=this.getObjectClassName(e),n=ls(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(e){return J(e)&&!ao(e)&&ld.indexOf(e)>=0}getStack(e){try{return J(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:J(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];if(Xe(n))return n}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}};var Ro=class{match(e){return xt(e)}coerce(e,t){let n=e.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${ls(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Er=class{match(e){return Yn(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Mo=class{match(e){return pt(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!xt(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let n=this.getUnhandledRejectionReason(e);return Yn(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:t.syntheticException?.stack,synthetic:!0}:t.apply(n)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}};var Co=class{constructor(e){this._maxSize=e,this._cache=new Map}get(e){let t=this._cache.get(e);if(t!==void 0)return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.set(e,t)}reduce(){for(;this._cache.size>=this._maxSize;){let e=this._cache.keys().next().value;e&&this._cache.delete(e)}}};var Sr={MESSAGE:"$message",TIMESTAMP:"$timestamp"},oE=new Set([Sr.MESSAGE,Sr.TIMESTAMP]),us={enabled:!0,max_bytes:32768};function Io(r){return r?{enabled:r.enabled??us.enabled,max_bytes:cE(r.max_bytes,us.max_bytes)}:{...us}}function aE(r){if(!r)return{sanitizedProperties:{},droppedKeys:[]};let e=[];return{sanitizedProperties:Object.keys(r).reduce((n,s)=>oE.has(s)?(e.push(s),n):(n[s]=r[s],n),{}),droppedKeys:e}}var Po=class{constructor(e){this._entries=[],this._totalBytes=0,this._config=Io(e)}setConfig(e){this._config=Io(e),this._trimToMaxBytes()}add(e){let t=lE(e);if(!t)return;let n=ud(t.json);n>this._config.max_bytes||(this._entries.push({step:t.step,bytes:n}),this._totalBytes+=n,this._trimToMaxBytes())}getAttachable(){return this._entries.map(e=>e.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){for(;this._totalBytes>this._config.max_bytes&&this._entries.length>0;){let e=this._entries.shift();e&&(this._totalBytes-=e.bytes)}}};function cE(r,e){if(!Dt(r)||r===1/0||r===-1/0)return e;let t=Math.floor(r);return t<0?e:t}function lE(r){let e;try{e=Je(r)}catch{return}try{let t=JSON.parse(e);if(!ur(t))return;let n=t,s=n[Sr.MESSAGE],i=n[Sr.TIMESTAMP];return!J(s)||s.trim().length===0||!J(i)&&!Dt(i)?void 0:{step:n,json:e}}catch{return}}function ud(r){if("u">typeof TextEncoder)return new TextEncoder().encode(r).length;let e=encodeURIComponent(r),t=0;for(let n=0;n<e.length;n++)e[n]==="%"?(t+=1,n+=2):t+=1;return t}function uE(){let r=globalThis._posthogReleaseId;return typeof r=="string"&&r.length>0?r:void 0}var Oo=r=>{if("flags"in r){let e=dd(r.flags),t=fd(r.flags);return{...r,featureFlags:e,featureFlagPayloads:t}}{let e=r.featureFlags??{},t=Object.fromEntries(Object.entries(r.featureFlagPayloads||{}).map(([s,i])=>[s,Ut(i)])),n=Object.fromEntries(Object.entries(e).map(([s,i])=>[s,dE(s,i,t[s])]));return{...r,featureFlags:e,featureFlagPayloads:t,flags:n}}};function dE(r,e,t){return{key:r,enabled:typeof e=="string"?!0:e,variant:typeof e=="string"?e:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:t?JSON.stringify(t):void 0,description:void 0}}}var dd=r=>Object.fromEntries(Object.entries(r??{}).map(([e,t])=>[e,yr(t)]).filter(([,e])=>e!==void 0)),fd=r=>{let e=r??{};return Object.fromEntries(Object.keys(e).filter(t=>{let n=e[t];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(t=>{let n=e[t].metadata?.payload;return[t,n?Ut(n):void 0]}))},yr=r=>r===void 0?void 0:r.variant??r.enabled,Ut=r=>{if(typeof r!="string")return r;try{return JSON.parse(r)}catch{return r}};var pd=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","oppref","irclid","_kx"],fE=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain",...pd,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],br=(r,e=[])=>{let t={},n=s=>{r[s]!==void 0&&(t[s]=r[s])};return fE.forEach(n),e.forEach(n),t};var ds=class{constructor(){this.events={},this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),()=>{this.events[e]=this.events[e].filter(n=>n!==t)}}emit(e,t){for(let n of this.events[e]||[])n(t);for(let n of this.events["*"]||[])n(e,t)}};function ko(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var gE="NativeGzipValidationError",mE=31,hE=139,_E=8,EE=r=>r.length>=2&&r[0]===mE&&r[1]===hE;var wr,SE=()=>{if(wr)return wr;wr=[];for(let r=0;r<256;r++){let e=r;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;wr[r]=e>>>0}return wr},yE=r=>{let e=SE(),t=4294967295;for(let n=0;n<r.length;n++)t=e[(t^r[n])&255]^t>>>8;return(4294967295^t)>>>0},fs=r=>{throw Nt(gE,`Native gzip produced invalid output: ${r}`)},bE=async(r,e)=>{r.size<18&&fs("too-short");let t=new Uint8Array(await r.slice(0,10).arrayBuffer());(!EE(t)||t[2]!==_E)&&fs("invalid-header");let n=new DataView(await r.slice(r.size-8).arrayBuffer());n.getUint32(0,!0)!==yE(e)&&fs("invalid-crc");let s=e.length>>>0;n.getUint32(4,!0)!==s&&fs("invalid-size")};async function Tr(r,e=!0,t){try{let n=new TextEncoder().encode(r),s=new globalThis.CompressionStream("gzip"),i=s.writable.getWriter(),o=i.write(n).then(()=>i.close()).catch(async l=>{try{await i.abort(l)}catch{}throw l}),a=new Response(s.readable).blob(),[c]=await Promise.all([a,o]);return await bE(c,n),c}catch(n){if(t?.rethrow)throw n;return e&&console.error("Failed to gzip compress data",n),null}}var ge=class extends Error{constructor(e,t,n,s){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.responseBodyDeadline=n,this.abortController=s,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return _o(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let e=Nt("AbortError","Response body read timed out");this.cancelResponseBody(e),this.responseBodyTextPromise=Promise.reject(e)}else{let e=new Promise((n,s)=>{this.responseBodyTimer=te(()=>{this._bodyReadTimedOut=!0;let i=Nt("AbortError","Response body read timed out");s(i),this.cancelResponseBody(i)},this.responseBodyDeadline-Date.now())}),t;try{t=Promise.resolve(this.response.text())}catch(n){t=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([t,e]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(e=>JSON.parse(e))}cancelResponseBody(e){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(e),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},We=class extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}};var Ed=(r,e)=>{for(let t of Object.keys(e))(t.startsWith("$feature/")||t==="$active_feature_flags")&&(r[t]=e[t])};async function gd(r){if(r instanceof ge){let e="";try{e=await r.text}catch{r.bodyReadTimedOut&&(e="<response body read timed out>")}console.error(`Error while flushing PostHog: message=${r.message}, response body=${e}`,r)}else console.error("Error while flushing PostHog",r);return Promise.resolve()}function wE(r){return typeof r=="object"&&(r instanceof ge||Sd(r))}function Sd(r){return r instanceof We}function TE(r){if(r instanceof ge)return r.status===502||r.status===504;if(!(r instanceof We))return!1;let e=r.error;return(e?.code??e?.cause?.code)!=="ECONNREFUSED"}var md=10485760;function hd(r){try{return typeof r!="string"?r instanceof Uint8Array?r.byteLength:r.size:"u">typeof Buffer?Buffer.byteLength(r,zu):new TextEncoder().encode(r).length}catch{return 0}}function $t(r){return typeof r=="object"&&r instanceof ge&&r.status===413}function ps(r){return r instanceof ge?r.status===408||r.status===429||r.status>=500:Sd(r)}function _d(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}var Do="default",Ar=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new gr([new mr,new _r,new hr,new Er],To())}getEvaluationRuntime(){}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new Zn,this._events=new ds,this._isInitialized=!1;let n=typeof e=="string"?e.trim():"",s=typeof t.host=="string"?t.host.trim():"",i=!n;this._logger=Ou("[PostHog]",this.logMsgIfDebug.bind(this)),i&&this._logger.error("You must pass your PostHog project's api key. The client will be disabled."),this.apiKey=n,this.host=Vu(s||"https://us.i.posthog.com"),this.flushAt=t.flushAt?Math.max(t.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,t.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,t.maxQueueSize??1e3),this.flushInterval=t.flushInterval??1e4,this.preloadFeatureFlags=t.preloadFeatureFlags??!0,this.defaultOptIn=t.defaultOptIn??!0,this.disableSurveys=t.disableSurveys??!1,this._retryOptions={retryCount:t.fetchRetryCount??3,retryDelay:t.fetchRetryDelay??3e3,retryCheck:ps},this.requestTimeout=t.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=t.featureFlagsRequestTimeoutMs??3e3,this.featureFlagsRequestMaxRetries=t.featureFlagsRequestMaxRetries??1,this.remoteConfigRequestTimeoutMs=t.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=t.disableGeoip??!0,this.disabled=(t.disabled??!1)||i,this.historicalMigration=t?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=t?.evaluationContexts??t?.evaluationEnvironments,t?.evaluationEnvironments&&!t?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!ko()||(t?.disableCompression??!1)}logMsgIfDebug(e){this.isDebug&&e()}wrap(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return e();this._initPromise.then(()=>e())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(ne.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(ne.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(ne.OptedOut,!0)})}on(e,t){return this._events.on(e,t)}debug(e=!0){if(this.removeDebugCallback?.(),e){let t=this.on("*",(n,s)=>this._logger.info(n,s));this.removeDebugCallback=()=>{t(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(e){let t=e.properties||{},n={...t,...this.getCommonEventProperties()};return Ed(n,t),e.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=br(n)),{distinct_id:e.distinct_id,event:e.event,properties:n}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,n){this.wrap(()=>{let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",s,n)})}async identifyStatelessImmediate(e,t,n){let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",s,n)}captureStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({distinct_id:e,event:t,properties:n});this.enqueue("capture",i,s)})}async captureStatelessImmediate(e,t,n,s){let i=this.buildPayload({distinct_id:e,event:t,properties:n});await this.sendImmediate("capture",i,s)}aliasStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});this.enqueue("alias",i,s)})}async aliasStatelessImmediate(e,t,n,s){let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",i,s)}groupIdentifyStateless(e,t,n,s,i,o){this.wrap(()=>{let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});this.enqueue("capture",a,s)})}async groupIdentifyStatelessImmediate(e,t,n,s,i,o){let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});await this.sendImmediate("capture",a,s)}async getRemoteConfig(){await this._initPromise;let e=this.host;e==="https://us.i.posthog.com"?e="https://us-assets.i.posthog.com":e==="https://eu.i.posthog.com"&&(e="https://eu-assets.i.posthog.com");let t=`${e}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,n,{type:"required",consume:s=>s.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).catch(s=>{this._logger.error("Remote config could not be loaded",s),this._events.emit("error",s)})}async getFlags(e,t={},n={},s={},i={},o=!1){await this._initPromise;let a=o?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,l={token:this.apiKey,distinct_id:e,groups:t,person_properties:n,group_properties:s,...i};n.$device_id&&(l.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(l.evaluation_contexts=this.evaluationContexts);let u=this.getEvaluationRuntime();u&&(l.evaluation_runtime=u);let d={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(l)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,d,{type:"required",consume:p=>p.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:TE},this.featureFlagsRequestTimeoutMs).then(p=>({success:!0,response:Oo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(e){if(e instanceof ge)return{type:"api_error",statusCode:e.status};if(e instanceof We){let t=e.error;return t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(e,t,n,s,i,o);if(a===void 0)return{response:void 0,requestId:void 0};let c=yr(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,n,s,i,o,[e]);return a===void 0?void 0:{response:a.flags[e],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(t,n,s,i,o,[e]);if(!a)return;let c=a[e];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(e,t={},n={},s={},i,o){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)).payloads}async getFeatureFlagsStateless(e,t={},n={},s={},i,o){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)}async getFeatureFlagsAndPayloadsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(e,t,n,s,i,o);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a={geoip_disable:i??this.disableGeoip};o&&(a.flag_keys_to_evaluate=o);let c=await this.getFlags(e,t,n,s,a);if(!c.success)return;let l=c.response;return l.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),l.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:l?.requestId,quotaLimited:l.quotaLimited}):l}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let e=`${this.host}/api/surveys/?token=${this.apiKey}`,t={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},s=(await this.fetchWithRetry(e,t,{type:"required",consume:i=>{if(i.status!==200||!i.json){let o=`Surveys API could not be loaded: ${i.status}`,a=new Error(o);return this._logger.error(a),this._events.emit("error",new Error(o)),Promise.resolve(void 0)}return i.json()}}).catch(i=>{this._logger.error("Surveys API could not be loaded",i),this._events.emit("error",i)}))?.surveys;return s&&this._logger.info("Surveys fetched from API: ",JSON.stringify(s)),s??[]}get props(){return this._props||(this._props=this.getPersistedProperty(ne.Props)),this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(ne.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(ne.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return Do}persistedQueueKeyForRoute(e){return ne.Queue}getActiveQueueRoutes(){return[Do]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,n,s){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i===null)return;i=this.normalizeMessage(i);let o=this.persistedQueueKeyForRoute(s??this.getQueueRouteKey(i)),a=this.getPersistedProperty(o)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:i}),this.setPersistedProperty(o,a),this._events.emit(e,i),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=te(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(e,t,n,s){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i!==null){i=this.normalizeMessage(i);try{await this.sendBatch([i],void 0,s??this.getQueueRouteKey(i))}catch(o){this._events.emit("error",o)}}}normalizeMessage(e){let{type:t,library:n,library_version:s,...i}=e,o=_d(i.properties)?i.properties:void 0;return n!==void 0&&o?.$lib===void 0&&(o={...o||{},$lib:n}),s!==void 0&&o?.$lib_version===void 0&&(o={...o||{},$lib_version:s}),o&&(i.properties=o),i.uuid=mt(i.uuid,ee),i}normalizeTimestampForWire(e){let t=e instanceof Date?e:typeof e=="string"?new Date(e):null;if(!t||Number.isNaN(t.getTime()))return e;let n=t.toISOString(),s=typeof e=="string"?e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}prepareMessage(e,t){let n={...e,timestamp:t?.timestamp?t?.timestamp:Eo(),uuid:mt(t?.uuid,ee)};return(t?.disableGeoip??this.disableGeoip)&&(_d(n.properties)||(n.properties={}),n.properties.$geoip_disable=!0),n.distinctId&&(n.distinct_id=n.distinctId,delete n.distinctId),n}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.pendingFlushPromise||this.flushAutomatic().catch(async e=>{await gd(e)})}flushAutomatic(){return this.flush()}async waitForPendingPromises(e,t=[]){let n=t.filter(i=>!!i),s=0;for(;;){let i=this.promiseQueue.getPromises([...n,...this.flushPromises],e);if(i.length===0)return;s>0&&this._logger.debug(`flush() re-checking ${i.length} pending promise(s) before flushing`),await Promise.all(i.map(o=>o.catch(()=>{}))),s++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(e){if(this.disabled)return Promise.resolve();if(!e&&this.pendingFlushPromise)return this.pendingFlushPromise;let t=this.flushPromise,n=this.promiseQueue.maxId,s=Promise.resolve().then(()=>{if(e)return this.waitForPendingPromises(n,[t,s])}).then(()=>pr([t])).then(()=>(this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=s,this.flushPromise=s,this.flushPromises.add(s),this.addPendingPromise(s),pr([s]).then(()=>{this.flushPromises.delete(s),this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this.flushPromise===s&&(this.flushPromise=null)}),s}getCustomHeaders(){let e=this.getCustomUserAgent(),t={};return e&&e!==""&&(t["User-Agent"]=e),t}compressPayload(e){return Tr(e,this.isDebug)}getBatchEndpointPath(e){return"/batch/"}async sendBatch(e,t,n=Do){let s={api_key:this.apiKey,batch:e.map(l=>{if(!l)return l;let u=this.normalizeTimestampForWire(l.timestamp);return u===l.timestamp?l:{...l,timestamp:u}}),sent_at:Eo()};this.historicalMigration&&(s.historical_migration=!0);let i=Je(s),o=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(i),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||i};await this.fetchWithRetry(o,c,{type:"successful-write"},t)}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some(s=>this.getRouteQueue(s).length>0))return;let t=[],n;for(let s of e)try{await this._flushRoute(s,t)}catch(i){n===void 0&&(n=i)}if(n!==void 0)throw n;this._events.emit("flush",t)}async _flushRoute(e,t){let n=this.persistedQueueKeyForRoute(e),s=this.getPersistedProperty(n)||[];if(!s.length)return;let i=s.length,o=0;for(;s.length>0&&o<i;){let a=s.slice(0,this.maxBatchSize),c=a.map(d=>d.message===void 0?d.message:this.normalizeMessage(d.message)),l=async()=>{let d=this.getPersistedProperty(n)||[],p=[...a],g=d.filter(m=>{let h=m.message?.uuid,E=p.findIndex(_=>_===m||typeof h=="string"&&h.length>0&&_.message?.uuid===h);return E===-1?!0:(p.splice(E,1),!1)});this.setPersistedProperty(n,g),s=g,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},u={retryCheck:d=>$t(d)?!1:ps(d)};try{await this.sendBatch(c,u,e)}catch(d){if($t(d)&&c.length>1){this.maxBatchSize=Math.max(1,Math.floor(c.length/2)),this._logger.warn(`Received 413 when sending batch of size ${c.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw d instanceof We||await l(),this._events.emit("error",d),d}await l(),t.push(...c),o+=c.length}}async _sendOtlpBatch({path:e,auth:t,payload:n}){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let s;try{s=JSON.stringify(n)}catch(u){return this.logMsgIfDebug(()=>console.warn(`[PostHog] Could not serialize a ${e} batch; reporting it as too large`,u)),{kind:"too-large",measuredLocally:!0}}let i=hd(s);if(i>md)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${e} batch of ${i} bytes: the endpoint accepts at most ${md}`)),{kind:"too-large",measuredLocally:!0};let o=t==="bearer"?`${this.host}/i/v1/${e}`:`${this.host}/i/v1/${e}?token=${encodeURIComponent(this.apiKey)}`,a=this.disableCompression?null:await this.compressPayload(s),c=a||s,l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...t==="bearer"&&{Authorization:`Bearer ${this.apiKey}`},...a!==null&&{"Content-Encoding":"gzip"}},body:c};try{return await this.fetchWithRetry(o,l,{type:"successful-write"},{retryCheck:u=>$t(u)||u instanceof ge&&u.retryAfterMs!==void 0?!1:ps(u)}),{kind:"ok"}}catch(u){if($t(u))return{kind:"too-large"};if(ps(u)){let d=u instanceof ge?u.retryAfterMs:void 0;return{kind:"retry-later",error:u,...d!==void 0&&{retryAfterMs:d}}}return{kind:"fatal",error:u}}}async _sendLogsBatch(e){return this._sendOtlpBatch({path:"logs",auth:"query-token",payload:e})}async _sendMetricsBatch(e){return this._sendOtlpBatch({path:"metrics",auth:"query-token",payload:e})}async _sendTracesBatch(e){return this._sendOtlpBatch({path:"traces",auth:"bearer",payload:e})}async fetchWithRetry(e,t,n,s,i){let o=t.body?t.body:"",a=hd(o),c={...this._retryOptions,...s},l=0;return await Yu(async()=>{l++;let u=new AbortController,d=i??this.requestTimeout,p=Date.now()+d,g,m=new Promise((w,T)=>{g=te(()=>{let M=Nt("AbortError",`Request timed out after ${d}ms`);T(M),u.abort(M)},d)}),h,E=!1,_,b=()=>_??=(async()=>{try{await h?.body?.cancel()}catch{}})();try{let w;try{w=this.fetch(e,{signal:u.signal,...t})}catch(R){throw new We(R)}w.then(R=>{u.signal.aborted&&!E&&Promise.resolve(R.body?.cancel()).catch(()=>{})}).catch(()=>{});try{h=await Promise.race([w,m]),E=!0}catch(R){throw new We(R)}let T=t.mode==="no-cors",M=n.type==="successful-write"?300:400;if(!T&&(h.status<200||h.status>=M))throw new ge(h,a,p,u);if(n.type==="successful-write"){try{await Promise.race([b(),m])}catch{}return}try{return await Promise.race([n.consume(h),m])}catch(R){throw u.signal.aborted?new We(R):R}}finally{clearTimeout(g),u.signal.aborted&&h&&b()}},{...c,retryCheck:u=>{let d=c.retryCheck(u);return d&&l<=c.retryCount&&u instanceof ge&&u.cancelResponseBody(),d}})}async _shutdown(e=3e4){await this._initPromise;let t=!1;return this.clearFlushTimer(),this.disabled?void 0:Qe((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(o=>this.getRouteQueue(o).length>0);){let i=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===i){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(s){if(!wE(s))throw s;await gd(s)}})(),e,()=>{this._logger.critical("Timeout while shutting down PostHog. Some events may not have been sent.",{shutdownTimeoutMs:e}),t=!0})}async shutdown(e=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(e).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var CE=/[a-z][a-z0-9+.-]{0,63}:[^\s<>"]+/gi;var qC=new RegExp(CE.source,"i"),yd=/[a-z][a-z0-9+.-]{0,63}:\/\//i,JC=new RegExp(`^${yd.source}`,"i"),XC=new RegExp(yd.source,"gi");var IE=["is_not","is_set"],PE=1152921504606847e3,v=class r extends Error{constructor(e){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,r.prototype)}};function xo(r){if(typeof r=="boolean")return!0;if(typeof r=="string"){let e=r.toLowerCase();return e==="true"||e==="false"}if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!xo(e in r?r[e]:null))return!1;return!0}function Lo(r){if(typeof r=="boolean")return r;if(typeof r=="string")return r.toLowerCase()==="true";if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!Lo(e in r?r[e]:null))return!1;return!0}function vr(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t>=55296&&t<=56319){let n=r.charCodeAt(e+1);if(e+1>=r.length||n<56320||n>57343)throw new v("Cannot stringify an unpaired surrogate like the flags service");e++}else if(t>=56320&&t<=57343)throw new v("Cannot stringify an unpaired surrogate like the flags service")}}function ms(r,e=new Set){if(!(r===null||typeof r=="boolean")){if(typeof r=="string")return void vr(r);if(typeof r=="number"){if(!Number.isFinite(r))throw new v(`Cannot represent non-finite number ${r} like the flags service`);return}if(Array.isArray(r)){if(e.has(r))throw new v("Cannot represent a circular array during local evaluation");e.add(r);try{for(let t=0;t<r.length;t++)t in r&&ms(r[t],e)}finally{e.delete(r)}return}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new v("Cannot represent a non-JSON object like the flags service");if(e.has(r))throw new v("Cannot represent a circular object during local evaluation");e.add(r);try{for(let n of Object.keys(r))vr(n),ms(r[n],e)}finally{e.delete(r)}return}throw new v(`Cannot represent ${typeof r} like the flags service`)}}function OE(r,e){let t=0,n=0;for(;t<r.length&&n<e.length;){let s=r.charCodeAt(t),i=e.charCodeAt(n),o=s>=55296&&s<=56319,a=i>=55296&&i<=56319,c=o?r.charCodeAt(t+1):0,l=a?e.charCodeAt(n+1):0,u=o?(s-55296)*1024+c-56320+65536:s,d=a?(i-55296)*1024+l-56320+65536:i;if(u!==d)return u-d;t+=o?2:1,n+=a?2:1}return r.length-e.length}function Fo(r,e=new Set){if(r===null)return"null";if(typeof r=="string")return vr(r),JSON.stringify(r);if(typeof r=="boolean")return r?"true":"false";if(typeof r=="number"){if(!Number.isFinite(r))throw new v(`Cannot stringify non-finite number ${r} like the flags service`);if(Number.isInteger(r))throw new v(`Cannot distinguish integer ${r} from an integral JSON float during local evaluation`);return String(r)}if(Array.isArray(r)){if(e.has(r))throw new v("Cannot stringify a circular array during local evaluation");e.add(r);try{let t=[];for(let n=0;n<r.length;n++)t.push(n in r?Fo(r[n],e):"null");return`[${t.join(",")}]`}finally{e.delete(r)}}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new v("Cannot stringify a non-JSON object like the flags service");if(e.has(r))throw new v("Cannot stringify a circular object during local evaluation");e.add(r);try{let n=Object.keys(r);return n.forEach(vr),`{${n.sort(OE).map(s=>`${JSON.stringify(s)}:${Fo(r[s],e)}`).join(",")}}`}finally{e.delete(r)}}throw new v(`Cannot stringify ${typeof r} like the flags service`)}function gs(r){return typeof r=="string"?(vr(r),r):Fo(r)}function bd(r){try{return new RegExp(r),!0}catch{return!1}}function me(r){return String(r).replace(/[A-Z]/g,e=>e.toLowerCase())}function Td(r,e,t){if(!/^\d+$/.test(r)||t==="strict"&&r.length>1&&r[0]==="0")throw new v(`Invalid semver: ${e}`);return parseInt(r,10)}function W(r,e="strict"){let n=String(r).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new v(`Invalid semver: ${r}`);let s=n.split("."),i=o=>o===void 0||o===""?0:Td(o,r,e);return[i(s[0]),i(s[1]),i(s[2])]}function he(r,e){for(let t=0;t<3;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return 0}function kE(r,e){let t=W(r,e);return{lower:[t[0],t[1],t[2]],upper:[t[0],t[1]+1,0]}}function DE(r,e){let[t,n,s]=W(r,e),i=[t,n,s],o;return o=t>0?[t+1,0,0]:n>0?[0,n+1,0]:[0,0,s+1],{lower:i,upper:o}}function xE(r,e){let n=String(r).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new v(`Invalid wildcard semver: ${r}`);let s=n.split("."),i=c=>{if(e==="legacy-permissive"){let l=parseInt(c,10);if(!isNaN(l))return l}else try{return Td(c,r,e)}catch{}throw new v(`Invalid wildcard semver: ${r}`)},o=i(s[0]);if(s.length===1)return{lower:[o,0,0],upper:[o+1,0,0]};let a=i(s[1]);return{lower:[o,a,0],upper:[o,a+1,0]}}function wd(r){if(r instanceof Date)return r;if(typeof r=="string"||typeof r=="number"){let e=new Date(r);if(!isNaN(e.valueOf()))return e;throw new v(`${r} is in an invalid date format`)}throw new v(`The date provided ${r} must be a string, number, or date object`)}function No(r){let e=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,t=r.match(e),n=new Date(new Date().toISOString());if(!t||!t.groups)return null;let s=parseInt(t.groups.number);if(s>=1e4)return null;let i=t.groups.interval;if(i==="h")n.setUTCHours(n.getUTCHours()-s);else if(i==="d")n.setUTCDate(n.getUTCDate()-s);else if(i==="w")n.setUTCDate(n.getUTCDate()-7*s);else if(i==="m")n.setUTCMonth(n.getUTCMonth()-s);else{if(i!=="y")return null;n.setUTCFullYear(n.getUTCFullYear()-s)}return n}function Uo(r,e,t={}){let n=r.key,s=r.value,i=r.operator||"exact",o=t.semverParsingPolicy??"strict";if(Object.prototype.hasOwnProperty.call(e,n)){if(i==="is_not_set")return!1;if(i==="is_set")return!0}else throw new v(`Property ${n} not found in propertyValues`);let c=e[n];if(c===void 0)return t.warnFunction?.(`Property ${n} cannot have a value of undefined with the ${i} operator`),i==="is_not";if(c===null&&!IE.includes(i)&&i!=="exact"&&i!=="is_not")return t.warnFunction?.(`Property ${n} cannot have a value of null with the ${i} operator`),!1;let l=(d,p)=>{if(t.propertyMatchingVersion!==2&&xo(d)||Array.isArray(d)&&d.length===0)return ms(p),Lo(d)===Lo(p);if(t.propertyMatchingVersion===2&&typeof p=="number"&&xo(d))return ms(p),!1;if(Array.isArray(d)){let g=gs(p).toLowerCase();return d.some(m=>gs(m).toLowerCase()===g)}return gs(d).toLowerCase()===gs(p).toLowerCase()},u=(d,p,g)=>{if(g==="gt")return d>p;if(g==="gte")return d>=p;if(g==="lt")return d<p;if(g==="lte")return d<=p;throw new Error(`Invalid operator: ${g}`)};switch(i){case"exact":return l(s,c);case"is_not":return!l(s,c);case"is_set":return!0;case"icontains":return me(c).includes(me(s));case"not_icontains":return!me(c).includes(me(s));case"starts_with":return me(c).startsWith(me(s));case"not_starts_with":return!me(c).startsWith(me(s));case"ends_with":return me(c).endsWith(me(s));case"not_ends_with":return!me(c).endsWith(me(s));case"regex":return bd(String(s))&&String(c).match(String(s))!==null;case"not_regex":return bd(String(s))&&String(c).match(String(s))===null;case"gt":case"gte":case"lt":case"lte":{let d=typeof s=="number"?s:parseFloat(String(s)),p=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(d)&&Number.isFinite(p)?u(p,d,i):u(String(c),String(s),i)}case"is_date_after":case"is_date_before":{if(typeof s=="boolean")throw new v("Date operations cannot be performed on boolean values");let d=No(String(s));d==null&&(d=wd(s));let p=wd(c);return i==="is_date_before"?p<d:p>d}case"semver_eq":return he(W(String(c),o),W(String(s),o))===0;case"semver_neq":return he(W(String(c),o),W(String(s),o))!==0;case"semver_gt":return he(W(String(c),o),W(String(s),o))>0;case"semver_gte":return he(W(String(c),o),W(String(s),o))>=0;case"semver_lt":return he(W(String(c),o),W(String(s),o))<0;case"semver_lte":return he(W(String(c),o),W(String(s),o))<=0;case"semver_tilde":{let d=W(String(c),o),{lower:p,upper:g}=kE(String(s),o);return he(d,p)>=0&&he(d,g)<0}case"semver_caret":{let d=W(String(c),o),{lower:p,upper:g}=DE(String(s),o);return he(d,p)>=0&&he(d,g)<0}case"semver_wildcard":{let d=W(String(c),o),{lower:p,upper:g}=xE(String(s),o);return he(d,p)>=0&&he(d,g)<0}default:throw new v(`Unknown operator: ${i}`)}}async function Ad(r){let e=globalThis.crypto?.subtle;if(!e)throw new Error("SubtleCrypto API not available");let t=await e.digest("SHA-1",new TextEncoder().encode(r));return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}async function Rr(r,e,t="",n="."){let s=await Ad(`${r}${n}${e}${t}`);return parseInt(s.slice(0,15),16)/PE}async function $o(r,e){if(r==null||r.id==null||r.exclusion_percentage==null)return;let t=Number(r.exclusion_percentage);if(!Number.isFinite(t))return;let n=Math.min(Math.max(t,0),100);if(!(n!==100&&await Rr("holdout",e,"","-")>n/100))return`holdout-${r.id}`}function hs(r){let e=[],t=0;for(let n of r){let s=t+n.rollout_percentage/100;e.push({valueMin:t,valueMax:s,key:n.key}),t=s}return e}async function Bo(r,e,t){let n=await Rr(r,e,"variant");return hs(t).find(s=>n>=s.valueMin&&n<s.valueMax)?.key}function Wo(r,e){if(e===!1||e==null||!r)return null;let t=typeof e=="boolean"?e.toString():e,n=r[t]||null;return n==null?null:Ut(n)}var vd=9223372036854776e3,LE="9223372036854775808",FE=Object.prototype.propertyIsEnumerable;function NE(){return{ancestors:new WeakSet,remainingNodes:1e4}}function De(r,e){try{return Rd(r,e,NE(),0)}catch{return[]}}function UE(r,e){let t=r.toString(),n=BigInt(LE);return r>=n||r<-n?(e?.debug(`Attribute ${t} is outside the int64 range; encoding it as a string`),{stringValue:t}):{intValue:t}}function Ko(r,e,t,n){if(t.remainingNodes<=0)return{stringValue:is};if(t.remainingNodes--,Tu(r))return{boolValue:r};if(typeof r=="bigint")return UE(r,e);if(typeof r=="number"){if(!Number.isFinite(r))return{stringValue:String(r)};if(Number.isInteger(r)){if(Number.isSafeInteger(r))return{intValue:String(r)};if("u"<typeof BigInt)return{stringValue:String(r)};let s=BigInt(r).toString();return r>=vd||r<-vd?(e?.debug(`Attribute ${s} is outside the int64 range; encoding it as a string`),{stringValue:s}):{intValue:s}}return{doubleValue:r}}if(typeof r=="string")return{stringValue:Oe(r)};if(typeof r=="function")return{stringValue:Gu};if(typeof r=="symbol")return{stringValue:String(r)};if(typeof r=="object"&&r!==null){if(t.ancestors.has(r))return{stringValue:ss};if(n>=20)return{stringValue:is};if(r instanceof Date){let s=r.getTime(),i=Number.isFinite(s)?r.toISOString():String(r);return{stringValue:typeof i=="string"?Oe(i):String(i)}}t.ancestors.add(r);try{try{let s=r.toJSON;if(typeof s=="function")return Ko(s.call(r),e,t,n+1)}catch{}return ae(r)?{arrayValue:{values:$E(r,e,t,n+1)}}:{kvlistValue:{values:Rd(r,e,t,n+1)}}}finally{t.ancestors.delete(r)}}return{stringValue:Oe(String(r))}}function $E(r,e,t,n){let s=[],i=Math.min(r.length,1e3),o=0;for(;o<i&&t.remainingNodes>0;o++)try{let a=o in r?r[o]:void 0;if(Te(a))continue;s.push(Ko(a,e,t,n))}catch{s.push({stringValue:pe})}return r.length>o&&s.push({stringValue:is}),s}function Rd(r,e,t,n){let s=[];for(let i in r)if(FE.call(r,i)){if(!i){e?.debug("Dropping an attribute with an empty key");continue}if(s.length>=1e3||t.remainingNodes<=0){e?.debug("Attributes truncated: the value exceeds the OTLP encoder budget");break}try{let o=r[i];if(co(o)||$e(o))continue;s.push({key:Oe(i),value:Ko(o,e,t,n)})}catch{s.push({key:Oe(i),value:{stringValue:pe}})}}return s}function Cr(r,e,t){return{...Be({},r.resourceAttributes),"service.name":r.serviceName||"unknown_service",...r.environment&&{"deployment.environment":r.environment},...r.serviceVersion&&{"service.version":r.serviceVersion},"telemetry.sdk.name":e,"telemetry.sdk.version":t}}var BE=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function Ir(r,e){let t=Be({},r),n={};for(let s of BE)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s],delete t[s]);return[...De(t,e),...De(n,e)]}var Md={darwin:"macOS",win32:"Windows",cygwin:"Windows",linux:"Linux",android:"Android",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",sunos:"SunOS",aix:"AIX",haiku:"Haiku","Mac OS X":"macOS"};function WE(r){if(r)return Object.prototype.hasOwnProperty.call(Md,r)?Md[r]:r}function Go(r,e){let t=WE(r);return{...t?{"os.name":t}:{},...e?{"os.version":e}:{}}}var HE={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},pI=HE.info;var ht=class{constructor(e){this._onFire=e,this._firesAt=0}get pending(){return!!this._timer}arm(e){this.clear(),this._firesAt=Date.now()+e,this._timer=te(()=>{this._timer=void 0,this._onFire()},e)}armNoEarlierThan(e){this._timer&&Date.now()+e<=this._firesAt||this.arm(e)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function Pr(){return 1-.25+Math.random()*.25*2}var _e=1;function Or(r,e,t,n){let s=Math.min(Math.max(0,e-1),6),i=r*2**s,o=n===void 0?i:Math.min(i,Math.max(n,r));return Math.round(o*t)}var kr=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function zo(r){return String(r)+"000000"}function Vo(r,e,t,n){let s="";return n&&(s=Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${JSON.stringify(n[o])}`).join(",")),`${r}\0${e}\0${t??""}\0${s}`}function Cd(r,e){for(let t=0;t<e.length;t++)if(r<=e[t])return t;return e.length}function Yo(r,e,t){return Cr(r,e,t)}function qo(r,e,t,n){return{resourceMetrics:[{resource:{attributes:Ir(e)},scopeMetrics:[{scope:{name:t,version:n},metrics:r}]}]}}function Es(r){let e=r?.resourceAttributes;return{serviceName:e?.["service.name"]??r?.serviceName,serviceVersion:e?.["service.version"]??r?.serviceVersion,environment:e?.["deployment.environment"]??r?.environment,resourceAttributes:e,beforeSend:r?.beforeSend,flushIntervalMs:r?.flushIntervalMs??1e4,maxSeriesPerFlush:r?.maxSeriesPerFlush??1e3}}var Id=1,Dr=class{constructor(e,t,n){this._instance=e,this._config=t,this._logger=n,this._series=new Map,this._flushTimer=new ht(()=>this.flush().catch(s=>{this._logger.error("Metrics flush failed:",s)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new gt,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._generation=0}count(e,t=1,n){this._capture({name:e,type:"count",value:t,unit:n?.unit,attributes:n?.attributes})}gauge(e,t,n){this._capture({name:e,type:"gauge",value:t,unit:n?.unit,attributes:n?.attributes})}histogram(e,t,n){this._capture({name:e,type:"histogram",value:t,unit:n?.unit,attributes:n?.attributes})}flush(){let e=this._flushPromise,n=(async()=>{e&&await e.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let n,s;try{n=t.attributes?{...t.attributes}:void 0,s=Vo(t.type,t.name,t.unit,n)}catch(a){this._logger.warn(`Dropping metric '${t.name}': attributes could not be serialized`,a);return}let i=this._series.get(s);if(!i){if(!this._admitNewSeries())return;i={name:t.name,type:t.type,unit:t.unit,attributes:n,windowStartMs:Date.now()},this._series.set(s,i)}let o=this._typeByName.get(t.name);o===void 0?this._typeByName.set(t.name,t.type):o!==t.type&&!this._typeCollisionWarned.has(t.name)&&(this._typeCollisionWarned.add(t.name),this._logger.warn(`Metric name '${t.name}' is already used as a ${o}; recording it as a ${t.type} too will blend both series in charts. Use a distinct name.`)),this._fold(i,t.value),this._armFlushTimer()}_admitNewSeries(){return this._series.size<this._config.maxSeriesPerFlush?!0:(this._seriesCapWarned||(this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`)),!1)}_fold(e,t){switch(e.type){case"count":e.total=(e.total??0)+t;break;case"gauge":e.last=t;break;case"histogram":{e.hist||(e.hist={count:0,sum:0,min:t,max:t,bucketCounts:new Array(kr.length+1).fill(0)});let n=e.hist;n.count+=1,n.sum+=t,n.min=Math.min(n.min,t),n.max=Math.max(n.max,t),n.bucketCounts[Cd(t,kr)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let n=ae(t)?t:[t],s=e;for(let i of n)try{let o=i(s);if(!o)return this._logger.info("Metric was rejected in beforeSend function"),null;s=o}catch(o){return this._logger.error("Error in beforeSend function for metric:",o),null}return s}_armFlushTimer(){this._flushTimer.pending||this._flushTimer.arm(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Or(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}async _doFlush(){if(this._flushTimer.clear(),this._series.size===0)return;let e=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let t=this._generation,n=await this._instance._sendMetricsBatch(this._buildPayload(e));if(t===this._generation)switch(this._retryAfter.record(n),n.kind==="retry-later"?(this._consecutiveFlushFailures++,this._flushJitter=Pr()):(this._consecutiveFlushFailures=0,this._flushJitter=_e),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(e){return qo(this._buildMetrics(e),Yo(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=zo(Date.now()),n=new Map;for(let s of e.values()){let i=Vo(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o={name:s.name,...s.unit&&{unit:s.unit}},s.type==="count"?o.sum={aggregationTemporality:Id,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:Id,dataPoints:[]},n.set(i,o));let a=De(s.attributes??{},this._logger),c=zo(s.windowStartMs);if(s.type==="count"){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,asDouble:s.total??0};o.sum.dataPoints.push(l)}else if(s.type==="gauge"){let l={attributes:a,timeUnixNano:t,asDouble:s.last??0};o.gauge.dataPoints.push(l)}else if(s.hist){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,count:s.hist.count,sum:s.hist.sum,min:s.hist.min,max:s.hist.max,bucketCounts:s.hist.bucketCounts,explicitBounds:kr};o.histogram.dataPoints.push(l)}}return Array.from(n.values())}_mergeWindowBack(e){for(let[t,n]of e){let s=this._series.get(t);if(!s){this._admitNewSeries()&&this._series.set(t,n);continue}switch(s.windowStartMs=Math.min(s.windowStartMs,n.windowStartMs),s.type){case"count":s.total=(s.total??0)+(n.total??0);break;case"gauge":break;case"histogram":if(n.hist)if(s.hist){s.hist.count+=n.hist.count,s.hist.sum+=n.hist.sum,s.hist.min=Math.min(s.hist.min,n.hist.min),s.hist.max=Math.max(s.hist.max,n.hist.max);for(let i=0;i<s.hist.bucketCounts.length;i++)s.hist.bucketCounts[i]+=n.hist.bucketCounts[i]}else s.hist=n.hist;break}}}};var zE="0".repeat(32),VE="0".repeat(16),YE=/^[0-9a-f]+$/;function qE(r){let e=new Uint8Array(r),t=globalThis.crypto;if(t&&typeof t.getRandomValues=="function")try{return t.getRandomValues(e),e}catch{}for(let n=0;n<r;n++)e[n]=Math.floor(256*Math.random());return e}function JE(r){let e="";for(let t=0;t<r.length;t++)e+=r[t].toString(16).padStart(2,"0");return e}function Pd(r){let e=JE(qE(r));return/[^0]/.test(e)?e:e.slice(0,-1)+"1"}function Od(){return Pd(16)}function kd(){return Pd(8)}function Dd(r,e,t){return typeof r=="string"&&r.length===e&&r!==t&&YE.test(r)}function xd(r){return Dd(r,32,zE)}function Ld(r){return Dd(r,16,VE)}var XE=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Fd(r){let e=Nd(r);return e&&{traceId:e.traceId,spanId:e.spanId,flags:QE(e.flags)}}function QE(r){return 1&parseInt(r,16)?ys:ZE}function Nd(r){if(typeof r!="string")return;let e=XE.exec(r.trim());if(!e)return;let[,t,n,s,i,o]=e;if(t!=="ff"&&!(t==="00"&&o)&&!(!xd(n)||!Ld(s)))return{version:t,traceId:n,spanId:s,flags:i}}function Ud(r){return Nd(r)&&r.trim()}function Ss(r){return Array.isArray(r)&&r.length===1?r[0]:r}var ys="01",ZE="00";function $d(r,e,t=ys){return`00-${r}-${e}-${t}`}var eS=32,Jo=512;function bs(r){if(typeof r!="string")return;let e=r.trim();if(!e||/[^\x20-\x7e\t]/.test(e))return;let t=e.split(",");if(!(t.length>eS)){for(let n of t)if(n.trim()&&!n.includes("="))return;return e.length<=Jo?e:rS(t)}}var tS=128;function rS(r){let e=[...r],t=()=>e.reduce((n,s)=>n+s.length,0)+e.length-1;for(let n=e.length-1;n>=0&&t()>Jo;n--)e[n].length>tS&&e.splice(n,1);for(;e.length&&t()>Jo;)e.pop();return e.length?e.join(","):void 0}var Bd="unknown";function _t(r,e,t,n){return typeof r=="string"&&r.trim()?r.length>t?r.slice(0,t):r:(n?.debug(`${e} must be a non-empty string; using "${Bd}"`),Bd)}function Bt(r){if(r==null)return;let e=r;if(r instanceof Date)try{e=r.getTime()}catch{return}if(!(typeof e!="number"||!Number.isFinite(e))&&!(e<0||e>9223372036854))return e}function Wd(r,e,t){let n=Bt(r);return n===void 0?(r!==void 0&&t?.debug("Span startTime is out of range or not a valid time; using the current time"),e):(e-n>864e5?t?.debug("Span startTime is more than 24 hours in the past; the server will clamp it to receive time and keep the original in $originalTimestamp"):n>e&&t?.debug("Span startTime is in the future; the span may export with a zero duration"),n)}function ws(r,e){return r<e?e:r}function xr(r,e,t,n){let s=Bt(r);return s===void 0?(r!==void 0&&n?.debug(`Span ${t} is out of range or not a valid time; using the derived time`),e):s}function As(){let r=globalThis.performance;return typeof r?.now=="function"?r.now():void 0}var Wt=class{constructor(e,t,n){this._onEnd=t,this._logger=n,this._events=[],this._ended=!1,this._userAttributeCount=0,this._userEventCount=0,this._droppedAttributes=0,this._droppedEvents=0,this._traceId=e.traceId,this._spanId=e.spanId,this._parentSpanId=e.parentSpanId,this._traceState=e.traceState,this._traceFlags=e.traceFlags??ys,this._parentIsRemote=e.parentIsRemote??!1,this._name=e.name,this._kind=e.kind,this._autoKeys=new Set(e.autoAttributeKeys),this._maxAttributes=e.maxAttributes,this._maxEvents=e.maxEvents,this._maxAttributesPerEvent=e.maxAttributesPerEvent,this._maxAttributeValueLength=e.maxAttributeValueLength,this._attributes=Object.create(null);for(let s of Object.keys(e.attributes))this._writeAttribute(s,e.attributes[s]);this._startMono=e.backdated?void 0:As(),this._startTime=e.clockAnchor&&this._startMono!==void 0?e.clockAnchor.wall+(this._startMono-e.clockAnchor.mono):e.startTime,this._startMono!==void 0&&(this._clockAnchor=e.clockAnchor??{wall:this._startTime,mono:this._startMono})}_now(){if(this._startMono!==void 0){let e=As();if(e!==void 0)return this._startTime+Math.max(0,e-this._startMono)}return Date.now()}_mutable(e){return this._ended?(this._logger?.debug(`Ignoring ${e} on a span that has already ended`),!1):!0}_writeAttribute(e,t){if(Te(t)){e in this._attributes&&!this._autoKeys.has(e)&&this._userAttributeCount--,delete this._attributes[e];return}if(!this._autoKeys.has(e)&&!(e in this._attributes)){if(this._userAttributeCount>=this._maxAttributes)return void this._droppedAttributes++;this._userAttributeCount++}this._attributes[e]=Rs(t,this._maxAttributeValueLength)}setAttribute(e,t){return this._mutable("setAttribute")&&this._writeAttribute(e,t),this}setAttributes(e){if(this._mutable("setAttributes")){let t=Be({},e);for(let n of Object.keys(t))this._writeAttribute(n,t[n])}return this}addEvent(e,t,n){if(this._mutable("addEvent")){if(this._userEventCount>=this._maxEvents)return this._droppedEvents++,this;this._userEventCount++;let s=t&&Gd(t,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:_t(e,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:xr(n,this._now(),"event timestamp",this._logger),...s&&{attributes:s.attributes,...s.dropped&&{droppedAttributesCount:s.dropped}}})}return this}setStatus(e,t){if(this._mutable("setStatus")){if(e!=="ok"&&e!=="error")return this._logger?.debug(`Ignoring unknown span status "${String(e)}"; expected "ok" or "error"`),this;this._status={code:e,...t&&{message:Xo(t,this._maxAttributeValueLength)}}}return this}get statusIsExplicitlyOk(){return this._status?.code==="ok"}recordException(e){if(!this._mutable("recordException"))return this;let{type:t,message:n,stack:s}=Qo(e);return this.addEvent(nS,{"exception.type":t,"exception.message":n,...s&&{"exception.stacktrace":s}}),this.setStatus("error",n)}updateName(e){return this._mutable("updateName")&&(this._name=_t(e,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return $d(this._traceId,this._spanId,this._traceFlags)}tracestate(){return this._traceState??null}childContext(){return{traceId:this._traceId,parentSpanId:this._spanId,traceState:this._traceState,traceFlags:this._traceFlags,clockAnchor:this._clockAnchor}}end(e){if(this._ended)return void this._logger?.debug("Ignoring end() on a span that has already ended");this._ended=!0;let t=this._now(),n=xr(e,t,"end time",this._logger);this._onEnd({traceId:this._traceId,spanId:this._spanId,...this._parentSpanId&&{parentSpanId:this._parentSpanId},...this._traceState&&{traceState:this._traceState},traceFlags:this._traceFlags,parentIsRemote:this._parentIsRemote,name:this._name,kind:this._kind,...this._status&&{status:this._status},attributes:{...this._attributes},events:this._events,startTime:this._startTime,endTime:ws(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},nS="exception",sS=4294967295;function iS(r){try{return typeof r=="string"?r:String(r)}catch{return pe}}function Et(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),sS)}function oS(r,e){if(!e.length)return Object.keys(r);let t=e.filter(s=>Object.prototype.propertyIsEnumerable.call(r,s)),n=new Set(t);return[...t,...Object.keys(r).filter(s=>!n.has(s))]}function jd(r,e,t,n,s,i,o=[]){let a=0,c=0,l={};for(let g of oS(r.attributes,o)){let m=r.attributes[g];if(!Te(m)){if(!e.has(g)){if(a>=t){c++;continue}a++}Object.defineProperty(l,g,{value:Rs(m,i),enumerable:!0,writable:!0,configurable:!0})}}r.attributes=l,c&&(r.droppedAttributesCount=Et(r.droppedAttributesCount)+c);let u=0,d=0,p=[];for(let g of r.events){if(u>=n){d++;continue}if(u++,g.attributes){let m=Gd(g.attributes,s,i);g.attributes=m.attributes,m.dropped&&(g.droppedAttributesCount=Et(g.droppedAttributesCount)+m.dropped)}p.push(g)}r.events=p,d&&(r.droppedEventsCount=Et(r.droppedEventsCount)+d),r.status?.message&&(r.status={...r.status,message:Xo(iS(r.status.message),i)})}var vs=class{setAttribute(){return this}setAttributes(){return this}addEvent(){return this}setStatus(){return this}recordException(){return this}updateName(){return this}traceparent(){return null}tracestate(){return null}end(){}},Kd=new vs,Lr=class extends vs{constructor(e,t){super(),this._traceparent=e,this._tracestate=t}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function aS(r){try{let e=r.stack;return typeof e=="string"&&e?{stack:e}:{}}catch{return{}}}function Ze(r,e){let t=Ss(r?.parent)??e,n=typeof t=="string"||t==null?t:Hd(t,"traceparent"),s=Ud(n);if(!s)return Kd;let i=typeof t=="string"||t==null?r?.tracestate:Hd(t,"tracestate");return new Lr(s,bs(i))}function Hd(r,e){try{let t=r[e];return typeof t=="function"?t.call(r):void 0}catch{return}}function Xo(r,e){return r.length>e?r.slice(0,e):r}function Rs(r,e){return Ts(r,e,{ancestors:new WeakSet,remainingNodes:1e4},0)}function Ts(r,e,t,n){if(r===null||typeof r!="object")return Te(r)||t.remainingNodes<=0?r:(t.remainingNodes--,typeof r=="string"?Xo(r,e):r);if(t.ancestors.has(r))return ss;if(t.remainingNodes<=0||n>=20)return r;t.remainingNodes--,t.ancestors.add(r);try{if(r instanceof Date)return r;let s=cS(r);if(s.selfDescribed)return Te(s.value)?String(s.value):Ts(s.value,e,t,n+1);if(ae(r)){let a=Math.min(r.length,1e3),c=[];for(let l=0;l<a;l++)try{c.push(Ts(r[l],e,t,n+1))}catch{c.push(pe)}return r.length>a&&(c.length=r.length),c}let i={},o=0;for(let a of Object.keys(r)){if(o>=1e3)break;let c;try{c=Ts(r[a],e,t,n+1)}catch{c=pe}a&&!Te(c)&&o++,Object.defineProperty(i,a,{value:c,enumerable:!0,writable:!0,configurable:!0})}return i}catch{return r}finally{t.ancestors.delete(r)}}function cS(r){try{let e=r.toJSON;if(typeof e=="function")return{selfDescribed:!0,value:e.call(r)}}catch{}return{selfDescribed:!1}}function Gd(r,e,t){let n;try{n=Object.keys(r)}catch{return{attributes:{},dropped:0}}let s={},i=0,o=0;for(let a of n){if(i>=e){o++;continue}let c;try{c=Rs(r[a],t)}catch{c=pe}Te(c)||(i++,Object.defineProperty(s,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:s,dropped:o}}function zd(r,e){for(let t of Object.keys(r))r[t]=Rs(r[t],e);return r}function Fr(r,e,t){return e===Kd?t(e):r.with(e,()=>t(e))}function Qo(r){try{let e=aS(r);if(Xe(r))return{type:r.name||"Error",message:r.message||"",...e};if(typeof r=="string")return{type:"string",message:r};if(r&&typeof r=="object"){let t=r;if(typeof t.message=="string")return{type:typeof t.name=="string"?t.name:"Object",message:t.message,...e}}return{type:typeof r,message:String(r)}}catch{return{type:typeof r,message:""}}}var Zo={internal:1,server:2,client:3,producer:4,consumer:5},lS={ok:1,error:2},uS=1,dS=256,fS=512;function pS(r){let e=parseInt(r.traceFlags,16);return(Number.isFinite(e)?255&e:uS)|dS|(r.parentIsRemote?fS:0)}function Ms(r){if(typeof r=="string")return Oe(r);try{return Oe(String(r))}catch{return pe}}function gS(r){return r&&Object.prototype.hasOwnProperty.call(Zo,r)?Zo[r]:Zo.internal}function ea(r){let e=Math.floor(r),t=Math.round((r-e)*1e6);return t>=1e6&&(e+=1,t=0),String(e)+String(t).padStart(6,"0")}function mS(r,e){let t={name:Ms(r.name),timeUnixNano:ea(r.timestamp)};if(r.attributes){let s=De(r.attributes,e);s.length&&(t.attributes=s)}let n=Et(r.droppedAttributesCount);return n&&(t.droppedAttributesCount=n),t}function Vd(r,e){let t={traceId:r.traceId,spanId:r.spanId,name:Ms(r.name),kind:gS(r.kind),startTimeUnixNano:ea(r.startTime),endTimeUnixNano:ea(r.endTime),flags:pS(r)};r.parentSpanId&&(t.parentSpanId=r.parentSpanId),r.traceState&&(t.traceState=Ms(r.traceState));let n=De(r.attributes,e);n.length&&(t.attributes=n),r.events.length&&(t.events=r.events.map(o=>mS(o,e)));let s=Et(r.droppedAttributesCount);s&&(t.droppedAttributesCount=s);let i=Et(r.droppedEventsCount);return i&&(t.droppedEventsCount=i),r.status&&(t.status={code:lS[r.status.code],...r.status.message&&{message:Ms(r.status.message)}}),t}function Yd(r,e,t){return Cr(r,e,t)}function qd(r,e,t,n,s){return{resourceSpans:[{resource:{attributes:Ir(e,s)},scopeSpans:[{scope:{name:t,version:n},spans:r}]}]}}var Jd=8;function Cs(){return As()??Date.now()}function ta(r){try{return r instanceof Wt}catch{return!1}}function Xd(r,e){let t=Fd(r);if(t)return{traceId:t.traceId,parentSpanId:t.spanId,traceState:bs(e),traceFlags:t.flags,isRemote:!0}}function hS(r){try{return typeof r.traceparent=="function"}catch{return!1}}function _S(r){return!!r.attributes&&typeof r.attributes=="object"&&!Array.isArray(r.attributes)&&Array.isArray(r.events)&&r.name!==void 0&&r.kind!==void 0&&r.startTime!==void 0&&r.endTime!==void 0}function Is(r,e,t){r[e]!==t&&(r[e]=t)}function ES(r,e){try{let t=Object.getOwnPropertyDescriptors(r);for(let n of["traceId","spanId","parentSpanId","traceState"])t[n]={value:e[n],enumerable:!0,writable:!0,configurable:!0};return Object.create(Object.getPrototypeOf(r),t)}catch{return r}}var Nr=class{constructor(e,t,n,s,i,o){this._instance=e,this._config=t,this._logger=n,this._getContext=s,this._contextManager=i,this._onSpanQueued=o,this._queue=[],this._flushTimer=new ht(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter=new gt,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=t.maxExportBatchSize}startSpan(e,t){if(this._instance.isDisabled||this._instance.optedOut)return Ze(t,this._contextManager.active());let n=Ss(t?.parent);if(n&&typeof n!="string"&&!ta(n)){if(hS(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),Ze(t,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let s=this._resolveParent(n,t);if(this._liveSpans.size>=this._config.maxLiveSpans&&this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),Ze(t,this._contextManager.active());let i=Date.now(),o=Wd(t?.startTime,i,this._logger),a=kd();this._liveSpans.set(a,Cs());let c=this._autoContextAttributes();return new Wt({traceId:s?.traceId??Od(),spanId:a,parentSpanId:s?.parentSpanId,traceState:s?.traceState,traceFlags:s?.traceFlags,parentIsRemote:s?.isRemote,name:_t(e,"Span name",this._config.maxAttributeValueLength,this._logger),kind:t?.kind??"internal",attributes:Be({...c},t?.attributes),autoAttributeKeys:Object.keys(c),maxAttributes:this._config.maxAttributesPerSpan,maxEvents:this._config.maxEventsPerSpan,maxAttributesPerEvent:this._config.maxAttributesPerEvent,maxAttributeValueLength:this._config.maxAttributeValueLength,startTime:o,backdated:o!==i,clockAnchor:Bt(t?.startTime)===void 0?s?.clockAnchor:void 0},(l,u)=>this._onSpanEnd(l,u),this._logger)}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this.startSpan(e,s);try{let a=Fr(this._contextManager,o,i);return qu(a)?a.then(c=>(o.end(),c),c=>{throw this._recordCallbackError(o,c),o.end(),c}):(o.end(),a)}catch(a){throw this._recordCallbackError(o,a),o.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let e=this._generation,t=Promise.resolve().then(()=>e===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===t&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=t,t}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(e,t){if(typeof e=="string"){let s=Xd(e,t?.tracestate);return s||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),s}if(ta(e))return e.childContext();let n=this._contextManager.active();if(ta(n))return n.childContext();if(n instanceof Lr)return Xd(n.traceparent(),n.tracestate()??void 0)}_autoContextAttributes(){let e;try{e=this._getContext()}catch(n){return this._logger.debug("Failed to read tracing context; span will carry no PostHog attributes",n),{}}let t={};return e.distinctId&&(t.posthogDistinctId=e.distinctId),e.sessionId&&(t.sessionId=e.sessionId),e.currentUrl&&(t["url.full"]=e.currentUrl),e.screenName&&(t["screen.name"]=e.screenName),e.appState&&(t["app.state"]=e.appState),t}_recordCallbackError(e,t){if(!(e instanceof Wt))return;let{type:n,message:s,stack:i}=Qo(t);e.addEvent("exception",{"exception.type":n,"exception.message":s,...i&&{"exception.stacktrace":i}}),e.statusIsExplicitlyOk||e.setStatus("error",s)}_evictAgedSpans(){let e=Cs()-this._config.maxSpanAgeMs,t=0;for(let[n,s]of this._liveSpans){if(s>e)break;this._liveSpans.delete(n),t++}t&&this._recordDrop(t,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(e,t){if(!this._liveSpans.delete(e.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(e,t);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(s){this._logger.debug("Span queue notification failed",s)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(e){let t=e.droppedAttributesCount??0,n=e.droppedEventsCount??0,s=0;for(let i of e.events)s+=i.droppedAttributesCount??0;(t||n||s)&&this._logger.debug(`Span limits discarded data from "${e.name}": ${t} attributes, ${n} events, ${s} event attributes`)}_runBeforeSpanSend(e,t){if(!this._config.beforeSpanSend.length)return e;let n={traceId:e.traceId,spanId:e.spanId,parentSpanId:e.parentSpanId,traceState:e.traceState},s={startTime:e.startTime,endTime:e.endTime},i={attributes:e.droppedAttributesCount,events:e.droppedEventsCount},o=Object.keys(e.attributes),a={traceFlags:e.traceFlags,parentIsRemote:e.parentIsRemote},c=e.status&&{...e.status},l=e,u=e;try{for(let g of this._config.beforeSpanSend){let m=g(l);if(!m)return this._recordDrop(1,"beforeSpanSend dropped it"),null;l=this._keepSpanIdentity(m,n)}if(u={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:l.name,kind:l.kind,status:l.status,attributes:l.attributes,events:l.events,startTime:l.startTime,endTime:l.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:i.attributes,droppedEventsCount:i.events},!_S(u))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;u.name=_t(u.name,"Span name",this._config.maxAttributeValueLength,this._logger),u.status&&u.status.code!=="ok"&&u.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),u.status=c),u.startTime=Bt(u.startTime)??s.startTime,u.endTime=ws(Bt(u.endTime)??s.endTime,u.startTime);let p=[];for(let g of u.events)try{p.push({...g,name:_t(g.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:xr(g.timestamp,u.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return u.events=p,jd(u,t,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,o),u}catch(d){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",d),this._recordDrop(1,"beforeSpanSend failed"),null}}_keepSpanIdentity(e,t){(e.traceId!==t.traceId||e.spanId!==t.spanId||e.parentSpanId!==t.parentSpanId)&&this._logger.debug("beforeSpanSend changed a span identity field; keeping the original ids");try{Is(e,"traceId",t.traceId),Is(e,"spanId",t.spanId),Is(e,"parentSpanId",t.parentSpanId),Is(e,"traceState",t.traceState)}catch{return ES(e,t)}return e}_recordDrop(e,t){this._droppedSinceWarning+=e,this._dropReasons.add(t),Date.now()-this._lastDropWarningAt>=this._config.flushIntervalMs&&this._warnAboutDrops()}_warnAboutDrops(){this._droppedSinceWarning&&(this._lastDropWarningAt=Date.now(),this._logger.warn(`Dropping ${this._droppedSinceWarning} span(s): ${[...this._dropReasons].join("; ")}`),this._droppedSinceWarning=0,this._dropReasons.clear())}_encodeBatch(e){let t=[];for(let n of e)try{t.push(Vd(n,this._logger))}catch(s){this._logger.debug("Failed to encode a span; dropping it",s),this._recordDrop(1,"its attributes could not be encoded")}return t}_discardQueueIfConsentWithdrawn(){if(!this._instance.isDisabled&&!this._instance.optedOut)return 0;let e=this._queue.length;return this._queue=[],this._resetHeadBatchBudget(),this._recordDrop(e,"the user has opted out"),this._warnAboutDrops(),e}async _flushInner(){if(!this._queue.length)return 0;let e=this._discardQueueIfConsentWithdrawn();if(e)return e;let t=zd(Yd(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._config.maxAttributeValueLength),n=this._instance.getLibraryId(),s=this._instance.getLibraryVersion(),i=this._queue.length,o=0,a=1/0,c=this._generation;try{for(;i>0&&this._queue.length>0;){let l=this._discardQueueIfConsentWithdrawn();if(l)return o+l;let u=this._headBatchFailures>0?Math.min(this._maxExportBatchSize,this._headBatchSize):this._maxExportBatchSize,d=Math.max(1,Math.min(u,a,i,this._queue.length)),p=this._queue.slice(0,d),g=this._encodeBatch(p);if(!g.length){this._queue.splice(0,d),i-=d,o+=d,this._resetHeadBatchBudget();continue}let m=Cs()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),h=await this._instance._sendTracesBatch(qd(g,t,n,s,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(h),h.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._queue.splice(0,d),i-=d,o+=d,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(h.kind==="too-large"){if(d===1){this._queue.splice(0,1),i-=1,o+=1,this._recordDrop(1,"it is too large for the ingestion endpoint"),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget();continue}let E=Math.max(1,Math.floor(d/2));h.measuredLocally?a=E:this._maxExportBatchSize=E,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${E}`);continue}if(h.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=Pr(),this._headBatchSize=d,m&&(this._headBatchFailures++,this._headBatchChargeableAt=Cs()+this._nextFlushDelay()),this._headBatchFailures<Jd)return this._logger.debug("Span export failed; retrying on the next flush",h.error),o;if(this._queue.splice(0,d),i-=d,o+=d,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(d,`the ingestion endpoint failed ${Jd} times in a row`),this._retryAfter.isOpen())return o;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",h.error),this._queue.splice(0,d),i-=d,o+=d,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(d,"the ingestion endpoint rejected the batch")}return o}finally{this._warnAboutDrops()}}_flushInBackground(){this._backgroundFlush||(this._backgroundFlush=this.flush().catch(e=>{this._logger.debug("Background span flush failed",e)}).finally(()=>{this._backgroundFlush=void 0,this._armFlushTimerIfQueuedNoEarlierThan()}))}_armFlushTimerIfQueued(){this._flushTimer.pending||!this._queue.length||this._flushTimer.arm(this._nextFlushDelay())}_armFlushTimerIfQueuedNoEarlierThan(){this._queue.length&&this._flushTimer.armNoEarlierThan(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Or(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var Ur=class{active(){return this._active}with(e,t){let n=this._active;this._active=e;try{return t()}finally{this._active=n}}};var SS=5e3,yS=512,bS=2048,wS=128,TS=128,AS=128,vS=8192,RS=1e4,MS=36e5;function et(r,e){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:e}var Qd=["service.name","service.version","deployment.environment"];function CS(r){if(!(!r||typeof r!="object"||Array.isArray(r)))try{if(Qd.every(t=>!(t in r)||typeof r[t]=="string"))return r;let e={...r};for(let t of Qd)t in e&&typeof e[t]!="string"&&delete e[t];return e}catch{return}}function IS(r,e){if(!r)return[];let t=[r].flat().filter(s=>!!s),n=t.filter(s=>typeof s=="function");return n.length!==t.length&&e?.critical(`beforeSpanSend: ignoring ${t.length-n.length} of ${t.length} entries that are not functions. Spans export without them, so whatever they were redacting is not redacted.`),n}function ra(r,e,t){let n=Be({...e},CS(r?.resourceAttributes)),s=et(r?.maxExportBatchSize,yS);return{serviceName:n?.["service.name"]??r?.serviceName,serviceVersion:n?.["service.version"]??r?.serviceVersion,environment:n?.["deployment.environment"]??r?.environment,resourceAttributes:n,beforeSpanSend:IS(r?.beforeSpanSend,t),maxAttributesPerSpan:et(r?.maxAttributesPerSpan,wS),maxEventsPerSpan:et(r?.maxEventsPerSpan,TS),maxAttributesPerEvent:AS,maxAttributeValueLength:et(r?.maxAttributeValueLength,vS),flushIntervalMs:et(r?.flushIntervalMs,SS),maxExportBatchSize:s,maxQueueSize:Math.max(et(r?.maxQueueSize,bS),s),maxLiveSpans:et(r?.maxLiveSpans,RS),maxSpanAgeMs:et(r?.maxSpanAgeMs,MS)}}var na=require("node:fs"),tf=require("node:fs/promises"),ia=require("node:path"),rf=require("node:readline"),Ps=new G.ReduceableCache(25),$r=new G.ReduceableCache(20),oa=7,PS=1e3,OS=1e4,sa=10485760;async function nf(r,e=tf.open,t){let n={},s;try{s=process.cwd()}catch{}for(let a=r.length-1;a>=0;a--){let c=r[a],l=c?.filename;if(!c||typeof l!="string"||typeof c.lineno!="number"||FS(l)||NS(c)||!(0,ia.isAbsolute)(l)&&s===void 0)continue;n[l]||(n[l]=[]),n[l].push(c.lineno)}let i=Object.keys(n);if(i.length==0)return r;let o=[];for(let a of i){let c=sf(a,s);if(c===void 0||$r.get(c))continue;let l=n[a];if(!l)continue;l.sort((p,g)=>p-g);let u=$S(l);if(u.every(p=>US(c,p)))continue;let d=BS(Ps,c,{});o.push(DS(a,u,d,c,e,t))}return await Promise.all(o).catch(()=>{}),r&&r.length>0&&xS(r,Ps,s),Ps.reduce(),r}async function kS(r,e,t){let n,s=!1;try{n=await e(r,na.constants.O_RDONLY|na.constants.O_NONBLOCK);let i=await n.stat();return i.isFile()?i.size>sa?void t?.debug(`Skipping source context for oversized file ${r}: ${i.size} bytes exceeds ${sa}`):(s=!0,n):void 0}catch{return}finally{n&&!s&&await n.close().catch(()=>{})}}async function DS(r,e,t,n,s,i){let o=await kS(r,s,i);if(o===void 0)return void $r.set(n,1);let a=o;return new Promise(c=>{let l=!1;function u(w){l||(l=!0,w?.destroy(),a.close().then(c,c))}let d;try{d=a.createReadStream({autoClose:!1,start:0,end:sa-1})}catch{$r.set(n,1),u();return}let p;try{p=(0,rf.createInterface)({input:d})}catch{$r.set(n,1),u(d);return}let g=0,m=0,h=e[m];if(h===void 0)return void u(d);let E=h[0],_=h[1];function b(){$r.set(n,1),p.close(),p.removeAllListeners(),u(d)}d.on("error",b),p.on("error",b),p.on("close",()=>u(d)),p.on("line",w=>{if(g++,!(g<E)&&(t[g]=WS(w,0),g>=_)){if(m===e.length-1){p.close(),p.removeAllListeners();return}m++;let T=e[m];if(T===void 0){p.close(),p.removeAllListeners();return}E=T[0],_=T[1]}})})}function xS(r,e,t){for(let n of r)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let s=sf(n.filename,t),i=s===void 0?void 0:e.get(s);if(i===void 0)continue;LS(n.lineno,n,i)}}function LS(r,e,t){if(e.lineno===void 0||t===void 0)return;e.pre_context=[];for(let s=of(r);s<r;s++){let i=t[s];if(i===void 0)return void Zd(e);e.pre_context.push(i)}if(t[r]===void 0)return void Zd(e);e.context_line=t[r];let n=af(r);e.post_context=[];for(let s=r+1;s<=n;s++){let i=t[s];if(i===void 0)break;e.post_context.push(i)}}function Zd(r){delete r.pre_context,delete r.context_line,delete r.post_context}function FS(r){return r.startsWith("node:")||r.endsWith(".min.js")||r.endsWith(".min.cjs")||r.endsWith(".min.mjs")||r.startsWith("data:")}function NS(r){return r.lineno!==void 0&&r.lineno>OS||r.colno!==void 0&&r.colno>PS}function sf(r,e){return(0,ia.isAbsolute)(r)?JSON.stringify([null,r]):e===void 0?void 0:JSON.stringify([e,r])}function US(r,e){let t=Ps.get(r);if(t===void 0)return!1;for(let n=e[0];n<=e[1];n++)if(t[n]===void 0)return!1;return!0}function $S(r){if(!r.length)return[];let e=0,t=r[0];if(typeof t!="number")return[];let n=ef(t),s=[];for(;;){if(e===r.length-1){s.push(n);break}let i=r[e+1];if(typeof i!="number")break;i<=n[1]?n[1]=i+oa:(s.push(n),n=ef(i)),e++}return s}function ef(r){return[of(r),af(r)]}function of(r){return Math.max(1,r-oa)}function af(r){return r+oa}function BS(r,e,t){let n=r.get(e);return n===void 0?(r.set(e,t),t):n}function WS(r,e){let t=r,n=t.length;if(n<=150)return t;e>n&&(e=n);let s=Math.max(e-60,0);s<5&&(s=0);let i=Math.min(s+140,n);return i>n-5&&(i=n),i===n&&(s=Math.max(i-140,0)),t=t.slice(s,i),s>0&&(t=`...${t}`),i<n&&(t+="..."),t}var Ht=require("path");function cf(r=process.cwd()){let e=Ht.sep==="\\",t=s=>e?s.replace(/\\/g,"/"):s,n=t(r);return async s=>{for(let i of s)!i.filename||i.filename.startsWith("node:")||i.filename.startsWith("data:")||(0,Ht.isAbsolute)(i.filename)&&(i.filename=t((0,Ht.relative)(n,t(i.filename))));return s}}var lf="5.55.1";var He={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var tt=class r{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e,t={}){let n=this._flags[e];return this._recordAccess(e),n?.enabled??t.defaultValue??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!!t)return t.enabled?t.variant??!0:!1}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let n=this._flags[t];n&&(e[t]=n)}return this._cloneWith(e)}only(e){let t={},n=[];for(let s of e){let i=this._flags[s];i?t[s]=i:n.push(s)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[n,s]of Object.entries(this._flags)){let i=s.enabled===!1?!1:s.variant??!0;e[`$feature/${n}`]=i,s.enabled&&t.push(n)}return t.length>0&&(t.sort(),e.$active_feature_flags=t),e}_cloneWith(e){return new r({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId===""||this._isSlice&&!(e in this._flags))return;let t=this._flags[e],n=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,s={$feature_flag:e,$feature_flag_response:n,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};t?.hasExperiment!==void 0&&(s.$feature_flag_has_experiment=t.hasExperiment),t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(s.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let i=[];this._errorsWhileComputing&&i.push(He.ERRORS_WHILE_COMPUTING),this._quotaLimited&&i.push(He.QUOTA_LIMITED),t===void 0&&i.push(He.FLAG_MISSING),i.length>0&&(s.$feature_flag_error=i.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:s})}};var HS=6e4;function uf(r){return r==="client"||r==="server"?r:"all"}function jS(r,e){return r===e||r==="all"||e==="all"}var jt=class r extends Error{constructor(e){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,r.prototype)}};function KS(r,e){r.name=e.name,Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype)}var xe=class r extends Error{constructor(e){super(e),KS(this,r)}},Os=class{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:n,timeout:s,host:i,customHeaders:o,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollerStopped=!1,this.filteredOutFlagKeys=new Set,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=s,this.projectApiKey=n,this.host=i,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=o,this.onLoad=a.onLoad,this.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){this.debugMode&&e()}withEvaluationSnapshot(e){return e.definitions?e:{...e,evaluationCache:{},definitions:{featureFlagsByKey:this.featureFlagsByKey,groupTypeMapping:this.groupTypeMapping,cohorts:this.cohorts,filteredOutFlagKeys:this.filteredOutFlagKeys,propertyMatchingVersion:this.propertyMatchingVersion}}}createEvaluationContext(e,t={},n={},s={},i={}){return{distinctId:e,groups:t,personProperties:n,groupProperties:s,evaluationCache:i}}async getFeatureFlag(e,t,n={},s={},i={}){await this.loadFeatureFlags();let o,a;if(!this.loadedSuccessfullyOnce)return o;if(a=this.featureFlagsByKey[e],a!==void 0){let c=this.createEvaluationContext(t,n,s,i);try{o=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${o}`))}catch(l){l instanceof xe||l instanceof v?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${e}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${e}: ${l}`))}}return o}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let n={},s={},i=this.featureFlags.length==0,o=t?t.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a=this.withEvaluationSnapshot({...e,definitions:void 0});return await Promise.all(o.map(async c=>{try{let{value:l,payload:u}=await this.computeFlagAndPayloadLocally(c,a,{skipLoadCheck:!0});n[c.key]=l,u&&(s[c.key]=u)}catch(l){l instanceof xe||l instanceof v?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${c.key}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${l}`)),i=!0}})),{response:n,payloads:s,fallbackToFlags:i}}async computeFlagAndPayloadLocally(e,t,n={}){let{matchValue:s,skipLoadCheck:i=!1}=n;if(this.loadedSuccessfullyOnce&&(t=this.withEvaluationSnapshot(t)),i||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};t=this.withEvaluationSnapshot(t),e=t.definitions.featureFlagsByKey[e.key]??e;let o;o=s!==void 0?s:await this.computeFlagValueLocally(e,t);let a=Wo(e.filters?.payloads,o);return{value:o,payload:a}}async computeFlagValueLocally(e,t){let{distinctId:n,groups:s,personProperties:i,groupProperties:o}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new v("Flag has experience continuity enabled");let c=(e.filters||{}).aggregation_group_type_index;if(c!=null){let l=t.definitions.groupTypeMapping[String(c)];if(!l)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${e.key}`)),new v("Flag has unknown group type index");if(!(l in s))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${e.key} without group names passed in`)),!1;e.bucketing_identifier==="device_id"&&(i?.$device_id===void 0||i?.$device_id===null||i?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${e.key}`));let u=o[l];return await this.matchFeatureFlagProperties(e,s[l],u,t)}{let l=this.getBucketingValueForFlag(e,n,i);if(l===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${e.key} without $device_id, falling back to server evaluation`)),new v(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,l,i,t)}}getBucketingValueForFlag(e,t,n){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let s=n?.$device_id;return s==null||s===""?void 0:s}return t}async evaluateFlagDependency(e,t,n){let{evaluationCache:s}=n,i=e.key;if(!n.definitions.featureFlagsByKey)throw new v("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new v(`Flag dependency property for '${i}' is missing required 'dependency_chain' field`);let o=e.dependency_chain;if(!Array.isArray(o))throw new v(`Flag dependency property for '${i}' has an invalid 'dependency_chain' (expected array, got ${typeof o})`);if(o.length===0)throw new v(`Circular dependency detected for flag '${i}' (empty dependency chain)`);for(let c of o){if(!(c in s)){let u=n.definitions.featureFlagsByKey[c];if(u)if(u.active)try{let d=await this.computeFlagValueLocally(u,n);s[c]=d}catch(d){throw new v(`Error evaluating flag dependency '${c}' for flag '${i}': ${d}`)}else s[c]=!1;else if(n.definitions.filteredOutFlagKeys.has(c))s[c]=!1;else throw new v(`Missing flag dependency '${c}' for flag '${i}'`)}if(s[c]==null)throw new v(`Dependency '${c}' could not be evaluated`)}let a=s[i];return this.flagEvaluatesToExpectedValue(e.value,a)}flagEvaluatesToExpectedValue(e,t){return typeof e=="boolean"?e===t||typeof t=="string"&&t!==""&&e===!0:typeof e=="string"?t===e:!1}async matchFeatureFlagProperties(e,t,n,s){s=this.withEvaluationSnapshot(s);let i=e.filters||{},o=await $o(i.holdout,t);if(o!==void 0)return o;let a=i.groups||[],c=i.aggregation_group_type_index,l=i.early_exit??!1,{groups:u,groupProperties:d}=s,p=!1,g;for(let m of a)try{let h=m.aggregation_group_type_index!==void 0?m.aggregation_group_type_index:c,E=n,_=t;if(h!==c&&h!=null){let w=s.definitions.groupTypeMapping[String(h)];if(!w||!(w in u)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${h} not available`));continue}if(!(w in d)){p=!0;continue}E=d[w],_=u[w]}let b=await this.isConditionMatch(e,_,m,E,s);if(b==="match"){let w=m.variant,T=i.multivariate?.variants||[];g=w&&T.some(M=>M.key===w)?w:await this.getMatchingVariant(e,_)||!0;break}if(l&&b==="out_of_rollout_bound"){if(p)break;return!1}}catch(h){if(h instanceof xe)throw h;if(h instanceof v)p=!0;else throw h}if(g!==void 0)return g;if(p)throw new v("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,n,s,i){i=this.withEvaluationSnapshot(i);let o=i.definitions,a=n.rollout_percentage,c=l=>{this.logMsgIfDebug(()=>console.warn(l))};if((n.properties||[]).length>0){for(let l of n.properties){let u=l.type,d=!1;if(u==="cohort"){let p=await ff(l,s,o.cohorts,this.debugMode,g=>this.evaluateFlagDependency(g,s,i),o.propertyMatchingVersion);d=l.operator==="not_in"?!p:p}else d=u==="flag"?await this.evaluateFlagDependency(l,s,i):df(l,s,c,o.propertyMatchingVersion);if(!d)return"no_match"}if(a==null)return"match"}return a!=null&&await Rr(e.key,t)>a/100?"out_of_rollout_bound":"match"}async getMatchingVariant(e,t){return Bo(e.key,t,e.filters?.multivariate?.variants||[])}variantLookupTable(e){return hs(e.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(e){if(!this.evaluationContexts||this.evaluationContexts.length===0)return e;let t=new Set(this.evaluationContexts);return e.filter(n=>{let s=n.evaluation_contexts??n.evaluation_tags;return!s||s.length===0?!0:s.some(i=>t.has(i))})}getEvaluationRuntimeForFlag(e){let t=this.featureFlagsByKey[e];return t?uf(t.evaluation_runtime):void 0}getFlagKeysByEvaluationRuntime(e){return this.featureFlags.filter(t=>jS(uf(t.evaluation_runtime),e)).map(t=>t.key)}updateFlagState(e){let t=this.filterFlagsByEvaluationContexts(e.flags);this.featureFlags=t,this.featureFlagsByKey=t.reduce((s,i)=>(s[i.key]=i,s),{});let n=new Set(t.map(s=>s.key));this.filteredOutFlagKeys=new Set(e.flags.filter(s=>!n.has(s.key)).map(s=>s.key)),this.groupTypeMapping=e.group_type_mapping??e.groupTypeMapping??{},this.cohorts=e.cohorts,this.propertyMatchingVersion=e.property_matching_version??e.propertyMatchingVersion,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.((e.minimal_flag_called_events??e.minimalFlagCalledEvents)===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter(n=>n.ensure_experience_continuity);t.length>0&&console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();return t?(this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags),!0):!1}catch(t){return this.onError?.(new Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(!(this.loadedSuccessfullyOnce&&!e))return!e&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(t=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){let e=this.pollingInterval??3e4;return this.shouldBeginExponentialBackoff?Math.min(HS,e*2**this.backOffCount):e}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0);try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!e&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new jt(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.propertyMatchingVersion=void 0,this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new jt(`Your secret key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new jt(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await t.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let s=n.group_type_mapping||{},i=n.minimal_flag_called_events===!0,o={flags:n.flags??[],group_type_mapping:s,cohorts:n.cohorts||{},minimal_flag_called_events:i,property_matching_version:n.property_matching_version,propertyMatchingVersion:n.property_matching_version,groupTypeMapping:s,minimalFlagCalledEvents:i};if(this.updateFlagState(o),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(o)}catch(a){this.onError?.(new Error(`Failed to store in cache: ${a}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(e){e instanceof jt&&this.onError?.(e)}finally{!this.pollerStopped&&this.pollingInterval!==null&&(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}getPersonalApiKeyRequestOptions(e="GET",t){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return t&&(n["If-None-Match"]=t),{method:e,headers:n}}async _requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=te(()=>{i.abort()},this.timeout),t.signal=i.signal}let s=()=>clearTimeout(n);try{let i=this.fetch,o=await i(e,t);return o.status!==200?(s(),o):{status:o.status,headers:o.headers,body:o.body,text:async()=>{try{return await o.text()}finally{s()}},json:async()=>{try{return await o.json()}finally{s()}}}}catch(i){throw s(),i}}async stopPoller(e=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let t=this.cacheProvider.shutdown();t instanceof Promise&&await Qe(t,e,()=>{throw new Error(`Cache shutdown timeout after ${e}ms`)})}catch(t){this.onError?.(new Error(`Error during cache shutdown: ${t}`))}}};function df(r,e,t,n){return Uo(r,e,{warnFunction:t,propertyMatchingVersion:n})}function GS(r,e){if(!(r in e))throw new xe(`cohort ${r} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function ff(r,e,t,n=!1,s,i){let o=String(r.value);GS(o,t);let a=t[o];return pf(a,e,t,n,s,i)}async function pf(r,e,t,n=!1,s,i){if(!r)return!0;let o=r.type,a=r.values;if(!a||a.length===0)return!0;let c=!1;if("values"in a[0]){for(let l of a)try{let u=await pf(l,e,t,n,s,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof xe)throw u;if(u instanceof v)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new v("Can't match cohort without a given cohort property value");return o==="AND"}for(let l of a)try{let u;if(l.type==="cohort")u=await ff(l,e,t,n,s,i);else if(l.type==="flag"){if(!s)throw new v(`Flag dependency '${l.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await s(l)}else u=df(l,e,void 0,i);let d=l.negation||!1;if(o==="AND"){if(!u&&!d||u&&d)return!1}else if(u&&!d||!u&&d)return!0}catch(u){if(u instanceof xe)throw u;if(u instanceof v)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new v("can't match cohort without a given cohort property value");return o==="AND"}var zS=["--unhandled-rejections","--unhandled_rejections"],VS=new Set(["throw","strict","warn","warn-with-error-code","none"]),YS=[...globalThis.process?.execArgv??[]],qS=globalThis.process?.env?.NODE_OPTIONS;function JS(r){let e=[],t="",n=!1;for(let s=0;s<r.length;s++){let i=r[s];i==="\\"&&n&&s+1<r.length?t+=r[++s]:i!==" "||n?i==='"'?n=!n:t+=i:t&&(e.push(t),t="")}return t&&e.push(t),e}function gf(r){let e;for(let t=0;t<r.length;t++){let n=r[t],s=zS.find(o=>n===o||n.startsWith(`${o}=`));if(!s)continue;let i=n===s?r[++t]:n.slice(s.length+1);VS.has(i)&&(e=i)}return e}function XS(r=YS,e=qS){return gf(r)??gf(JS(e??""))??"throw"}var mf=XS();function hf(r,e,t){r(e,{mechanism:{type:t==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function QS(r,e){let t=!1;return Object.assign((n,s)=>{let i=global.process.listeners("uncaughtException").filter(o=>o.name!=="domainUncaughtExceptionClear"&&o._posthogErrorHandler!==!0).length;hf(r,n,s),!t&&i===0&&(t=!0,e(n))},{_posthogErrorHandler:!0})}function _f(r,e,t=mf){let n=globalThis.process;if(n){if(t==="strict")return void n.on("uncaughtExceptionMonitor",(s,i)=>hf(r,s,i));n.on("uncaughtException",QS(r,e))}}function Ef(r,e=mf){let t=globalThis.process;!t||e==="throw"||e==="strict"||e==="warn-with-error-code"||t.on("unhandledRejection",n=>{r(n,{mechanism:{type:"onunhandledrejection",handled:!1}})})}var ZS=2e3,aa=class r{constructor(e,t,n){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new Jn({...Cu(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return ur(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,n,s,i){let o={...i},a=e.buildFromUnknown(t,n);a.$exception_list=await e.modifyFrames(a.$exception_list);let c=G.getInjectedReleaseId();return c&&(o.$release_id=c),{event:"$exception",distinctId:s,properties:{...a,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(_f(this.onException.bind(this),this.onFatalError.bind(this)),Ef(this.onException.bind(this)))}onException(e,t){this.client.addPendingPromise((async()=>{if(!r.isPreviouslyCapturedError(e)){let n=await r.buildEventMessage(this.client.getErrorPropertiesBuilder(),e,t),i=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(i)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:i}):this.client._capturePreparedEvent(n,!1)}})())}async onFatalError(e){console.error(e),await this.client.shutdown(ZS),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},St=aa;var ks=class{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}};function ey(r){return r==="v0"||r==="v1"}function Sf(){let r="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return ey(r)?r:"v0"}var ty="$ai_",Br="analytics";function yf(r){return typeof r.event=="string"&&r.event.startsWith(ty)}var Kt=class r extends Error{constructor({requestId:e,drops:t,retryExhausted:n,cause:s}){super(r.buildMessage(e,t,n,s)),this.name="CaptureV1Error",this.requestId=e,this.drops=t,this.retryExhausted=n,this.cause=s}static buildMessage(e,t,n,s){let i=`Capture V1 batch ${e} did not fully deliver: ${t.length} dropped, ${n.length} undelivered`;return s instanceof Error&&(i+=` (${s.message})`),i}};function ca(r){if(typeof r=="boolean")return r;if(typeof r=="number")return r!==0;if(typeof r=="string"){let e=r.trim().toLowerCase();if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1}}function ry(r){return typeof r=="string"?r:void 0}var ny=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:ca},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:ca},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:ca},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:ry}],sy=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function iy(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function oy(r){if(typeof r=="string"){let t=new Date(r);if(Number.isNaN(t.getTime()))return new Date().toISOString();let n=t.toISOString(),s=r.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1];return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}if(r instanceof Date)return Number.isNaN(r.getTime())?new Date().toISOString():r.toISOString();let e=r==null?new Date:new Date(r);return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString()}function bf(r,e,t){t!==void 0&&!(e in r)&&(r[e]=t)}function ay(r){let t={...iy(r.properties)?r.properties:{}},n={};for(let{property:i,optionKey:o,coerce:a}of ny)if(i in t){let c=a(t[i]);c!==void 0&&(n[o]=c),delete t[i]}let s={};for(let{property:i,field:o}of sy)if(i in t){let a=t[i];typeof a=="string"&&(s[o]=a),delete t[i]}return delete t.$lib,delete t.$lib_version,bf(t,"$set",r.$set),bf(t,"$set_once",r.$set_once),{event:String(r.event??""),uuid:String(r.uuid??""),distinct_id:String(r.distinct_id??""),timestamp:oy(r.timestamp),...s,options:n,properties:t}}function wf(r,{createdAt:e,historicalMigration:t}){let n={created_at:e,batch:r.map(ay)};return t&&(n.historical_migration=!0),n}var cy="/i/v1/analytics/events",ly=3e4,uy=new Set([408,500,502,503,504]),Ds=class{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??ly,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??(n=>new Promise(s=>te(s,n))),this.generateRequestId=t.generateRequestId??ee,this.compress=t.compress??Tr}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:s}=wf(e,{createdAt:n,historicalMigration:this.config.historicalMigration}),i=`${this.config.host}${cy}`,o=[],a=s,c=Math.max(1,this.config.maxAttempts);for(let l=1;l<=c;l++){let u=l===c,d=Je({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),p,g;try{p=await this.sendOnce(i,d,l,t);let{response:m,signal:h}=p,{status:E}=m;if(E<200||E>=300)if(!u&&uy.has(E)){let _=this.parseRetryAfter(m);await p.waitFor(p.cancelBody()).catch(()=>{}),g=this.backoffDelay(l,_)}else{let _=await this.buildHttpError(m,E,p.waitFor);return this.surfaceBatchFailure(t,o,a,_)}else{let _;try{_=await p.waitFor(this.parseResponse(m))}catch(T){if(h.aborted)throw T;return this.surfaceBatchFailure(t,o,a,new Error(`Capture V1 returned an unparseable ${E} response body`))}let b=this.classify(a,_,o);if(b.length===0)return this.surfacePartialDrops(t,o);if(u)return void this.onError(new Kt({requestId:t,drops:o,retryExhausted:b.map(T=>T.uuid)}));a=b;let w=this.parseRetryAfter(m);g=this.backoffDelay(l,w)}}catch(m){if(p&&!p.signal.aborted)throw m;if(u)return this.surfaceBatchFailure(t,o,a,m);g=this.backoffDelay(l)}finally{p?.cleanup()}g!==void 0&&await this.sleep(g)}}async sendOnce(e,t,n,s){let i=this.buildHeaders(n,s),o=t;if(this.config.compressionEnabled){let d=await this.compress(t,this.config.isDebug);d!==null&&(o=d,i["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",l,u=new Promise((d,p)=>{l=te(()=>{let g=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);g.name="AbortError",p(g),a.abort(g)},this.config.requestTimeoutMs)});try{let d=this.fetchFn(e,{method:"POST",headers:i,body:o,signal:a.signal}),p=!1;d.then(_=>{a.signal.aborted&&!p&&this.cancelBody(_)}).catch(()=>{});let g=await Promise.race([d,u]);p=!0,c="while reading the response body";let m=!1,h,E=()=>h??=this.cancelBody(g);return{response:g,signal:a.signal,waitFor:_=>Promise.race([_,u]),cancelBody:E,cleanup:()=>{m||(m=!0,clearTimeout(l),a.signal.aborted&&E())}}}catch(d){throw clearTimeout(l),d}}buildHeaders(e,t){let n=`${this.config.libraryId}/${this.config.libraryVersion}`,s={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":n,"PostHog-Attempt":String(e),"PostHog-Request-Id":t,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};return this.config.userAgent&&(s["User-Agent"]=this.config.userAgent),s}classify(e,t,n){let s=t.results??{},i=[];for(let o of e){let a=s[o.uuid];a&&(a.result==="drop"?n.push({uuid:o.uuid,details:a.details??void 0}):a.result==="retry"&&i.push(o))}return i}backoffDelay(e,t){let n=Math.min(this.config.initialRetryDelayMs*2**(e-1),this.maxBackoffMs);return t===void 0?n:Math.max(n,Math.min(t,this.maxBackoffMs))}parseRetryAfter(e){let t=e.headers?.get("Retry-After");if(!t)return;let n=t.trim();if(/^\d+$/.test(n)){let o=parseInt(n,10);return Number.isFinite(o)&&o>0?1e3*o:void 0}let s=Date.parse(n);if(Number.isNaN(s))return;let i=s-this.now();return i>0?i:void 0}async parseResponse(e){let t=await e.text(),n=JSON.parse(t);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("unexpected response shape");let s=n.results;if(s!==void 0&&(typeof s!="object"||s===null||Array.isArray(s)))throw new Error("unexpected results shape");return{results:s??{}}}async buildHttpError(e,t,n){let s="";try{s=(await n(e.text())).slice(0,512)}catch{}let i=s?`: ${s}`:"";return new Error(`Capture V1 request failed with HTTP ${t}${i}`)}surfaceBatchFailure(e,t,n,s){this.onError(new Kt({requestId:e,drops:t,retryExhausted:n.map(i=>i.uuid),cause:s}))}surfacePartialDrops(e,t){t.length>0&&this.onError(new Kt({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){try{await e.body?.cancel()}catch{}}};var yt="ai-capture",xs="/i/v0/ai/batch/";var fy=new TextEncoder;function ua(r){return fy.encode(Je(r)).length}function Tf(r,e=8388608,t=5242880){let n=[],s=[],i=[],o=0;for(let a of r){if(a===void 0)continue;let c=ua(a);if(c>e){s.push({event:typeof a.event=="string"?a.event:"unknown",bytes:c});continue}i.length>0&&o+c>t&&(n.push(i),i=[],o=0),i.push(a),o+=c}return i.length>0&&n.push(i),{batches:n,dropped:s}}var py=100,Af=3e4,gy=5e4,my=50,hy=500,_y="https://us.i.posthog.com",vf=new Set;function Fs(r,e){vf.has(r)||(vf.add(r),console.warn(`[PostHog] ${e}`))}function Ey(r){return typeof r=="string"?r.trim():""}function Sy(r){return(typeof r=="string"?r.trim():"")||void 0}function yy(r){return(typeof r=="string"?r.trim():"")||_y}function by(r){return(Array.isArray(r)?r:[r]).filter(t=>typeof t=="string"&&t.trim().length>0)}function wy(r){if(!r)return{};let e={};for(let[n,s]of Object.entries(r))e[`$feature/${n}`]=s;let t=Object.keys(r).filter(n=>r[n]!==!1).sort();return t.length>0&&(e.$active_feature_flags=t),e}var Ns=class extends Ar{get distinctIdHasSentFlagCalls(){return Object.fromEntries(this._distinctIdHasSentFlagCalls)}set distinctIdHasSentFlagCalls(e){this._distinctIdHasSentFlagCalls=new Map(Object.entries(e??{}))}constructor(e,t={}){let n=Ey(e),s={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5e3,host:yy(t.host),personalApiKey:Sy(t.secretKey??t.personalApiKey)};if(super(n,s),this._memoryStorage=new ks,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=s,this.captureMode=Sf(),this.enableFullAiCapture=s.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof s.featureFlagsPollingInterval=="number"?Math.max(s.featureFlagsPollingInterval,py):s.featureFlagsPollingInterval===null?null:Af,typeof s.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(s.waitUntilDebounceMs,0)),typeof s.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(s.waitUntilMaxWaitMs,0)),!this.disabled&&s.personalApiKey){if(s.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');s.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new Os({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:s.personalApiKey,projectApiKey:n,timeout:s.requestTimeout??1e4,host:this.host,fetch:s.fetch,onError:o=>{this._events.emit("error",o)},onLoad:o=>{this._events.emit("localEvaluationFlagsLoaded",o)},onMinimalFlagCalledEvents:o=>{this._minimalFlagCalledEvents=o},customHeaders:this.getCustomHeaders(),cacheProvider:s.flagDefinitionCacheProvider,strictLocalEvaluation:s.strictLocalEvaluation,evaluationContexts:s.evaluationContexts??s.evaluationEnvironments}))}this.errorTracking=new St(this,s,this._logger),this._distinctIdHasSentFlagCalls=new Map,this.maxCacheSize=s.maxCacheSize||gy}enqueue(e,t,n,s){super.enqueue(e,t,n,s),this.scheduleDebouncedFlush()}_flushEventsAndSpans(e=!1){let t=this.flushWithPendingPromises();return!this._traces||e&&this._traces.throttled?t:pr([t,this._traces.flush().catch(()=>{})]).then(([n])=>{if(n.status==="rejected")throw n.reason})}flushAutomatic(){return this._flushKeepingRuntimeAlive(!0)}async flush(){return this._flushKeepingRuntimeAlive(!1)}_flushKeepingRuntimeAlive(e){let t=this._flushEventsAndSpans(e),n=this.options.waitUntil;if(n&&!this._waitUntilCycle)try{n(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let e=this.options.waitUntil;if(!e||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let o,a=new Promise(c=>{o=c});try{e(a)}catch{return}this._waitUntilCycle={resolve:o,startedAt:Date.now(),timer:void 0}}let t=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??hy,s=t>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),s)return void this.resolveWaitUntilFlush();let i=this.options.waitUntilDebounceMs??my;this._waitUntilCycle.timer=te(()=>{this.resolveWaitUntilFlush()},i)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;return e&&(clearTimeout(e.timer),this._waitUntilCycle=void 0),e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this._flushEventsAndSpans()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&yf(e)?"ai":Br}persistedQueueKeyForRoute(e){return e===yt?ne.AiCaptureQueue:e==="ai"?ne.AiQueue:ne.Queue}getActiveQueueRoutes(){let e=this.captureMode==="v1"?[Br,"ai"]:[Br];return this._aiCaptureRouteActive&&e.push(yt),e}getBatchEndpointPath(e){return e===yt?xs:super.getBatchEndpointPath(e)}async sendBatch(e,t,n=Br){if(n===yt)return this.sendAiCaptureBatch(e,t);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(e,t,n);let s=e.filter(i=>i!==void 0);await this.getV1Sender().sendV1Batch(s)}async sendAiCaptureBatch(e,t){let{batches:n,dropped:s}=Tf(e);for(let{event:i,bytes:o}of s){let a=`Event ${i} (${o} bytes) exceeds the ${8388608/1048576}MiB limit for ${xs}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let i of n)await this.sendAiSubBatch(i,t)}async sendAiSubBatch(e,t){try{await super.sendBatch(e,t,yt)}catch(n){if(!$t(n))throw n;if(e.length===1){let[i]=e,a=`Event ${typeof i.event=="string"?i.event:"unknown"} (${ua(i)} bytes) was rejected with 413 by ${xs} on its own, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a));return}let s=Math.ceil(e.length/2);await this.sendAiSubBatch(e.slice(0,s),t),await this.sendAiSubBatch(e.slice(s),t)}}getV1Sender(){return this._v1Sender||(this._v1Sender=new Ds({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3e3,isDebug:this.isDebug},{fetch:(e,t)=>this.fetch(e,t),onError:e=>this._events.emit("error",e),compress:e=>this.compressPayload(e)})),this._v1Sender}getLibraryVersion(){return lf}get metrics(){return this._metrics||(this._metrics=new Dr(this,Es(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new Ur}hostResourceAttributes(){return{}}get _spanContextManager(){return this._spanContext||(this._spanContext=this.initializeSpanContextManager()),this._spanContext}get _tracesPipeline(){if(this.options.traces)return this._traces||(this._traces=new Nr(this,ra(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let e=this.context?.get();return{distinctId:e?.distinctId,sessionId:e?.sessionId}}startSpan(e,t){return this._tracesPipeline?.startSpan(e,t)??Ze(t,this._spanContextManager.active())}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this._tracesPipeline;return o?s?o.withSpan(e,s,i):o.withSpan(e,i):Fr(this._spanContextManager,Ze(s,this._spanContextManager.active()),i)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let e=super.getCommonEventProperties();return(this.options.isServer??!0)&&(e.$is_server=!0),e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,n){typeof e=="string"&&this._logger.warn(t),e.event==="$exception"&&!e._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(e,t,n,s,i){return this.addPendingPromise(this._prepareEventMessage(t,s).then(({distinctId:o,event:a,properties:c,options:l})=>{let u={timestamp:l.timestamp,disableGeoip:l.disableGeoip,uuid:l.uuid},d={distinctId:o,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(e,d,u,i):this.enqueue(e,d,u,i)}).catch(o=>{o&&console.error(o)}))}_capturePreparedEvent(e,t){return this._sendPreparedEvent("capture",e,t)}capture(e){this._warnIfInvalidCapture(e,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(e,!1)}async captureImmediate(e){return this._warnIfInvalidCapture(e,"Called captureImmediate() with a string as the first argument when an object was expected.","Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this._capturePreparedEvent(e,!0)}captureAi(e){if(this.disabled)return;let t=mt(e.uuid,ee);return this._sendPreparedAiEvent({...e,uuid:t},!1),t}async captureAiImmediate(e){if(this.disabled)return;let t=mt(e.uuid,ee);return await this._sendPreparedAiEvent({...e,uuid:t},!0),t}_sendPreparedAiEvent(e,t){return typeof e?.event=="string"&&!e.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${e.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",e,t,void 0,yt)}identify({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:n={}}){if(Object.keys(t).length===0&&Object.keys(n).length===0)return;let s={};Object.keys(t).length>0&&(s.$set=t),Object.keys(n).length>0&&(s.$set_once=n),this.capture({distinctId:e,event:"$set",properties:s})}unsetPersonProperties({distinctId:e,properties:t}){let n=by(t);n.length!==0&&this.capture({distinctId:e,event:"$set",properties:{$unset:n}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}getFeatureFlagEvaluationRuntime(e){return this.featureFlagsPoller?.getEvaluationRuntimeForFlag(e)}getFeatureFlagKeysByEvaluationRuntime(e){return this.featureFlagsPoller?.getFlagKeysByEvaluationRuntime(e)??[]}async waitForLocalEvaluationReady(e=Af){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(t=>{let n=setTimeout(()=>{s(),t(!1)},e),s=this._events.on("localEvaluationFlagsLoaded",i=>{clearTimeout(n),s(),t(i>0)})})}_resolveDistinctId(e,t){return typeof e=="string"?{distinctId:e,options:t}:{distinctId:this.context?.get()?.distinctId,options:e}}async _getFeatureFlagResult(e,t,n={},s){if(this.disabled)return void this._logger.warn("The client is disabled");let i=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&e in this._flagOverrides){let y=this._flagOverrides[e];if(y===void 0)return;let A=this._payloadOverrides?.[e];return{key:e,enabled:y!==!1,variant:typeof y=="string"?y:void 0,payload:A}}let{groups:o,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=n,d=this.addLocalPersonAndGroupProperties(t,o,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(t,o,this.personPropertiesForLocalEvaluation(t,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g,m=!1,h,E,_,b,w,T,M;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let y=this.featureFlagsPoller?.featureFlagsByKey[e];if(y)try{let A=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(y,p,{matchValue:s});if(A){m=!0;let S=A.value;b=y.id,T="Evaluated locally",M=y.has_experiment,g={key:e,enabled:S!==!1,variant:typeof S=="string"?S:void 0,payload:A.payload??void 0,reason:T,reasonCode:y.active===!1?"flag_disabled":void 0}}}catch(A){if(A instanceof xe||A instanceof v)this._logger?.info(`${A.name} when computing flag locally: ${e}: ${A.message}`);else throw A}}if(!m&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,a,[e]);if(y===void 0)_=He.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,h=y.requestId,E=y.evaluatedAt;let A=[];y.errorsWhileComputingFlags&&A.push(He.ERRORS_WHILE_COMPUTING),y.quotaLimited?.includes("feature_flags")&&A.push(He.QUOTA_LIMITED);let S=y.flags[e];if(S===void 0)A.push(He.FLAG_MISSING);else{b=S.metadata?.id,w=S.metadata?.version,T=S.reason?.description??S.reason?.code,M=S.metadata?.has_experiment;let P;if(S.metadata?.payload!==void 0)try{P=JSON.parse(S.metadata.payload)}catch{P=S.metadata.payload}g={key:e,enabled:S.enabled,variant:S.variant??void 0,payload:P,reason:T,reasonCode:S.reason?.code}}A.length>0&&(_=A.join(","))}}if(i){let y=g===void 0?void 0:g.enabled===!1?!1:g.variant??!0,A={$feature_flag:e,$feature_flag_response:y,$feature_flag_id:b,$feature_flag_version:w,$feature_flag_reason:T,locally_evaluated:m,[`$feature/${e}`]:y,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():E};if(M!==void 0&&(A.$feature_flag_has_experiment=M),m&&this.featureFlagsPoller){let S=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();S!==void 0&&(A.$feature_flag_definitions_loaded_at=S)}_&&(A.$feature_flag_error=_),this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:y,groups:o,disableGeoip:a,properties:A})}return g!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides&&(g={...g,payload:this._payloadOverrides[e]}),g}async getFeatureFlag(e,t,n){Fs("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(s!==void 0)return s.enabled===!1?!1:s.variant??!0}async getFeatureFlagPayload(e,t,n,s){if(Fs("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&e in this._payloadOverrides)return this._payloadOverrides[e];let i=await this._getFeatureFlagResult(e,t,{...s,sendFeatureFlagEvents:!1},n);if(i!==void 0)return i.payload??null}async getFeatureFlagResult(e,t,n){let{distinctId:s,options:i}=this._resolveDistinctId(t,n);return s?this._getFeatureFlagResult(e,s,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let t=await this._requestRemoteConfigPayload(e);if(!t)return;let n=await t.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(e,t,n){Fs("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return s===void 0?void 0:s.enabled===!1?!1:!!(s.variant??!0)||!1}async getAllFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);return n?(await this.getAllFlagsAndPayloads(n,s)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{featureFlags:{},featureFlagPayloads:{}};let{groups:i,disableGeoip:o,flagKeys:a}=s||{},{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},d=this.addLocalPersonAndGroupProperties(n,i,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),m={},h={},E=!0;if(g&&(m=g.response,h=g.payloads,E=g.fallbackToFlags),E&&!c){let _=await super.getFeatureFlagsAndPayloadsStateless(p.distinctId,p.groups,l,u,o,a);m={...m,..._.flags||{}},h={...h,..._.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}async evaluateFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:i,disableGeoip:o}=s||{},a=s?.flagKeys??void 0;if(a?.length===0)return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:{}});let{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},d=this.addLocalPersonAndGroupProperties(n,i,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=a?new Set(a):void 0,m={},h,E,_=!1,b=!1,w=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),T=new Set;if(w)for(let[y,A]of Object.entries(w.response)){let S=this.featureFlagsPoller?.featureFlagsByKey[y];m[y]={key:y,enabled:A!==!1,variant:typeof A=="string"?A:void 0,payload:w.payloads[y],id:S?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:S?.has_experiment},T.add(y)}let M=g!==void 0&&Array.from(g).some(y=>this.featureFlagsPoller?.featureFlagsByKey[y]===void 0);if((w?w.fallbackToFlags||M:!0)&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,o,a);if(y){this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,h=y.requestId,E=y.evaluatedAt,_=!!y.errorsWhileComputingFlags,b=Array.isArray(y.quotaLimited)&&y.quotaLimited.includes("feature_flags");for(let[A,S]of Object.entries(y.flags)){if(T.has(A))continue;let P;if(S.metadata?.payload!==void 0)try{P=JSON.parse(S.metadata.payload)}catch{P=S.metadata.payload}m[A]={key:A,enabled:S.enabled,variant:S.variant,payload:P,id:S.metadata?.id,version:S.metadata?.version,reason:S.reason?.description??S.reason?.code,locallyEvaluated:!1,hasExperiment:S.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[y,A]of Object.entries(this._flagOverrides)){if(A===void 0){delete m[y];continue}let S=m[y];m[y]={key:y,enabled:A!==!1,variant:typeof A=="string"?A:void 0,payload:S?.payload,id:S?.id,version:S?.version,reason:S?.reason,locallyEvaluated:S?.locallyEvaluated??!1,hasExperiment:S?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[y,A]of Object.entries(this._payloadOverrides)){let S=m[y];S&&(m[y]={...S,payload:A})}if(g!==void 0)for(let y of Object.keys(m))g.has(y)||delete m[y];return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:m,requestId:h,evaluatedAt:E,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:_,quotaLimited:b})}_shouldSendMinimalFlagCalledEvent(e,t){return e==="$feature_flag_called"&&this._minimalFlagCalledEvents&&t.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(e){let{distinctId:t,key:n,response:s,groups:i,disableGeoip:o,properties:a}=e,c=i&&Object.keys(i).length>0?`_${JSON.stringify(Object.entries(i).sort(([d],[p])=>d<p?-1:d>p?1:0))}`:"",l=`${n}_${s}${c}`,u=this._distinctIdHasSentFlagCalls.get(t)??new Set;if(this._distinctIdHasSentFlagCalls.delete(t),this._distinctIdHasSentFlagCalls.set(t,u),!u.has(l)){for(u.add(l);this._distinctIdHasSentFlagCalls.size>Math.max(this.maxCacheSize,1);){let d=this._distinctIdHasSentFlagCalls.keys().next().value;if(d===void 0)break;this._distinctIdHasSentFlagCalls.delete(d)}this.capture({distinctId:t,event:"$feature_flag_called",properties:a,groups:i,disableGeoip:o})}}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:e=>this._captureFlagCalledEventIfNeeded(e),logWarning:e=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${e}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){await this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=n=>Object.fromEntries(n.map(s=>[s,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){"flags"in e&&(e.flags===!1?this._flagOverrides=void 0:Array.isArray(e.flags)?this._flagOverrides=t(e.flags):e.flags!==void 0&&(this._flagOverrides={...e.flags})),"payloads"in e&&(e.payloads===!1?this._payloadOverrides=void 0:e.payloads!==void 0&&(this._payloadOverrides={...e.payloads}));return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let n=t.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in t){let n=t.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(e,t,n){return this.context?this.context.run(e,t,n):t()}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics&&(await Qe(this._metrics.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._metrics.reset()),this._traces&&(await Qe(this._traces.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this._distinctIdHasSentFlagCalls.clear(),n?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},s=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let i=new AbortController;s=te(()=>{i.abort()},this.options.requestTimeout),n.signal=i.signal}try{return await this.fetch(t,n)}catch(i){this._events.emit("error",i);return}finally{s&&clearTimeout(s)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let n={},s={};for(let[i,o]of Object.entries(e))if(vu(o)&&t&&i in t){let a={};for(let[c,l]of Object.entries(o))a[String(c)]=String(l);s[String(i)]=a}else n[String(i)]=String(o);return{personProperties:n,groupProperties:s}}async getFeatureFlagsForEvent(e,t,n,s){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");let i=s?.personProperties||{},o=s?.groupProperties||{},a=s?.flagKeys;if(s?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,d]of Object.entries(t||{}))l[u]=String(d);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,d]of Object.entries(t||{}))l[u]=String(d);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(e,t,i,o,n)).flags}addLocalPersonAndGroupProperties(e,t,n,s){let i={...n||{}},o={};if(t)for(let a of Object.keys(t))o[a]={$group_key:t[a],...s?.[a]||{}};return{allPersonProperties:i,allGroupProperties:o}}personPropertiesForLocalEvaluation(e,t){return{distinct_id:e,...t||{}}}createFeatureFlagEvaluationContext(e,t,n,s){return{distinctId:e,groups:t||{},personProperties:n||{},groupProperties:s||{},evaluationCache:{}}}captureException(e,t,n,s,i){if(!St.isPreviouslyCapturedError(e)){let o=new Error("PostHog syntheticException");this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,n).then(a=>this._capturePreparedEvent({...a,uuid:s,flags:i},!1)))}}async captureExceptionImmediate(e,t,n,s){if(!St.isPreviouslyCapturedError(e)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:i},t,n).then(o=>this.captureImmediate({...o,flags:s})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:n,event:s,properties:i,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:d}=e,p=this.context?.get(),g=t.includeContextProperties??!0,m=n||p?.distinctId,h=g?{...this.props,...p?.properties||{},...i||{}}:{...i||{}};m||(m=ee(),h.$process_person_profile=!1),g&&p?.sessionId&&!h.$session_id&&(h.$session_id=p.sessionId);let E=this._shouldSendMinimalFlagCalledEvent(s,h)?br(h):h,_=this._runBeforeSend({distinctId:m,event:s,properties:E,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:d});if(!_)return Promise.reject(null);let b=await Promise.resolve().then(async()=>{if(a)return c&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),a._getEventProperties();if(c){Fs("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let w=typeof c=="object"?c:void 0,T=await this.getFeatureFlagsForEvent(_.distinctId,o,u,w);return wy(T)}return{}}).catch(()=>({})).then(w=>{let T=_.groups||o;return{...w,..._.properties||{},...T!==void 0&&Object.keys(T).length>0?{$groups:T}:{}}});return _.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof b.$raw_user_agent=="string"&&Mu(b.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(_.event="$bot_pageview",b.$browser_type="bot"),{distinctId:_.distinctId,event:_.event,properties:b,options:{timestamp:_.timestamp,disableGeoip:_.disableGeoip,uuid:_.uuid}}}_runBeforeSend(e){let t=this.options.before_send;if(!t)return e;let n=Array.isArray(t)?t:[t],s=e;for(let i of n)try{if(s=i(s),!s)return this._logger.info(`Event '${e.event}' was rejected in beforeSend function`),null;if(!s.properties||Object.keys(s.properties).length===0){let o=`Event '${s.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(o)}}catch(o){return this._logger.error(`Error in before_send function for event '${e.event}':`,o),null}return s}};var Rf=require("node:async_hooks"),Us=class{constructor(){this.storage=new Rf.AsyncLocalStorage}get(){return this.storage.getStore()}run(e,t,n){return this.storage.run(this.resolve(e,n),t)}enter(e,t){this.storage.enterWith(this.resolve(e,t))}resolve(e,t){if(t?.fresh===!0)return e;let n=this.get()||{};return{distinctId:e.distinctId??n.distinctId,sessionId:e.sessionId??n.sessionId,properties:{...n.properties||{},...e.properties||{}}}}};var Mf=require("node:async_hooks"),$s=class{active(){return this._storage.getStore()}with(e,t){return this._storage.run(e,t)}constructor(){this._storage=new Mf.AsyncLocalStorage}};var Cf=require("node:zlib"),If=require("node:util"),Ty=(0,If.promisify)(Cf.gzip);async function Pf(r,e=!0){try{let t=await Ty(r);return new Uint8Array(t)}catch(t){return e&&console.error("Failed to gzip compress data",t),null}}var Bs=require("node:os");function Of(){let r,e;try{r=(0,Bs.platform)(),e=(0,Bs.release)()}catch{}return Go(r,e)}var kf="posthog-node";function Ay(r,{organization:e,projectId:t,prefix:n,severityAllowList:s=["error"],sendExceptionsToPostHog:i=!0}={}){return o=>{if(!(s==="*"||s.includes(o.level)))return o;o.tags||(o.tags={});let c=o.tags[da.POSTHOG_ID_TAG];if(c===void 0)return o;let l=r.options.host??"https://us.i.posthog.com",u=new URL(`/project/${r.apiKey}/person/${c}`,l).toString();o.tags["PostHog Person URL"]=u;let d=o.exception?.values||[],p=d.map(h=>({...h,stacktrace:h.stacktrace?{...h.stacktrace,type:"raw",frames:(h.stacktrace.frames||[]).map(E=>({...E,platform:"node:javascript"}))}:void 0})),g={$exception_message:d[0]?.value||o.message,$exception_type:d[0]?.type,$exception_level:o.level,$exception_list:p,$sentry_event_id:o.event_id,$sentry_exception:o.exception,$sentry_exception_message:d[0]?.value||o.message,$sentry_exception_type:d[0]?.type,$sentry_tags:o.tags},m=G.getInjectedReleaseId();return m&&(g.$release_id=m),e&&t&&(g.$sentry_url=(n||"https://sentry.io/organizations/")+e+"/issues/?project="+t+"&query="+o.event_id),i&&r.capture({event:"$exception",distinctId:c,properties:g}),o}}var da=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(e,t,n,s,i){this.name=kf,this.name=kf,this.setupOnce=function(o,a){let c=a()?.getClient()?.getDsn()?.projectId;o(Ay(e,{organization:t,projectId:c,prefix:n,severityAllowList:s,sendExceptionsToPostHog:i??!0}))}}};var Ws=class extends Ns{getLibraryId(){return"posthog-node"}compressPayload(e){return Pf(e,this.isDebug)}initializeContext(){return new Us}initializeSpanContextManager(){return new $s}hostResourceAttributes(){return Of()}createErrorPropertiesBuilder(){return new G.ErrorPropertiesBuilder([new G.EventCoercer,new G.ErrorCoercer,new G.ObjectCoercer,new G.StringCoercer,new G.PrimitiveCoercer],G.createStackParser("node:javascript",G.nodeStackLineParser),[yu(),e=>nf(e,void 0,this._logger),cf()])}};var bk=300*1e3,wk=3600*1e3;C();var pa=null,vy=!1,Ry=3e4,Hs=null;function xf(){let r=Date.now();if(Hs&&r<Hs.expiresAt)return Hs.value;let e=un(process.env,Zt());return Hs={value:e,expiresAt:r+Ry},e}var My=!1;function Cy(){if(!pa){let r=My&&hc(process.env)&&xf();pa=new Ws(pn(),{host:gn(),flushAt:20,flushInterval:1e4,disableGeoip:!1,enableExceptionAutocapture:r,before_send:Ny})}return pa}var Iy=6e4,Py=500,Wr=new Map;function Oy(r,e,t){let n="";try{let s=(t||"").split(`
|
|
32
|
+
`).map(i=>i.trim()).filter(Boolean);n=s.find(i=>i.startsWith("at "))??s[1]??""}catch(s){let i=s instanceof Error?s:new Error(String(s));f.warn("SYSTEM","Telemetry: stack parse failed while fingerprinting; using empty top frame",void 0,i),n=""}return`${r}::${wc(e)}::${n}`.slice(0,400)}function ky(r,e){try{return Dy(r,e)}catch(t){let n=t instanceof Error?t:new Error(String(t));return f.warn("SYSTEM","Telemetry: error rate-limit bookkeeping failed; failing closed (event dropped)",void 0,n),{send:!1,count:0}}}function Dy(r,e){let t=Wr.get(r);if(!t){if(Wr.size>=Py){let n=null,s=1/0;for(let[i,o]of Wr){let a=Math.max(o.lastSentTs,o.firstTs);a<s&&(s=a,n=i)}n!==null&&Wr.delete(n)}return t={count:1,firstTs:e,lastSentTs:e},Wr.set(r,t),{send:!0,count:1}}if(t.count+=1,e-t.lastSentTs>=Iy){t.lastSentTs=e;let n=t.count;return t.count=0,{send:!0,count:n}}return{send:!1,count:t.count}}var Df="__cm_rate_limited";function xy(r){try{return typeof r!="string"||r.length===0?"":Si(Ei(r))}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.warn("SYSTEM","Telemetry: frame filename redaction failed; stripping value entirely",void 0,t),""}}function Ly(r){let e=r.$exception_list;if(Array.isArray(e))for(let t of e){if(!t||typeof t!="object")continue;let n=t;typeof n.value=="string"&&(n.value=bc(n.value));let i=n.stacktrace?.frames;if(Array.isArray(i))for(let o of i){if(!o||typeof o!="object")continue;let a=o;delete a.context_line,delete a.pre_context,delete a.post_context,typeof a.filename=="string"&&(a.filename=xy(a.filename))}}}function Fy(r){try{let e=[],t=i=>{typeof i=="string"&&e.push(i)};t(r.$exception_message),t(r.$exception_type),t(r.error_message),t(r.error_type);let n=r.$exception_list;if(Array.isArray(n))for(let i of n)i&&typeof i=="object"&&(t(i.value),t(i.type));let s=e.join(" ");return/chdir/i.test(s)?/\b(?:EPERM|EACCES)\b|operation not permitted|permission denied/i.test(s):!1}catch{return!1}}function Ny(r){try{if(!r||typeof r!="object")return r;let e=r;if(e.event!=="$exception")return r;let t=e.properties??{};if(Fy(t))return null;if(t[Df]){try{delete t[Df],e.properties=t}catch{}return r}Ly(t),t.$process_person_profile=!1,e.properties=t;let n="Error",s="",i="";try{let c=t.$exception_list;if(Array.isArray(c)&&c[0]&&typeof c[0]=="object"){let l=c[0];typeof l.type=="string"&&(n=l.type),typeof l.value=="string"&&(s=l.value);let u=l.stacktrace?.frames;Array.isArray(u)&&u.length>0&&(i="at "+JSON.stringify(u[u.length-1]).slice(0,200))}}catch{}typeof t.$exception_type=="string"&&(n=t.$exception_type),typeof t.$exception_message=="string"&&(s=t.$exception_message);let o=Oy(n,s,i),a=ky(o,Date.now());if(!a.send)return null;try{t.occurrence_count=a.count,e.properties=t}catch{}return r}catch{return null}}function fa(r,e,t){try{Uy(r,e,t)}catch(n){let s=n instanceof Error?n:new Error(String(n));f.warn("SYSTEM","Telemetry: captureEvent failed; event dropped",{event:r},s)}}function Uy(r,e,t){if(vy||!xf())return;let n=fn({...hn(),...e??{}});if(t?.person?n.$set=mn(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
|
|
33
|
+
`);return}Cy().capture({distinctId:dn(),event:r,properties:n})}var $y=["agent-cost-report","babysit","ccs-align","cloud-sync","design-is","do","handoff","how-it-works","knowledge-agent","learn-codebase","make-plan","mem-search","mode-creator","oh-my-issues","pathfinder","smart-explore","standup","timeline-report","version-bump","weekly-digests","what-the","wowerpoint"],By=new Set($y),Lf={skill_id:"other",skill_source:"third_party"};function Ff(r){let e=Wy(r);return e&&By.has(e)?{skill_id:e,skill_source:"first_party"}:Lf}function Nf(r,e){if(r==="Skill"&&!(!e||typeof e!="object"))return e.skill}function Wy(r){if(typeof r!="string")return null;let e=r.trim().toLowerCase();if(!e)return null;e=e.replace(/^\/+/,"");let t=e.lastIndexOf(":");return t!==-1&&(e=e.slice(t+1).replace(/^\/+/,"")),e||null}var Hy=new Set(["mem_search","search","timeline","get_observations","get_summaries","get_tool_uses","session_start_context","observation_search","observation_context","memory_search","memory_context"]);function Uf(r){if(!r.startsWith("mcp__"))return null;let e=r.split("__");if(e.length<3)return null;let t=e[1].toLowerCase();return!t.includes("claude-mem")&&!t.includes("claude_mem")&&!t.includes("mcp-search")&&!t.includes("mcp_search")&&!t.includes("cmem")?null:e.slice(2).join("__")}function $f(r){if(!r)return!1;if(r.startsWith("memory_")||r==="mem_search"||r==="get_summaries")return!0;let e=Uf(r);return e!==null&&Hy.has(e)}function Bf(r){return r==="save_memory"||Uf(r)==="save_memory"}var Wf=null,jy=new Set(["SetTodoList","TodoList","TaskList","TaskOutput","TaskStop","CronCreate","CronList","CronDelete"]),Hf=new Map;function Ky(r){let e=Hf.get(r);if(e!==void 0)return e;let t=null;try{t=new RegExp(r)}catch(n){f.warn("INGEST","Invalid CLAUDE_MEM_SKIP_BASH_PATTERNS regex \u2014 ignoring",{pattern:r,error:n instanceof Error?n.message:String(n)})}return Hf.set(r,t),t}function Gy(r,e){if(!e||typeof e!="object")return"";let t=e,n=r==="Bash"?t.command:r==="exec_command"?t.cmd:void 0;return typeof n=="string"?n:""}function zy(){if(!Wf)throw new Error("ingest helpers used before setIngestContext() \u2014 wiring bug");return Wf}async function jf(r,e={}){if($f(r.toolName))return{ok:!0,status:"skipped",reason:"memory_retrieval"};let{sessionManager:t,dbManager:n,eventBroadcaster:s,ensureGeneratorRunning:i}=zy(),o=Z(r.platformSource),a=typeof r.cwd=="string"?r.cwd:"",c=a.trim()?ct(a):null,l=c?.primary??"",u=B.loadFromFile(ie);if(a&&En(a,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return{ok:!0,status:"skipped",reason:"project_excluded"};if(new Set(u.CLAUDE_MEM_SKIP_TOOLS.split(",").map(R=>R.trim().toLowerCase()).filter(Boolean)).has(r.toolName.toLowerCase())){if(r.toolName==="Skill"){let{skill_id:R,skill_source:y}=Ff(Nf(r.toolName,r.toolInput));fa("skill_invoked",{skill_id:R,skill_source:y,skill_trigger:"tool",ide:o})}return{ok:!0,status:"skipped",reason:"tool_excluded"}}if(o==="kimi"&&jy.has(r.toolName))return{ok:!0,status:"skipped",reason:"tool_excluded"};let p=u.CLAUDE_MEM_SKIP_BASH_PATTERNS.trim(),g=p?Gy(r.toolName,r.toolInput):"";if(g){let R=Ky(p);if(R&&R.test(g))return{ok:!0,status:"skipped",reason:"bash_pattern_excluded"}}let m=Eu(r.agentId,r.agentType,u);if(m.skip)return{ok:!0,status:"skipped",reason:m.reason};if(new Set(["Edit","Write","Read","NotebookEdit"]).has(r.toolName)&&r.toolInput&&typeof r.toolInput=="object"){let R=r.toolInput,y=R.file_path||R.notebook_path;if(y&&y.includes("session-memory"))return{ok:!0,status:"skipped",reason:"session_memory_meta"}}let E=n.getSessionStore(),_,b;try{_=E.createSDKSession(r.contentSessionId,l,"",void 0,o),a&&E.setSessionCwd(_,a,c?.keySource),b=E.getPromptNumberFromUserPrompts(r.contentSessionId,_,r.enqueuedAtEpochMs)}catch(R){let y=R instanceof Error?R.message:String(R);return f.error("INGEST","Observation session resolution failed",{contentSessionId:r.contentSessionId,toolName:r.toolName},R instanceof Error?R:new Error(y)),{ok:!1,reason:y,status:500}}if(!zn.checkUserPromptPrivacy(E,r.contentSessionId,b,"observation",_,{tool_name:r.toolName}).allow)return{ok:!0,status:"skipped",reason:"private"};let T=r.toolInput!==void 0?to(JSON.stringify(r.toolInput)):"{}",M=r.toolResponse!==void 0?to(JSON.stringify(r.toolResponse)):"{}";if(r.toolUseId)try{E.upsertToolUse({toolUseId:r.toolUseId,contentSessionId:r.contentSessionId,sessionDbId:_,project:l,platformSource:o,toolName:r.toolName,toolInput:T,toolResponse:M,cwd:a||null,promptNumber:b,agentType:typeof r.agentType=="string"?r.agentType:null,agentId:typeof r.agentId=="string"?r.agentId:null,orGenerationId:typeof r.orGenerationId=="string"?r.orGenerationId:null,orSessionId:typeof r.orSessionId=="string"?r.orSessionId:null})}catch(R){f.warn("INGEST","tool_uses backup write failed (observation still queued)",{sessionId:_,toolName:r.toolName,toolUseId:r.toolUseId},R instanceof Error?R:new Error(String(R)))}return Bf(r.toolName)?{ok:!0,status:"skipped",reason:"explicit_memory_write"}:(t.queueObservation(_,{tool_name:r.toolName,tool_input:T,tool_response:M,prompt_number:b,cwd:a||(f.error("INGEST","Missing cwd when ingesting observation",{sessionId:_,toolName:r.toolName}),""),agentId:typeof r.agentId=="string"?r.agentId:void 0,agentType:typeof r.agentType=="string"?r.agentType:void 0,toolUseId:typeof r.toolUseId=="string"?r.toolUseId:void 0}),e.markHandedOff?.(),await i?.(_,"observation"),s.broadcastObservationQueued(_),{ok:!0,sessionDbId:_})}var Vy=/agent-transcripts[/\\]([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/\\]|$)/i;function Yy(r){let e=typeof r.agentId=="string"?r.agentId.trim():"";return e&&e!=="*"?e:r.path.match(Vy)?.[1]}var jr=class extends Error{constructor(e,t){super(`session init failed for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptAnchorError",this.cause=t}},Kr=class extends Error{constructor(e,t){super(`observation not accepted for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptObservationError",this.cause=t}},bt=class extends Error{constructor(e,t){super(`transcript event not persisted for session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptSpoolError",this.cause=t}},qy=4096,Jy=64,js=class{constructor(e="in-process"){this.observationTransport=e}observationTransport;sessions=new Map;fileContexts=new Set;fileSessionKeys=new WeakMap;registerFileContext(e){this.fileContexts.add(e)}pendingToolOwners=new WeakMap;subagentSessionKeys=new Set;resetFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t);n&&n.cwd===e.cwd&&(n.cwd=void 0)}this.retireFileContext(e),e.cwd=void 0,e.sessionId=void 0}retireFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t)?.pendingTools;for(let[s,i]of n??[])this.pendingToolOwners.get(i)===e&&n.delete(s)}this.fileContexts.delete(e),this.fileSessionKeys.delete(e),e.pendingTools={}}sessionKeysOf(e){return new Set([...Object.keys(e.pendingTools??{}),...this.fileSessionKeys.get(e)??[]])}async processEntry(e,t,n,s,i){i&&this.registerFileContext(i);for(let o of n.events)lr(e,o.match,n)&&await this.handleEvent(e,t,n,o,s??void 0,i)}getSessionKey(e,t){return`${e.name}:${t}`}getOrCreateSession(e,t){let n=this.getSessionKey(e,t),s=this.sessions.get(n);return s||(s={sessionId:t,platformSource:Z(e.name),...this.subagentSessionKeys.has(n)?{isSubagent:!0}:{}},this.sessions.set(n,s)),s}rememberSubagentSession(e){if(this.subagentSessionKeys.delete(e),this.subagentSessionKeys.add(e),this.subagentSessionKeys.size>qy){let t=this.subagentSessionKeys.values().next().value;t!==void 0&&this.subagentSessionKeys.delete(t)}}async primeSessionContext(e,t,n,s,i){for(let o of n.events)o.action!=="session_context"||!lr(e,o.match,n)||await this.handleEvent(e,t,n,o,s??void 0,i)}resolveSessionId(e,t,n,s,i){let o={watch:t,schema:n},a=s.fields?.sessionId??(n.sessionIdPath?{path:n.sessionIdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:typeof c=="number"?String(c):i&&i.trim()?i:null}resolveCwd(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.cwd??(n.cwdPath?{path:n.cwdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.workspace?t.workspace:i.cwd}resolveProject(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.project??(n.projectPath?{path:n.projectPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.project?t.project:i.cwd?ct(i.cwd).primary:i.project}async handleEvent(e,t,n,s,i,o){let a=this.resolveSessionId(e,t,n,s,o?.sessionId??i);if(!a){f.debug("TRANSCRIPT","Skipping event without sessionId",{event:s.name,watch:t.name});return}o&&(o.sessionId=a);let c=this.getOrCreateSession(t,a),l=this.getSessionKey(t,a);if(o){let g=this.fileSessionKeys.get(o)??new Set;g.add(l),this.fileSessionKeys.set(o,g)}if(o?.pendingTools?.[l]){c.pendingTools??=new Map;for(let[g,m]of Object.entries(o.pendingTools[l]))this.pendingToolOwners.set(m,o),c.pendingTools.has(g)||c.pendingTools.set(g,m)}!c.cwd&&o?.cwd&&(c.cwd=o.cwd);let u=this.resolveCwd(e,t,n,s,c);u&&(c.cwd=u);let d=this.resolveProject(e,t,n,s,c);if(d&&(c.project=d),t.subagentSource&&!c.isSubagent){let g=cr(e,t.subagentSource.path);g!=null&&(c.isSubagent=!0,this.rememberSubagentSession(this.getSessionKey(t,a)))}if(t.subagentOnly&&!c.isSubagent&&s.action!=="session_context"&&s.action!=="session_end")return;let p=mu(s.fields,e,{watch:t,schema:n,session:c});s.action==="session_context"&&this.applySessionContext(c,p),o&&c.cwd&&(o.cwd=c.cwd);try{switch(s.action){case"session_context":break;case"session_init":await this.handleSessionInit(c,p),t.context?.updateOn?.includes("session_start")&&await this.updateContext(c,t);break;case"user_message":{let g=this.resolveMessageText(p.message)??this.resolveMessageText(p.prompt);g&&await this.anchorUserPrompt(c,g);break}case"assistant_message":c.lastAssistantMessage=this.resolveMessageText(p.message)??c.lastAssistantMessage;break;case"tool_use":await this.handleToolUse(c,t,p,o);break;case"tool_result":await this.handleToolResult(c,t,p,o);break;case"observation":await this.sendObservation(c,t,p);break;case"file_edit":await this.sendFileEdit(c,p);break;case"session_end":await this.handleSessionEnd(c,t);break;default:break}}finally{o&&this.snapshotPendingTools(o,c,l,s.action==="session_end")}}snapshotPendingTools(e,t,n,s){let i=s?{}:{...e.pendingTools?.[n]};for(let[a,c]of t.pendingTools??[])this.pendingToolOwners.get(c)===e&&(i[a]=c);e.pendingTools={...e.pendingTools,[n]:i},Object.keys(i).length===0&&delete e.pendingTools[n];let o=Object.entries(e.pendingTools).flatMap(([a,c])=>Object.keys(c).map(l=>[a,l]));for(let[a,c]of o.slice(0,Math.max(0,o.length-Jy))){let l=e.pendingTools[a],u=l[c];delete l[c],Object.keys(l).length===0&&delete e.pendingTools[a];let d=this.sessions.get(a)?.pendingTools;d?.get(c)===u&&d.delete(c)}}applySessionContext(e,t){let n=typeof t.cwd=="string"?t.cwd:void 0,s=typeof t.project=="string"?t.project:void 0;n&&(e.cwd=n),s&&(e.project=s)}resolveMessageText(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=[];for(let n of e)n&&typeof n=="object"&&typeof n.text=="string"&&t.push(n.text);return t.length>0?t.join(`
|
|
34
|
+
`):void 0}async handleSessionInit(e,t){let n=typeof t.prompt=="string"?t.prompt:"";await this.anchorUserPrompt(e,n)}async anchorUserPrompt(e,t){t&&(e.lastUserMessage=t);let n=e.cwd;if(!n){this.skipWithoutCwd(e,"user prompt");return}try{await su({sessionId:e.sessionId,cwd:n,prompt:t,platform:e.platformSource})}catch(s){throw new jr(e.sessionId,s)}}skipWithoutCwd(e,t){f.debug("TRANSCRIPT",`Skipping a ${t}: the session has no known working directory yet`,{sessionId:e.sessionId})}async handleToolUse(e,t,n,s){let i=typeof n.toolId=="string"?n.toolId:void 0,o=typeof n.toolName=="string"?n.toolName:void 0,a=this.maybeParseJson(n.toolInput),c=this.maybeParseJson(n.toolResponse);if(o==="apply_patch"&&typeof a=="string"){let l=this.parseApplyPatchFiles(a);for(let u of l)await this.sendFileEdit(e,{filePath:u,edits:[{type:"apply_patch",patch:a}]})}if(o&&c!==void 0)await this.sendObservation(e,t,{toolName:o,toolInput:a,toolResponse:c,toolUseId:i});else if(o&&i){e.pendingTools||(e.pendingTools=new Map);let l={toolName:o,toolInput:a};s&&this.pendingToolOwners.set(l,s),e.pendingTools.set(i,l)}}async handleToolResult(e,t,n,s){let i=typeof n.toolId=="string"?n.toolId:void 0,o=typeof n.toolName=="string"?n.toolName:void 0,a=this.maybeParseJson(n.toolResponse),c=this.maybeParseJson(n.toolInput),l=s?.pendingTools?.[this.getSessionKey(t,e.sessionId)],u=i?e.pendingTools?.get(i):void 0,d=s,p=s?(i?l?.[i]:void 0)??(u&&this.pendingToolOwners.get(u)===s?u:void 0):u;if(!p&&s&&i){let g=Array.from(this.fileContexts).flatMap(m=>{let h=m.pendingTools?.[this.getSessionKey(t,e.sessionId)]?.[i];return h&&m.isCurrent?.()!==!1?[{context:m,tool:h}]:[]});g.length===1&&(d=g[0].context,p=g[0].tool)}if(p&&(o||(o=p.toolName),c===void 0&&(c=p.toolInput)),o){if(await this.sendObservation(e,t,{toolName:o,toolInput:c,toolResponse:a,toolUseId:i}),i){e.pendingTools&&e.pendingTools.get(i)===p&&e.pendingTools.delete(i);let g=d?.pendingTools?.[this.getSessionKey(t,e.sessionId)];g&&delete g[i]}}else f.debug("TRANSCRIPT","Dropping tool_result with no resolvable toolName",{sessionId:e.sessionId,toolId:i})}async sendObservation(e,t,n){let s=typeof n.toolName=="string"?n.toolName:void 0;if(!s)return;if(!e.cwd){this.skipWithoutCwd(e,"observation");return}let i={contentSessionId:e.sessionId,cwd:e.cwd,toolName:s,toolInput:this.maybeParseJson(n.toolInput),toolResponse:this.maybeParseJson(n.toolResponse),platformSource:e.platformSource,toolUseId:typeof n.toolUseId=="string"?n.toolUseId:void 0,agentId:Yy(t)};if(this.observationTransport==="spool"){try{or("observation",i)}catch(a){throw new bt(e.sessionId,a)}return}let o=!1;try{let a=await jf(i,{markHandedOff:()=>{o=!0}});if(!a.ok)throw new Error(a.reason)}catch(a){if(o){f.warn("TRANSCRIPT","Observation accepted before generator kick failed",{sessionId:e.sessionId},a instanceof Error?a:void 0);return}throw new Kr(e.sessionId,a)}}async sendFileEdit(e,t){let n=typeof t.filePath=="string"?t.filePath:void 0;if(n){if(!e.cwd){this.skipWithoutCwd(e,"file edit");return}try{await lu.execute({sessionId:e.sessionId,cwd:e.cwd,filePath:n,edits:Array.isArray(t.edits)?t.edits:void 0,platform:e.platformSource})}catch(s){throw new bt(e.sessionId,s)}}}maybeParseJson(e){if(typeof e!="string")return e;let t=e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return e;try{return JSON.parse(t)}catch(n){return f.debug("TRANSCRIPT","Field looked like JSON but did not parse; using raw string",{preview:t.slice(0,120)},n instanceof Error?n:void 0),e}}parseApplyPatchFiles(e){let t=[],n=e.split(`
|
|
35
|
+
`);for(let s of n){let i=s.trim();if(i.startsWith("*** Update File: "))t.push(i.replace("*** Update File: ","").trim());else if(i.startsWith("*** Add File: "))t.push(i.replace("*** Add File: ","").trim());else if(i.startsWith("*** Delete File: "))t.push(i.replace("*** Delete File: ","").trim());else if(i.startsWith("*** Move to: "))t.push(i.replace("*** Move to: ","").trim());else if(i.startsWith("+++ ")){let o=i.replace("+++ ","").replace(/^b\//,"").trim();o&&o!=="/dev/null"&&t.push(o)}}return Array.from(new Set(t))}async handleSessionEnd(e,t){(!t.subagentOnly||e.isSubagent)&&(await this.queueSummary(e),await this.updateContext(e,t)),e.pendingTools?.clear();let n=this.getSessionKey(t,e.sessionId);this.sessions.delete(n)}async queueSummary(e){if(this.observationTransport==="spool"){try{or("summarize",{contentSessionId:e.sessionId,platformSource:e.platformSource,lastAssistantMessage:e.lastAssistantMessage??"",...e.cwd?{cwd:e.cwd}:{}})}catch(i){throw new bt(e.sessionId,i)}return}if(!await Ln())return;let n=e.lastAssistantMessage??"",s=JSON.stringify({contentSessionId:e.sessionId,last_assistant_message:n,platformSource:e.platformSource,...e.cwd?{cwd:e.cwd}:{}});try{await Ce("/api/sessions/summarize",{method:"POST",headers:{"Content-Type":"application/json"},body:s})}catch(i){f.warn("TRANSCRIPT","Summary request failed",{error:i instanceof Error?i.message:String(i)})}}async updateContext(e,t){if(!t.context||t.context.mode!=="agents"||Ua(t)||!await Ln())return;let s=e.cwd??t.workspace;if(!s)return;let o=ct(s).allProjects.join(","),a=`/api/context/inject?projects=${encodeURIComponent(o)}&platformSource=${encodeURIComponent(e.platformSource)}`,c=X(t.context.path??`${s}/AGENTS.md`),l=Hr.default.resolve(c),u=[Hr.default.resolve(s),Hr.default.resolve(F)];if(!u.some(m=>l.startsWith(m+Hr.default.sep)||l===m)){f.warn("SECURITY","Rejected path traversal attempt in watch.context.path",{original:t.context.path,resolved:l,allowedRoots:u});return}let p;try{p=await Ce(a)}catch(m){f.warn("TRANSCRIPT","Failed to fetch AGENTS.md context",{error:m instanceof Error?m.message:String(m)});return}if(!p.ok)return;let g=(await p.text()).trim();g&&(fu(c,g),f.debug("TRANSCRIPT","Updated AGENTS.md context",{agentsPath:c,watch:t.name}))}};var Kf=Ee(require("node:zlib"),1),Gt=require("node:fs");C();function Gf(){let r=Kf.zstdDecompressSync;return typeof r=="function"?r:void 0}function zf(){return Gf()!==void 0}var Xy=4247762216,Qy=64*1024;function Ks(r,e,t,n=Number.POSITIVE_INFINITY){let s=(0,Gt.openSync)(r,"r");try{let i=Buffer.alloc(0),o=0,a=(u,d)=>{if(u+d>t)return null;if(u<o||u+d>o+i.length){let p=Math.min(Math.max(d,Qy),t-u),g=Buffer.alloc(p);if(i=g.subarray(0,(0,Gt.readSync)(s,g,0,p,u)),o=u,i.length<d)return null}return i.subarray(u-o,u-o+d)},c=[],l=e;for(;l<t&&(c.length===0||l-e<n);){let u=l,d=a(l,4);if(!d)return{frames:c,tornStart:u};if(d.readUInt32LE(0)!==Xy)throw new Error(`invalid Zstandard frame magic at byte ${l}`);l+=4;let p=a(l,1);if(!p)return{frames:c,tornStart:u};let g=p.readUInt8(0);if(l+=1,(g&24)!==0)throw new Error(`reserved Zstandard frame-header bit at byte ${l-1}`);let m=g>>>6,h=(g&32)!==0,E=(g&4)!==0,_=g&3,b=_===3?4:_,w=m===0?h?1:0:1<<m,T=(h?0:1)+b+w;if(l+T>t)return{frames:c,tornStart:u};for(l+=T;;){let M=a(l,3);if(!M)return{frames:c,tornStart:u};let R=M.readUIntLE(0,3);l+=3;let y=(R&1)!==0,A=R>>>1&3,S=R>>>3;if(A===3)throw new Error(`reserved Zstandard block type at byte ${l-3}`);let P=A===1?1:S;if(l+P>t)return{frames:c,tornStart:u};if(l+=P,y)break}if(E){if(l+4>t)return{frames:c,tornStart:u};l+=4}c.push({start:u,end:l})}return{frames:c,tornStart:null}}finally{(0,Gt.closeSync)(s)}}function ga(r,e){try{let t=Gf();if(!t)throw new Error("this runtime cannot decode Zstandard (zlib.zstdDecompressSync is missing)");return t(r.subarray(e.start,e.end)).toString("utf8")}catch(t){throw f.warn("TRANSCRIPT","Failed to decompress Zstandard frame",{start:e.start,end:e.end,error:t instanceof Error?t.message:String(t)}),t}}var Vf=2e3,Zy=1e3,eb=256*1024,Yf=4*1024*1024,tb=16*1024*1024,rb=100,qf=100;function Gr(){return new Promise(r=>setImmediate(r))}var Gs=".jsonl.zstd";async function nb(r,e){try{let t=0;for(;t<e;){let n=Ks(r,t,e,tb);if(n.tornStart!==null)return n.tornStart;if(n.frames.length===0)break;t=n.frames[n.frames.length-1].end,await Gr()}return t}catch{return e}}var Jf=1024*1024;async function Zf(r,e,t){let n;if(e){let{frames:i}=Ks(r,0,Math.min(t,Jf),1);if(i.length===0)return null;n=ga(await Vs(r,0,i[0].end),i[0])}else n=(await Vs(r,0,Math.min(t,Jf))).toString("utf8");let s=n.indexOf(`
|
|
36
|
+
`);return s<0?null:n.slice(0,s)}async function sb(r,e,t){try{let n=await Zf(r,e,t);if(n===null)return null;let s=JSON.parse(n);for(let i of["timestamp","time","createdAt"]){let o=s?.[i],a=typeof o=="number"?o<1e12?o*1e3:o:typeof o=="string"?Date.parse(o):Number.NaN;if(Number.isFinite(a)&&a>0)return a}return null}catch{return null}}function zs(r){return`${r.dev}:${r.ino}`}function ib(r){try{return(0,N.statSync)(r),!1}catch(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}}var ob=4096;function ha(r,e,t){let n;try{if(n=(0,N.openSync)(r,"r"),zs((0,N.fstatSync)(n))!==t)return null;let s=Math.max(0,e-ob),i=Buffer.alloc(e-s);return(0,N.readSync)(n,i,0,i.length,s)<i.length?null:(0,Xf.createHash)("sha256").update(i).digest("hex")}catch(s){return f.debug("TRANSCRIPT","Could not fingerprint a transcript checkpoint",{file:r},s instanceof Error?s:void 0),null}finally{n!==void 0&&(0,N.closeSync)(n)}}function ep(r,e,t,n,s){return t<n?!1:s===void 0?!0:ha(r,n,e)===s}async function Vs(r,e,t){let n=await(0,Qf.open)(r,"r");try{let s=Buffer.alloc(t),{bytesRead:i}=await n.read(s,0,t,e);return s.subarray(0,i)}finally{await n.close()}}var ma=class{constructor(e,t,n,s,i="",o=0,a,c,l){this.filePath=e;this.onLine=n;this.onOffset=s;this.onReset=l;this.fileIdentity=a,this.checkpointFingerprint=c,this.isZstd=e.endsWith(Gs),this.tailState={offset:t,readOffset:t,partial:this.isZstd?i:""},this.frameLinesDone=this.isZstd?o:0}filePath;onLine;onOffset;onReset;watcher=null;tailState;readTask=null;readPending=!1;closed=!1;isZstd;pendingRecord=Buffer.alloc(0);frameLinesDone;fileIdentity;checkpointFingerprint;start(){this.requestRead();try{this.watcher=(0,N.watch)(this.filePath,{persistent:!0},()=>{this.requestRead()})}catch(e){f.debug("WORKER","Failed to watch transcript file",{file:this.filePath},e instanceof Error?e:void 0),this.watcher=null}}close(){this.closed=!0,this.watcher?.close(),this.watcher=null}poke(){this.requestRead()}requestRead(){if(!this.closed){if(this.readTask){this.readPending=!0;return}this.readTask=this.drainReads().finally(()=>{this.readTask=null})}}async drainReads(){do this.readPending=!1,await this.readNewData().catch(()=>{}),this.readPending&&await Gr();while(this.readPending&&!this.closed)}async readNewData(){if(!(0,N.existsSync)(this.filePath))return;let e=0,t;try{let o=(0,N.statSync)(this.filePath);e=o.size,t=zs(o)}catch(o){f.debug("WORKER","Failed to stat transcript file",{file:this.filePath},o instanceof Error?o:void 0);return}let n=t!==this.fileIdentity,s=!1;n&&this.fileIdentity!==void 0&&(ep(this.filePath,t,e,this.tailState.offset,this.checkpointFingerprint)?(this.tailState.readOffset=this.tailState.offset,this.pendingRecord=Buffer.alloc(0)):s=!0),this.fileIdentity=t;let i=s||e<this.tailState.readOffset;if(i&&(this.onReset?.(),this.tailState.offset=0,this.tailState.readOffset=0,this.tailState.partial="",this.pendingRecord=Buffer.alloc(0),this.frameLinesDone=0),e===this.tailState.readOffset){(n||i)&&this.checkpoint(this.tailState.offset,this.tailState.partial);return}this.isZstd?await this.readNewZstdFrames(e):await this.readNewJsonl(e)}checkpoint(e,t=""){this.tailState.offset=e,this.tailState.partial=t,this.checkpointFingerprint=this.fileIdentity===void 0?void 0:ha(this.filePath,e,this.fileIdentity)??void 0,this.onOffset(e,t,this.frameLinesDone,this.fileIdentity,this.checkpointFingerprint)}async readNewJsonl(e){let t=this.tailState.readOffset,n;try{n=await Vs(this.filePath,t,Math.min(e-t,Yf))}catch(c){f.debug("WORKER","Failed to read transcript file",{file:this.filePath},c instanceof Error?c:void 0);return}if(n.length===0)return;this.tailState.readOffset=t+n.length;let s=this.pendingRecord.length>0?Buffer.concat([this.pendingRecord,n]):n,i=this.tailState.offset,o=0,a=0;for(let c=s.indexOf(10);c!==-1;c=s.indexOf(10,o)){if(this.closed){this.checkpoint(i+o);return}let l=s.toString("utf8",o,c).trim();if(l)try{await this.onLine(l)}catch{this.pendingRecord=Buffer.alloc(0),this.tailState.readOffset=i+o,this.checkpoint(i+o);return}o=c+1,this.tailState.offset=i+o,l&&++a%qf===0&&(this.checkpoint(this.tailState.offset),await Gr())}this.pendingRecord=Buffer.from(s.subarray(o)),this.checkpoint(i+o),this.tailState.readOffset<e&&(this.readPending=!0)}async readNewZstdFrames(e){let t=this.tailState.offset,n,s;try{if(n=Ks(this.filePath,t,e,Yf),n.frames.length===0)return;let o=n.frames[n.frames.length-1].end;if(s=await Vs(this.filePath,t,o-t),s.length<o-t)return}catch(o){f.warn("TRANSCRIPT","Failed to read zstd transcript frames",{file:this.filePath,error:o instanceof Error?o.message:String(o)});return}let i=0;for(let o of n.frames){let a;try{a=ga(s,{start:o.start-t,end:o.end-t})}catch{this.checkpoint(this.tailState.offset,this.tailState.partial);return}let c=this.tailState.partial,l=(c+a).split(`
|
|
37
|
+
`),u=l.pop()??"";for(let d=this.frameLinesDone;d<l.length;d++){if(this.closed){this.frameLinesDone=d,this.checkpoint(o.start,c);return}let p=l[d].trim();if(p){try{await this.onLine(p)}catch{this.frameLinesDone=d,this.tailState.readOffset=o.start,this.checkpoint(o.start,c);return}++i%qf===0&&await Gr()}}this.frameLinesDone=0,this.tailState.offset=o.end,this.tailState.readOffset=o.end,this.tailState.partial=u}this.checkpoint(this.tailState.offset,this.tailState.partial),n.tornStart===null&&this.tailState.offset<e&&(this.readPending=!0)}},Ys=class{constructor(e,t,n="in-process"){this.config=e;this.statePath=t;this.processor=new js(n),this.state=Ga(t)}config;statePath;processor;tailers=new Map;state;fileContexts=new Map;retirementCandidates=new Set;retirementTimer=null;missingTranscriptGraceMs=Zy;rootWatchers=[];rootWatchSettleTimers=new Set;startedAtMs=0;warnedZstdUnsupported=!1;startingTailers=new Set;stopped=!1;async start(){this.stopped=!1,this.startedAtMs=Date.now();for(let e of this.config.watches)await this.setupWatch(e);if(!this.stopped)for(let e of Object.keys(this.state.pendingTools??{}))this.tailers.has(e)||this.scheduleRetirementCheck(e)}stop(){this.stopped=!0;for(let e of this.tailers.values())e.close();this.tailers.clear();for(let e of this.rootWatchers)e.close();this.rootWatchers=[];for(let e of this.rootWatchSettleTimers)clearTimeout(e);this.rootWatchSettleTimers.clear(),this.retirementTimer&&clearTimeout(this.retirementTimer),this.retirementTimer=null,this.retirementCandidates.clear()}async setupWatch(e){let t=this.resolveSchema(e);if(!t){f.warn("TRANSCRIPT","Missing schema for watch",{watch:e.name});return}let n=X(e.path),s=this.resolveWatchFiles(n);for(let o of s)this.getFileContext(o);let i={stateChanged:!1};for(let o of s)await this.addTailer(o,e,t,!1,i),await Gr();i.stateChanged&&Qt(this.statePath,this.state),this.watchTranscriptRoot(n,e,t)}watchTranscriptRoot(e,t,n,s=!1){let i=this.selectWatchRoot(e);if(!i){f.debug("TRANSCRIPT","Watch root does not exist, skipping fs.watch",{watch:t.name,path:e});return}let{root:o,recursive:a}=i;try{let c=(0,N.watch)(o,{recursive:a,persistent:!0},(l,u)=>{a?this.handleRootWatchEvent(o,e,t,n,u):this.handleAncestorWatchEvent(c,o,e,t,n,u)});this.rootWatchers.push(c),(s||!a)&&this.settleRootWatch(c,o,a,e,t,n),f.info("TRANSCRIPT",a?"Watching transcript root recursively":"Transcript root does not exist yet; watching its closest existing directory",{watch:t.name,watchRoot:o})}catch(c){f.warn("TRANSCRIPT","Failed to start fs.watch on transcript root",{watch:t.name,watchRoot:o},c instanceof Error?c:void 0)}}handleRootWatchEvent(e,t,n,s,i){if(!i)return;let o=(0,H.resolve)(e,i).replace(/\\/g,"/"),a=this.tailers.get(o);if(a){if(!(0,N.existsSync)(o)){a.close(),this.tailers.delete(o),this.scheduleRetirementCheck(o);return}a.poke();return}this.touchesLiteralPrefix(o,t)&&this.addDiscoveredTailers(t,n,s)}handleAncestorWatchEvent(e,t,n,s,i,o){if(this.stopped||!this.rootWatchers.includes(e)||o&&!this.touchesLiteralPrefix((0,H.resolve)(t,o),n))return;let a=this.selectWatchRoot(n);a&&a.root===t&&!a.recursive||(e.close(),this.rootWatchers=this.rootWatchers.filter(c=>c!==e),this.watchTranscriptRoot(n,s,i,!0),this.addDiscoveredTailers(n,s,i))}settleRootWatch(e,t,n,s,i,o){let a=setTimeout(()=>{this.rootWatchSettleTimers.delete(a),!(this.stopped||!this.rootWatchers.includes(e))&&(n?this.addDiscoveredTailers(s,i,o):this.handleAncestorWatchEvent(e,t,s,i,o,null))},rb);this.rootWatchSettleTimers.add(a)}getFileContext(e){let t=this.fileContexts.get(e);return t||(t={cwd:this.state.cwds?.[e],pendingTools:this.state.pendingTools?.[e],isCurrent:()=>this.isCheckpointedFile(e)},this.fileContexts.set(e,t)),this.processor.registerFileContext(t),t}isCheckpointedFile(e){try{let t=(0,N.statSync)(e);return zs(t)===this.state.fileIdentities?.[e]&&t.size>=(this.state.offsets[e]??0)}catch{return!1}}scheduleRetirementCheck(e){this.retirementCandidates.add(e),this.retirementTimer??=setTimeout(()=>this.retireMissingTranscripts(),this.missingTranscriptGraceMs)}retireMissingTranscripts(){this.retirementTimer=null;let e=[...this.retirementCandidates];if(this.retirementCandidates.clear(),this.stopped)return;let t=!1;for(let n of e){if(this.tailers.has(n)||!ib(n))continue;let s=this.fileContexts.get(n);s&&this.processor.retireFileContext(s),this.fileContexts.delete(n),this.state.pendingTools?.[n]&&(delete this.state.pendingTools[n],t=!0)}t&&Qt(this.statePath,this.state)}forgetReplacedTranscript(e,t){this.processor.resetFileContext(t),delete this.state.pendingTools?.[e],delete this.state.cwds?.[e]}addDiscoveredTailers(e,t,n){for(let s of this.resolveWatchFiles(e))this.tailers.has(s)||this.addTailer(s,t,n,!0).catch(i=>{f.debug("TRANSCRIPT","Failed to add transcript tailer",{file:s,watch:t.name},i instanceof Error?i:void 0)})}touchesLiteralPrefix(e,t){let n=e.replace(/\\/g,"/"),s=(0,H.resolve)(this.literalWatchPrefix(t)).replace(/\\/g,"/"),i=(o,a)=>o.startsWith(a.endsWith("/")?a:a+"/");return n===s||i(n,s)||i(s,n)}literalWatchPrefix(e){let t=e;if(this.hasGlob(e)){let n=e.split(/[/\\]/),s=[];for(let i of n){if(/[*?[\]{}()]/.test(i))break;s.push(i)}if(s.length===0||s.length===1&&s[0]==="")return"";t=s.join(H.sep)}return t}selectWatchRoot(e){let t=this.literalWatchPrefix(e);if(!t)return null;let n=(0,H.resolve)(t);try{return{root:(0,N.statSync)(n).isDirectory()?n:(0,H.resolve)(n,".."),recursive:!0}}catch{}for(let s=(0,H.resolve)(n,"..");(0,H.resolve)(s,"..")!==s;s=(0,H.resolve)(s,".."))try{if((0,N.statSync)(s).isDirectory())return{root:s,recursive:!1}}catch{}return null}resolveSchema(e){return typeof e.schema=="string"?this.config.schemas?.[e.schema]??null:e.schema}resolveWatchFiles(e){if(this.hasGlob(e))return this.scanGlob(this.normalizeGlobPattern(e));if((0,N.existsSync)(e))try{return(0,N.statSync)(e).isDirectory()?[...this.scanGlob(this.normalizeGlobPattern((0,H.join)(e,"**","*.jsonl"))),...this.scanGlob(this.normalizeGlobPattern((0,H.join)(e,"**",`*${Gs}`)))]:[e]}catch(t){return f.debug("WORKER","Failed to stat watch path",{path:e},t instanceof Error?t:void 0),[]}return[]}scanGlob(e){try{return Array.from(new Bun.Glob(e).scanSync({absolute:!0,onlyFiles:!0,dot:!0}))}catch(t){let n=t?.code;if(n==="ENOENT"||n==="ENOTDIR")return[];throw t}}normalizeGlobPattern(e){return e.replace(/\\/g,"/")}hasGlob(e){return/[*?[\]{}()]/.test(e)}async addTailer(e,t,n,s=!1,i){if(e=X(e),!(this.tailers.has(e)||this.startingTailers.has(e))){this.startingTailers.add(e);try{await this.startTailer(e,t,n,s,i)}finally{this.startingTailers.delete(e)}}}async startTailer(e,t,n,s,i){let o=e.endsWith(Gs);if(o&&!zf()){this.warnedZstdUnsupported||(this.warnedZstdUnsupported=!0,f.warn("TRANSCRIPT","Skipping zstd transcripts: this runtime has no zlib.zstdDecompressSync (update Bun or Node)",{file:e}));return}let a=this.extractSessionIdFromPath(e),c=this.getFileContext(e),l=this.state.offsets[e],u=l??0,d=!1;if(l===void 0&&t.startAtEnd)try{let m=(0,N.statSync)(e);if(s&&m.mtimeMs>=this.startedAtMs-Vf&&await this.startedAfterThisWatcher(e,o,m.size)||(u=o?await nb(e,m.size):m.size),this.stopped)return;this.state.offsets[e]=u,d=!0}catch(m){f.debug("WORKER","Failed to stat file for startAtEnd offset",{file:e},m instanceof Error?m:void 0),u=0}try{let m=(0,N.statSync)(e),h=zs(m),E=this.state.fileIdentities?.[e],_=l!==void 0&&E!==void 0&&!ep(e,h,m.size,l,this.state.checkpointFingerprints?.[e]);if(_&&(u=0,this.state.offsets[e]=0,delete this.state.partials?.[e],delete this.state.frameLines?.[e],this.forgetReplacedTranscript(e,c)),_||h!==E){(this.state.fileIdentities??={})[e]=h;let b=ha(e,u,h);b!==null?(this.state.checkpointFingerprints??={})[e]=b:delete this.state.checkpointFingerprints?.[e],d=!0}}catch(m){f.debug("WORKER","Failed to stat transcript file for its identity",{file:e},m instanceof Error?m:void 0)}d&&(s?Qt(this.statePath,this.state):i&&(i.stateChanged=!0));let p=u>0&&(!!n.sessionIdPath||!!t.subagentSource||!c.cwd),g=new ma(e,u,async m=>{try{p&&(p=!1,await this.primeFromFirstLine(e,u,t,n,a,c)),await this.handleLine(m,t,n,e,a,c)}finally{c.pendingTools&&((this.state.pendingTools??={})[e]=c.pendingTools),c.cwd&&c.cwd!==this.state.cwds?.[e]&&((this.state.cwds??={})[e]=c.cwd)}},(m,h,E,_,b)=>{_!==void 0&&((this.state.fileIdentities??={})[e]=_),b!==void 0?(this.state.checkpointFingerprints??={})[e]=b:this.state.checkpointFingerprints&&delete this.state.checkpointFingerprints[e],this.state.offsets[e]=m,h?(this.state.partials??={})[e]=h:this.state.partials&&delete this.state.partials[e],E>0?(this.state.frameLines??={})[e]=E:this.state.frameLines&&delete this.state.frameLines[e],Qt(this.statePath,this.state)},this.state.partials?.[e]??"",this.state.frameLines?.[e]??0,this.state.fileIdentities?.[e],this.state.checkpointFingerprints?.[e],()=>this.forgetReplacedTranscript(e,c));g.start(),this.tailers.set(e,g),f.info("TRANSCRIPT","Watching transcript file",{file:e,watch:t.name,schema:n.name})}async startedAfterThisWatcher(e,t,n){let s=await sb(e,t,n);return s!==null?s>=this.startedAtMs-Vf:n<=eb}async primeFromFirstLine(e,t,n,s,i,o){try{let a=await Zf(e,e.endsWith(Gs),t);if(a===null)return;await this.processor.primeSessionContext(JSON.parse(a),n,s,i,o)}catch(a){f.debug("TRANSCRIPT","Could not read the first line of a resumed transcript",{watch:n.name,file:(0,H.basename)(e)},a instanceof Error?a:void 0)}}async handleLine(e,t,n,s,i,o){try{let a=JSON.parse(e);await this.processor.processEntry(a,t,n,i??void 0,o)}catch(a){if(a instanceof jr||a instanceof Kr||a instanceof bt)throw f.warn("TRANSCRIPT","Transcript event not accepted; it is retried from its own line",{watch:t.name,file:(0,H.basename)(s),error:a.message}),a;a instanceof Error?f.debug("TRANSCRIPT","Failed to parse transcript line",{watch:t.name,file:(0,H.basename)(s)},a):f.warn("TRANSCRIPT","Failed to parse transcript line (non-Error thrown)",{watch:t.name,file:(0,H.basename)(s),error:String(a)})}}extractSessionIdFromPath(e){let t=e.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return t?t[0]:null}};function _a(r,e){let t=r.indexOf(e);return t===-1?null:r[t+1]??null}function tp(r){(0,rp.existsSync)(X(r))||(si(r),console.log(`Created sample config: ${X(r)}`))}async function np(r,e){switch(r){case"init":{let t=_a(e,"--config")??vt;return si(t),console.log(`Created sample config: ${X(t)}`),0}case"watch":{let t=_a(e,"--config")??vt;tp(t);let n=B.loadFromFile(ie),{config:s,scoped:i,removed:o}=$a(ni(t),n);if(i>0&&console.log(`Scoped ${i} Codex transcript watch(es) to subagent sessions (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true); native hooks capture top-level sessions.`),o>0&&console.log(`Skipped ${o} Codex transcript watch(es): native hooks capture top-level Codex sessions, and subagent capture is opt-in (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true).`),s.watches.length===0)return console.log(`No active transcript watches in ${X(t)}; nothing to watch.`),1;let a=X(s.stateFile??Qr),c=new Ys(s,a,"spool");await c.start(),console.log("Transcript watcher running. Press Ctrl+C to stop.");let l=()=>{c.stop(),process.exit(0)};return process.on("SIGINT",l),process.on("SIGTERM",l),await new Promise(()=>{})}case"validate":{let t=_a(e,"--config")??vt;return tp(t),ni(t),console.log(`Config OK: ${X(t)}`),0}default:return console.log("Usage: claude-mem transcript <init|watch|validate> [--config <path>]"),1}}var ab=process.argv[2],cb=process.argv.slice(3);np(ab,cb).then(r=>{process.exit(r)}).catch(r=>{console.error(r),process.exit(1)});
|
|
38
38
|
/*! Bundled license information:
|
|
39
39
|
|
|
40
40
|
@posthog/core/dist/vendor/uuidv7.mjs:
|