mirror of
https://github.com/thedotmack/claude-mem.git
synced 2026-09-20 04:23:02 +08:00
85fc991c65
Package-facing patch bump so 13.24.20 ships the commits now on main after v13.24.19. Rebuilds plugin bundles so the injected version matches. Does not npm publish.
53 lines
257 KiB
JavaScript
Executable File
53 lines
257 KiB
JavaScript
Executable File
#!/usr/bin/env bun
|
|
var __CM_FILENAME__ = typeof __filename !== "undefined" ? __filename : require("node:path").resolve(process.argv[1] || "");
|
|
var __CM_DIRNAME__ = typeof __dirname !== "undefined" ? __dirname : require("node:path").dirname(__CM_FILENAME__);
|
|
"use strict";var Hl=Object.create;var Jn=Object.defineProperty;var Gl=Object.getOwnPropertyDescriptor;var Kl=Object.getOwnPropertyNames;var Vl=Object.getPrototypeOf,ql=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 zl=(r,e)=>{for(var t in e)Jn(r,t,{get:e[t],enumerable:!0})},Yl=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Kl(e))!ql.call(r,s)&&s!==t&&Jn(r,s,{get:()=>e[s],enumerable:!(n=Gl(e,s))||n.enumerable});return r};var he=(r,e,t)=>(t=r!=null?Hl(Vl(r)):{},Yl(e||!r||!r.__esModule?Jn(t,"default",{value:r,enumerable:!0}):t,r));function Xn(r){return(Jl??process.stderr.write.bind(process.stderr))(r)}function Me(r){Xn(r)}function ji(r,e={}){lr&&lr.length>0&&(Xn(lr.join("")),lr=[]),Xn(r.endsWith(`
|
|
`)?r:`${r}
|
|
`),e.skipExit||process.exit(2)}var Jl,lr,ur=wt(()=>{"use strict";Jl=null;lr=null});function Ql(r){return r.replace(/^\uFEFF/,"")}function xe(r){return JSON.parse(Ql(r))}function Zl(r){(0,T.existsSync)(r)||(0,T.mkdirSync)(r,{recursive:!0})}function Ze(r,e){let t=r;try{if((0,T.lstatSync)(r).isSymbolicLink())try{t=(0,T.realpathSync)(r)}catch(l){let u=l instanceof Error?l:new Error(String(l));Me(`claude-mem: realpathSync failed for ${r}, resolving symlink manually: ${u.message}
|
|
`);let f=(0,T.readlinkSync)(r);t=(0,ie.resolve)((0,ie.dirname)(r),f)}}catch(l){let u=l.code;if(u!=="ENOENT"&&u!=="ENOTDIR")throw l}Zl((0,ie.dirname)(t));let n=(0,ie.dirname)(t),s=(0,ie.basename)(t),i=(0,ie.join)(n,`.${s}.${process.pid}.${(0,Bi.randomBytes)(6).toString("hex")}.tmp`),o=Buffer.from(JSON.stringify(e,null,2)+`
|
|
`,"utf-8"),a;try{a=(0,T.statSync)(t).mode&511}catch{}let c;try{c=a!==void 0?(0,T.openSync)(i,"w",a):(0,T.openSync)(i,"w");let l=0;for(;l<o.length;){let u=(0,T.writeSync)(c,o,l,o.length-l);if(u===0)throw new Error(`writeSync stalled at ${l}/${o.length} bytes`);l+=u}if((0,T.fsyncSync)(c),(0,T.closeSync)(c),c=void 0,(0,T.renameSync)(i,t),!Xl){let u;try{u=(0,T.openSync)(n,"r"),(0,T.fsyncSync)(u)}catch(f){let p=f instanceof Error?f:new Error(String(f));Me(`claude-mem: directory fsync failed for ${n}: ${p.message}
|
|
`)}finally{if(u!==void 0)try{(0,T.closeSync)(u)}catch{}}}}catch(l){if(c!==void 0)try{(0,T.closeSync)(c)}catch{}try{(0,T.unlinkSync)(i)}catch{}throw l}}var T,Bi,ie,Xl,et=wt(()=>{"use strict";T=require("fs"),Bi=require("crypto"),ie=require("path");ur();Xl=process.platform==="win32"});function oe(r,e=process.platform,t=(0,Wi.homedir)()){return typeof r!="string"||r.length===0?r:r==="~"?t:r.startsWith("~/")||e==="win32"&&r.startsWith("~\\")?(0,Hi.join)(t,r.slice(2)):r}var Wi,Hi,vt=wt(()=>{"use strict";Wi=require("os"),Hi=require("path")});function eu(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,R.dirname)((0,Gi.fileURLToPath)(su.url))}function Fe(){if(process.env.CLAUDE_MEM_DATA_DIR)return oe(process.env.CLAUDE_MEM_DATA_DIR);let r=(0,R.join)((0,dr.homedir)(),".claude-mem"),e=(0,R.join)(r,"settings.json");try{if((0,At.existsSync)(e)){let t=xe((0,At.readFileSync)(e,"utf-8")),n=t.env??t;if(n.CLAUDE_MEM_DATA_DIR)return oe(n.CLAUDE_MEM_DATA_DIR)}}catch{}return r}function Vi(r,e=(0,dr.homedir)(),t=process.platform){return oe(r,t,e)}var R,dr,At,Gi,su,tm,x,tu,Qn,tt,ru,rt,Ki,rm,Zn,nu,L,U=wt(()=>{"use strict";R=require("path"),dr=require("os"),At=require("fs"),Gi=require("url");et();vt();vt();su={};tm=eu();x=Fe(),tu=(0,R.join)((0,dr.homedir)(),".claude"),Qn=process.env.CLAUDE_CONFIG_DIR||tu,tt=(0,R.join)(Qn,"plugins","marketplaces","thedotmack"),ru=(0,R.join)(x,"logs"),rt=(0,R.join)(x,"settings.json"),Ki="claude-mem.db",rm=(0,R.join)(x,Ki),Zn=(0,R.join)(x,"observer-sessions"),nu=(0,R.basename)(Zn);L={dataDir:()=>x,workerPid:()=>(0,R.join)(x,"worker.pid"),serverPid:()=>(0,R.join)(x,".server-beta.pid"),serverPort:()=>(0,R.join)(x,".server-beta.port"),serverRuntime:()=>(0,R.join)(x,".server-beta.runtime.json"),settings:()=>(0,R.join)(x,"settings.json"),database:()=>(0,R.join)(x,Ki),chroma:()=>(0,R.join)(x,"chroma"),combinedCerts:()=>(0,R.join)(x,"combined_certs.pem"),transcriptsConfig:()=>(0,R.join)(x,"transcript-watch.json"),transcriptsState:()=>(0,R.join)(x,"transcript-watch-state.json"),corpora:()=>(0,R.join)(x,"corpora"),supervisorRegistry:()=>(0,R.join)(x,"supervisor.json"),envFile:()=>(0,R.join)(x,".env"),logsDir:()=>ru}});var _e,Yi,ts,es,rs,d,A=wt(()=>{"use strict";_e=require("fs"),Yi=require("path");U();ur();et();ts=(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))(ts||{}),es=null,rs=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=L.logsDir();(0,_e.existsSync)(e)||(0,_e.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,Yi.join)(e,`claude-mem-${t}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e instanceof Error?e.message:String(e)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=L.settings();if((0,_e.existsSync)(e)){let t=(0,_e.readFileSync)(e,"utf-8"),s=(xe(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=ts[s]??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}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}
|
|
${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?JSON.stringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let 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=ts[e].padEnd(5),c=t.padEnd(6),l="";s?.correlationId?l=`[${s.correlationId}] `:s?.sessionId&&(l=`[session-${s.sessionId}] `);let u="";if(i!=null)if(i instanceof Error)u=this.getLevel()===0?`
|
|
${i.message}
|
|
${i.stack}`:` ${i.message}`;else if(this.getLevel()===0&&typeof i=="object")try{u=`
|
|
`+JSON.stringify(i,null,2)}catch{u=" "+this.formatData(i)}else u=" "+this.formatData(i);let f="";if(s){let{sessionId:g,memorySessionId:h,correlationId:m,...E}=s;Object.keys(E).length>0&&(f=` {${Object.entries(E).map(([b,I])=>`${b}=${I}`).join(", ")}}`)}let p=`[${o}] [${a}] [${c}] ${l}${n}${f}${u}`;if(this.logFilePath)try{(0,_e.appendFileSync)(this.logFilePath,p+`
|
|
`,"utf8")}catch(g){let h=g instanceof Error?g:new Error(String(g));Me(`[LOGGER] Failed to write to log file: ${h.message}
|
|
${h.stack??""}
|
|
`)}else Me(p+`
|
|
`)}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){es=e}error(e,t,n,s){this.log(3,e,t,n,s),this.routeErrorToSink(t,n,s)}routeErrorToSink(e,t,n){try{if(!es||!(n instanceof Error))return;es(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)}},d=new rs});var me=require("fs"),qi=require("os"),fr=require("path");U();var nt=L.transcriptsConfig(),pr=L.transcriptsState(),iu={version:1,schemas:{},watches:[],stateFile:pr};function ou(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name;if(!(r.name==="codex"||e==="codex")||!r.path)return!1;let n=K(r.path).replace(/\\/g,"/"),s=(0,fr.join)((0,qi.homedir)(),".codex","sessions").replace(/\\/g,"/");return n===`${s}/**/*.jsonl`}function zi(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&&ou(r)}function K(r){return r&&Vi(r)}function Tt(r=nt){let e=K(r);if(!(0,me.existsSync)(e))throw new Error(`Transcript watch config not found: ${e}`);let t=(0,me.readFileSync)(e,"utf-8"),n=JSON.parse(t);if(!n.version||!n.watches)throw new Error(`Invalid transcript watch config: ${e}`);return n.stateFile||(n.stateFile=pr),n}function gr(r=nt){let e=K(r),t=(0,fr.dirname)(e);(0,me.existsSync)(t)||(0,me.mkdirSync)(t,{recursive:!0}),(0,me.writeFileSync)(e,JSON.stringify(iu,null,2))}var W=require("fs"),se=require("path");A();var Ee=require("fs"),Ji=require("path");A();function Xi(r){try{if(!(0,Ee.existsSync)(r))return{offsets:{}};let e=(0,Ee.readFileSync)(r,"utf-8"),t=JSON.parse(e);return t.offsets?t:{offsets:{}}}catch(e){return d.warn("TRANSCRIPT","Failed to load watch state, starting fresh",{statePath:r,error:e instanceof Error?e.message:String(e)}),{offsets:{}}}}function Qi(r,e){try{let t=(0,Ji.dirname)(r);(0,Ee.existsSync)(t)||(0,Ee.mkdirSync)(t,{recursive:!0}),(0,Ee.writeFileSync)(r,JSON.stringify(e,null,2))}catch(t){d.warn("TRANSCRIPT","Failed to save watch state",{statePath:r,error:t instanceof Error?t.message:String(t)})}}var cr=he(require("path"),1);var F=he(require("path"),1),Fo=require("crypto"),P=require("fs");var ns=require("node:child_process");function Pt(r,e,t){return(0,ns.spawn)(r,e??[],{windowsHide:!0,...t})}var au=new Set([".cmd",".bat"]),cu=new Set([".exe",".com"]),pm=new Set([...cu,...au]);A();var V={HEALTH_CHECK:3e3,API_REQUEST:3e4,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},Oe={SUCCESS:0,BLOCKING_ERROR:2};function ke(r){return process.platform==="win32"?Math.round(r*V.WINDOWS_MULTIPLIER):r}var hr=require("fs"),ss=require("path"),It=require("os");et();var lu="security_alert",q=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_API_TIMEOUT_MS:String(ke(V.API_REQUEST)),CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_DATA_DIR:(0,ss.join)((0,It.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_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,ss.join)((0,It.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,It.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_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_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_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:""};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let 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,hr.existsSync)(e)){let l=this.getAllDefaults();try{Ze(e,l),console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(u){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,u instanceof Error?u.message:String(u))}return this.finalizeSettings(l,t)}let n=(0,hr.readFileSync)(e,"utf-8"),s=xe(n),i=s,o=s.env&&typeof s.env=="object"&&!Array.isArray(s.env),a=o&&Object.keys(s).some(l=>l!=="env");if(o&&(i=s.env,!a))try{Ze(e,i),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(l){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,l instanceof Error?l.message:String(l))}if(i.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===lu){i={...i,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{Ze(e,a?{...s,env:i}:i),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(l){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,l instanceof Error?l.message:String(l))}}let c={...this.DEFAULTS};for(let l of Object.keys(this.DEFAULTS))i[l]!==void 0&&(c[l]=i[l]);return this.finalizeSettings(c,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)}}};U();U();var mr=null;function ye(){return mr!==null||(mr=q.loadFromFile(rt)),mr}var we=require("fs");A();var be=require("fs"),us=he(require("path"),1);A();var uu=["CLAUDECODE_","CLAUDE_CODE_"],du=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),fu=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"]),pu=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...fu]);function Rt(r=process.env){let e={};for(let[t,n]of Object.entries(r))if(n!==void 0){if(pu.has(t)){e[t]=n;continue}du.has(t)||uu.some(s=>t.startsWith(s))||(e[t]=n)}return e}U();var os=require("child_process"),eo=require("fs");A();var gu=5e3,Zi=new Map,is=0;function hu(r){is+=1;let e=(0,os.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:{...Rt(process.env),LC_ALL:"C",LANG:"C"}});if(e.status===0){let t=e.stdout.trim();return t.length>0?t:null}return null}function mu(r,e=!1){if(!e){let n=Zi.get(r);if(n&&Date.now()-n.capturedAtMs<gu)return n.token}let t=null;try{t=hu(r)}catch(n){d.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:r,error:n instanceof Error?n.message:String(n)}),t=null}return Zi.set(r,{token:t,capturedAtMs:Date.now()}),t}function to(r,e){if(!Number.isInteger(r)||r<=0)return null;if(process.platform==="linux"){is+=1;try{let t=(0,eo.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 d.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}if(process.platform==="win32")return mu(r,e);is+=1;try{let t=(0,os.spawnSync)("ps",["-p",String(r),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Rt(process.env),LC_ALL:"C",LANG:"C"}});if(t.status!==0)return null;let n=t.stdout.trim();return n.length>0?n:null}catch(t){return d.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}function De(r){return to(r,!1)}function Se(r,e){if(e===null)return!0;let t=to(r,!0);return t===null?!0:t===e}var ro=require("child_process"),yr=require("fs"),no=require("util");A();var as=(0,no.promisify)(ro.execFile),_u=128,Eu=/not found|no running instance|no tasks/i,_r=class extends Error{pid;constructor(e,t,n){super(t,n),this.name="ProcessTreeKillError",this.pid=e}};async function ae(r,e={}){let t=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:De(r),s=()=>Se(r,n);if(!s()){d.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:r});return}if(d.debug("PROCESS",`Killing process tree rooted at PID ${r}`,{immediate:t}),process.platform==="win32"){try{await as("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===_u||Eu.test(`${a} ${c}`)){d.debug("PROCESS","taskkill reported the process was already gone",{pid:r});return}throw new _r(r,`taskkill failed for PID ${r} (exit ${String(o)}): ${a.trim()||c}`,{cause:i})}return}try{let i=t?"SIGKILL":"SIGTERM",o=await Er(r);for(let l of o){if(!Se(l.pid,l.startToken)){d.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)),f=u.code;f!=="ESRCH"&&d.debug("PROCESS",`Failed to ${i} PID ${r}`,{code:f},u)}else d.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 Er(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(!Se(l,u)){d.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 _r(r,`tree-kill failed for PID ${r}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function yu(){return process.platform==="win32"?wu():process.platform==="linux"?Su():bu()}function Su(){let r=[],e;try{e=(0,yr.readdirSync)("/proc")}catch(t){return d.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,yr.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 bu(){let r;try{r=(await as("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(t){return d.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(`
|
|
`)){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 wu(){let r;try{r=(await as("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 d.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 Er(r){let e=await yu(),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 vu=5e3,Au=1e3,Tu=L.supervisorRegistry();function H(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:(d.debug("SYSTEM","PID check failed",{pid:r,code:t}),!1)}return d.warn("SYSTEM","PID check threw non-Error",{pid:r,error:String(e)}),!1}}async function Sr(r,e){let t=Date.now()+e;for(;Date.now()<t;){if(r.every(n=>!H(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function br(r){if(!r||!H(r.pid))return!1;if(!r.startToken)return!0;let e=De(r.pid);if(e===null)return!0;let t=e===r.startToken;return t||d.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:r.pid,stored:r.startToken,current:e}),t}var ds=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;constructor(e=Tu){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,(0,be.mkdirSync)(us.default.dirname(this.registryPath),{recursive:!0}),!(0,be.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,be.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(n))this.entries.set(s,i)}catch(t){t instanceof Error?d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},t):d.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(t)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&d.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}register(e,t,n){this.initialize(),this.entries.set(e,t),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e){this.initialize();let t=this.entries.get(e);this.entries.delete(e),this.runtimeProcesses.delete(e),this.persist(),t?.type==="sdk"&&ls()}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)H(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)ls();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;d.info("SYSTEM",`Reaping ${t.length} process(es) for session ${e}`,{sessionId:n,pids:t.map(a=>a.pid)});let s=t.filter(a=>H(a.pid)),i=new Map(s.map(a=>[a.pid,De(a.pid)]));for(let a of s)try{process.platform==="win32"?await ae(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"&&d.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):d.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}await Sr(s,vu);let o=s.filter(a=>H(a.pid));for(let a of o){d.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(!Se(a.pid,c)){d.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:n});continue}try{process.platform==="win32"?await ae(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"&&d.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):d.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()+Au;for(;Date.now()<a&&o.filter(l=>H(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"&&ls();return d.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())};(0,be.mkdirSync)(us.default.dirname(this.registryPath),{recursive:!0}),(0,be.writeFileSync)(this.registryPath,JSON.stringify(e,null,2))}},cs=null;function wr(){return cs||(cs=new ds),cs}var Dm=180*1e3,Pu=[];function ls(){let r=Pu.shift();r&&r.notify()}var st=require("fs");A();U();var Iu=L.workerPid();async function io(r){let e=r.currentPid??process.pid,t=r.pidFilePath??Iu,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(!H(c.pid)){r.registry.unregister(c.id);continue}o.set(c.id,De(c.pid)),i.set(c.id,await Er(c.pid));try{await so(c,"SIGTERM")}catch(l){l instanceof Error?d.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:c.pid,pgid:c.pgid,type:c.type},l):d.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(l)})}}await Sr(s,5e3);let a=s.filter(c=>H(c.pid)||(i.get(c.id)??[]).some(l=>H(l.pid)));for(let c of a){let l=Se(c.pid,o.get(c.id)??null);l||d.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:c.pid,type:c.type});try{l&&await so(c,"SIGKILL")}catch(u){u instanceof Error?d.debug("SYSTEM","Failed to force kill child process",{pid:c.pid,pgid:c.pgid,type:c.type},u):d.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(u)})}finally{Ru(i.get(c.id)??[],c.pid)}}await Sr(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);oo(t,e),r.registry.pruneDeadEntries()}function oo(r,e,t=!1){if(!(0,st.existsSync)(r))return;let n=null;try{let o=JSON.parse((0,st.readFileSync)(r,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){d.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||!H(n);if(!s&&!(t&&i)){d.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,st.rmSync)(r,{force:!0})}catch(o){o instanceof Error?d.debug("SYSTEM","Failed to remove PID file",{pidFilePath:r},o):d.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:r,error:String(o)})}}function Ru(r,e){for(let{pid:t,startToken:n}of r)if(!(t===e||!H(t))){if(!Se(t,n)){d.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:t,rootPid:e});continue}try{process.kill(t,"SIGKILL"),d.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"&&d.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:t,rootPid:e,errno:i})}}}async function so(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 ae(t,{signalMode:"immediate"});return}try{process.kill(t,e)}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}return}await ae(t)}A();var ao=3e4,it=null;function Cu(){let e=wr().pruneDeadEntries();e>0&&d.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function co(){it===null&&(it=setInterval(Cu,ao),it.unref(),d.debug("SYSTEM","Health checker started",{intervalMs:ao}))}function lo(){it!==null&&(clearInterval(it),it=null,d.debug("SYSTEM","Health checker stopped"))}var uo=require("child_process"),fo=require("util");A();var Mu=(0,fo.promisify)(uo.execFile),xu=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function Fu(r){let e=[];for(let t of r.split(`
|
|
`)){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 Ou(){let r=await Mu("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Fu(r.stdout)}function ku(r,e){let t=r.filter(o=>xu.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 po(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??Ou,s=r.isAlive??H,i=r.killTree??(g=>ae(g,{signalMode:"graceful"})),o=r.selfPid??process.pid,a;try{a=await n()}catch(g){return d.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}=ku(a,{isAlive:s,selfPid:o});if(t.matched=c.length,t.trees=l.length,t.orphans=u.length,u.length===0)return d.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:t.matched,trees:t.trees}),t;d.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(g=>g.pid)});let f=new Set,p=8;for(let g=0;g<u.length;g+=p){let h=u.slice(g,g+p);(await Promise.allSettled(h.map(E=>i(E.pid)))).forEach((E,_)=>{let b=h[_];E.status==="fulfilled"?(t.killed+=1,f.add(b.pid)):(t.failed+=1,d.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"&&f.has(g.pid)&&(r.registry.unregister(g.id),t.unregistered+=1);return d.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:t.orphans,killed:t.killed,failed:t.failed,unregistered:t.unregistered}),t}U();var fs=L.workerPid(),ps=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(),vr({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,po({registry:this.registry}).catch(t=>{d.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:t instanceof Error?t.message:String(t)})}),co()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let t=async n=>{if(this.shutdownInitiated){d.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,d.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?d.error("SYSTEM","Error during shutdown",{},s):d.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?d.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):d.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",()=>{d.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{t("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}lo(),this.stopPromise=io({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){this.registry.unregister(e)}getRegistry(){return this.registry}},t_=new ps(wr());function gs(){if(!(0,we.existsSync)(fs))return null;let r;try{r=JSON.parse((0,we.readFileSync)(fs,"utf-8"))}catch{return null}return r!==null&&br(r)?r:null}function vr(r={}){let e=r.pidFilePath??fs;if(!(0,we.existsSync)(e))return"missing";let t=null;try{t=JSON.parse((0,we.readFileSync)(e,"utf-8"))}catch(s){return s instanceof Error?d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):d.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),(0,we.rmSync)(e,{force:!0}),"invalid"}return br(t)&&t?((r.logAlive??!0)&&d.info("SYSTEM","Worker already running (PID alive)",{existingPid:t.pid,existingPort:t.port,startedAt:t.startedAt}),"alive"):(d.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,we.rmSync)(e,{force:!0}),"stale")}ur();var hs=require("path"),Tr=require("fs"),ho=require("crypto");U();var Ar=require("fs");et();function go(r,e){if(!(0,Ar.existsSync)(r))return e;try{return xe((0,Ar.readFileSync)(r,"utf-8"))}catch(t){throw new Error(`Corrupt JSON file, refusing to overwrite: ${r}: ${t instanceof Error?t.message:String(t)}`)}}A();var mo="telemetry.json";function Du(r){let e=r.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function Lu(r,e){if(Du(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 Pr(r,e){return Lu(r,e).enabled}function _o(r){let e=r.CLAUDE_MEM_TELEMETRY_ERRORS?.toLowerCase();return!(e==="0"||e==="false"||e==="off")}function Nu(){return(0,hs.join)(Fe(),mo)}function Ct(){let r;try{r=go(Nu(),null)}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.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 Uu(r){let e=Fe();(0,Tr.mkdirSync)(e,{recursive:!0}),(0,Tr.writeFileSync)((0,hs.join)(e,mo),JSON.stringify(r,null,2)+`
|
|
`)}function Ir(){let r=Ct();if(r?.installId)return r.installId;let e=(0,ho.randomUUID)();return Uu({installId:e,decidedAt:""}),e}var $u=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","install_method","interactive","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_invalid_output","top_model","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),Eo=200;function ju(r,e){if(!(!r||typeof r!="object"))for(let t of Object.keys(r)){if(!$u.has(t))continue;let n=r[t];typeof n=="string"?e[t]=n.length>Eo?n.slice(0,Eo):n:(typeof n=="number"&&Number.isFinite(n)||typeof n=="boolean")&&(e[t]=n)}}function Rr(r){let e={};try{ju(r,e)}catch{}return e}var ms=he(require("os"),1);A();var Bu="13.24.20",Wu="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Hu="https://us.i.posthog.com";function Cr(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||Wu}function Mr(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Hu}var Gu=["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 xr(r){let e={};for(let t of Gu)r[t]!==void 0&&(e[t]=r[t]);return e}function Ku(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||ms.default.release().toLowerCase().includes("microsoft")}catch(r){let e=r instanceof Error?r:new Error(String(r));return d.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function Fr(){return{version:Bu,os:process.platform,os_version:ms.default.release(),is_wsl:Ku(),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 Vu=2e3;async function yo(r,e,t){try{if(!Pr(process.env,Ct()))return;let n=Rr({...Fr(),...e??{}});if(t?.person?n.$set=xr(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
|
|
`);return}let s=Cr(),i=new AbortController,o=setTimeout(()=>i.abort(),Vu);try{await qu(s,r,n,i.signal)}finally{clearTimeout(o)}}catch{}}async function qu(r,e,t,n){await fetch(`${Mr()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r,event:e,distinct_id:Ir(),properties:t}),signal:n})}var ve=he(require("path"),1),So=require("os"),te=require("fs"),ys=require("child_process");A();A();A();U();var O_=L.dataDir(),k_=L.workerPid();function Yu(r){try{return(0,te.realpathSync)(r)}catch{return null}}function _s(r){return r?/(^|[\\/])bun(\.exe)?$/i.test(r.trim()):!1}function Ju(r,e){let t=e==="win32"?`where ${r}`:`which ${r}`,n;try{n=(0,ys.execSync)(t,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(i){return i instanceof Error?d.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t},i):d.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t},new Error(String(i))),null}return n.split(/\r?\n/).map(i=>i.trim()).find(i=>i.length>0)||null}var Es;function Ss(r={}){let e=Object.keys(r).length===0;if(e&&Es!==void 0)return Es;let t=Xu(r);return e&&t!==null&&(Es=t),t}function Xu(r){let e=r.platform??process.platform,t=r.execPath??process.execPath;if(_s(t))return t;let n=r.env??process.env,s=r.homeDirectory??(0,So.homedir)(),i=r.pathExists??te.existsSync,o=r.lookupInPath??Ju,a=r.realpath??Yu,c=e==="win32"?[n.BUN,n.BUN_PATH,ve.default.join(s,".bun","bin","bun.exe"),ve.default.join(s,".bun","bin","bun"),n.USERPROFILE?ve.default.join(n.USERPROFILE,".bun","bin","bun.exe"):void 0,n.LOCALAPPDATA?ve.default.join(n.LOCALAPPDATA,"bun","bun.exe"):void 0,n.LOCALAPPDATA?ve.default.join(n.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,n.npm_config_prefix?ve.default.join(n.npm_config_prefix,"bun.exe"):void 0]:[n.BUN,n.BUN_PATH,ve.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?ve.default.join(n.npm_config_prefix,"bin","bun"):void 0];for(let f of c){let p=f?.trim();if(p&&(_s(p)&&i(p)||p.toLowerCase()==="bun"))return p}let l=o("bun",e)?.trim();if(!l||!_s(l))return null;let u=a(l)??l;return i(u)?u:null}var bo=he(require("net"),1);A();U();function bs(){return q.loadFromFile(rt).CLAUDE_MEM_WORKER_HOST}function wo(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var vo=5e3;async function Qu(r,e,t="GET",n=vo){let s=await fetch(`http://${wo(bs())}:${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 Ao(r,e=vo){if(process.platform==="win32")try{let t=await fetch(`http://${wo(bs())}:${r}/api/health`,{signal:AbortSignal.timeout(Math.max(1,e))});if(t.ok)return!0;d.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:r,status:t.status})}catch(t){t instanceof Error?d.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,message:t.message}):d.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,error:String(t)})}return new Promise(t=>{let n=bo.default.createServer(),s=bs();n.once("error",i=>{i.code==="EADDRINUSE"?t(!0):t(!1)}),n.once("listening",()=>{n.close(()=>t(!1))}),n.listen(r,s)})}async function Zu(r){try{let e=await Qu(r,"/api/health");return e.ok?JSON.parse(e.body).version:null}catch{return d.debug("SYSTEM","Could not fetch worker version",{}),null}}async function To(r,e){let t=e??"unknown",n=await Zu(r);return!n||t==="unknown"?{matches:!0,pluginVersion:t,workerVersion:n}:{matches:t===n,pluginVersion:t,workerVersion:n}}A();var Or=require("path"),z=require("fs");U();A();var ed=9e4;function Po(){return(0,Or.join)(Fe(),"spawn.lock")}function ws(){let r=Po(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let t=0;t<2;t++)try{return(0,z.mkdirSync)((0,Or.dirname)(r),{recursive:!0}),(0,z.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 d.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,z.statSync)(r).mtimeMs}catch{continue}if(Date.now()-o<=ed)return!1;let a;try{a=(0,z.statSync)(r).mtimeMs}catch{continue}if(a!==o)return!1;try{(0,z.unlinkSync)(r)}catch{return!1}}return!1}function vs(){let r=Po();try{if(JSON.parse((0,z.readFileSync)(r,"utf-8")).pid!==process.pid)return;(0,z.unlinkSync)(r)}catch{}}et();function Oo(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;d.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max})}return e}var Br=Oo("CLAUDE_MEM_HEALTH_TIMEOUT_MS",ke(V.HEALTH_CHECK),{min:500,max:3e5}),td=Oo("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",ke(V.HOOK_READINESS_WAIT),{min:0,max:3e5}),rd={min:500,max:3e5};function ko(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 nd(r){return ko()?{...r,verbose:!0}:r}function sd(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 id(r,e,t){let n=typeof e.method=="string"?e.method:"GET",s=sd(t),i=JSON.stringify(s);d.warn("SYSTEM","Worker IPC fetch failed",{url:r,method:n},i),Me(`[claude-mem] fetch verbose: ${n} ${r} ${i}
|
|
`)}async function Do(r,e={}){let t=nd(e);try{return await fetch(r,t)}catch(n){throw ko()&&id(r,e,n),n}}async function Is(r,e={},t){try{return await Do(r,{...e,signal:AbortSignal.timeout(t)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${t}ms`):n}}var kr=null,Dr=null,Lr=null,Nr=null;function od(){return F.default.join(q.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Rs(){return Lr!==null||(Lr=q.loadFromFile(od())),Lr}function Io(r,e){if(!r)return null;let t=parseInt(r,10);return Number.isFinite(t)&&t>=e.min&&t<=e.max?t:null}function ad(r,e,t){let n=process.env[r];if(n!==void 0){let o=Io(n,t);return o!==null?o:(d.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max}),e)}let s=Rs()[r],i=Io(s,t);return i!==null?i:(d.warn("SYSTEM",`Invalid ${r} in settings.json, using default`,{value:s,min:t.min,max:t.max}),e)}function He(){if(kr!==null)return kr;let r=Rs();return kr=parseInt(r.CLAUDE_MEM_WORKER_PORT,10),kr}function cd(){return Dr!==null||(Dr=Rs().CLAUDE_MEM_WORKER_HOST),Dr}function ld(){return Nr!==null||(Nr=ad("CLAUDE_MEM_API_TIMEOUT_MS",ke(V.API_REQUEST),rd)),Nr}function ud(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}function dd(r){return`http://${ud(cd())}:${He()}${r}`}function Ae(r,e={}){let t=e.method??"GET",n=e.timeoutMs??ld(),s=dd(r),i={method:t};return e.headers&&(i.headers=e.headers),e.body&&(i.body=e.body),n>0?Is(s,i,n):Do(s,i)}async function fd(){return(await Ae("/api/health",{timeoutMs:Br})).ok}async function Ts(r=Br){return(await Ae("/api/readiness",{timeoutMs:r})).ok}function Lo(r){let e=(0,P.existsSync)(F.default.join(r,"plugin","scripts"))?F.default.join(r,"plugin"):r;return F.default.join(e,"scripts","worker-service.cjs")}function pd(r,e){let t=f=>{let p=f.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 gd(r=F.default.join(F.default.dirname(F.default.dirname(tt)),"cache","thedotmack","claude-mem")){try{return(0,P.readdirSync)(r).filter(e=>/^\d/.test(e)).map(e=>F.default.join(r,e)).filter(e=>{try{if(!(0,P.statSync)(e).isDirectory())return!1}catch{return!1}return!(0,P.existsSync)(F.default.join(e,".orphaned_at"))}).map(e=>({scriptPath:Lo(e),version:F.default.basename(e)}))}catch{return[]}}function Ro(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"&&d.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:r,code:t}),null}}function No(){let r=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(r){if((0,P.existsSync)(r))return{scriptPath:r,version:null};d.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:r})}let e=[...gd(),{scriptPath:Lo(F.default.join(tt,"plugin")),version:Ro(F.default.join(tt,"package.json"))},{scriptPath:F.default.join(process.cwd(),"plugin","scripts","worker-service.cjs"),version:Ro(F.default.join(process.cwd(),"package.json"))}];return hd(e)}function hd(r){let e=r.filter(t=>(0,P.existsSync)(t.scriptPath));return e.length===0?null:(e.sort((t,n)=>t.version===null&&n.version===null?0:t.version===null?1:n.version===null?-1:pd(t.version,n.version)),e[0])}function md(){return No()?.scriptPath??null}async function _d(r){let e=r.backoffMs;for(let t=1;t<=r.attempts;t++){if(await $o())return!0;t<r.attempts&&(await new Promise(n=>setTimeout(n,e)),e*=2)}return!1}async function As(r=td){if(r<=0)try{return await Ts()}catch(t){let n=t instanceof Error?t:new Error(String(t));return d.debug("SYSTEM","Worker readiness check threw",{},n),!1}let e=Date.now();for(;Date.now()-e<r;){try{if(await Ts())return!0}catch(n){d.debug("SYSTEM","Worker readiness check threw",{error:n instanceof Error?n.message:String(n)})}let t=r-(Date.now()-e);if(t<=0)break;await new Promise(n=>setTimeout(n,Math.min(250,t)))}return!1}async function Ed(){try{let e=await(await Ae("/api/health",{timeoutMs:Br})).json();return typeof e.version=="string"?e.version:null}catch(r){let e=r instanceof Error?r:new Error(String(r));return d.debug("SYSTEM","Worker health-version fetch failed",{},e),null}}async function yd(r=5e3){let e=Date.now();for(;;){try{await Ae("/api/health",{timeoutMs:Br})}catch{return!0}if(Date.now()-e>=r)return!1;await new Promise(t=>setTimeout(t,200))}}function Sd(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 Uo(){return F.default.join(Fe(),"worker-version-recycle.json")}function bd(r,e){if(r===null||e===null)return!1;try{let t=JSON.parse((0,P.readFileSync)(Uo(),"utf-8"));return t?.buildKey===r&&t?.workerVersion===e}catch{return!1}}async function Co(r,e=null){let t=await Ed();if(t!==null&&t!==r){if(e!==null)try{Ze(Uo(),{buildKey:e,workerVersion:t})}catch(n){d.warn("SYSTEM","Could not persist the failed worker version recycle",{error:n instanceof Error?n.message:String(n)})}d.warn("SYSTEM","Worker is ready but still reports a stale version; rebuild or reinstall the worker bundle before retrying",{pluginVersion:r,workerVersion:t})}}async function $o(){let r;try{r=await fd()}catch(t){return d.debug("SYSTEM","Worker health check threw",{error:t instanceof Error?t.message:String(t)}),!1}if(!r)return!1;let e=vr({logAlive:!1});return e==="missing"||e==="alive"}async function Wr(){let r=No(),e=null,t=null;if(await $o()){let{matches:a,pluginVersion:c,workerVersion:l}=await To(He(),r?.version??null);if(c!=="unknown"&&(e=c),a)return await As()?(e!==null&&await Co(e),!0):(d.warn("SYSTEM","Worker is healthy but not ready; skipping hook API call"),!1);if(t=Sd(r,c),bd(t,l))return d.warn("SYSTEM","Skipping repeated worker recycle: the unchanged bundle still reports a stale version; rebuild or reinstall it",{pluginVersion:c,workerVersion:l,scriptPath:r?.scriptPath}),As();d.info("SYSTEM","Worker version mismatch \u2014 killing stale worker",{pluginVersion:c,workerVersion:l});let u=gs();if(u===null||u.port!==He())return d.error("SYSTEM","Stale worker is serving the port but the PID file does not identify it; kill the claude-mem worker process manually",{port:He(),pidFilePid:u?.pid??null,pidFilePort:u?.port??null}),!1;try{await ae(u.pid,{signalMode:"immediate"})}catch(f){return d.error("SYSTEM","Could not kill stale worker",{pid:u.pid,port:u.port},f instanceof Error?f:new Error(String(f))),!1}if(!await yd())return d.error("SYSTEM","Stale worker port still open after SIGKILL; skipping spawn this hook event",{pid:u.pid,port:He()}),!1}let n=Ss(),s=r?.scriptPath??null;if(!n)return d.warn("SYSTEM","Cannot lazy-spawn worker: Bun runtime not found on PATH"),!1;if(!s)return d.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;let i=ws();try{if(i){d.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:n,scriptPath:s});try{(0,P.mkdirSync)(x,{recursive:!0});let c=Pt(n,[s,"--daemon"],{detached:!0,stdio:["ignore","ignore","ignore"],cwd:x});c.on("error",l=>{d.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:n,scriptPath:s},l)}),c.unref()}catch(c){return c instanceof Error?d.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:n,scriptPath:s},c):d.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:n,scriptPath:s,error:String(c)}),!1}}else d.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await _d({attempts:6,backoffMs:500}))return d.warn("SYSTEM",i?"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)"),gs()===null&&await Ao(He())&&(jr=He(),d.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:jr,fix:jo})),!1}finally{i&&vs()}return await As()?(e!==null&&await Co(e,t),!0):(d.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout"),!1)}var jo="Set CLAUDE_MEM_WORKER_PORT to a different port in claude-mem settings, or reboot to release the stuck port",jr=null,Ur=null;async function wd(){return Ur!==null||(Ur=await Wr()),Ur}async function vd(r){let e=Date.now()+r,t=async()=>{let o=e-Date.now();if(o<=0)return!1;try{return await Ts(Math.min(500,o))}catch{return!1}};if(await t())return!0;let n=Ss(),s=md();if(!n||!s)return!1;let i=ws();try{if(i){let o=Pt(n,[s,"--daemon"],{detached:!0,stdio:["ignore","ignore","ignore"]});o.on("error",a=>{d.error("SYSTEM","Bounded worker startup spawn failed",{runtimePath:n,scriptPath:s},a)}),o.unref()}for(;Date.now()<e;){if(await t())return!0;let o=e-Date.now();o>0&&await new Promise(a=>setTimeout(a,Math.min(100,o)))}return!1}catch(o){return d.debug("SYSTEM","Bounded worker startup failed",{error:o instanceof Error?o.message:String(o)}),!1}finally{i&&vs()}}var Ad=3,Bo=1e3,Td=10,Wo=5e3,Pd=Wo+Bo;function Hr(){return F.default.join(x,"state")}function Ho(){return F.default.join(Hr(),"hook-failures.json")}function Go(){return F.default.join(Hr(),"hook-failures.lock")}async function Ko(r=Bo){let e=Hr(),t=Go(),n=(0,Fo.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 d.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>Wo){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,Td))}return d.warn("SYSTEM","Timed out waiting for hook-failure lock; skipping failure-state update",{lockPath:t,waitMs:r}),null}function Vo(r){let e=Go();try{if(JSON.parse((0,P.readFileSync)(e,"utf-8")).token!==r)return;(0,P.unlinkSync)(e)}catch{}}function Id(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}}function Ps(){try{return Id((0,P.readFileSync)(Ho(),"utf-8"))}catch{return{consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1}}}function qo(r){let e=Hr(),t=Ho(),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 d.debug("SYSTEM","Failed to persist hook-failure counter",{error:s instanceof Error?s.message:String(s)}),!1}}function Rd(){try{let e=ye().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,t=parseInt(e,10);if(Number.isFinite(t)&&t>=1)return t}catch{}return Ad}var Mo=null;async function Cd(){let r=await Ko();if(r===null)return Ps().consecutiveFailures;let e,t=!1;try{let n=Ps();e={consecutiveFailures:n.consecutiveFailures+1,lastFailureAt:Date.now(),thresholdTripped:n.thresholdTripped};let s=Rd();t=e.consecutiveFailures>=s&&!e.thresholdTripped,t&&(e.thresholdTripped=!0);let i=qo(e);t=t&&i}finally{Vo(r)}return t&&(await yo("hook_failed",{...Mo!==null?{hook_type:Mo}:{},error_mode:"worker_unavailable",consecutive_failures:e.consecutiveFailures,threshold_tripped:!0}),ji(jr!==null?`claude-mem worker unreachable for ${e.consecutiveFailures} consecutive hooks: port ${jr} is held by an unreachable process that no PID file claims, so the worker cannot bind it. ${jo}.`:`claude-mem worker unreachable for ${e.consecutiveFailures} consecutive hooks.`)),e.consecutiveFailures}async function xo(){let r=await Ko(Pd);if(r!==null)try{let e=Ps();if(e.consecutiveFailures===0&&!e.thresholdTripped)return;qo({consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1})}finally{Vo(r)}}var $r=Symbol.for("claude-mem/worker-fallback");function Gr(r){return typeof r=="object"&&r!==null&&r[$r]===!0}async function Kr(r,e,t,n={}){let s=n.workerStartupTimeoutMs!==void 0;if(!(s?await vd(n.workerStartupTimeoutMs):await wd()))return s||await Cd(),{continue:!0,reason:"worker_unreachable",[$r]:!0};let o={method:e};t!==void 0&&(o.headers={"Content-Type":"application/json"},o.body=JSON.stringify(t)),n.timeoutMs!==void 0&&(o.timeoutMs=n.timeoutMs);let a;try{a=await Ae(r,o)}catch(l){if(!s)throw l;return d.debug("SYSTEM","Worker unavailable for best-effort hook call",{error:l instanceof Error?l.message:String(l)}),{continue:!0,reason:"worker_unreachable",[$r]:!0}}if(!a.ok){let l=await a.text().catch(()=>"");if(await xo(),a.status===429||a.status>=500)return d.warn("SYSTEM",`Worker API ${e} ${r} returned ${a.status}; skipping hook API call`,{body:l.substring(0,200)}),{continue:!0,reason:`worker_api_${a.status}`,[$r]:!0};let u=l;try{u=JSON.parse(l)}catch{}return u}await xo();let c=await a.text();if(c.length!==0)try{return JSON.parse(c)}catch{return c}}var Yo=he(require("path"),1),Jo=require("child_process");vt();A();var Vr=require("fs"),ot=he(require("path"),1);A();var Mt={isWorktree:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function zo(r){let e=ot.default.join(r,".git"),t;try{t=(0,Vr.statSync)(e)}catch(u){return u instanceof Error&&u.code!=="ENOENT"&&d.warn("GIT","Unexpected error checking .git",{error:u instanceof Error?u.message:String(u)}),Mt}if(!t.isFile())return Mt;let n;try{n=(0,Vr.readFileSync)(e,"utf-8").trim()}catch(u){return d.warn("GIT","Failed to read .git file",{error:u instanceof Error?u.message:String(u)}),Mt}let s=n.match(/^gitdir:\s*(.+)$/);if(!s)return Mt;let o=ot.default.resolve(ot.default.dirname(e),s[1]).match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(!o)return Mt;let a=o[1],c=ot.default.basename(r),l=ot.default.basename(a);return{isWorktree:!0,worktreeName:c,parentRepoPath:a,parentProjectName:l}}function Xo(r){try{return(0,Jo.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 d.debug("PROJECT_NAME","git rev-parse failed, falling back to basename",{dir:r},t),null}}function Md(r,e=process.platform){if(!r||r.trim()==="")return d.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),"unknown-project";let t=oe(r,e),s=Xo(t)??t,i=Yo.default.basename(s);if(i===""){if(process.platform==="win32"){let a=r.match(/^([A-Z]):\\/i);if(a){let l=`drive-${a[1].toUpperCase()}`;return d.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:l}),l}}return d.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),"unknown-project"}return i}function Ge(r,e=process.platform){let t=Md(r,e);if(!r)return{primary:t,parent:null,isWorktree:!1,allProjects:[t]};let n=oe(r,e),s=zo(Xo(n)??n);if(s.isWorktree&&s.parentProjectName){let i=`${s.parentProjectName}/${t}`;return{primary:i,parent:s.parentProjectName,isWorktree:!0,allProjects:[s.parentProjectName,i]}}return{primary:t,parent:null,isWorktree:!1,allProjects:[t]}}A();var ce=require("path");var Qo=require("path");vt();A();function xd(r){let e=oe(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 qr(r,e){if(!e||!e.trim())return!1;let t=r.replace(/\\/g,"/"),n=(0,Qo.basename)(t),s=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of s)try{let o=xd(i);if(o.test(t)||o.test(n))return!0}catch(o){d.warn("PROJECT_NAME","Invalid exclusion pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}return!1}U();var Fd="plugins",Od="cache",kd="thedotmack",Dd="claude-mem",Ld="plugin",Nd=(0,ce.join)(Qn,Fd,Od,kd,Dd),Ud=(0,ce.join)(tt,Ld);function Cs(r,e){let t=(0,ce.normalize)(r),n=(0,ce.normalize)(e);if(t===n)return!0;let s=(0,ce.relative)(n,t);return s.length>0&&!s.startsWith("..")&&!(0,ce.isAbsolute)(s)}function zr(r){if(process.env.CLAUDE_MEM_INTERNAL==="1")return!1;if(!r)return!0;if(Cs(r,Zn)||Cs(r,Nd)||Cs(r,Ud))return!1;let e=ye();return!qr(r,e.CLAUDE_MEM_EXCLUDED_PROJECTS)}var Zo="claude";function $d(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function le(r){if(!r)return Zo;let e=$d(r);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e:Zo}A();var ra=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],ea=new RegExp(`<(${ra.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g");var ta=100;function jd(r){let e=Object.fromEntries(ra.map(s=>[s,0]));ea.lastIndex=0;let t=0,n=r.replace(ea,(s,i)=>(e[i]=(e[i]??0)+1,t+=1,""));return t>ta&&d.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:t,maxAllowed:ta,contentLength:r.length}),{stripped:n.trim(),counts:e}}function Ms(r){return jd(r).stripped}var Bd=["task-notification"],Wd=new RegExp(`^\\s*<(${Bd.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),Hd=256*1024;function na(r){return!r||r.length>Hd?!1:Wd.test(r)}A();var Gd=ke(V.API_REQUEST),Te=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)}},Yr=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=Kd(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??Gd}async startSession(e){let t=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",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 Te("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){return this.request("POST","/v1/context",this.buildSearchPayload(e))}async getJobStatus(e){if(!e)throw new Te("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,type:n,narrative: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:xs(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:xs(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:xs(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,t,n){if(!this.apiKey||!this.apiKey.trim())throw new Te("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let s=`${this.baseUrl}${t}`,i={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(i.body=JSON.stringify(n));let o;try{o=await Is(s,i,this.timeoutMs)}catch(c){let l=c instanceof Error?c.message:String(c),u=/timed out|timeout/i.test(l);throw new Te(u?"timeout":"transport",`Server ${e} ${t} failed: ${l}`,{cause:c})}if(!o.ok){let c=await o.text().catch(()=>"");throw new Te("http_error",`Server ${e} ${t} returned ${o.status}: ${Vd(c,200)}`,{status:o.status})}let a=await o.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){let l=c instanceof Error?c:new Error(String(c));throw new Te("invalid_response",`Server ${e} ${t} returned non-JSON response`,{cause:l})}}};function sa(r){return r instanceof Te}function Kd(r){return r.replace(/\/+$/,"")}function xs(r){return typeof r=="string"?le(r):null}function Vd(r,e){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function qd(){let e=(ye().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function zd(){let r=ye(),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 d.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return d.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!s)return d.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let i={serverBaseUrl:t,apiKey:n};return{runtime:"server",client:new Yr(i),projectId:s,serverBaseUrl:t}}function ia(){if(qd()!=="server")return{runtime:"worker"};let r=zd();return r||{runtime:"worker"}}function oa(r,e){d.warn("HOOK",`[server-fallback] reason=${r}`,e??{})}var Yd={executeWithWorkerFallback:Kr,isWorkerFallback:Gr,loadFromFileOnce:ye,resolveRuntimeContext:ia,logServerFallback:oa,shouldTrackProject:zr},Le=Yd;var aa={async execute(r){let{sessionId:e,prompt:t}=r,n=r.cwd??process.cwd();if(!e)return d.warn("HOOK","session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"),{continue:!0,suppressOutput:!0,exitCode:Oe.SUCCESS};if(!Le.shouldTrackProject(n))return d.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};if(t&&na(t))return d.debug("HOOK","session-init: skipping internal protocol payload",{preview:t.slice(0,80)}),{continue:!0,suppressOutput:!0};let s=!t||!t.trim()?"[media prompt]":t,i=Ge(n).primary,o=le(r.platform),a=Le.loadFromFileOnce(),c=String(a.CLAUDE_MEM_SEMANTIC_INJECT).toLowerCase()==="true",l=Le.resolveRuntimeContext();if(l.runtime==="server")try{return await Jd(l,r,e,o,i,s),{continue:!0,suppressOutput:!0}}catch(h){if(sa(h)&&h.isFallbackEligible())Le.logServerFallback(h.kind,{status:h.status,message:h.message,route:"/v1/sessions/start"});else return d.error("HOOK","Server session-start failed (non-recoverable)",{error:h instanceof Error?h.message:String(h)}),{continue:!0,suppressOutput:!0,exitCode:Oe.SUCCESS}}d.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:e,project:i});let u=await Le.executeWithWorkerFallback("/api/sessions/init","POST",{contentSessionId:e,project:i,prompt:s,platformSource:o},o==="codex"?{workerStartupTimeoutMs:V.POST_SPAWN_WAIT,timeoutMs:2e3}:void 0);if(Le.isWorkerFallback(u))return{continue:!0,suppressOutput:!0,exitCode:Oe.SUCCESS};if(typeof u?.sessionDbId!="number")return d.failure("HOOK","Session initialization returned malformed response",{contentSessionId:e,project:i}),{continue:!0,suppressOutput:!0,exitCode:Oe.SUCCESS};let f=u.sessionDbId,p=u.promptNumber;if(d.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:f,promptNumber:p,skipped:u.skipped,contextInjected:u.contextInjected}),d.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${e} | prompt#=${p} | sessionDbId=${f}`),u.skipped&&u.reason==="private")return d.info("HOOK",`INIT_COMPLETE | sessionDbId=${f} | promptNumber=${p} | skipped=true | reason=private`,{sessionId:f}),{continue:!0,suppressOutput:!0};let g="";if(c&&s&&s.length>=20&&s!=="[media prompt]"){let h=a.CLAUDE_MEM_SEMANTIC_INJECT_LIMIT||"5",m=await Le.executeWithWorkerFallback("/api/context/semantic","POST",{q:s,project:i,limit:h,platformSource:o},o==="codex"?{workerStartupTimeoutMs:V.POST_SPAWN_WAIT,timeoutMs:2e3}:void 0);!Le.isWorkerFallback(m)&&m?.context&&(d.debug("HOOK",`Semantic injection: ${m.count} observations for prompt`,{sessionId:f,count:m.count}),g=m.context)}return d.info("HOOK",`INIT_COMPLETE | sessionDbId=${f} | promptNumber=${p} | project=${i}`,{sessionId:f}),g?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:g}}:{continue:!0,suppressOutput:!0}}};async function Jd(r,e,t,n,s,i){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}}),d.info("HOOK","session-init: server session started",{contentSessionId:t,project:s})}A();var ca={async execute(r){let{sessionId:e,cwd:t,filePath:n,edits:s}=r,i=le(r.platform);if(!n)throw new Error("fileEditHandler requires filePath");if(d.dataIn("HOOK",`FileEdit: ${n}`,{editCount:s?.length??0}),!t)throw new Error(`Missing cwd in FileEdit hook input for session ${e}, file ${n}`);if(!zr(t))return d.debug("HOOK","Project excluded from tracking, skipping file edit observation",{cwd:t,filePath:n}),{continue:!0,suppressOutput:!0,exitCode:Oe.SUCCESS};let o=await Kr("/api/sessions/observations","POST",{contentSessionId:e,platformSource:i,tool_name:"write_file",tool_input:{filePath:n,edits:s},tool_response:{success:!0},cwd:t});return Gr(o)?{continue:!0,suppressOutput:!0,exitCode:Oe.SUCCESS}:(d.debug("HOOK","File edit observation sent successfully",{filePath:n}),{continue:!0,suppressOutput:!0})}};U();A();var re=require("fs"),Jr=require("path");A();A();U();var py=L.settings();function la(r,e){let t="<claude-mem-context>",n="</claude-mem-context>";if(!r)return`${t}
|
|
${e}
|
|
${n}`;let s=r.indexOf(t),i=r.indexOf(n);return s!==-1&&i!==-1?r.substring(0,s)+`${t}
|
|
${e}
|
|
${n}`+r.substring(i+n.length):r+`
|
|
|
|
${t}
|
|
${e}
|
|
${n}`}A();function ua(r,e){if(!r)return;let t=(0,Jr.resolve)(r);if(t.includes("/.git/")||t.includes("\\.git\\")||t.endsWith("/.git")||t.endsWith("\\.git"))return;let n=(0,Jr.dirname)(r);(0,re.existsSync)(n)||(0,re.mkdirSync)(n,{recursive:!0});let s="";(0,re.existsSync)(r)&&(s=(0,re.readFileSync)(r,"utf-8"));let i=`# Memory Context
|
|
|
|
${e}`,o=la(s,i),a=`${r}.tmp`;try{(0,re.writeFileSync)(a,o),(0,re.renameSync)(a,r)}catch(c){d.error("AGENTS_MD","Failed to write AGENTS.md",{agentsPath:r},c instanceof Error?c:new Error(String(c)))}}A();function Xd(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 Fs(r,e){if(!e)return;let t=Xd(e),n=r;for(let s of t){if(n==null)return;n=n[s]}return n}function da(r){return r==null||r===""}function fa(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 at(r,e,t){if(r!==void 0){if(typeof r=="string"){let n=fa(r,t);return n!==void 0?n:Fs(e,r)}if(r.coalesce&&Array.isArray(r.coalesce))for(let n of r.coalesce){let s=at(n,e,t);if(!da(s))return s}if(r.path){let n=fa(r.path,t);if(n!==void 0)return n;let s=Fs(e,r.path);if(!da(s))return s}if(r.value!==void 0)return r.value;if(r.default!==void 0)return r.default}}function pa(r,e,t){let n={};if(!r)return n;for(let[s,i]of Object.entries(r))n[s]=at(i,e,t);return n}function ga(r,e,t){if(!e)return!0;let n=e.path||t.eventTypePath||"type",s=n?Fs(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))return!1;if(e.regex)try{if(!new RegExp(e.regex).test(String(s??"")))return!1}catch(o){return d.debug("WORKER","Invalid regex in match rule",{regex:e.regex},o instanceof Error?o:void 0),!1}return!0}A();U();A();var Xr=class{static checkUserPromptPrivacy(e,t,n,s,i,o){let a=e.getUserPrompt(t,n,i);return a===null?(d.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()===""?(d.debug("HOOK",`Skipping ${s} - user prompt was entirely private`,{sessionId:i,promptNumber:n,...o}),{allow:!1,reason:"private"}):{allow:!0,prompt:a}}};var ct=require("path");function ma(){let r=Qd();return async e=>{for(let t of e)t.module=r(t.filename);return e}}function Qd(r=process.argv[1]?(0,ct.dirname)(process.argv[1]):process.cwd(),e=ct.sep==="\\"){let t=e?ha(r):r;return n=>{if(!n)return;let s=e?ha(n):n,{dir:i,base:o,ext:a}=ct.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 ha(r){return r.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var D={};zl(D,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>hn,DOMExceptionCoercer:()=>qs,EXCEPTION_STEP_INTERNAL_FIELDS:()=>jt,ErrorCoercer:()=>Lt,ErrorEventCoercer:()=>zs,ErrorPropertiesBuilder:()=>Dt,EventCoercer:()=>Ys,ExceptionStepsBuffer:()=>Zs,ObjectCoercer:()=>Ut,PrimitiveCoercer:()=>$t,PromiseRejectionEventCoercer:()=>Js,ReduceableCache:()=>Xs,StringCoercer:()=>Nt,chromeStackLineParser:()=>Hs,createDefaultStackParser:()=>Vs,createStackParser:()=>sc,geckoStackLineParser:()=>Gs,getInjectedReleaseId:()=>lp,getUtf8ByteLength:()=>oc,nodeStackLineParser:()=>Qa,opera10StackLineParser:()=>Ya,opera11StackLineParser:()=>Ja,resolveExceptionStepsConfig:()=>Qs,reverseAndStripFrames:()=>nc,stripReservedExceptionStepFields:()=>op,winjsStackLineParser:()=>za});var G=(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.SurveysSeen="surveys_seen",r.Surveys="surveys",r.RemoteConfig="remote_config",r.FlagsEndpointWasHit="flags_endpoint_was_hit",r.DeviceId="device_id",r})({});function Ne(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 Zd=Array.isArray,Ea=Object.prototype,Cy=Ea.hasOwnProperty,Qr=Ea.toString,Y=Zd||function(r){return Qr.call(r)==="[object Array]"};var xt=r=>r===Object(r)&&!Y(r);var Pe=r=>r===void 0,$=r=>Qr.call(r)=="[object String]",Os=r=>$(r)&&r.trim().length===0,ks=r=>r===null,ne=r=>Pe(r)||ks(r),lt=r=>Qr.call(r)=="[object Number]"&&r===r;var ya=r=>Qr.call(r)==="[object Boolean]";function Zr(r){return r===null||typeof r!="object"}function Ke(r,e){return Object.prototype.toString.call(r)===`[object ${e}]`}function ut(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 wa(r,Error)}}function Sa(r){return Ke(r,"ErrorEvent")}function dt(r){return"u">typeof Event&&wa(r,Event)}function ba(r){return Ke(r,"Object")}function wa(r,e){try{return r instanceof e}catch{return!1}}var ef=["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"],va=function(r,e=[]){if(!r)return!1;let t=r.toLowerCase();return ef.concat(e).some(n=>{let s=n.toLowerCase();return t.indexOf(s)!==-1})};function Ft(r,e,t,n,s){return e>t&&(n.warn("min cannot be greater than max."),e=t),lt(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),Ft(s??t,e,t,n))}var tf=864e5,rf=1,nf=10;function Aa(r={}){return{refillRate:r.exceptionRateLimiterRefillRate??r.__exceptionRateLimiterRefillRate??rf,bucketSize:r.exceptionRateLimiterBucketSize??r.__exceptionRateLimiterBucketSize??nf}}var en=class{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=Ft(e.bucketSize,0,100,e._logger),this._refillRate=Ft(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=Ft(e.refillInterval,0,tf,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 tn="0123456789abcdef",rn=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+=tn.charAt(this.bytes[t]>>>4),e+=tn.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+=tn.charAt(this.bytes[t]>>>4),e+=tn.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}},Ds=class{constructor(e){this.timestamp=0,this.counter=0,this.random=e??sf()}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 rn.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,rn.ofInner(e)}},sf=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),Ta,j=()=>of().toString(),of=()=>(Ta||(Ta=new Ds)).generate();var nn=class{add(e){let t=j(),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 af(r=console){return{log:r.log.bind(r),warn:r.warn.bind(r),error:r.error.bind(r),debug:r.debug.bind(r)}}var Pa=(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=>Pa(`${r} ${i}`,e,t)}},cf=r=>r();function Ia(r,e=cf){return Pa(r,e,af())}var pt="Mobile",on="iOS",ft="Android",Fa="Tablet",Gy=ft+" "+Fa;var uf="Apple",Ky=uf+" Watch",Oa="Safari",an="BlackBerry",ka="Samsung",df=ka+"Browser",ff=ka+" Internet",cn="Chrome",pf=cn+" OS",gf=cn+" "+on,Da="Internet Explorer",hf=Da+" "+pt,Us="Opera",Vy=Us+" Mini",La="Edge",mf="Microsoft "+La,$s="Firefox",_f=$s+" "+on,js="Nintendo",Bs="PlayStation",sn="Xbox",Ef=ft+" "+pt,yf=pt+" "+Oa,Ot="Windows",Sf=Ot+" Phone";var Na="Generic",qy=Na+" "+pt.toLowerCase(),zy=Na+" "+Fa.toLowerCase(),bf="Konqueror",wf="Oculus Browser",Ra="Vivaldi",vf="Yandex",Ca="Whale",Af="DuckDuckGo",Tf="Pale Moon",Ma="Waterfox",xa="Brave",Ua="Claude",$a="Codex",ja="ChatGPT",Pf="Google Search App",M="(\\d+(\\.\\d+)?)",Ls=new RegExp("Version/"+M),Ns=new RegExp("("+Ua+"|"+$a+"|"+ja+")\\/"+M);var Yy=new RegExp(sn,"i"),Jy=new RegExp(Bs+" \\w+","i"),Xy=new RegExp(js+" \\w+","i"),If=new RegExp(an+"|PlayBook|BB10","i"),Rf={"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 Qy={[hf]:[new RegExp("rv:"+M)],[mf]:[new RegExp(La+"?\\/"+M)],[cn]:[new RegExp("("+cn+"|CrMo)\\/"+M)],[gf]:[new RegExp("CriOS\\/"+M)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+M)],[Oa]:[Ls],[yf]:[Ls],[Us]:[new RegExp("("+Us+"|OPR)\\/"+M)],[$s]:[new RegExp($s+"\\/"+M)],[_f]:[new RegExp("FxiOS\\/"+M)],[bf]:[new RegExp("Konqueror[:/]?"+M,"i")],[an]:[new RegExp(an+" "+M),Ls],[Ef]:[new RegExp("android\\s"+M,"i")],[ff]:[new RegExp(df+"\\/"+M)],[wf]:[new RegExp("OculusBrowser\\/"+M)],[Ra]:[new RegExp(Ra+"\\/"+M)],[vf]:[new RegExp("YaBrowser\\/"+M)],[Ca]:[new RegExp(Ca+"\\/"+M)],[xa]:[new RegExp(xa+"\\/"+M)],[Ua]:[Ns],[$a]:[Ns],[ja]:[Ns],[Af]:[new RegExp("(DuckDuckGo|Ddg)\\/"+M)],[Tf]:[new RegExp("PaleMoon\\/"+M)],[Ma]:[new RegExp(Ma+"\\/"+M)],[Pf]:[new RegExp("GSA\\/"+M)],[Da]:[new RegExp("(rv:|MSIE )"+M)],Mozilla:[new RegExp("rv:"+M)]};var Zy=[[new RegExp(sn+"; "+sn+" (.*?)[);]","i"),r=>[sn,r&&r[1]||""]],[new RegExp(js,"i"),[js,""]],[new RegExp(Bs,"i"),[Bs,""]],[If,[an,""]],[new RegExp(Ot,"i"),(r,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[Sf,""];if(new RegExp(pt).test(e)&&!/IEMobile\b/.test(e))return[Ot+" "+pt,""];let t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){let n=t[1],s=Rf[n]||"";return/arm/i.test(e)&&(s="RT"),[Ot,s]}return[Ot,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,r=>{if(r&&r[3]){let e=[r[3],r[4],r[5]||"0"];return[on,e.join(".")]}return[on,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,r=>{let e="";return r&&r.length>=3&&(e=Pe(r[2])?r[3]:r[2]),["watchOS",e]}],[new RegExp("("+ft+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+ft+")","i"),r=>{if(r&&r[2]){let e=[r[2],r[3],r[4]||"0"];return[ft,e.join(".")]}return[ft,""]}],[/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/,[pf,""]],[/Linux|debian/i,["Linux",""]]];var ln="[Circular]",un="[Truncated]",J="[Unserializable]",Ba="[Function]",rS=Date.prototype.getTime,nS=Date.prototype.toISOString;function ue(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 Ie(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=J}Object.defineProperty(r,n,{value:s,enumerable:!0,writable:!0,configurable:!0})}return r}var Wa="utf8",Cf=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function Mf(r){return typeof r=="string"&&Cf.test(r)}function Ve(r,e){return Mf(r)?r:e()}function gt(r,e){let t=new Error(e);try{Object.defineProperty(t,"name",{value:r,writable:!0,enumerable:!0,configurable:!0})}catch{}return t}function Ha(r){return r?.replace(/\/+$/,"")}async function Ga(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 Ws(){return new Date().toISOString()}function B(r,e){let t=setTimeout(r,e);return t?.unref&&t?.unref(),t}async function Ue(r,e,t){let n;try{return await Promise.race([r,new Promise((s,i)=>{n=B(()=>{try{t?.(),s()}catch(o){i(o)}},e)})])}finally{clearTimeout(n)}}var Ka=r=>r&&typeof r.then=="function";function kt(r){return Promise.all(r.map(e=>(e??Promise.resolve()).then(t=>({status:"fulfilled",value:t}),t=>({status:"rejected",reason:t}))))}var dn,Va,fn;function qa(r){let e=globalThis._posthogChunkIds;if(!e)return;let t=Object.keys(e);return fn&&t.length===Va||(Va=t.length,fn=t.reduce((n,s)=>{dn||(dn={});let i=dn[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,dn[s]=[l,u];break}}}return n},{})),fn}var xf=4,Dt=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&&Y(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;return e.stack!=""&&e.stack!=null&&(s=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)),{...e,cause:n,stack:s}}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={type:e.type,value:e.value,mechanism:{type:t.type??"generic",handled:t.handled??!0,synthetic:e.synthetic??!1}};e.stack&&(n.stacktrace={type:"raw",frames:e.stack});let s=[n];return e.cause!=null&&s.push(...this.convertToExceptionList(e.cause,{...t,handled:!0})),s}buildParsingContext(e){return{chunkIdMap:qa(this.stackParser),skipFirstLines:e.skipFirstLines??1}}buildCoercingContext(e,t,n=0){let s=(o,a)=>{if(a<=xf){let c=this.buildCoercingContext(e,t,a);return this.applyCoercers(o,c)}};return{...t,syntheticException:n==0?t.syntheticException:void 0,mechanism:e,apply:o=>s(o,n),next:o=>s(o,n+1)}}};var N="?",Ff="<anonymous>",Of=/^([a-z][a-z0-9.+-]+):/i,kf=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function Df(r){if(!r||r===Ff)return!1;let e=Of.exec(r);return!e||kf.includes(e[1].toLowerCase())}function de(r,e,t,n,s){let i={platform:r,filename:e,function:t==="<anonymous>"?N:t,in_app:Df(e)};return Pe(n)||(i.lineno=n),Pe(s)||(i.colno=s),i}var pn=(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]:N,t?`safari-extension:${e}`:`safari-web-extension:${e}`]:[r,e]};var Lf=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,Nf=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,Uf=/\((\S*)(?::(\d+))(?::(\d+))\)/,Hs=(r,e)=>{let t=Lf.exec(r);if(t){let[,s,i,o]=t;return de(e,s,N,+i,+o)}let n=Nf.exec(r);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=Uf.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[i,o]=pn(n[1]||N,n[2]);return de(e,o,i,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var $f=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,jf=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Gs=(r,e)=>{let t=$f.exec(r);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){let o=jf.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]||N;return[i,s]=pn(i,s),de(e,s,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}};var Bf=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,za=(r,e)=>{let t=Bf.exec(r);return t?de(e,t[2],t[1]||N,+t[3],t[4]?+t[4]:void 0):void 0};var Wf=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Ya=(r,e)=>{let t=Wf.exec(r);return t?de(e,t[2],t[3]||N,+t[1]):void 0},Hf=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,Ja=(r,e)=>{let t=Hf.exec(r);return t?de(e,t[5],t[3]||t[4]||N,+t[1],+t[2]):void 0};var Gf=/^\s*[-]{4,}$/,Kf=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,Vf=/^Promise\.(?:all|any)$/,qf=/^index \d+$/,zf="node:internal/promise",Qa=(r,e)=>{let t=r.match(Kf);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 f=n.indexOf(".Module");f>0&&(i=i.slice(f+1),n=n.slice(0,f))}o=void 0}s&&(o=n,a=s),s==="<anonymous>"&&(a=void 0,i=void 0),i===void 0&&(a=a||N,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]),Vf.test(i)&&qf.test(c||"")&&(c=zf),{filename:c?decodeURI(c):void 0,module:void 0,function:i,lineno:Xa(t[3]),colno:Xa(t[4]),in_app:Yf(c||"",l),platform:e}}if(r.match(Gf))return{filename:r,platform:e}};function Yf(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 Xa(r){return parseInt(r||"",10)||void 0}var Za=/\(error: (.*)\)/,ec=50,Jf=10,Xf=1e3;function Ks(r,e){return r.filename===e.filename&&r.function===e.function&&r.module===e.module&&r.lineno===e.lineno&&r.colno===e.colno}function Qf(r){for(let e=1;e<=Jf;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(!Ks(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 Zf(r,e){let t=e.start+e.length,n=rc(r,e);n&&r.splice(t+n===r.length?t:e.start,n)}function tc(r,e){let t=e.start;for(;t>0&&Ks(r[t-1],r[t-1+e.length]);)t--;return e.start-t}function rc(r,e){let t=e.start+e.length,n=t;for(;n<r.length&&Ks(r[n],r[n-e.length]);)n++;return n-t}function ep(r,e){let t=e[0],n=r.length-(t?tc(r,t):0);for(let s of e)n-=rc(r,s);return n}function tp(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++)rp(e,n,t)&&(t=n);r.push(...r.splice(0,t))}function rp(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 nc(r){if(!r.length)return[];let e=Array.from(r);return e.reverse(),e.slice(0,ec).map(t=>({...t,filename:t.filename||np(e).filename,function:t.function||N}))}function np(r){return r[r.length-1]||{}}function Vs(){return sc("web:javascript",Hs,Gs)}function sc(r,...e){return(t,n=0)=>{let s=[],i=t.split(`
|
|
`),o=Math.min(i.length,n+Xf),a=[];for(let u=n;u<o;u++){let f=i[u];if(f.length>1024)continue;let p=Za.test(f)?f.replace(Za,"$1"):f;if(!p.match(/\S*Error: /)){for(let g of e){let h=g(p,r);if(h){s.push(h);let m=Qf(s);if(m){for(let E=a.length-1;E>=0;E--){let _=a[E];if(_.start+_.length<=m.start)break;a.pop()}a.push(m)}break}}if(ep(s,a)>=ec)break}}let c=[...a].sort((u,f)=>f.start-u.start),l=c[c.length-1];if(l){let u=tc(s,l);s.splice(l.start-u,u);for(let f of c)f.start-=u}for(let u of c)Zf(s,u);return a.some(u=>u.start===0&&s.length===u.length)&&tp(s),nc(s)}}var qs=class{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let n=$(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 Ke(e,"DOMException")}isDOMError(e){return Ke(e,"DOMError")}};var Lt=class{match(e){return ut(e)}coerce(e,t){let n=this.getStack(e),s=n===void 0;return{type:this.getType(e),value:this.getMessage(e,t),stack:n??t.syntheticException?.stack,cause:e.cause?t.next(e.cause):void 0,synthetic:s}}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){return e.stacktrace||e.stack||void 0}};var zs=class{match(e){if(!Sa(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 $(e.message)&&e.message.length>0}_buildLocationStack(e){let t=e,n=t.lineno??0,s=t.colno??0;if(!(!$(t.filename)||t.filename.length===0)&&n!==0)return`Error
|
|
at ${t.filename}:${n}:${s}`}};var sp=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,Nt=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(sp);return s&&(t=s[1],n=s[2]),[t,n]}};var ic=["fatal","error","warning","log","info","debug"];function gn(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 Ut=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(dt(e))return e.constructor.name;let t="name"in e?e.name:void 0;return $(t)&&!Os(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=gn(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(e){return $(e)&&!Os(e)&&ic.indexOf(e)>=0}getStack(e){try{return $(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:$(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(ut(n))return n}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}};var Ys=class{match(e){return dt(e)}coerce(e,t){let n=e.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${gn(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var $t=class{match(e){return Zr(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Js=class{match(e){return Ke(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!dt(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 Zr(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 Xs=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 jt={MESSAGE:"$message",TIMESTAMP:"$timestamp"},ip=new Set([jt.MESSAGE,jt.TIMESTAMP]),hn={enabled:!0,max_bytes:32768};function Qs(r){return r?{enabled:r.enabled??hn.enabled,max_bytes:ap(r.max_bytes,hn.max_bytes)}:{...hn}}function op(r){if(!r)return{sanitizedProperties:{},droppedKeys:[]};let e=[];return{sanitizedProperties:Object.keys(r).reduce((n,s)=>ip.has(s)?(e.push(s),n):(n[s]=r[s],n),{}),droppedKeys:e}}var Zs=class{constructor(e){this._entries=[],this._totalBytes=0,this._config=Qs(e)}setConfig(e){this._config=Qs(e),this._trimToMaxBytes()}add(e){let t=cp(e);if(!t)return;let n=oc(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 ap(r,e){if(!lt(r)||r===1/0||r===-1/0)return e;let t=Math.floor(r);return t<0?e:t}function cp(r){let e;try{e=Ne(r)}catch{return}try{let t=JSON.parse(e);if(!xt(t))return;let n=t,s=n[jt.MESSAGE],i=n[jt.TIMESTAMP];return!$(s)||s.trim().length===0||!$(i)&&!lt(i)?void 0:{step:n,json:e}}catch{return}}function oc(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 lp(){let r=globalThis._posthogReleaseId;return typeof r=="string"&&r.length>0?r:void 0}var ei=r=>{if("flags"in r){let e=ac(r.flags),t=cc(r.flags);return{...r,featureFlags:e,featureFlagPayloads:t}}{let e=r.featureFlags??{},t=Object.fromEntries(Object.entries(r.featureFlagPayloads||{}).map(([s,i])=>[s,ht(i)])),n=Object.fromEntries(Object.entries(e).map(([s,i])=>[s,up(s,i,t[s])]));return{...r,featureFlags:e,featureFlagPayloads:t,flags:n}}};function up(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 ac=r=>Object.fromEntries(Object.entries(r??{}).map(([e,t])=>[e,Bt(t)]).filter(([,e])=>e!==void 0)),cc=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?ht(n):void 0]}))},Bt=r=>r===void 0?void 0:r.variant??r.enabled,ht=r=>{if(typeof r!="string")return r;try{return JSON.parse(r)}catch{return r}};var lc=["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","irclid","_kx"],dp=["$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",...lc,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],Wt=(r,e=[])=>{let t={},n=s=>{r[s]!==void 0&&(t[s]=r[s])};return dp.forEach(n),e.forEach(n),t};var mn=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 ti(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var pp="NativeGzipValidationError",gp=31,hp=139,mp=8,_p=r=>r.length>=2&&r[0]===gp&&r[1]===hp;var Ht,Ep=()=>{if(Ht)return Ht;Ht=[];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;Ht[r]=e>>>0}return Ht},yp=r=>{let e=Ep(),t=4294967295;for(let n=0;n<r.length;n++)t=e[(t^r[n])&255]^t>>>8;return(4294967295^t)>>>0},_n=r=>{throw gt(pp,`Native gzip produced invalid output: ${r}`)},Sp=async(r,e)=>{r.size<18&&_n("too-short");let t=new Uint8Array(await r.slice(0,10).arrayBuffer());(!_p(t)||t[2]!==mp)&&_n("invalid-header");let n=new DataView(await r.slice(r.size-8).arrayBuffer());n.getUint32(0,!0)!==yp(e)&&_n("invalid-crc");let s=e.length>>>0;n.getUint32(4,!0)!==s&&_n("invalid-size")};async function Gt(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 Sp(c,n),c}catch(n){if(t?.rethrow)throw n;return e&&console.error("Failed to gzip compress data",n),null}}function uc(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,s=/^\d+$/.test(n)?Number(n):NaN;if(!Number.isFinite(s)&&/^[+-]?[\d.]+$/.test(n))return;let i=Number.isFinite(s)?1e3*s:Date.parse(n)-e;if(!(!Number.isFinite(i)||i<=0))return Math.min(i,3e5)}var qe=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 X=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 uc(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=gt("AbortError","Response body read timed out");this.cancelResponseBody(e),this.responseBodyTextPromise=Promise.reject(e)}else{let e=new Promise((n,s)=>{this.responseBodyTimer=B(()=>{this._bodyReadTimedOut=!0;let i=gt("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{}})()}},Re=class extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}};var hc=(r,e)=>{for(let t of Object.keys(e))(t.startsWith("$feature/")||t==="$active_feature_flags")&&(r[t]=e[t])};async function dc(r){if(r instanceof X){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 bp(r){return typeof r=="object"&&(r instanceof X||mc(r))}function mc(r){return r instanceof Re}function wp(r){if(r instanceof X)return r.status===502||r.status===504;if(!(r instanceof Re))return!1;let e=r.error;return(e?.code??e?.cause?.code)!=="ECONNREFUSED"}var fc=10485760;function pc(r){try{return typeof r!="string"?r instanceof Uint8Array?r.byteLength:r.size:"u">typeof Buffer?Buffer.byteLength(r,Wa):new TextEncoder().encode(r).length}catch{return 0}}function mt(r){return typeof r=="object"&&r instanceof X&&r.status===413}function En(r){return r instanceof X?r.status===408||r.status===429||r.status>=500:mc(r)}function gc(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}var ri="default",Kt=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new Dt([new Lt,new Ut,new Nt,new $t],Vs())}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new nn,this._events=new mn,this._isInitialized=!1;let n=typeof e=="string"?e.trim():"",s=typeof t.host=="string"?t.host.trim():"",i=!n;this._logger=Ia("[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=Ha(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:En},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=!ti()||(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(G.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(G.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(G.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 hc(n,t),e.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=Wt(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={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(l)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,u,{type:"required",consume:f=>f.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:wp},this.featureFlagsRequestTimeoutMs).then(f=>({success:!0,response:ei(f)})).catch(f=>(this._events.emit("error",f),{success:!1,error:this.categorizeRequestError(f)}))}categorizeRequestError(e){if(e instanceof X)return{type:"api_error",statusCode:e.status};if(e instanceof Re){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=Bt(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(G.Props)),this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(G.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(G.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return ri}persistedQueueKeyForRoute(e){return G.Queue}getActiveQueueRoutes(){return[ri]}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=B(()=>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=gc(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=Ve(i.uuid,j),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:Ws(),uuid:Ve(t?.uuid,j)};return(t?.disableGeoip??this.disableGeoip)&&(gc(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 dc(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(()=>kt([t])).then(()=>(this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=s,this.flushPromise=s,this.flushPromises.add(s),this.addPendingPromise(s),kt([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 Gt(e,this.isDebug)}getBatchEndpointPath(e){return"/batch/"}async sendBatch(e,t,n=ri){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:Ws()};this.historicalMigration&&(s.historical_migration=!0);let i=Ne(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(f=>f.message===void 0?f.message:this.normalizeMessage(f.message)),l=async()=>{let f=this.getPersistedProperty(n)||[],p=[...a],g=f.filter(h=>{let m=h.message?.uuid,E=p.findIndex(_=>_===h||typeof m=="string"&&m.length>0&&_.message?.uuid===m);return E===-1?!0:(p.splice(E,1),!1)});this.setPersistedProperty(n,g),s=g,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},u={retryCheck:f=>mt(f)?!1:En(f)};try{await this.sendBatch(c,u,e)}catch(f){if(mt(f)&&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 f instanceof Re||await l(),this._events.emit("error",f),f}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=pc(s);if(i>fc)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${e} batch of ${i} bytes: the endpoint accepts at most ${fc}`)),{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=>mt(u)||u instanceof X&&u.retryAfterMs!==void 0?!1:En(u)}),{kind:"ok"}}catch(u){if(mt(u))return{kind:"too-large"};if(En(u)){let f=u instanceof X?u.retryAfterMs:void 0;return{kind:"retry-later",error:u,...f!==void 0&&{retryAfterMs:f}}}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=pc(o),c={...this._retryOptions,...s},l=0;return await Ga(async()=>{l++;let u=new AbortController,f=i??this.requestTimeout,p=Date.now()+f,g,h=new Promise((I,C)=>{g=B(()=>{let k=gt("AbortError",`Request timed out after ${f}ms`);C(k),u.abort(k)},f)}),m,E=!1,_,b=()=>_??=(async()=>{try{await m?.body?.cancel()}catch{}})();try{let I;try{I=this.fetch(e,{signal:u.signal,...t})}catch(k){throw new Re(k)}I.then(k=>{u.signal.aborted&&!E&&Promise.resolve(k.body?.cancel()).catch(()=>{})}).catch(()=>{});try{m=await Promise.race([I,h]),E=!0}catch(k){throw new Re(k)}if(!(t.mode==="no-cors")&&(m.status<200||m.status>=400))throw new X(m,a,p,u);if(n.type==="successful-write"){try{await Promise.race([b(),h])}catch{}return}try{return await Promise.race([n.consume(m),h])}catch(k){throw u.signal.aborted?new Re(k):k}}finally{clearTimeout(g),u.signal.aborted&&m&&b()}},{...c,retryCheck:u=>{let f=c.retryCheck(u);return f&&l<=c.retryCount&&u instanceof X&&u.cancelResponseBody(),f}})}async _shutdown(e=3e4){await this._initPromise;let t=!1;return this.clearFlushTimer(),this.disabled?void 0:Ue((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(!bp(s))throw s;await dc(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 Ip=["is_not","is_set"],Rp=1152921504606847e3,S=class r extends Error{constructor(e){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,r.prototype)}};function yc(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(!yc(e in r?r[e]:null))return!1;return!0}function ni(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(!ni(e in r?r[e]:null))return!1;return!0}function Vt(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 S("Cannot stringify an unpaired surrogate like the flags service");e++}else if(t>=56320&&t<=57343)throw new S("Cannot stringify an unpaired surrogate like the flags service")}}function si(r,e=new Set){if(!(r===null||typeof r=="boolean")){if(typeof r=="string")return void Vt(r);if(typeof r=="number"){if(!Number.isFinite(r))throw new S(`Cannot represent non-finite number ${r} like the flags service`);return}if(Array.isArray(r)){if(e.has(r))throw new S("Cannot represent a circular array during local evaluation");e.add(r);try{for(let t=0;t<r.length;t++)t in r&&si(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 S("Cannot represent a non-JSON object like the flags service");if(e.has(r))throw new S("Cannot represent a circular object during local evaluation");e.add(r);try{for(let n of Object.keys(r))Vt(n),si(r[n],e)}finally{e.delete(r)}return}throw new S(`Cannot represent ${typeof r} like the flags service`)}}function Cp(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,f=a?(i-55296)*1024+l-56320+65536:i;if(u!==f)return u-f;t+=o?2:1,n+=a?2:1}return r.length-e.length}function ii(r,e=new Set){if(r===null)return"null";if(typeof r=="string")return Vt(r),JSON.stringify(r);if(typeof r=="boolean")return r?"true":"false";if(typeof r=="number"){if(!Number.isFinite(r))throw new S(`Cannot stringify non-finite number ${r} like the flags service`);if(Number.isInteger(r))throw new S(`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 S("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?ii(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 S("Cannot stringify a non-JSON object like the flags service");if(e.has(r))throw new S("Cannot stringify a circular object during local evaluation");e.add(r);try{let n=Object.keys(r);return n.forEach(Vt),`{${n.sort(Cp).map(s=>`${JSON.stringify(s)}:${ii(r[s],e)}`).join(",")}}`}finally{e.delete(r)}}throw new S(`Cannot stringify ${typeof r} like the flags service`)}function yn(r){return typeof r=="string"?(Vt(r),r):ii(r)}function _c(r){try{return new RegExp(r),!0}catch{return!1}}function Q(r){return String(r).replace(/[A-Z]/g,e=>e.toLowerCase())}function Sc(r,e,t){if(!/^\d+$/.test(r)||t==="strict"&&r.length>1&&r[0]==="0")throw new S(`Invalid semver: ${e}`);return parseInt(r,10)}function O(r,e="strict"){let n=String(r).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new S(`Invalid semver: ${r}`);let s=n.split("."),i=o=>o===void 0||o===""?0:Sc(o,r,e);return[i(s[0]),i(s[1]),i(s[2])]}function Z(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 Mp(r,e){let t=O(r,e);return{lower:[t[0],t[1],t[2]],upper:[t[0],t[1]+1,0]}}function xp(r,e){let[t,n,s]=O(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 Fp(r,e){let n=String(r).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new S(`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 Sc(c,r,e)}catch{}throw new S(`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 Ec(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 S(`${r} is in an invalid date format`)}throw new S(`The date provided ${r} must be a string, number, or date object`)}function oi(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 ai(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 S(`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&&!Ip.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=(f,p)=>{if(yc(f))return si(p),ni(f)===ni(p);if(Array.isArray(f)){let g=yn(p).toLowerCase();return f.some(h=>yn(h).toLowerCase()===g)}return yn(f).toLowerCase()===yn(p).toLowerCase()},u=(f,p,g)=>{if(g==="gt")return f>p;if(g==="gte")return f>=p;if(g==="lt")return f<p;if(g==="lte")return f<=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 Q(c).includes(Q(s));case"not_icontains":return!Q(c).includes(Q(s));case"starts_with":return Q(c).startsWith(Q(s));case"not_starts_with":return!Q(c).startsWith(Q(s));case"ends_with":return Q(c).endsWith(Q(s));case"not_ends_with":return!Q(c).endsWith(Q(s));case"regex":return _c(String(s))&&String(c).match(String(s))!==null;case"not_regex":return _c(String(s))&&String(c).match(String(s))===null;case"gt":case"gte":case"lt":case"lte":{let f=typeof s=="number"?s:parseFloat(String(s)),p=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(f)&&Number.isFinite(p)?u(p,f,i):u(String(c),String(s),i)}case"is_date_after":case"is_date_before":{if(typeof s=="boolean")throw new S("Date operations cannot be performed on boolean values");let f=oi(String(s));f==null&&(f=Ec(s));let p=Ec(c);return i==="is_date_before"?p<f:p>f}case"semver_eq":return Z(O(String(c),o),O(String(s),o))===0;case"semver_neq":return Z(O(String(c),o),O(String(s),o))!==0;case"semver_gt":return Z(O(String(c),o),O(String(s),o))>0;case"semver_gte":return Z(O(String(c),o),O(String(s),o))>=0;case"semver_lt":return Z(O(String(c),o),O(String(s),o))<0;case"semver_lte":return Z(O(String(c),o),O(String(s),o))<=0;case"semver_tilde":{let f=O(String(c),o),{lower:p,upper:g}=Mp(String(s),o);return Z(f,p)>=0&&Z(f,g)<0}case"semver_caret":{let f=O(String(c),o),{lower:p,upper:g}=xp(String(s),o);return Z(f,p)>=0&&Z(f,g)<0}case"semver_wildcard":{let f=O(String(c),o),{lower:p,upper:g}=Fp(String(s),o);return Z(f,p)>=0&&Z(f,g)<0}default:throw new S(`Unknown operator: ${i}`)}}async function bc(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 Sn(r,e,t=""){let n=await bc(`${r}.${e}${t}`);return parseInt(n.slice(0,15),16)/Rp}function bn(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 ci(r,e,t){let n=await Sn(r,e,"variant");return bn(t).find(s=>n>=s.valueMin&&n<s.valueMax)?.key}function li(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:ht(n)}var wc=9223372036854776e3,Op="9223372036854775808",kp=Object.prototype.propertyIsEnumerable;function Dp(){return{ancestors:new WeakSet,remainingNodes:1e4}}function fe(r,e){try{return vc(r,e,Dp(),0)}catch{return[]}}function Lp(r,e){let t=r.toString(),n=BigInt(Op);return r>=n||r<-n?(e?.debug(`Attribute ${t} is outside the int64 range; encoding it as a string`),{stringValue:t}):{intValue:t}}function fi(r,e,t,n){if(t.remainingNodes<=0)return{stringValue:un};if(t.remainingNodes--,ya(r))return{boolValue:r};if(typeof r=="bigint")return Lp(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>=wc||r<-wc?(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:ue(r)};if(typeof r=="function")return{stringValue:Ba};if(typeof r=="symbol")return{stringValue:String(r)};if(typeof r=="object"&&r!==null){if(t.ancestors.has(r))return{stringValue:ln};if(n>=20)return{stringValue:un};if(r instanceof Date){let s=r.getTime(),i=Number.isFinite(s)?r.toISOString():String(r);return{stringValue:typeof i=="string"?ue(i):String(i)}}t.ancestors.add(r);try{try{let s=r.toJSON;if(typeof s=="function")return fi(s.call(r),e,t,n+1)}catch{}return Y(r)?{arrayValue:{values:Np(r,e,t,n+1)}}:{kvlistValue:{values:vc(r,e,t,n+1)}}}finally{t.ancestors.delete(r)}}return{stringValue:ue(String(r))}}function Np(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(ne(a))continue;s.push(fi(a,e,t,n))}catch{s.push({stringValue:J})}return r.length>o&&s.push({stringValue:un}),s}function vc(r,e,t,n){let s=[];for(let i in r)if(kp.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(ks(o)||Pe(o))continue;s.push({key:ue(i),value:fi(o,e,t,n)})}catch{s.push({key:ue(i),value:{stringValue:J}})}}return s}function zt(r,e,t){return{...Ie({},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 Up=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function Yt(r,e){let t=Ie({},r),n={};for(let s of Up)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s],delete t[s]);return[...fe(t,e),...fe(n,e)]}var Ac={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 $p(r){if(r)return Object.prototype.hasOwnProperty.call(Ac,r)?Ac[r]:r}function pi(r,e){let t=$p(r);return{...t?{"os.name":t}:{},...e?{"os.version":e}:{}}}var jp={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}},ww=jp.info;var ze=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=B(()=>{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 Jt(){return 1-.25+Math.random()*.25*2}var ee=1;function Xt(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 Qt=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function gi(r){return String(r)+"000000"}function hi(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 Tc(r,e){for(let t=0;t<e.length;t++)if(r<=e[t])return t;return e.length}function mi(r,e,t){return zt(r,e,t)}function _i(r,e,t,n){return{resourceMetrics:[{resource:{attributes:Yt(e)},scopeMetrics:[{scope:{name:t,version:n},metrics:r}]}]}}function vn(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 Pc=1,Zt=class{constructor(e,t,n){this._instance=e,this._config=t,this._logger=n,this._series=new Map,this._flushTimer=new ze(()=>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 qe,this._consecutiveFlushFailures=0,this._flushJitter=ee,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=ee,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=hi(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(Qt.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[Tc(t,Qt)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let n=Y(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(Xt(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=Jt()):(this._consecutiveFlushFailures=0,this._flushJitter=ee),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 _i(this._buildMetrics(e),mi(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=gi(Date.now()),n=new Map;for(let s of e.values()){let i=hi(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:Pc,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:Pc,dataPoints:[]},n.set(i,o));let a=fe(s.attributes??{},this._logger),c=gi(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:Qt};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 Gp="0".repeat(32),Kp="0".repeat(16),Vp=/^[0-9a-f]+$/;function qp(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 zp(r){let e="";for(let t=0;t<r.length;t++)e+=r[t].toString(16).padStart(2,"0");return e}function Ic(r){let e=zp(qp(r));return/[^0]/.test(e)?e:e.slice(0,-1)+"1"}function Rc(){return Ic(16)}function Cc(){return Ic(8)}function Mc(r,e,t){return typeof r=="string"&&r.length===e&&r!==t&&Vp.test(r)}function xc(r){return Mc(r,32,Gp)}function Fc(r){return Mc(r,16,Kp)}var Yp=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Oc(r){let e=kc(r);return e&&{traceId:e.traceId,spanId:e.spanId,flags:Jp(e.flags)}}function Jp(r){return 1&parseInt(r,16)?Tn:Xp}function kc(r){if(typeof r!="string")return;let e=Yp.exec(r.trim());if(!e)return;let[,t,n,s,i,o]=e;if(t!=="ff"&&!(t==="00"&&o)&&!(!xc(n)||!Fc(s)))return{version:t,traceId:n,spanId:s,flags:i}}function Dc(r){return kc(r)&&r.trim()}function An(r){return Array.isArray(r)&&r.length===1?r[0]:r}var Tn="01",Xp="00";function Lc(r,e,t=Tn){return`00-${r}-${e}-${t}`}var Qp=32,Ei=512;function Pn(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>Qp)){for(let n of t)if(n.trim()&&!n.includes("="))return;return e.length<=Ei?e:eg(t)}}var Zp=128;function eg(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()>Ei;n--)e[n].length>Zp&&e.splice(n,1);for(;e.length&&t()>Ei;)e.pop();return e.length?e.join(","):void 0}var Nc="unknown";function Ye(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 "${Nc}"`),Nc)}function _t(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 Uc(r,e,t){let n=_t(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 In(r,e){return r<e?e:r}function er(r,e,t,n){let s=_t(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 Cn(){let r=globalThis.performance;return typeof r?.now=="function"?r.now():void 0}var Et=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??Tn,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:Cn(),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=Cn();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(ne(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]=xn(t,this._maxAttributeValueLength)}setAttribute(e,t){return this._mutable("setAttribute")&&this._writeAttribute(e,t),this}setAttributes(e){if(this._mutable("setAttributes")){let t=Ie({},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&&Wc(t,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:Ye(e,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:er(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:yi(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}=Si(e);return this.addEvent(tg,{"exception.type":t,"exception.message":n,...s&&{"exception.stacktrace":s}}),this.setStatus("error",n)}updateName(e){return this._mutable("updateName")&&(this._name=Ye(e,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return Lc(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=er(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:In(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},tg="exception",rg=4294967295;function ng(r){try{return typeof r=="string"?r:String(r)}catch{return J}}function Je(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),rg)}function sg(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 jc(r,e,t,n,s,i,o=[]){let a=0,c=0,l={};for(let g of sg(r.attributes,o)){let h=r.attributes[g];if(!ne(h)){if(!e.has(g)){if(a>=t){c++;continue}a++}Object.defineProperty(l,g,{value:xn(h,i),enumerable:!0,writable:!0,configurable:!0})}}r.attributes=l,c&&(r.droppedAttributesCount=Je(r.droppedAttributesCount)+c);let u=0,f=0,p=[];for(let g of r.events){if(u>=n){f++;continue}if(u++,g.attributes){let h=Wc(g.attributes,s,i);g.attributes=h.attributes,h.dropped&&(g.droppedAttributesCount=Je(g.droppedAttributesCount)+h.dropped)}p.push(g)}r.events=p,f&&(r.droppedEventsCount=Je(r.droppedEventsCount)+f),r.status?.message&&(r.status={...r.status,message:yi(ng(r.status.message),i)})}var Mn=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(){}},Bc=new Mn,tr=class extends Mn{constructor(e,t){super(),this._traceparent=e,this._tracestate=t}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function ig(r){try{let e=r.stack;return typeof e=="string"&&e?{stack:e}:{}}catch{return{}}}function $e(r,e){let t=An(r?.parent)??e,n=typeof t=="string"||t==null?t:$c(t,"traceparent"),s=Dc(n);if(!s)return Bc;let i=typeof t=="string"||t==null?r?.tracestate:$c(t,"tracestate");return new tr(s,Pn(i))}function $c(r,e){try{let t=r[e];return typeof t=="function"?t.call(r):void 0}catch{return}}function yi(r,e){return r.length>e?r.slice(0,e):r}function xn(r,e){return Rn(r,e,{ancestors:new WeakSet,remainingNodes:1e4},0)}function Rn(r,e,t,n){if(r===null||typeof r!="object")return ne(r)||t.remainingNodes<=0?r:(t.remainingNodes--,typeof r=="string"?yi(r,e):r);if(t.ancestors.has(r))return ln;if(t.remainingNodes<=0||n>=20)return r;t.remainingNodes--,t.ancestors.add(r);try{if(r instanceof Date)return r;let s=og(r);if(s.selfDescribed)return ne(s.value)?String(s.value):Rn(s.value,e,t,n+1);if(Y(r)){let a=Math.min(r.length,1e3),c=[];for(let l=0;l<a;l++)try{c.push(Rn(r[l],e,t,n+1))}catch{c.push(J)}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=Rn(r[a],e,t,n+1)}catch{c=J}a&&!ne(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 og(r){try{let e=r.toJSON;if(typeof e=="function")return{selfDescribed:!0,value:e.call(r)}}catch{}return{selfDescribed:!1}}function Wc(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=xn(r[a],t)}catch{c=J}ne(c)||(i++,Object.defineProperty(s,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:s,dropped:o}}function Hc(r,e){for(let t of Object.keys(r))r[t]=xn(r[t],e);return r}function rr(r,e,t){return e===Bc?t(e):r.with(e,()=>t(e))}function Si(r){try{let e=ig(r);if(ut(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 bi={internal:1,server:2,client:3,producer:4,consumer:5},ag={ok:1,error:2},cg=1,lg=256,ug=512;function dg(r){let e=parseInt(r.traceFlags,16);return(Number.isFinite(e)?255&e:cg)|lg|(r.parentIsRemote?ug:0)}function Fn(r){if(typeof r=="string")return ue(r);try{return ue(String(r))}catch{return J}}function fg(r){return r&&Object.prototype.hasOwnProperty.call(bi,r)?bi[r]:bi.internal}function wi(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 pg(r,e){let t={name:Fn(r.name),timeUnixNano:wi(r.timestamp)};if(r.attributes){let s=fe(r.attributes,e);s.length&&(t.attributes=s)}let n=Je(r.droppedAttributesCount);return n&&(t.droppedAttributesCount=n),t}function Gc(r,e){let t={traceId:r.traceId,spanId:r.spanId,name:Fn(r.name),kind:fg(r.kind),startTimeUnixNano:wi(r.startTime),endTimeUnixNano:wi(r.endTime),flags:dg(r)};r.parentSpanId&&(t.parentSpanId=r.parentSpanId),r.traceState&&(t.traceState=Fn(r.traceState));let n=fe(r.attributes,e);n.length&&(t.attributes=n),r.events.length&&(t.events=r.events.map(o=>pg(o,e)));let s=Je(r.droppedAttributesCount);s&&(t.droppedAttributesCount=s);let i=Je(r.droppedEventsCount);return i&&(t.droppedEventsCount=i),r.status&&(t.status={code:ag[r.status.code],...r.status.message&&{message:Fn(r.status.message)}}),t}function Kc(r,e,t){return zt(r,e,t)}function Vc(r,e,t,n,s){return{resourceSpans:[{resource:{attributes:Yt(e,s)},scopeSpans:[{scope:{name:t,version:n},spans:r}]}]}}var qc=8;function On(){return Cn()??Date.now()}function vi(r){try{return r instanceof Et}catch{return!1}}function zc(r,e){let t=Oc(r);if(t)return{traceId:t.traceId,parentSpanId:t.spanId,traceState:Pn(e),traceFlags:t.flags,isRemote:!0}}function gg(r){try{return typeof r.traceparent=="function"}catch{return!1}}function hg(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 kn(r,e,t){r[e]!==t&&(r[e]=t)}function mg(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 ze(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=ee,this._retryAfter=new qe,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 $e(t,this._contextManager.active());let n=An(t?.parent);if(n&&typeof n!="string"&&!vi(n)){if(gg(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),$e(t,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let s=this._resolveParent(n,t);if(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`),$e(t,this._contextManager.active());let i=Date.now(),o=Uc(t?.startTime,i,this._logger),a=Cc();this._liveSpans.set(a,On());let c=this._autoContextAttributes();return new Et({traceId:s?.traceId??Rc(),spanId:a,parentSpanId:s?.parentSpanId,traceState:s?.traceState,traceFlags:s?.traceFlags,parentIsRemote:s?.isRemote,name:Ye(e,"Span name",this._config.maxAttributeValueLength,this._logger),kind:t?.kind??"internal",attributes:Ie({...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:_t(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=rr(this._contextManager,o,i);return Ka(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=ee,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(e,t){if(typeof e=="string"){let s=zc(e,t?.tracestate);return s||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),s}if(vi(e))return e.childContext();let n=this._contextManager.active();if(vi(n))return n.childContext();if(n instanceof tr)return zc(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 Et))return;let{type:n,message:s,stack:i}=Si(t);e.addEvent("exception",{"exception.type":n,"exception.message":s,...i&&{"exception.stacktrace":i}}),e.statusIsExplicitlyOk||e.setStatus("error",s)}_evictAgedSpans(){let e=On()-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 h=g(l);if(!h)return this._recordDrop(1,"beforeSpanSend dropped it"),null;l=this._keepSpanIdentity(h,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},!hg(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=Ye(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=_t(u.startTime)??s.startTime,u.endTime=In(_t(u.endTime)??s.endTime,u.startTime);let p=[];for(let g of u.events)try{p.push({...g,name:Ye(g.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:er(g.timestamp,u.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return u.events=p,jc(u,t,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,o),u}catch(f){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",f),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{kn(e,"traceId",t.traceId),kn(e,"spanId",t.spanId),kn(e,"parentSpanId",t.parentSpanId),kn(e,"traceState",t.traceState)}catch{return mg(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(Gc(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=Hc(Kc(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,f=Math.max(1,Math.min(u,a,i,this._queue.length)),p=this._queue.slice(0,f),g=this._encodeBatch(p);if(!g.length){this._queue.splice(0,f),i-=f,o+=f,this._resetHeadBatchBudget();continue}let h=On()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),m=await this._instance._sendTracesBatch(Vc(g,t,n,s,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(m),m.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=ee,this._resetHeadBatchBudget(),this._queue.splice(0,f),i-=f,o+=f,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(m.kind==="too-large"){if(f===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=ee,this._resetHeadBatchBudget();continue}let E=Math.max(1,Math.floor(f/2));m.measuredLocally?a=E:this._maxExportBatchSize=E,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${E}`);continue}if(m.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=Jt(),this._headBatchSize=f,h&&(this._headBatchFailures++,this._headBatchChargeableAt=On()+this._nextFlushDelay()),this._headBatchFailures<qc)return this._logger.debug("Span export failed; retrying on the next flush",m.error),o;if(this._queue.splice(0,f),i-=f,o+=f,this._consecutiveFlushFailures=0,this._flushJitter=ee,this._resetHeadBatchBudget(),this._recordDrop(f,`the ingestion endpoint failed ${qc} times in a row`),this._retryAfter.isOpen())return o;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",m.error),this._queue.splice(0,f),i-=f,o+=f,this._consecutiveFlushFailures=0,this._flushJitter=ee,this._resetHeadBatchBudget(),this._recordDrop(f,"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(Xt(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var sr=class{active(){return this._active}with(e,t){let n=this._active;this._active=e;try{return t()}finally{this._active=n}}};var _g=5e3,Eg=512,yg=2048,Sg=128,bg=128,wg=128,vg=8192,Ag=1e4,Tg=36e5;function je(r,e){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:e}var Yc=["service.name","service.version","deployment.environment"];function Pg(r){if(!(!r||typeof r!="object"||Array.isArray(r)))try{if(Yc.every(t=>!(t in r)||typeof r[t]=="string"))return r;let e={...r};for(let t of Yc)t in e&&typeof e[t]!="string"&&delete e[t];return e}catch{return}}function Ig(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 Ai(r,e,t){let n=Ie({...e},Pg(r?.resourceAttributes)),s=je(r?.maxExportBatchSize,Eg);return{serviceName:n?.["service.name"]??r?.serviceName,serviceVersion:n?.["service.version"]??r?.serviceVersion,environment:n?.["deployment.environment"]??r?.environment,resourceAttributes:n,beforeSpanSend:Ig(r?.beforeSpanSend,t),maxAttributesPerSpan:je(r?.maxAttributesPerSpan,Sg),maxEventsPerSpan:je(r?.maxEventsPerSpan,bg),maxAttributesPerEvent:wg,maxAttributeValueLength:je(r?.maxAttributeValueLength,vg),flushIntervalMs:je(r?.flushIntervalMs,_g),maxExportBatchSize:s,maxQueueSize:Math.max(je(r?.maxQueueSize,yg),s),maxLiveSpans:je(r?.maxLiveSpans,Ag),maxSpanAgeMs:je(r?.maxSpanAgeMs,Tg)}}var Ti=require("node:fs"),Qc=require("node:fs/promises"),Ii=require("node:path"),Zc=require("node:readline"),Dn=new D.ReduceableCache(25),ir=new D.ReduceableCache(20),Ri=7,Rg=1e3,Cg=1e4,Pi=10485760;async function el(r,e=Qc.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"||kg(l)||Dg(c)||!(0,Ii.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=tl(a,s);if(c===void 0||ir.get(c))continue;let l=n[a];if(!l)continue;l.sort((p,g)=>p-g);let u=Ng(l);if(u.every(p=>Lg(c,p)))continue;let f=Ug(Dn,c,{});o.push(xg(a,u,f,c,e,t))}return await Promise.all(o).catch(()=>{}),r&&r.length>0&&Fg(r,Dn,s),Dn.reduce(),r}async function Mg(r,e,t){let n,s=!1;try{n=await e(r,Ti.constants.O_RDONLY|Ti.constants.O_NONBLOCK);let i=await n.stat();return i.isFile()?i.size>Pi?void t?.debug(`Skipping source context for oversized file ${r}: ${i.size} bytes exceeds ${Pi}`):(s=!0,n):void 0}catch{return}finally{n&&!s&&await n.close().catch(()=>{})}}async function xg(r,e,t,n,s,i){let o=await Mg(r,s,i);if(o===void 0)return void ir.set(n,1);let a=o;return new Promise(c=>{let l=!1;function u(I){l||(l=!0,I?.destroy(),a.close().then(c,c))}let f;try{f=a.createReadStream({autoClose:!1,start:0,end:Pi-1})}catch{ir.set(n,1),u();return}let p;try{p=(0,Zc.createInterface)({input:f})}catch{ir.set(n,1),u(f);return}let g=0,h=0,m=e[h];if(m===void 0)return void u(f);let E=m[0],_=m[1];function b(){ir.set(n,1),p.close(),p.removeAllListeners(),u(f)}f.on("error",b),p.on("error",b),p.on("close",()=>u(f)),p.on("line",I=>{if(g++,!(g<E)&&(t[g]=$g(I,0),g>=_)){if(h===e.length-1){p.close(),p.removeAllListeners();return}h++;let C=e[h];if(C===void 0){p.close(),p.removeAllListeners();return}E=C[0],_=C[1]}})})}function Fg(r,e,t){for(let n of r)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let s=tl(n.filename,t),i=s===void 0?void 0:e.get(s);if(i===void 0)continue;Og(n.lineno,n,i)}}function Og(r,e,t){if(e.lineno===void 0||t===void 0)return;e.pre_context=[];for(let s=rl(r);s<r;s++){let i=t[s];if(i===void 0)return void Jc(e);e.pre_context.push(i)}if(t[r]===void 0)return void Jc(e);e.context_line=t[r];let n=nl(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 Jc(r){delete r.pre_context,delete r.context_line,delete r.post_context}function kg(r){return r.startsWith("node:")||r.endsWith(".min.js")||r.endsWith(".min.cjs")||r.endsWith(".min.mjs")||r.startsWith("data:")}function Dg(r){return r.lineno!==void 0&&r.lineno>Cg||r.colno!==void 0&&r.colno>Rg}function tl(r,e){return(0,Ii.isAbsolute)(r)?JSON.stringify([null,r]):e===void 0?void 0:JSON.stringify([e,r])}function Lg(r,e){let t=Dn.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 Ng(r){if(!r.length)return[];let e=0,t=r[0];if(typeof t!="number")return[];let n=Xc(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+Ri:(s.push(n),n=Xc(i)),e++}return s}function Xc(r){return[rl(r),nl(r)]}function rl(r){return Math.max(1,r-Ri)}function nl(r){return r+Ri}function Ug(r,e,t){let n=r.get(e);return n===void 0?(r.set(e,t),t):n}function $g(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 yt=require("path");function sl(r=process.cwd()){let e=yt.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,yt.isAbsolute)(i.filename)&&(i.filename=t((0,yt.relative)(n,t(i.filename))));return s}}var il="5.52.1";var Ce={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var Be=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(Ce.ERRORS_WHILE_COMPUTING),this._quotaLimited&&i.push(Ce.QUOTA_LIMITED),t===void 0&&i.push(Ce.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 jg=6e4,St=class r extends Error{constructor(e){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,r.prototype)}};function Bg(r,e){r.name=e.name,Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype)}var pe=class r extends Error{constructor(e){super(e),Bg(this,r)}},Ln=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()}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 pe||l instanceof S?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={...e,evaluationCache:e.evaluationCache??{}};return await Promise.all(o.map(async c=>{try{let{value:l,payload:u}=await this.computeFlagAndPayloadLocally(c,a);n[c.key]=l,u&&(s[c.key]=u)}catch(l){l instanceof pe||l instanceof S?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(i||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};let o;o=s!==void 0?s:await this.computeFlagValueLocally(e,t);let a=this.getFeatureFlagPayload(e.key,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 S("Flag has experience continuity enabled");let c=(e.filters||{}).aggregation_group_type_index;if(c!=null){let l=this.groupTypeMapping[String(c)];if(!l)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${e.key}`)),new S("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 S(`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}getFeatureFlagPayload(e,t){return li(this.featureFlagsByKey?.[e]?.filters?.payloads,t)}async evaluateFlagDependency(e,t,n){let{evaluationCache:s}=n,i=e.key;if(!this.featureFlagsByKey)throw new S("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new S(`Flag dependency property for '${i}' is missing required 'dependency_chain' field`);let o=e.dependency_chain;if(!Array.isArray(o))throw new S(`Flag dependency property for '${i}' has an invalid 'dependency_chain' (expected array, got ${typeof o})`);if(o.length===0)throw new S(`Circular dependency detected for flag '${i}' (empty dependency chain)`);for(let c of o){if(!(c in s)){let u=this.featureFlagsByKey[c];if(u)if(u.active)try{let f=await this.computeFlagValueLocally(u,n);s[c]=f}catch(f){throw new S(`Error evaluating flag dependency '${c}' for flag '${i}': ${f}`)}else s[c]=!1;else if(this.filteredOutFlagKeys.has(c))s[c]=!1;else throw new S(`Missing flag dependency '${c}' for flag '${i}'`)}if(s[c]==null)throw new S(`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){let i=e.filters||{},o=i.groups||[],a=i.aggregation_group_type_index,c=i.early_exit??!1,{groups:l,groupProperties:u}=s,f=!1,p;for(let g of o)try{let h=g.aggregation_group_type_index!==void 0?g.aggregation_group_type_index:a,m=n,E=t;if(h!==a&&h!=null){let b=this.groupTypeMapping[String(h)];if(!b||!(b in l)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${h} not available`));continue}if(!(b in u)){f=!0;continue}m=u[b],E=l[b]}let _=await this.isConditionMatch(e,E,g,m,s);if(_==="match"){let b=g.variant,I=i.multivariate?.variants||[];p=b&&I.some(C=>C.key===b)?b:await this.getMatchingVariant(e,E)||!0;break}if(c&&_==="out_of_rollout_bound"){if(f)break;return!1}}catch(h){if(h instanceof pe)throw h;if(h instanceof S)f=!0;else throw h}if(p!==void 0)return p;if(f)throw new S("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,n,s,i){let o=n.rollout_percentage,a=c=>{this.logMsgIfDebug(()=>console.warn(c))};if((n.properties||[]).length>0){for(let c of n.properties){let l=c.type,u=!1;if(l==="cohort"){let f=await al(c,s,this.cohorts,this.debugMode,p=>this.evaluateFlagDependency(p,s,i));u=c.operator==="not_in"?!f:f}else u=l==="flag"?await this.evaluateFlagDependency(c,s,i):ol(c,s,a);if(!u)return"no_match"}if(o==null)return"match"}return o!=null&&await Sn(e.key,t)>o/100?"out_of_rollout_bound":"match"}async getMatchingVariant(e,t){return ci(e.key,t,e.filters?.multivariate?.variants||[])}variantLookupTable(e){return bn(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))})}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.groupTypeMapping,this.cohorts=e.cohorts,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.(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(){return this.shouldBeginExponentialBackoff?Math.min(jg,this.pollingInterval*2**this.backOffCount):this.pollingInterval}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 St(`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.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new St(`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 St(`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={flags:n.flags??[],groupTypeMapping:n.group_type_mapping||{},cohorts:n.cohorts||{},minimalFlagCalledEvents:n.minimal_flag_called_events===!0};if(this.updateFlagState(s),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(s)}catch(i){this.onError?.(new Error(`Failed to store in cache: ${i}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(e){e instanceof St&&this.onError?.(e)}finally{this.pollerStopped||(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=B(()=>{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 Ue(t,e,()=>{throw new Error(`Cache shutdown timeout after ${e}ms`)})}catch(t){this.onError?.(new Error(`Error during cache shutdown: ${t}`))}}};function ol(r,e,t){return ai(r,e,{warnFunction:t})}function Wg(r,e){if(!(r in e))throw new pe(`cohort ${r} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function al(r,e,t,n=!1,s){let i=String(r.value);Wg(i,t);let o=t[i];return cl(o,e,t,n,s)}async function cl(r,e,t,n=!1,s){if(!r)return!0;let i=r.type,o=r.values;if(!o||o.length===0)return!0;let a=!1;if("values"in o[0]){for(let c of o)try{let l=await cl(c,e,t,n,s);if(i==="AND"){if(!l)return!1}else if(l)return!0}catch(l){if(l instanceof pe)throw l;if(l instanceof S)n&&console.debug(`Failed to compute property ${c} locally: ${l}`),a=!0;else throw l}if(a)throw new S("Can't match cohort without a given cohort property value");return i==="AND"}for(let c of o)try{let l;if(c.type==="cohort")l=await al(c,e,t,n,s);else if(c.type==="flag"){if(!s)throw new S(`Flag dependency '${c.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);l=await s(c)}else l=ol(c,e);let u=c.negation||!1;if(i==="AND"){if(!l&&!u||l&&u)return!1}else if(l&&!u||!l&&u)return!0}catch(l){if(l instanceof pe)throw l;if(l instanceof S)n&&console.debug(`Failed to compute property ${c} locally: ${l}`),a=!0;else throw l}if(a)throw new S("can't match cohort without a given cohort property value");return i==="AND"}var Hg=["--unhandled-rejections","--unhandled_rejections"],Gg=new Set(["throw","strict","warn","warn-with-error-code","none"]),Kg=[...globalThis.process?.execArgv??[]],Vg=globalThis.process?.env?.NODE_OPTIONS;function qg(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 ll(r){let e;for(let t=0;t<r.length;t++){let n=r[t],s=Hg.find(o=>n===o||n.startsWith(`${o}=`));if(!s)continue;let i=n===s?r[++t]:n.slice(s.length+1);Gg.has(i)&&(e=i)}return e}function zg(r=Kg,e=Vg){return ll(r)??ll(qg(e??""))??"throw"}var ul=zg();function dl(r,e,t){r(e,{mechanism:{type:t==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function Yg(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;dl(r,n,s),!t&&i===0&&(t=!0,e(n))},{_posthogErrorHandler:!0})}function fl(r,e,t=ul){let n=globalThis.process;if(n){if(t==="strict")return void n.on("uncaughtExceptionMonitor",(s,i)=>dl(r,s,i));n.on("uncaughtException",Yg(r,e))}}function pl(r,e=ul){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 Jg=2e3,Ci=class r{constructor(e,t,n){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new en({...Aa(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return xt(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=D.getInjectedReleaseId();return c&&(o.$release_id=c),{event:"$exception",distinctId:s,properties:{...a,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(fl(this.onException.bind(this),this.onFatalError.bind(this)),pl(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(Jg),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},Xe=Ci;var Nn=class{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}};function Xg(r){return r==="v0"||r==="v1"}function gl(){let r="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return Xg(r)?r:"v0"}var Qg="$ai_",or="analytics";function hl(r){return typeof r.event=="string"&&r.event.startsWith(Qg)}var bt=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 Mi(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 Zg(r){return typeof r=="string"?r:void 0}var eh=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:Mi},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:Mi},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:Mi},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:Zg}],th=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function rh(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function nh(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 ml(r,e,t){t!==void 0&&!(e in r)&&(r[e]=t)}function sh(r){let t={...rh(r.properties)?r.properties:{}},n={};for(let{property:i,optionKey:o,coerce:a}of eh)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 th)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,ml(t,"$set",r.$set),ml(t,"$set_once",r.$set_once),{event:String(r.event??""),uuid:String(r.uuid??""),distinct_id:String(r.distinct_id??""),timestamp:nh(r.timestamp),...s,options:n,properties:t}}function _l(r,{createdAt:e,historicalMigration:t}){let n={created_at:e,batch:r.map(sh)};return t&&(n.historical_migration=!0),n}var ih="/i/v1/analytics/events",oh=3e4,ah=new Set([408,500,502,503,504]),Un=class{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??oh,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??(n=>new Promise(s=>B(s,n))),this.generateRequestId=t.generateRequestId??j,this.compress=t.compress??Gt}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:s}=_l(e,{createdAt:n,historicalMigration:this.config.historicalMigration}),i=`${this.config.host}${ih}`,o=[],a=s,c=Math.max(1,this.config.maxAttempts);for(let l=1;l<=c;l++){let u=l===c,f=Ne({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),p,g;try{p=await this.sendOnce(i,f,l,t);let{response:h,signal:m}=p,{status:E}=h;if(E<200||E>=300)if(!u&&ah.has(E)){let _=this.parseRetryAfter(h);await p.waitFor(p.cancelBody()).catch(()=>{}),g=this.backoffDelay(l,_)}else{let _=await this.buildHttpError(h,E,p.waitFor);return this.surfaceBatchFailure(t,o,a,_)}else{let _;try{_=await p.waitFor(this.parseResponse(h))}catch(C){if(m.aborted)throw C;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 bt({requestId:t,drops:o,retryExhausted:b.map(C=>C.uuid)}));a=b;let I=this.parseRetryAfter(h);g=this.backoffDelay(l,I)}}catch(h){if(p&&!p.signal.aborted)throw h;if(u)return this.surfaceBatchFailure(t,o,a,h);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 f=await this.compress(t,this.config.isDebug);f!==null&&(o=f,i["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",l,u=new Promise((f,p)=>{l=B(()=>{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 f=this.fetchFn(e,{method:"POST",headers:i,body:o,signal:a.signal}),p=!1;f.then(_=>{a.signal.aborted&&!p&&this.cancelBody(_)}).catch(()=>{});let g=await Promise.race([f,u]);p=!0,c="while reading the response body";let h=!1,m,E=()=>m??=this.cancelBody(g);return{response:g,signal:a.signal,waitFor:_=>Promise.race([_,u]),cancelBody:E,cleanup:()=>{h||(h=!0,clearTimeout(l),a.signal.aborted&&E())}}}catch(f){throw clearTimeout(l),f}}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 bt({requestId:e,drops:t,retryExhausted:n.map(i=>i.uuid),cause:s}))}surfacePartialDrops(e,t){t.length>0&&this.onError(new bt({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){try{await e.body?.cancel()}catch{}}};var Qe="ai-capture",$n="/i/v0/ai/batch/";var lh=new TextEncoder;function Fi(r){return lh.encode(Ne(r)).length}function El(r,e=8388608,t=5242880){let n=[],s=[],i=[],o=0;for(let a of r){if(a===void 0)continue;let c=Fi(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 uh=100,yl=3e4,dh=5e4,fh=50,ph=500,gh="https://us.i.posthog.com",Sl=new Set;function Bn(r,e){Sl.has(r)||(Sl.add(r),console.warn(`[PostHog] ${e}`))}function hh(r){return typeof r=="string"?r.trim():""}function mh(r){return(typeof r=="string"?r.trim():"")||void 0}function _h(r){return(typeof r=="string"?r.trim():"")||gh}function Eh(r){return(Array.isArray(r)?r:[r]).filter(t=>typeof t=="string"&&t.trim().length>0)}function yh(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 Wn=class extends Kt{constructor(e,t={}){let n=hh(e),s={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5e3,host:_h(t.host),personalApiKey:mh(t.secretKey??t.personalApiKey)};if(super(n,s),this._memoryStorage=new Nn,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=s,this.captureMode=gl(),this.enableFullAiCapture=s.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof s.featureFlagsPollingInterval=="number"?Math.max(s.featureFlagsPollingInterval,uh):yl,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 Ln({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 Xe(this,s,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=s.maxCacheSize||dh}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:kt([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??ph,s=t>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),s)return void this.resolveWaitUntilFlush();let i=this.options.waitUntilDebounceMs??fh;this._waitUntilCycle.timer=B(()=>{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"&&hl(e)?"ai":or}persistedQueueKeyForRoute(e){return e===Qe?G.AiCaptureQueue:e==="ai"?G.AiQueue:G.Queue}getActiveQueueRoutes(){let e=this.captureMode==="v1"?[or,"ai"]:[or];return this._aiCaptureRouteActive&&e.push(Qe),e}getBatchEndpointPath(e){return e===Qe?$n:super.getBatchEndpointPath(e)}async sendBatch(e,t,n=or){if(n===Qe)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}=El(e);for(let{event:i,bytes:o}of s){let a=`Event ${i} (${o} bytes) exceeds the ${8388608/1048576}MiB limit for ${$n}, 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,Qe)}catch(n){if(!mt(n))throw n;if(e.length===1){let[i]=e,a=`Event ${typeof i.event=="string"?i.event:"unknown"} (${Fi(i)} bytes) was rejected with 413 by ${$n} 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 Un({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 il}get metrics(){return this._metrics||(this._metrics=new Zt(this,vn(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new sr}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,Ai(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)??$e(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):rr(this._spanContextManager,$e(s,this._spanContextManager.active()),i)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}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},f={distinctId:o,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(e,f,u,i):this.enqueue(e,f,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=Ve(e.uuid,j);return this._sendPreparedAiEvent({...e,uuid:t},!1),t}async captureAiImmediate(e){if(this.disabled)return;let t=Ve(e.uuid,j);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,Qe)}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=Eh(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}async waitForLocalEvaluationReady(e=yl){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 v=this._payloadOverrides?.[e];return{key:e,enabled:y!==!1,variant:typeof y=="string"?y:void 0,payload:v}}let{groups:o,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=n,f=this.addLocalPersonAndGroupProperties(t,o,l,u);l=f.allPersonProperties,u=f.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(t,o,this.personPropertiesForLocalEvaluation(t,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g,h=!1,m,E,_,b,I,C,k;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let y=this.featureFlagsPoller?.featureFlagsByKey[e];if(y)try{let v=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(y,p,{matchValue:s});if(v){h=!0;let w=v.value;b=y.id,C="Evaluated locally",k=y.has_experiment,g={key:e,enabled:w!==!1,variant:typeof w=="string"?w:void 0,payload:v.payload??void 0}}}catch(v){if(v instanceof pe||v instanceof S)this._logger?.info(`${v.name} when computing flag locally: ${e}: ${v.message}`);else throw v}}if(!h&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,a,[e]);if(y===void 0)_=Ce.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,m=y.requestId,E=y.evaluatedAt;let v=[];y.errorsWhileComputingFlags&&v.push(Ce.ERRORS_WHILE_COMPUTING),y.quotaLimited?.includes("feature_flags")&&v.push(Ce.QUOTA_LIMITED);let w=y.flags[e];if(w===void 0)v.push(Ce.FLAG_MISSING);else{b=w.metadata?.id,I=w.metadata?.version,C=w.reason?.description??w.reason?.code,k=w.metadata?.has_experiment;let We;if(w.metadata?.payload!==void 0)try{We=JSON.parse(w.metadata.payload)}catch{We=w.metadata.payload}g={key:e,enabled:w.enabled,variant:w.variant??void 0,payload:We}}v.length>0&&(_=v.join(","))}}if(i){let y=g===void 0?void 0:g.enabled===!1?!1:g.variant??!0,v={$feature_flag:e,$feature_flag_response:y,$feature_flag_id:b,$feature_flag_version:I,$feature_flag_reason:C,locally_evaluated:h,[`$feature/${e}`]:y,$feature_flag_request_id:m,$feature_flag_evaluated_at:h?Date.now():E};if(k!==void 0&&(v.$feature_flag_has_experiment=k),h&&this.featureFlagsPoller){let w=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();w!==void 0&&(v.$feature_flag_definitions_loaded_at=w)}_&&(v.$feature_flag_error=_),this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:y,groups:o,disableGeoip:a,properties:v})}return g!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides&&(g={...g,payload:this._payloadOverrides[e]}),g}async getFeatureFlag(e,t,n){Bn("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(Bn("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){Bn("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||{},f=this.addLocalPersonAndGroupProperties(n,i,l,u);l=f.allPersonProperties,u=f.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),h={},m={},E=!0;if(g&&(h=g.response,m=g.payloads,E=g.fallbackToFlags),E&&!c){let _=await super.getFeatureFlagsAndPayloadsStateless(p.distinctId,p.groups,l,u,o,a);h={...h,..._.flags||{}},m={...m,..._.payloads||{}}}return this._flagOverrides!==void 0&&(h={...h,...this._flagOverrides}),this._payloadOverrides!==void 0&&(m={...m,...this._payloadOverrides}),{featureFlags:h,featureFlagPayloads:m}}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 Be({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new Be({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:i,disableGeoip:o}=s||{},a=s?.flagKeys??void 0;if(a?.length===0)return new Be({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:{}});let{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},f=this.addLocalPersonAndGroupProperties(n,i,l,u);l=f.allPersonProperties,u=f.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,h={},m,E,_=!1,b=!1,I=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),C=new Set;if(I)for(let[y,v]of Object.entries(I.response)){let w=this.featureFlagsPoller?.featureFlagsByKey[y];h[y]={key:y,enabled:v!==!1,variant:typeof v=="string"?v:void 0,payload:I.payloads[y],id:w?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:w?.has_experiment},C.add(y)}let k=g!==void 0&&Array.from(g).some(y=>this.featureFlagsPoller?.featureFlagsByKey[y]===void 0);if((I?I.fallbackToFlags||k:!0)&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,o,a);if(y){this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,m=y.requestId,E=y.evaluatedAt,_=!!y.errorsWhileComputingFlags,b=Array.isArray(y.quotaLimited)&&y.quotaLimited.includes("feature_flags");for(let[v,w]of Object.entries(y.flags)){if(C.has(v))continue;let We;if(w.metadata?.payload!==void 0)try{We=JSON.parse(w.metadata.payload)}catch{We=w.metadata.payload}h[v]={key:v,enabled:w.enabled,variant:w.variant,payload:We,id:w.metadata?.id,version:w.metadata?.version,reason:w.reason?.description??w.reason?.code,locallyEvaluated:!1,hasExperiment:w.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[y,v]of Object.entries(this._flagOverrides)){if(v===void 0){delete h[y];continue}let w=h[y];h[y]={key:y,enabled:v!==!1,variant:typeof v=="string"?v:void 0,payload:w?.payload,id:w?.id,version:w?.version,reason:w?.reason,locallyEvaluated:w?.locallyEvaluated??!1,hasExperiment:w?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[y,v]of Object.entries(this._payloadOverrides)){let w=h[y];w&&(h[y]={...w,payload:v})}if(g!==void 0)for(let y of Object.keys(h))g.has(y)||delete h[y];return new Be({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:h,requestId:m,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],[f])=>u<f?-1:u>f?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 Ue(this._metrics.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._metrics.reset()),this._traces&&(await Ue(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=B(()=>{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(ba(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,f]of Object.entries(t||{}))l[u]=String(f);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,f]of Object.entries(t||{}))l[u]=String(f);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(!Xe.isPreviouslyCapturedError(e)){let o=new Error("PostHog syntheticException");this.addPendingPromise(Xe.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(!Xe.isPreviouslyCapturedError(e)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(Xe.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:f}=e,p=this.context?.get(),g=t.includeContextProperties??!0,h=n||p?.distinctId,m=g?{...this.props,...p?.properties||{},...i||{}}:{...i||{}};h||(h=j(),m.$process_person_profile=!1),g&&p?.sessionId&&!m.$session_id&&(m.$session_id=p.sessionId);let E=this._shouldSendMinimalFlagCalledEvent(s,m)?Wt(m):m,_=this._runBeforeSend({distinctId:h,event:s,properties:E,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:f});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){Bn("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 I=typeof c=="object"?c:void 0,C=await this.getFeatureFlagsForEvent(_.distinctId,o,u,I);return yh(C)}return{}}).catch(()=>({})).then(I=>{let C=_.groups||o;return{...I,..._.properties||{},...C!==void 0&&Object.keys(C).length>0?{$groups:C}:{}}});return _.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof b.$raw_user_agent=="string"&&va(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 bl=require("node:async_hooks"),Hn=class{constructor(){this.storage=new bl.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 wl=require("node:async_hooks"),Gn=class{active(){return this._storage.getStore()}with(e,t){return this._storage.run(e,t)}constructor(){this._storage=new wl.AsyncLocalStorage}};var vl=require("node:zlib"),Al=require("node:util"),Sh=(0,Al.promisify)(vl.gzip);async function Tl(r,e=!0){try{let t=await Sh(r);return new Uint8Array(t)}catch(t){return e&&console.error("Failed to gzip compress data",t),null}}var Kn=require("node:os");function Pl(){let r,e;try{r=(0,Kn.platform)(),e=(0,Kn.release)()}catch{}return pi(r,e)}var Il="posthog-node";function bh(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[Oi.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 f=o.exception?.values||[],p=f.map(m=>({...m,stacktrace:m.stacktrace?{...m.stacktrace,type:"raw",frames:(m.stacktrace.frames||[]).map(E=>({...E,platform:"node:javascript"}))}:void 0})),g={$exception_message:f[0]?.value||o.message,$exception_type:f[0]?.type,$exception_level:o.level,$exception_list:p,$sentry_event_id:o.event_id,$sentry_exception:o.exception,$sentry_exception_message:f[0]?.value||o.message,$sentry_exception_type:f[0]?.type,$sentry_tags:o.tags},h=D.getInjectedReleaseId();return h&&(g.$release_id=h),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 Oi=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(e,t,n,s,i){this.name=Il,this.name=Il,this.setupOnce=function(o,a){let c=a()?.getClient()?.getDsn()?.projectId;o(bh(e,{organization:t,projectId:c,prefix:n,severityAllowList:s,sendExceptionsToPostHog:i??!0}))}}};var Vn=class extends Wn{getLibraryId(){return"posthog-node"}compressPayload(e){return Tl(e,this.isDebug)}initializeContext(){return new Hn}initializeSpanContextManager(){return new Gn}hostResourceAttributes(){return Pl()}createErrorPropertiesBuilder(){return new D.ErrorPropertiesBuilder([new D.EventCoercer,new D.ErrorCoercer,new D.ObjectCoercer,new D.StringCoercer,new D.PrimitiveCoercer],D.createStackParser("node:javascript",D.nodeStackLineParser),[ma(),e=>el(e,void 0,this._logger),sl()])}};var Ml=he(require("os"),1);A();var Rl=500;var Cl=8192,ge="[REDACTED]";function xl(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 d.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,n),""}}let e=r;return e.length>Cl?e.slice(0,Cl):e}catch{return""}}function ki(r){if(typeof r!="string"||r.length===0)return r??"";let e="";try{e=Ml.default.homedir()||""}catch(n){let s=n instanceof Error?n:new Error(String(n));d.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 d.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,s),r.split(e).join("~")}}function Di(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 wh(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${ge}@`))}function vh(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,ge),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,ge),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,ge),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,ge),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,ge),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,ge),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,ge),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,ge),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,ge),e}function Ah(r){return typeof r!="string"||r.length===0?r??"":r.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
|
|
`).trim()}function Th(r){let e=xl(r);return e.length===0?"":(e=ki(e),e=Di(e),e=wh(e),e=vh(e),e)}function Fl(r){try{let e=Ah(Th(xl(r)));return e.length>Rl?e.slice(0,Rl):e}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.warn("SYSTEM","error-scrub: message scrub failed; emitting empty message",void 0,t),""}}function Ol(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 xT=300*1e3,FT=3600*1e3;A();var Ni=null,Ph=!1,Ih=3e4,qn=null;function Dl(){let r=Date.now();if(qn&&r<qn.expiresAt)return qn.value;let e=Pr(process.env,Ct());return qn={value:e,expiresAt:r+Ih},e}var Rh=!1;function Ch(){if(!Ni){let r=Rh&&_o(process.env)&&Dl();Ni=new Vn(Cr(),{host:Mr(),flushAt:20,flushInterval:1e4,disableGeoip:!1,enableExceptionAutocapture:r,before_send:Nh})}return Ni}var Mh=6e4,xh=500,ar=new Map;function Fh(r,e,t){let n="";try{let s=(t||"").split(`
|
|
`).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));d.warn("SYSTEM","Telemetry: stack parse failed while fingerprinting; using empty top frame",void 0,i),n=""}return`${r}::${Ol(e)}::${n}`.slice(0,400)}function Oh(r,e){try{return kh(r,e)}catch(t){let n=t instanceof Error?t:new Error(String(t));return d.warn("SYSTEM","Telemetry: error rate-limit bookkeeping failed; failing closed (event dropped)",void 0,n),{send:!1,count:0}}}function kh(r,e){let t=ar.get(r);if(!t){if(ar.size>=xh){let n=null,s=1/0;for(let[i,o]of ar){let a=Math.max(o.lastSentTs,o.firstTs);a<s&&(s=a,n=i)}n!==null&&ar.delete(n)}return t={count:1,firstTs:e,lastSentTs:e},ar.set(r,t),{send:!0,count:1}}if(t.count+=1,e-t.lastSentTs>=Mh){t.lastSentTs=e;let n=t.count;return t.count=0,{send:!0,count:n}}return{send:!1,count:t.count}}var kl="__cm_rate_limited";function Dh(r){try{return typeof r!="string"||r.length===0?"":Di(ki(r))}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.warn("SYSTEM","Telemetry: frame filename redaction failed; stripping value entirely",void 0,t),""}}function Lh(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=Fl(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=Dh(a.filename))}}}function Nh(r){try{if(!r||typeof r!="object")return r;let e=r;if(e.event!=="$exception")return r;let t=e.properties??{};if(t[kl]){try{delete t[kl],e.properties=t}catch{}return r}Lh(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=Fh(n,s,i),a=Oh(o,Date.now());if(!a.send)return null;try{t.occurrence_count=a.count,e.properties=t}catch{}return r}catch{return null}}function Li(r,e,t){try{Uh(r,e,t)}catch(n){let s=n instanceof Error?n:new Error(String(n));d.warn("SYSTEM","Telemetry: captureEvent failed; event dropped",{event:r},s)}}function Uh(r,e,t){if(Ph||!Dl())return;let n=Rr({...Fr(),...e??{}});if(t?.person?n.$set=xr(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
|
|
`);return}Ch().capture({distinctId:Ir(),event:r,properties:n})}var $h=["babysit","ccs-align","cloud-sync","design-is","do","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"],jh=new Set($h),Ll={skill_id:"other",skill_source:"third_party"};function Nl(r){let e=Bh(r);return e&&jh.has(e)?{skill_id:e,skill_source:"first_party"}:Ll}function Ul(r,e){if(r==="Skill"&&!(!e||typeof e!="object"))return e.skill}function Bh(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 $l=null;function Wh(){if(!$l)throw new Error("ingest helpers used before setIngestContext() \u2014 wiring bug");return $l}async function jl(r){let{sessionManager:e,dbManager:t,eventBroadcaster:n,ensureGeneratorRunning:s}=Wh(),i=le(r.platformSource),o=typeof r.cwd=="string"?r.cwd:"",a=o.trim()?Ge(o).primary:"",c=q.loadFromFile(rt);if(o&&qr(o,c.CLAUDE_MEM_EXCLUDED_PROJECTS))return{ok:!0,status:"skipped",reason:"project_excluded"};if(new Set(c.CLAUDE_MEM_SKIP_TOOLS.split(",").map(_=>_.trim()).filter(Boolean)).has(r.toolName)){if(r.toolName==="Skill"){let{skill_id:_,skill_source:b}=Nl(Ul(r.toolName,r.toolInput));Li("skill_invoked",{skill_id:_,skill_source:b,skill_trigger:"tool",ide:i})}return{ok:!0,status:"skipped",reason:"tool_excluded"}}if(new Set(["Edit","Write","Read","NotebookEdit"]).has(r.toolName)&&r.toolInput&&typeof r.toolInput=="object"){let _=r.toolInput,b=_.file_path||_.notebook_path;if(b&&b.includes("session-memory"))return{ok:!0,status:"skipped",reason:"session_memory_meta"}}let f=t.getSessionStore(),p,g;try{p=f.createSDKSession(r.contentSessionId,a,"",void 0,i),g=f.getPromptNumberFromUserPrompts(r.contentSessionId,p)}catch(_){let b=_ instanceof Error?_.message:String(_);return d.error("INGEST","Observation session resolution failed",{contentSessionId:r.contentSessionId,toolName:r.toolName},_ instanceof Error?_:new Error(b)),{ok:!1,reason:b,status:500}}if(!Xr.checkUserPromptPrivacy(f,r.contentSessionId,g,"observation",p,{tool_name:r.toolName}).allow)return{ok:!0,status:"skipped",reason:"private"};let m=r.toolInput!==void 0?Ms(JSON.stringify(r.toolInput)):"{}",E=r.toolResponse!==void 0?Ms(JSON.stringify(r.toolResponse)):"{}";if(r.toolUseId)try{f.upsertToolUse({toolUseId:r.toolUseId,contentSessionId:r.contentSessionId,sessionDbId:p,project:a,platformSource:i,toolName:r.toolName,toolInput:m,toolResponse:E,cwd:o||null,promptNumber:g,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(_){d.warn("INGEST","tool_uses backup write failed (observation still queued)",{sessionId:p,toolName:r.toolName,toolUseId:r.toolUseId},_ instanceof Error?_:new Error(String(_)))}return await e.queueObservation(p,{tool_name:r.toolName,tool_input:m,tool_response:E,prompt_number:g,cwd:o||(d.error("INGEST","Missing cwd when ingesting observation",{sessionId:p,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}),await s?.(p,"observation"),n.broadcastObservationQueued(p),{ok:!0,sessionDbId:p}}var Hh=/agent-transcripts[/\\]([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/\\]|$)/i;function Gh(r){let e=typeof r.agentId=="string"?r.agentId.trim():"";return e&&e!=="*"?e:r.path.match(Hh)?.[1]}var zn=class{sessions=new Map;async processEntry(e,t,n,s){for(let i of n.events)ga(e,i.match,n)&&await this.handleEvent(e,t,n,i,s??void 0)}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:le(e.name)},this.sessions.set(n,s)),s}resolveSessionId(e,t,n,s,i){let o={watch:t,schema:n},a=s.fields?.sessionId??(n.sessionIdPath?{path:n.sessionIdPath}:void 0),c=at(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=at(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=at(a,e,o);return typeof c=="string"&&c.trim()?c:t.project?t.project:i.cwd?Ge(i.cwd).primary:i.project}async handleEvent(e,t,n,s,i){let o=this.resolveSessionId(e,t,n,s,i);if(!o){d.debug("TRANSCRIPT","Skipping event without sessionId",{event:s.name,watch:t.name});return}let a=this.getOrCreateSession(t,o),c=this.resolveCwd(e,t,n,s,a);c&&(a.cwd=c);let l=this.resolveProject(e,t,n,s,a);l&&(a.project=l);let u=pa(s.fields,e,{watch:t,schema:n,session:a});switch(s.action){case"session_context":this.applySessionContext(a,u);break;case"session_init":await this.handleSessionInit(a,u),t.context?.updateOn?.includes("session_start")&&await this.updateContext(a,t);break;case"user_message":typeof u.message=="string"&&(a.lastUserMessage=u.message),typeof u.prompt=="string"&&(a.lastUserMessage=u.prompt);break;case"assistant_message":typeof u.message=="string"&&(a.lastAssistantMessage=u.message);break;case"tool_use":await this.handleToolUse(a,t,u);break;case"tool_result":await this.handleToolResult(a,t,u);break;case"observation":await this.sendObservation(a,t,u);break;case"file_edit":await this.sendFileEdit(a,u);break;case"session_end":await this.handleSessionEnd(a,t);break;default:break}}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)}async handleSessionInit(e,t){let n=typeof t.prompt=="string"?t.prompt:"",s=e.cwd??process.cwd();n&&(e.lastUserMessage=n),await aa.execute({sessionId:e.sessionId,cwd:s,prompt:n,platform:e.platformSource})}async handleToolUse(e,t,n){let s=typeof n.toolId=="string"?n.toolId:void 0,i=typeof n.toolName=="string"?n.toolName:void 0,o=this.maybeParseJson(n.toolInput),a=this.maybeParseJson(n.toolResponse);if(i==="apply_patch"&&typeof o=="string"){let c=this.parseApplyPatchFiles(o);for(let l of c)await this.sendFileEdit(e,{filePath:l,edits:[{type:"apply_patch",patch:o}]})}i&&a!==void 0?await this.sendObservation(e,t,{toolName:i,toolInput:o,toolResponse:a,toolUseId:s}):i&&s&&(e.pendingTools||(e.pendingTools=new Map),e.pendingTools.set(s,{toolName:i,toolInput:o}))}async handleToolResult(e,t,n){let s=typeof n.toolId=="string"?n.toolId:void 0,i=typeof n.toolName=="string"?n.toolName:void 0,o=this.maybeParseJson(n.toolResponse),a=this.maybeParseJson(n.toolInput);if(s&&e.pendingTools){let c=e.pendingTools.get(s);c&&(i||(i=c.toolName),a===void 0&&(a=c.toolInput),e.pendingTools.delete(s))}i?await this.sendObservation(e,t,{toolName:i,toolInput:a,toolResponse:o,toolUseId:s}):d.debug("TRANSCRIPT","Dropping tool_result with no resolvable toolName",{sessionId:e.sessionId,toolId:s})}async sendObservation(e,t,n){let s=typeof n.toolName=="string"?n.toolName:void 0;if(!s)return;let i=await jl({contentSessionId:e.sessionId,cwd:e.cwd??process.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:Gh(t)});if(!i.ok)throw new Error(`ingestObservation failed: ${i.reason}`)}async sendFileEdit(e,t){let n=typeof t.filePath=="string"?t.filePath:void 0;n&&await ca.execute({sessionId:e.sessionId,cwd:e.cwd??process.cwd(),filePath:n,edits:Array.isArray(t.edits)?t.edits:void 0,platform:e.platformSource})}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 d.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(`
|
|
`);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){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(!await Wr())return;let n=e.lastAssistantMessage??"",s=JSON.stringify({contentSessionId:e.sessionId,last_assistant_message:n,platformSource:e.platformSource});try{await Ae("/api/sessions/summarize",{method:"POST",headers:{"Content-Type":"application/json"},body:s})}catch(i){d.warn("TRANSCRIPT","Summary request failed",{error:i instanceof Error?i.message:String(i)})}}async updateContext(e,t){if(!t.context||t.context.mode!=="agents"||zi(t)||!await Wr())return;let s=e.cwd??t.workspace;if(!s)return;let o=Ge(s).allProjects.join(","),a=`/api/context/inject?projects=${encodeURIComponent(o)}&platformSource=${encodeURIComponent(e.platformSource)}`,c=K(t.context.path??`${s}/AGENTS.md`),l=cr.default.resolve(c),u=[cr.default.resolve(s),cr.default.resolve(x)];if(!u.some(h=>l.startsWith(h+cr.default.sep)||l===h)){d.warn("SECURITY","Rejected path traversal attempt in watch.context.path",{original:t.context.path,resolved:l,allowedRoots:u});return}let p;try{p=await Ae(a)}catch(h){d.warn("TRANSCRIPT","Failed to fetch AGENTS.md context",{error:h instanceof Error?h.message:String(h)});return}if(!p.ok)return;let g=(await p.text()).trim();g&&(ua(c,g),d.debug("TRANSCRIPT","Updated AGENTS.md context",{agentsPath:c,watch:t.name}))}};var Ui=class{constructor(e,t,n,s){this.filePath=e;this.onLine=n;this.onOffset=s;this.tailState={offset:t,partial:""}}filePath;onLine;onOffset;watcher=null;tailState;readTask=null;readPending=!1;start(){this.requestRead(),this.watcher=(0,W.watch)(this.filePath,{persistent:!0},()=>{this.requestRead()})}close(){this.watcher?.close(),this.watcher=null}poke(){this.requestRead()}requestRead(){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(()=>{});while(this.readPending)}async readNewData(){if(!(0,W.existsSync)(this.filePath))return;let e=0;try{e=(0,W.statSync)(this.filePath).size}catch(o){d.debug("WORKER","Failed to stat transcript file",{file:this.filePath},o instanceof Error?o:void 0);return}if(e<this.tailState.offset&&(this.tailState.offset=0,this.tailState.partial=""),e===this.tailState.offset)return;let t=(0,W.createReadStream)(this.filePath,{start:this.tailState.offset,end:e-1,encoding:"utf8"}),n="";for await(let o of t)n+=o;this.tailState.offset=e,this.onOffset(this.tailState.offset);let i=(this.tailState.partial+n).split(`
|
|
`);this.tailState.partial=i.pop()??"";for(let o of i){let a=o.trim();a&&await this.onLine(a)}}},Yn=class{constructor(e,t){this.config=e;this.statePath=t;this.state=Xi(t)}config;statePath;processor=new zn;tailers=new Map;state;rootWatchers=[];async start(){for(let e of this.config.watches)await this.setupWatch(e)}stop(){for(let e of this.tailers.values())e.close();this.tailers.clear();for(let e of this.rootWatchers)e.close();this.rootWatchers=[]}async setupWatch(e){let t=this.resolveSchema(e);if(!t){d.warn("TRANSCRIPT","Missing schema for watch",{watch:e.name});return}let n=K(e.path),s=this.resolveWatchFiles(n);for(let o of s)await this.addTailer(o,e,t);let i=this.deepestNonGlobAncestor(n);if(!i||!(0,W.existsSync)(i)){d.debug("TRANSCRIPT","Watch root does not exist, skipping fs.watch",{watch:e.name,watchRoot:i});return}try{let o=(0,W.watch)(i,{recursive:!0,persistent:!0},(a,c)=>{this.handleRootWatchEvent(i,n,e,t,c)});this.rootWatchers.push(o),d.info("TRANSCRIPT","Watching transcript root recursively",{watch:e.name,watchRoot:i})}catch(o){d.warn("TRANSCRIPT","Failed to start recursive fs.watch on transcript root",{watch:e.name,watchRoot:i},o instanceof Error?o:void 0)}}handleRootWatchEvent(e,t,n,s,i){if(!i)return;let o=(0,se.resolve)(e,i).replace(/\\/g,"/"),a=this.tailers.get(o);if(a){a.poke();return}let c=this.resolveWatchFiles(t);for(let l of c)this.tailers.has(l)||this.addTailer(l,n,s)}deepestNonGlobAncestor(e){if(!this.hasGlob(e)){if((0,W.existsSync)(e))try{return(0,W.statSync)(e).isDirectory()?e:(0,se.resolve)(e,"..")}catch(s){return d.debug("TRANSCRIPT","Failed to stat watch path ancestor, falling back to parent directory",{path:e},s instanceof Error?s:new Error(String(s))),(0,se.resolve)(e,"..")}return e}let t=e.split(/[/\\]/),n=[];for(let s of t){if(/[*?[\]{}()]/.test(s))break;n.push(s)}return n.length===0||n.length===1&&n[0]===""?"":n.join(se.sep)}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,W.existsSync)(e))try{if((0,W.statSync)(e).isDirectory()){let n=(0,se.join)(e,"**","*.jsonl");return this.scanGlob(this.normalizeGlobPattern(n))}return[e]}catch(t){return d.debug("WORKER","Failed to stat watch path",{path:e},t instanceof Error?t:void 0),[]}return[]}scanGlob(e){return Array.from(new Bun.Glob(e).scanSync({absolute:!0,onlyFiles:!0,dot:!0}))}normalizeGlobPattern(e){return e.replace(/\\/g,"/")}hasGlob(e){return/[*?[\]{}()]/.test(e)}async addTailer(e,t,n){if(this.tailers.has(e))return;let s=this.extractSessionIdFromPath(e),i=this.state.offsets[e]??0;if(i===0&&t.startAtEnd)try{i=(0,W.statSync)(e).size}catch(a){d.debug("WORKER","Failed to stat file for startAtEnd offset",{file:e},a instanceof Error?a:void 0),i=0}let o=new Ui(e,i,async a=>{await this.handleLine(a,t,n,e,s)},a=>{this.state.offsets[e]=a,Qi(this.statePath,this.state)});o.start(),this.tailers.set(e,o),d.info("TRANSCRIPT","Watching transcript file",{file:e,watch:t.name,schema:n.name})}async handleLine(e,t,n,s,i){try{let o=JSON.parse(e);await this.processor.processEntry(o,t,n,i??void 0)}catch(o){o instanceof Error?d.debug("TRANSCRIPT","Failed to parse transcript line",{watch:t.name,file:(0,se.basename)(s)},o):d.warn("TRANSCRIPT","Failed to parse transcript line (non-Error thrown)",{watch:t.name,file:(0,se.basename)(s),error:String(o)})}}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 $i(r,e){let t=r.indexOf(e);return t===-1?null:r[t+1]??null}async function Bl(r,e){switch(r){case"init":{let t=$i(e,"--config")??nt;return gr(t),console.log(`Created sample config: ${K(t)}`),0}case"watch":{let t=$i(e,"--config")??nt,n;try{n=Tt(t)}catch(a){if(a instanceof Error&&a.message.includes("not found"))gr(t),console.log(`Created sample config: ${K(t)}`),n=Tt(t);else throw a}let s=K(n.stateFile??pr),i=new Yn(n,s);await i.start(),console.log("Transcript watcher running. Press Ctrl+C to stop.");let o=()=>{i.stop(),process.exit(0)};return process.on("SIGINT",o),process.on("SIGTERM",o),await new Promise(()=>{})}case"validate":{let t=$i(e,"--config")??nt;try{Tt(t)}catch(n){if(n instanceof Error&&n.message.includes("not found"))gr(t),console.log(`Created sample config: ${K(t)}`),Tt(t);else throw n}return console.log(`Config OK: ${K(t)}`),0}default:return console.log("Usage: claude-mem transcript <init|watch|validate> [--config <path>]"),1}}var Kh=process.argv[2],Vh=process.argv.slice(3);Bl(Kh,Vh).then(r=>{process.exit(r)}).catch(r=>{console.error(r),process.exit(1)});
|
|
/*! Bundled license information:
|
|
|
|
@posthog/core/dist/vendor/uuidv7.mjs:
|
|
(*! LICENSE: uuidv7.mjs.LICENSE.txt *)
|
|
(**
|
|
* uuidv7: An experimental implementation of the proposed UUID Version 7
|
|
*
|
|
* @license Apache-2.0
|
|
* @copyright 2021-2023 LiosK
|
|
* @packageDocumentation
|
|
*)
|
|
*/
|
|
//# sourceMappingURL=transcript-watcher.cjs.map
|