claude-mem 13.34.2 → 13.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.qoder-plugin/plugin.json +15 -0
  5. package/README.md +5 -16
  6. package/dist/bug-report/index.js +68 -68
  7. package/dist/npx-cli/index.js +371 -336
  8. package/dist/opencode-plugin/index.js +43 -41
  9. package/dsh/package.json +1 -1
  10. package/openclaw/openclaw.plugin.json +1 -1
  11. package/package.json +4 -1
  12. package/plugin/.claude-plugin/plugin.json +1 -1
  13. package/plugin/.codex-plugin/plugin.json +1 -1
  14. package/plugin/.qoder-plugin/plugin.json +15 -0
  15. package/plugin/hooks/codex-hooks.json +1 -1
  16. package/plugin/hooks/hooks.json +1 -1
  17. package/plugin/hooks/qoder-hooks.json +97 -0
  18. package/plugin/hooks/qoder-repo-hooks.json +97 -0
  19. package/plugin/package.json +1 -1
  20. package/plugin/qoder.mcp.json +12 -0
  21. package/plugin/scripts/bun-runner.js +24 -5
  22. package/plugin/scripts/context-generator.cjs +59 -58
  23. package/plugin/scripts/context-generator.cjs.map +2 -2
  24. package/plugin/scripts/mcp-server.cjs +101 -57
  25. package/plugin/scripts/mcp-server.cjs.map +3 -3
  26. package/plugin/scripts/qoder-hook-launcher.cjs +114 -0
  27. package/plugin/scripts/server-service.cjs +197 -162
  28. package/plugin/scripts/server-service.cjs.map +3 -3
  29. package/plugin/scripts/transcript-watcher.cjs +27 -28
  30. package/plugin/scripts/transcript-watcher.cjs.map +3 -3
  31. package/plugin/scripts/worker-service.cjs +605 -534
  32. package/plugin/scripts/worker-service.cjs.map +3 -3
  33. package/plugin/skills/mem-search/SKILL.md +81 -128
  34. package/plugin/skills/screenpipe/SKILL.md +80 -0
  35. package/plugin/skills/screenpipe/screenpipe.mjs +157 -0
  36. package/plugin/sqlite/SessionStore.js +181 -176
  37. package/plugin/sqlite/SessionStore.js.map +3 -3
  38. package/plugin/sqlite/observations/files.js +7 -7
  39. package/plugin/sqlite/observations/files.js.map +2 -2
  40. package/plugin/ui/viewer-bundle.js +12 -12
@@ -1,40 +1,39 @@
1
1
  #!/usr/bin/env bun
2
2
  var __CM_FILENAME__ = typeof __filename !== "undefined" ? __filename : require("node:path").resolve(process.argv[1] || "");
3
3
  var __CM_DIRNAME__ = typeof __dirname !== "undefined" ? __dirname : require("node:path").dirname(__CM_FILENAME__);
4
- "use strict";var tp=Object.create;var qs=Object.defineProperty;var rp=Object.getOwnPropertyDescriptor;var np=Object.getOwnPropertyNames;var sp=Object.getPrototypeOf,ip=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 op=(r,e)=>{for(var t in e)qs(r,t,{get:e[t],enumerable:!0})},ap=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of np(e))!ip.call(r,s)&&s!==t&&qs(r,s,{get:()=>e[s],enumerable:!(n=rp(e,s))||n.enumerable});return r};var Ee=(r,e,t)=>(t=r!=null?tp(sp(r)):{},ap(e||!r||!r.__esModule?qs(t,"default",{value:r,enumerable:!0}):t,r));function lp(r){return(cp??process.stderr.write.bind(process.stderr))(r)}function Le(r){lp(r)}var cp,ob,zr=wt(()=>{"use strict";cp=null;ob=Promise.resolve()});function Js(r){return r.replace(/^\uFEFF/,"")}function zt(r){return JSON.parse(Js(r))}function Fe(r){return zt((0,O.readFileSync)(r,"utf-8"))}function dp(r){(0,O.existsSync)(r)||(0,O.mkdirSync)(r,{recursive:!0})}function H(r,e,t={}){let n=r;try{if((0,O.lstatSync)(r).isSymbolicLink())try{n=(0,O.realpathSync)(r)}catch(u){let d=u instanceof Error?u:new Error(String(u));Le(`claude-mem: realpathSync failed for ${r}, resolving symlink manually: ${d.message}
5
- `);let p=(0,O.readlinkSync)(r);n=(0,Ae.resolve)((0,Ae.dirname)(r),p)}}catch(u){let d=u.code;if(d!=="ENOENT"&&d!=="ENOTDIR")throw u}dp((0,Ae.dirname)(n));let s=(0,Ae.dirname)(n),i=(0,Ae.basename)(n),o=(0,Ae.join)(s,`.${i}.${process.pid}.${(0,Ea.randomBytes)(6).toString("hex")}.tmp`),a=Buffer.from(JSON.stringify(e,null,2)+`
6
- `,"utf-8"),c=t.mode;if(c===void 0)try{c=(0,O.statSync)(n).mode&511}catch{}let l;try{l=c!==void 0?(0,O.openSync)(o,"w",c):(0,O.openSync)(o,"w");let u=0;for(;u<a.length;){let d=(0,O.writeSync)(l,a,u,a.length-u);if(d===0)throw new Error(`writeSync stalled at ${u}/${a.length} bytes`);u+=d}if((0,O.fsyncSync)(l),(0,O.closeSync)(l),l=void 0,(0,O.renameSync)(o,n),!up){let d;try{d=(0,O.openSync)(s,"r"),(0,O.fsyncSync)(d)}catch(p){let g=p instanceof Error?p:new Error(String(p));Le(`claude-mem: directory fsync failed for ${s}: ${g.message}
7
- `)}finally{if(d!==void 0)try{(0,O.closeSync)(d)}catch{}}}}catch(u){if(l!==void 0)try{(0,O.closeSync)(l)}catch{}try{(0,O.unlinkSync)(o)}catch{}throw u}}var O,Ea,Ae,up,ce=wt(()=>{"use strict";O=require("fs"),Ea=require("crypto"),Ae=require("path");zr();up=process.platform==="win32"});function Sa(r){let e=r.env;return fp(e)&&Object.keys(e).some(t=>t.startsWith("CLAUDE_MEM_"))?"nested":"flat"}function Tt(r){return Sa(r)==="nested"?r.env:r}function ya(r){return Sa(r)!=="nested"?r:Object.fromEntries(Object.entries(r).filter(([e])=>!e.startsWith("CLAUDE_MEM_")))}var fp,Vr=wt(()=>{"use strict";ce();fp=r=>r!==null&&typeof r=="object"&&!Array.isArray(r)});function ve(r,e=process.platform,t=(0,ba.homedir)()){return typeof r!="string"||r.length===0?r:r==="~"?t:r.startsWith("~/")||e==="win32"&&r.startsWith("~\\")?(0,wa.join)(t,r.slice(2)):r}var ba,wa,Vt=wt(()=>{"use strict";ba=require("os"),wa=require("path")});function pp(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,x.dirname)((0,Ta.fileURLToPath)(_p.url))}function se(){if(process.env.CLAUDE_MEM_DATA_DIR)return ve(process.env.CLAUDE_MEM_DATA_DIR);let r=(0,x.join)((0,Yr.homedir)(),".claude-mem"),e=(0,x.join)(r,"settings.json");try{if((0,Xs.existsSync)(e)){let t=Fe(e);if(t===null||typeof t!="object"||Array.isArray(t))return r;let n=Tt(t);if(typeof n.CLAUDE_MEM_DATA_DIR=="string"&&n.CLAUDE_MEM_DATA_DIR)return ve(n.CLAUDE_MEM_DATA_DIR)}}catch{}return r}function va(r,e=(0,Yr.homedir)(),t=process.platform){return ve(r,t,e)}var x,Yr,Xs,Ta,_p,Eb,F,gp,rt,At,mp,ie,Aa,Sb,qr,hp,$,U=wt(()=>{"use strict";x=require("path"),Yr=require("os"),Xs=require("fs"),Ta=require("url");ce();Vr();Vt();Vt();_p={};Eb=pp();F=se(),gp=(0,x.join)((0,Yr.homedir)(),".claude"),rt=process.env.CLAUDE_CONFIG_DIR||gp,At=(0,x.join)(rt,"plugins","marketplaces","thedotmack"),mp=(0,x.join)(F,"logs"),ie=(0,x.join)(F,"settings.json"),Aa="claude-mem.db",Sb=(0,x.join)(F,Aa),qr=(0,x.join)(F,"observer-sessions"),hp=(0,x.basename)(qr);$={dataDir:()=>F,workerPid:()=>(0,x.join)(F,"worker.pid"),serverPid:()=>(0,x.join)(F,".server-beta.pid"),serverPort:()=>(0,x.join)(F,".server-beta.port"),serverRuntime:()=>(0,x.join)(F,".server-beta.runtime.json"),settings:()=>(0,x.join)(F,"settings.json"),database:()=>(0,x.join)(F,Aa),chroma:()=>(0,x.join)(F,"chroma"),combinedCerts:()=>(0,x.join)(F,"combined_certs.pem"),transcriptsConfig:()=>(0,x.join)(F,"transcript-watch.json"),transcriptsState:()=>(0,x.join)(F,"transcript-watch-state.json"),corpora:()=>(0,x.join)(F,"corpora"),supervisorRegistry:()=>(0,x.join)(F,"supervisor.json"),envFile:()=>(0,x.join)(F,".env"),logsDir:()=>mp}});var nt,Pa,Zs,Qs,ei,f,C=wt(()=>{"use strict";nt=require("fs"),Pa=require("path");U();zr();ce();Vr();Zs=(i=>(i[i.DEBUG=0]="DEBUG",i[i.INFO=1]="INFO",i[i.WARN=2]="WARN",i[i.ERROR=3]="ERROR",i[i.SILENT=4]="SILENT",i))(Zs||{}),Qs=null,ei=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;logFileDate=null;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){let e=new Date().toISOString().split("T")[0];if(!(this.logFileInitialized&&this.logFileDate===e)){this.logFileInitialized=!0,this.logFileDate=e;try{let t=$.logsDir();(0,nt.existsSync)(t)||(0,nt.mkdirSync)(t,{recursive:!0}),this.logFilePath=(0,Pa.join)(t,`claude-mem-${e}.log`)}catch(t){console.error("[LOGGER] Failed to initialize log file:",t instanceof Error?t.message:String(t)),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=$.settings();if((0,nt.existsSync)(e)){let n=(Tt(Fe(e)).CLAUDE_MEM_LOG_LEVEL||"INFO").toString().toUpperCase();this.level=Zs[n]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}safeStringify(e,t,n=6){let s=new WeakSet,i=(o,a)=>{if(typeof o=="bigint")return`${o}n`;if(o===null||typeof o!="object")return o;let c=o.toJSON,l=typeof c=="function"?c.call(o):o;if(typeof l=="bigint")return`${l}n`;if(l===null||typeof l!="object")return l;if(s.has(l))return"[Circular]";if(a>=n)return Array.isArray(l)?"[Array]":"[Object]";s.add(l);try{if(Array.isArray(l))return l.map(d=>i(d,a+1));let u={};for(let d of Object.keys(l))try{u[d]=i(l[d],a+1)}catch{u[d]="[unreadable]"}return u}finally{s.delete(l)}};try{return JSON.stringify(i(e,0),null,t)??String(e)}catch{return Array.isArray(e)?`[${e.length} items]`:"[unserializable]"}}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
8
- ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?this.safeStringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{n=t}if(e==="Bash"&&n.command)return`${e}(${n.command})`;if(n.file_path)return`${e}(${n.file_path})`;if(n.notebook_path)return`${e}(${n.notebook_path})`;if(e==="Glob"&&n.pattern)return`${e}(${n.pattern})`;if(e==="Grep"&&n.pattern)return`${e}(${n.pattern})`;if(n.url)return`${e}(${n.url})`;if(n.query)return`${e}(${n.query})`;if(e==="Task"){if(n.subagent_type)return`${e}(${n.subagent_type})`;if(n.description)return`${e}(${n.description})`}return e==="Skill"&&n.skill?`${e}(${n.skill})`:e==="LSP"&&n.operation?`${e}(${n.operation})`:e}formatTimestamp(e){let t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),s=String(e.getDate()).padStart(2,"0"),i=String(e.getHours()).padStart(2,"0"),o=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),c=String(e.getMilliseconds()).padStart(3,"0");return`${t}-${n}-${s} ${i}:${o}:${a}.${c}`}log(e,t,n,s,i){if(e<this.getLevel())return;this.ensureLogFileInitialized();let o=this.formatTimestamp(new Date),a=Zs[e].padEnd(5),c=t.padEnd(6),l="";s?.correlationId?l=`[${s.correlationId}] `:s?.sessionId&&(l=`[session-${s.sessionId}] `);let u="";i!=null&&(i instanceof Error?u=this.getLevel()===0?`
4
+ "use strict";var lp=Object.create;var Js=Object.defineProperty;var up=Object.getOwnPropertyDescriptor;var dp=Object.getOwnPropertyNames;var fp=Object.getPrototypeOf,pp=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 gp=(r,e)=>{for(var t in e)Js(r,t,{get:e[t],enumerable:!0})},mp=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of dp(e))!pp.call(r,s)&&s!==t&&Js(r,s,{get:()=>e[s],enumerable:!(n=up(e,s))||n.enumerable});return r};var Ee=(r,e,t)=>(t=r!=null?lp(fp(r)):{},mp(e||!r||!r.__esModule?Js(t,"default",{value:r,enumerable:!0}):t,r));function _p(r){return(hp??process.stderr.write.bind(process.stderr))(r)}function Ne(r){_p(r)}var hp,Eb,Vr=wt(()=>{"use strict";hp=null;Eb=Promise.resolve()});function Xs(r){return r.replace(/^\uFEFF/,"")}function Vt(r){return JSON.parse(Xs(r))}function Ue(r){return Vt((0,O.readFileSync)(r,"utf-8"))}function Sp(r){(0,O.existsSync)(r)||(0,O.mkdirSync)(r,{recursive:!0})}function j(r,e,t={}){let n=r,s=new Set;try{for(;(0,O.lstatSync)(n).isSymbolicLink();){let f=(0,Se.resolve)(n);if(s.has(f))throw Object.assign(new Error(`Symlink loop at ${n}`),{code:"ELOOP"});s.add(f);try{n=(0,O.realpathSync)(n);break}catch(p){if(p.code!=="ENOENT")throw p;let g=p instanceof Error?p:new Error(String(p));Ne(`claude-mem: realpathSync failed for ${n}, resolving symlink manually: ${g.message}
5
+ `);let m=(0,O.readlinkSync)(n);n=(0,Se.resolve)((0,Se.dirname)(n),m)}}}catch(f){if(f.code!=="ENOENT")throw f}Sp((0,Se.dirname)(n));let i=(0,Se.dirname)(n),o=(0,Se.basename)(n),a=(0,Se.join)(i,`.${o}.${process.pid}.${(0,Ta.randomBytes)(6).toString("hex")}.tmp`),c=Buffer.from(JSON.stringify(e,null,2)+`
6
+ `,"utf-8"),l=t.mode;if(l===void 0)try{l=(0,O.statSync)(n).mode&511}catch{}let u;try{u=l!==void 0?(0,O.openSync)(a,"w",l):(0,O.openSync)(a,"w");let f=0;for(;f<c.length;){let p=(0,O.writeSync)(u,c,f,c.length-f);if(p===0)throw new Error(`writeSync stalled at ${f}/${c.length} bytes`);f+=p}if((0,O.fsyncSync)(u),(0,O.closeSync)(u),u=void 0,(0,O.renameSync)(a,n),!Ep){let p;try{p=(0,O.openSync)(i,"r"),(0,O.fsyncSync)(p)}catch(g){let m=g instanceof Error?g:new Error(String(g));Ne(`claude-mem: directory fsync failed for ${i}: ${m.message}
7
+ `)}finally{if(p!==void 0)try{(0,O.closeSync)(p)}catch{}}}}catch(f){if(u!==void 0)try{(0,O.closeSync)(u)}catch{}try{(0,O.unlinkSync)(a)}catch{}throw f}}var O,Ta,Se,Ep,le=wt(()=>{"use strict";O=require("fs"),Ta=require("crypto"),Se=require("path");Vr();Ep=process.platform==="win32"});function Aa(r){let e=r.env;return yp(e)&&Object.keys(e).some(t=>t.startsWith("CLAUDE_MEM_"))?"nested":"flat"}function Tt(r){return Aa(r)==="nested"?r.env:r}function va(r){return Aa(r)!=="nested"?r:Object.fromEntries(Object.entries(r).filter(([e])=>!e.startsWith("CLAUDE_MEM_")))}var yp,Yr=wt(()=>{"use strict";le();yp=r=>r!==null&&typeof r=="object"&&!Array.isArray(r)});function ve(r,e=process.platform,t=(0,Ra.homedir)()){return typeof r!="string"||r.length===0?r:r==="~"?t:r.startsWith("~/")||e==="win32"&&r.startsWith("~\\")?(0,Ma.join)(t,r.slice(2)):r}var Ra,Ma,Yt=wt(()=>{"use strict";Ra=require("os"),Ma=require("path")});function bp(){return typeof __CM_DIRNAME__<"u"?__CM_DIRNAME__:(0,x.dirname)((0,Ca.fileURLToPath)(vp.url))}function ie(){if(process.env.CLAUDE_MEM_DATA_DIR)return ve(process.env.CLAUDE_MEM_DATA_DIR);let r=(0,x.join)((0,qr.homedir)(),".claude-mem"),e=(0,x.join)(r,"settings.json");try{if((0,Qs.existsSync)(e)){let t=Ue(e);if(t===null||typeof t!="object"||Array.isArray(t))return r;let n=Tt(t);if(typeof n.CLAUDE_MEM_DATA_DIR=="string"&&n.CLAUDE_MEM_DATA_DIR)return ve(n.CLAUDE_MEM_DATA_DIR)}}catch{}return r}function Ia(r,e=(0,qr.homedir)(),t=process.platform){return ve(r,t,e)}var x,qr,Qs,Ca,vp,Ib,F,wp,rt,At,Tp,oe,Pa,Ob,Jr,Ap,B,U=wt(()=>{"use strict";x=require("path"),qr=require("os"),Qs=require("fs"),Ca=require("url");le();Yr();Yt();Yt();vp={};Ib=bp();F=ie(),wp=(0,x.join)((0,qr.homedir)(),".claude"),rt=process.env.CLAUDE_CONFIG_DIR||wp,At=(0,x.join)(rt,"plugins","marketplaces","thedotmack"),Tp=(0,x.join)(F,"logs"),oe=(0,x.join)(F,"settings.json"),Pa="claude-mem.db",Ob=(0,x.join)(F,Pa),Jr=(0,x.join)(F,"observer-sessions"),Ap=(0,x.basename)(Jr);B={dataDir:()=>F,workerPid:()=>(0,x.join)(F,"worker.pid"),serverPid:()=>(0,x.join)(F,".server-beta.pid"),serverPort:()=>(0,x.join)(F,".server-beta.port"),serverRuntime:()=>(0,x.join)(F,".server-beta.runtime.json"),settings:()=>(0,x.join)(F,"settings.json"),database:()=>(0,x.join)(F,Pa),chroma:()=>(0,x.join)(F,"chroma"),combinedCerts:()=>(0,x.join)(F,"combined_certs.pem"),transcriptsConfig:()=>(0,x.join)(F,"transcript-watch.json"),transcriptsState:()=>(0,x.join)(F,"transcript-watch-state.json"),corpora:()=>(0,x.join)(F,"corpora"),supervisorRegistry:()=>(0,x.join)(F,"supervisor.json"),envFile:()=>(0,x.join)(F,".env"),logsDir:()=>Tp}});var nt,xa,ei,Zs,ti,d,M=wt(()=>{"use strict";nt=require("fs"),xa=require("path");U();Vr();le();Yr();ei=(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))(ei||{}),Zs=null,ti=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;logFileDate=null;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){let e=new Date().toISOString().split("T")[0];if(this.logFileInitialized&&this.logFileDate===e)return;let t=this.logFileDate!==e;this.logFileInitialized=!1,this.logFileDate=e;try{let n=B.logsDir();(0,nt.existsSync)(n)||(0,nt.mkdirSync)(n,{recursive:!0}),this.logFilePath=(0,xa.join)(n,`claude-mem-${e}.log`),this.logFileInitialized=!0}catch(n){t&&console.error("[LOGGER] Failed to initialize log file:",n instanceof Error?n.message:String(n)),this.logFilePath=null}}getLevel(){if(this.level===null)try{let e=B.settings();if((0,nt.existsSync)(e)){let n=(Tt(Ue(e)).CLAUDE_MEM_LOG_LEVEL||"INFO").toString().toUpperCase();this.level=ei[n]??1}else this.level=1}catch(e){console.error("[LOGGER] Failed to load log level from settings:",e instanceof Error?e.message:String(e)),this.level=1}return this.level}safeStringify(e,t,n=6){let s=new WeakSet,i=(o,a)=>{if(typeof o=="bigint")return`${o}n`;if(o===null||typeof o!="object")return o;let c=o.toJSON,l=typeof c=="function"?c.call(o):o;if(typeof l=="bigint")return`${l}n`;if(l===null||typeof l!="object")return l;if(s.has(l))return"[Circular]";if(a>=n)return Array.isArray(l)?"[Array]":"[Object]";s.add(l);try{if(Array.isArray(l))return l.map(f=>i(f,a+1));let u={};for(let f of Object.keys(l))try{u[f]=i(l[f],a+1)}catch{u[f]="[unreadable]"}return u}finally{s.delete(l)}};try{return JSON.stringify(i(e,0),null,t)??String(e)}catch{return Array.isArray(e)?`[${e.length} items]`:"[unserializable]"}}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message}
8
+ ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?this.safeStringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{n=t}if(n===null)return e;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=ei[e].padEnd(5),c=t.padEnd(6),l="";s?.correlationId?l=`[${s.correlationId}] `:s?.sessionId&&(l=`[session-${s.sessionId}] `);let u="";i!=null&&(i instanceof Error?u=this.getLevel()===0?`
9
9
  ${i.message}
10
10
  ${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?u=`
11
- `+this.safeStringify(i,2):u=" "+this.formatData(i));let d="";if(s){let{sessionId:g,memorySessionId:m,correlationId:h,...E}=s;Object.keys(E).length>0&&(d=` {${Object.entries(E).map(([b,w])=>typeof w!="object"||w===null||w instanceof Error||w instanceof Date?`${b}=${w}`:`${b}=${Array.isArray(w)?this.safeStringify(w):this.formatData(w)}`).join(", ")}}`)}let p=`[${o}] [${a}] [${c}] ${l}${n}${d}${u}`;if(this.logFilePath)try{(0,nt.appendFileSync)(this.logFilePath,p+`
12
- `,"utf8")}catch(g){let m=g instanceof Error?g:new Error(String(g));Le(`[LOGGER] Failed to write to log file: ${m.message}
11
+ `+this.safeStringify(i,2):u=" "+this.formatData(i));let f="";if(s){let{sessionId:g,memorySessionId:m,correlationId:h,..._}=s;Object.keys(_).length>0&&(f=` {${Object.entries(_).map(([y,w])=>typeof w!="object"||w===null||w instanceof Error||w instanceof Date?`${y}=${w}`:`${y}=${Array.isArray(w)?this.safeStringify(w):this.formatData(w)}`).join(", ")}}`)}let p=`[${o}] [${a}] [${c}] ${l}${n}${f}${u}`;if(this.logFilePath)try{(0,nt.appendFileSync)(this.logFilePath,p+`
12
+ `,"utf8")}catch(g){let m=g instanceof Error?g:new Error(String(g));Ne(`[LOGGER] Failed to write to log file: ${m.message}
13
13
  ${m.stack??""}
14
- `)}else Le(p+`
15
- `)}debug(e,t,n,s){this.log(0,e,t,n,s)}info(e,t,n,s){this.log(1,e,t,n,s)}warn(e,t,n,s){this.log(2,e,t,n,s)}setErrorSink(e){Qs=e}error(e,t,n,s){this.log(3,e,t,n,s),this.routeErrorToSink(t,n,s)}routeErrorToSink(e,t,n){try{if(!Qs||!(n instanceof Error))return;Qs(n)}catch{}}dataIn(e,t,n,s){this.info(e,`\u2192 ${t}`,n,s)}dataOut(e,t,n,s){this.info(e,`\u2190 ${t}`,n,s)}success(e,t,n,s){this.info(e,`\u2713 ${t}`,n,s)}failure(e,t,n,s){this.error(e,`\u2717 ${t}`,n,s)}},f=new ei});var Zf=require("fs");U();var st=require("fs"),Ke=require("path"),qt=require("os");var Y={HEALTH_CHECK:3e3,API_REQUEST:3e4,SESSION_INIT_HOOK_CAP:15e3,SESSION_INIT_REQUEST:1e4,SESSION_INIT_REQUEST_MAX:14e3,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},Ep=300,Ra={min:60,max:86400};function Ma(r=process.env){let e=Number.parseInt(r.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=Ra.min&&e<=Ra.max?e:Ep}var He={SUCCESS:0};function Sp(r=process.platform){return r==="win32"?8e3:5e3}function Yt(r=process.platform){return Y.SESSION_INIT_HOOK_CAP-Sp(r)}function Ca(r=process.platform){return r==="win32"?Yt(r):Y.SESSION_INIT_REQUEST_MAX}function Re(r){return process.platform==="win32"?Math.round(r*Y.WINDOWS_MULTIPLIER):r}ce();C();function Ia(r){try{return new URL(r).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}Vr();var yp="security_alert",bp="sync-hub.black-pond-afbb.workers.dev",wp="ziczmqtpmaxbornfghye.supabase.co",Tp="https://sync.cmem.ai",Ap=new Set(["xiaomi/mimo-v2-flash:free"]);function vp(r){let e=r.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!Ap.has(e.trim()))return!1;let t=typeof r.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?r.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return t===""||Ia(t)}var Oa=18e4,ka=[{key:"CLAUDE_MEM_LLM_TIMEOUT_MS",legacy:"30000",markerTag:"llm-timeout-migrated-v1"},{key:"CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS",legacy:"30000",markerTag:"field-optimize-timeout-migrated-v1"}];function xa(r,e){return(0,Ke.join)((0,Ke.dirname)(r),`.${(0,Ke.basename)(r)}.${e.markerTag}`)}function ti(r,e){try{(0,st.writeFileSync)(xa(r,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var Da=new Set;function Rp(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0)return null;try{let t=new URL(e).hostname;if(t===bp||t===wp)return Tp}catch{return null}return null}var B=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES:"false",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(Re(Y.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(Yt()),CLAUDE_MEM_IDLE_EXIT_SEC:"0",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_SKIP_BASH_PATTERNS:"",CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS:"false",CLAUDE_MEM_SKIP_AGENT_TYPES:"",CLAUDE_MEM_CAPTURE_ADVISOR_CALLS:"false",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CODEX_MODEL:"",CLAUDE_MEM_CODEX_PATH:"codex",CLAUDE_MEM_CODEX_REASONING_EFFORT:"low",CLAUDE_MEM_CODEX_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_SIZE:"8",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_MAX_CHARS:"32000",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_QUOTA_THRESHOLD_FIVE_HOUR:"0.95",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_OPUS:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_SONNET:"0.92",CLAUDE_MEM_QUOTA_THRESHOLD_OVERAGE:"0.95",CLAUDE_MEM_DATA_DIR:(0,Ke.join)((0,qt.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_FILE_READ_GATE_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,Ke.join)((0,qt.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",CLAUDE_MEM_CLOUD_SYNC_TOKEN:"",CLAUDE_MEM_CLOUD_SYNC_USER_ID:"",CLAUDE_MEM_CLOUD_SYNC_HUB_URL:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_ID:"",CLAUDE_MEM_CLOUD_SYNC_DEVICE_NAME:(0,qt.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:String(Oa),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(Oa),CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let t=process.env[e]??this.DEFAULTS[e];return e==="CLAUDE_MEM_WORKER_HOST"?this.normalizeWorkerHost(t):t}static normalizeWorkerHost(e){return e==="localhost"?"127.0.0.1":e}static finalizeSettings(e,t){let n=t?this.applyEnvOverrides(e):e;return n.CLAUDE_MEM_WORKER_HOST=this.normalizeWorkerHost(n.CLAUDE_MEM_WORKER_HOST),n}static getInt(e){let t=this.get(e);return parseInt(t,10)}static applyEnvOverrides(e){let t={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(t[n]=process.env[n]);return t}static loadFromFile(e,t=!0){try{if(!(0,st.existsSync)(e)){let d=this.getAllDefaults();try{H(e,d,{mode:384});for(let p of ka)ti(e,p);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(p){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,p instanceof Error?p.message:String(p))}return this.finalizeSettings(d,t)}let n=(0,st.readFileSync)(e,"utf-8"),s=zt(n),i=Tt(s),o=i!==s,a=ya(s),c=o&&Object.keys(a).some(d=>d!=="env");if(o&&!c)try{H(e,i,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(d){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,d instanceof Error?d.message:String(d))}if(i.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===yp){i={...i,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES};try{H(e,c?{...a,env:i}:i,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,d instanceof Error?d.message:String(d))}}if(vp(i)){let d=String(i.CLAUDE_MEM_OPENROUTER_MODEL).trim();i={...i,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL};try{H(e,c?{...a,env:i}:i,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${d} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(p){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,p instanceof Error?p.message:String(p))}}let l=Rp(i.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(l!==null){i={...i,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:l};try{H(e,c?{...a,env:i}:i,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",l,"from a retired hub host:",e)}catch(d){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,d instanceof Error?d.message:String(d))}}for(let d of ka)if(!(0,st.existsSync)(xa(e,d))){if(i[d.key]!==d.legacy){ti(e,d);continue}i={...i,[d.key]:this.DEFAULTS[d.key]};try{H(e,c?{...a,env:i}:i,{mode:384}),ti(e,d),console.warn(`[SETTINGS] Migrated ${d.key} off the old ${d.legacy}ms default to ${this.DEFAULTS[d.key]}ms:`,e)}catch(p){let g=`${d.key}\0${e}`;Da.has(g)||(Da.add(g),console.warn(`[SETTINGS] Failed to migrate ${d.key}; using the new default in memory (reported once per process):`,e,p instanceof Error?p.message:String(p)))}}let u={...this.DEFAULTS};for(let d of Object.keys(this.DEFAULTS))i[d]!==void 0&&(u[d]=i[d]);return this.finalizeSettings(u,t)}catch(n){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,n instanceof Error?n.message:String(n));let s=this.getAllDefaults();return this.finalizeSettings(s,t)}}};var it=require("fs"),Fa=require("os"),Xr=require("path");ce();U();var vt=$.transcriptsConfig(),Qr=$.transcriptsState(),Mp={version:1,schemas:{},watches:[],stateFile:Qr};function Na(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name;if(!(r.name==="codex"||e==="codex")||!r.path)return!1;let n=X(r.path).replace(/\\/g,"/"),s=(0,Xr.join)((0,Fa.homedir)(),".codex","sessions").replace(/\\/g,"/");return n===`${s}/**/*.jsonl`}function Ua(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name,t=r.name==="codex"&&(!e||e==="codex");return r.context?.mode==="agents"&&t&&Na(r)}var Cp={path:"payload.source.subagent.thread_spawn"};function $a(r,e){if(e.CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION==="true")return{config:r,scoped:0,removed:0};let t=e.CLAUDE_MEM_CODEX_SUBAGENT_INGESTION==="true"&&e.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS!=="true",n=0,s=0,i=[];for(let o of r.watches)Na(o)?t?(n+=1,i.push({...o,subagentOnly:!0,subagentSource:{...Cp}})):s+=1:i.push(o);return{config:{...r,watches:i},scoped:n,removed:s}}function X(r){return r&&va(r)}var Se=r=>typeof r=="object"&&r!==null&&!Array.isArray(r),La={session_init:!0,session_context:!0,user_message:!0,assistant_message:!0,tool_use:!0,tool_result:!0,observation:!0,file_edit:!0,session_end:!0};function k(r,e,t){if(!r)throw new Error(`${e} ${t}`)}function Jt(r,e){k(r===void 0||typeof r=="string",e,"must be a string")}function Jr(r,e){k(typeof r=="string"&&r.trim().length>0,e,"must be a non-empty string")}function Ba(r,e){k(r===void 0||typeof r=="boolean",e,"must be true or false")}function Wa(r,e){typeof r!="string"&&(k(Se(r),e,"must be a path string or an object"),Jt(r.path,`${e}.path`),r.coalesce!==void 0&&(k(Array.isArray(r.coalesce),`${e}.coalesce`,"must be an array"),r.coalesce.forEach((t,n)=>Wa(t,`${e}.coalesce[${n}]`))))}function ja(r,e){k(Se(r),e,"must be an object");for(let t of["path","regex","contains","not_contains","starts_with","not_starts_with"])Jt(r[t],`${e}.${t}`);Ba(r.exists,`${e}.exists`);for(let t of["in","not_in"])k(r[t]===void 0||Array.isArray(r[t]),`${e}.${t}`,"must be an array");for(let t of["all","any"]){let n=r[t];n!==void 0&&(k(Array.isArray(n),`${e}.${t}`,"must be an array"),n.forEach((s,i)=>ja(s,`${e}.${t}[${i}]`)))}}function ri(r,e){k(Se(r),e,"must be an object"),Jr(r.name,`${e}.name`);for(let t of["eventTypePath","sessionIdPath","cwdPath","projectPath"])Jt(r[t],`${e}.${t}`);k(Array.isArray(r.events),`${e}.events`,"must be an array"),r.events.forEach((t,n)=>{let s=`${e}.events[${n}]`;if(k(Se(t),s,"must be an object"),k(typeof t.name=="string",`${s}.name`,"must be a string"),k(typeof t.action=="string"&&Object.hasOwn(La,t.action),`${s}.action`,`must be one of ${Object.keys(La).join(", ")}`),t.match!==void 0&&ja(t.match,`${s}.match`),t.fields!==void 0){k(Se(t.fields),`${s}.fields`,"must be an object");for(let[i,o]of Object.entries(t.fields))Wa(o,`${s}.fields.${i}`)}})}function Pp(r,e,t){k(Se(r),e,"must be an object"),Jr(r.name,`${e}.name`),Jr(r.path,`${e}.path`);for(let o of["workspace","project","agentId"])Jt(r[o],`${e}.${o}`);for(let o of["startAtEnd","subagentOnly"])Ba(r[o],`${e}.${o}`);let{subagentSource:n,context:s}=r;if(n!==void 0&&(k(Se(n),`${e}.subagentSource`,"must be an object"),k(typeof n.path=="string",`${e}.subagentSource.path`,"must be a string")),s!==void 0&&(k(Se(s),`${e}.context`,"must be an object"),k(s.mode==="agents",`${e}.context.mode`,'must be "agents"'),Jt(s.path,`${e}.context.path`),s.updateOn!==void 0&&(k(Array.isArray(s.updateOn),`${e}.context.updateOn`,"must be an array"),s.updateOn.forEach((o,a)=>k(o==="session_start"||o==="session_end",`${e}.context.updateOn[${a}]`,'must be "session_start" or "session_end"')))),typeof r.schema!="string"){k(Se(r.schema),`${e}.schema`,"must be a schema name or an inline schema object"),ri(r.schema,`${e}.schema`);return}Jr(r.schema,`${e}.schema`);let i=t?.[r.schema];i!==void 0&&ri(i,`schemas.${r.schema}`)}function Ip(r){k(Se(r),"the top level","must be an object"),k(r.version===1,"version","must be 1");let{stateFile:e,schemas:t,watches:n}=r;if(k(e==null||typeof e=="string","stateFile","must be a string"),t!==void 0){k(Se(t),"schemas","must be an object");for(let[s,i]of Object.entries(t))ri(i,`schemas.${s}`)}k(Array.isArray(n),"watches","must be an array"),n.forEach((s,i)=>Pp(s,`watches[${i}]`,t))}function ni(r=vt){let e=X(r);if(!(0,it.existsSync)(e))throw new Error(`Transcript watch config not found: ${e}`);let t=Fe(e);try{Ip(t)}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`Invalid transcript watch config: ${e} (${s})`,{cause:n})}return t.stateFile||(t.stateFile=Qr),t}function si(r=vt){let e=X(r),t=(0,Xr.dirname)(e);(0,it.existsSync)(t)||(0,it.mkdirSync)(t,{recursive:!0}),(0,it.writeFileSync)(e,JSON.stringify(Mp,null,2))}var Yf=require("crypto"),N=require("fs"),qf=require("fs/promises"),j=require("path");C();var Xt=require("fs"),Ka=require("path");C();ce();function Ne(r,e){return typeof r!="object"||r===null||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(t=>e(t[1])))}function Ga(r){try{if(!(0,Xt.existsSync)(r))return{offsets:{}};let e=Fe(r);if(!e||typeof e!="object"||Array.isArray(e))return{offsets:{}};let t=o=>typeof o=="number"&&Number.isSafeInteger(o)&&o>=0,n=o=>typeof o=="string",s={offsets:Ne(e.offsets,t)},i=o=>Object.fromEntries(Object.entries(o).filter(([a])=>Object.hasOwn(s.offsets,a)));if(e.partials!==void 0&&(s.partials=i(Ne(e.partials,n))),e.frameLines!==void 0&&(s.frameLines=i(Ne(e.frameLines,t))),e.fileIdentities!==void 0&&(s.fileIdentities=i(Ne(e.fileIdentities,n))),e.checkpointFingerprints!==void 0&&(s.checkpointFingerprints=i(Ne(e.checkpointFingerprints,n))),e.pendingTools!==void 0){let o=c=>typeof c=="object"&&c!==null&&!Array.isArray(c),a=c=>o(c)&&typeof c.toolName=="string"&&c.toolName.length>0;s.pendingTools=Object.fromEntries(Object.entries(i(Ne(e.pendingTools,o))).map(([c,l])=>[c,Object.fromEntries(Object.entries(Ne(l,o)).map(([u,d])=>[u,Ne(d,a)]))]))}return e.cwds!==void 0&&(s.cwds=Ne(e.cwds,n)),s}catch(e){return f.warn("TRANSCRIPT","Failed to load watch state, starting fresh",{statePath:r,error:e instanceof Error?e.message:String(e)}),{offsets:{}}}}var Op=64*1024,Ha=new WeakMap;function kp(r){let e=Ha.get(r);return e||(e=(r.toolInput===void 0?0:Buffer.byteLength(JSON.stringify(r.toolInput)??""))<=Op?r:{toolName:r.toolName},Ha.set(r,e)),e}function Dp(r){let e={};for(let[t,n]of Object.entries(r)){e[t]={};for(let[s,i]of Object.entries(n)){e[t][s]={};for(let[o,a]of Object.entries(i))e[t][s][o]=kp(a)}}return e}function Qt(r,e){try{let t=(0,Ka.dirname)(r);(0,Xt.existsSync)(t)||(0,Xt.mkdirSync)(t,{recursive:!0});let n=e.pendingTools?{...e,pendingTools:Dp(e.pendingTools)}:e;H(r,n,{mode:384})}catch(t){f.warn("TRANSCRIPT","Failed to save watch state",{statePath:r,error:t instanceof Error?t.message:String(t)})}}var jr=Ee(require("path"),1);var D=Ee(require("path"),1),hl=require("crypto"),P=require("fs");C();var ii=class extends Error{constructor(t){super(`SSE event exceeded ${t} bytes`);this.maxEventBytes=t;this.name="SseEventTooLargeError"}maxEventBytes},oi=class extends Error{constructor(t){super(`SSE stream ended before a terminal event (${t.join(", ")})`);this.terminalEventNames=t;this.name="StreamEndedEarlyError"}terminalEventNames},za=13,Va=10,xp=58;async function*Lp(r){if(!(r instanceof ReadableStream)){yield*r;return}let e=r.getReader(),t=!1;try{for(;;){let{done:n,value:s}=await e.read();if(n){t=!0;return}yield s}}finally{try{t||await e.cancel()}finally{e.releaseLock()}}}function Fp(r,e){if(r.length===1)return r[0];let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.length;return t}async function*Ya(r,e={}){let t=e.maxEventBytes??1048576,n=new TextDecoder,s=[],i=0,o=!1,a=0,c=null,l,u=null,d=!1,p=m=>{if(a+m>t)throw new ii(t)},g=m=>{if(m.length===0){let T=c!==null||u!==null?{event:c??"message",data:(u??[]).join(`
16
- `),...l!==void 0?{id:l}:{}}:null;return c=null,l=void 0,u=null,a=0,T}if(m[0]===xp)return e.onActivity?.(),null;p(m.length),a+=m.length;let h=n.decode(m),E=h.indexOf(":"),_=E===-1?h:h.slice(0,E),b=E===-1?"":h.slice(E+1);return b.startsWith(" ")&&(b=b.slice(1)),_==="event"?c=b:_==="data"?(u??=[]).push(b):_==="id"&&(l=b),null};for await(let m of Lp(r)){let h=[],E=0;for(let _=0;_<m.length;_++){let b=m[_];if(o&&(o=!1,b===Va)){E=_+1;continue}if(b!==za&&b!==Va)continue;s.push(m.subarray(E,_));let w=Fp(s,i+(_-E));s=[],i=0;let T=g(w);T&&h.push(T),o=b===za,E=_+1}if(E<m.length){let _=m.slice(E);s.push(_),i+=_.length,p(i)}for(let _ of h)e.terminalEventNames?.includes(_.event)&&(d=!0),yield _}if(e.terminalEventNames&&e.terminalEventNames.length>0&&!d)throw new oi(e.terminalEventNames)}U();U();var Zr=null;function le(){return Zr!==null||(Zr=B.loadFromFile(ie)),Zr}function en(r){return(r.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}function ai(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var at=require("fs");C();var ci=require("node:child_process");function li(r,e,t){return(0,ci.spawn)(r,e??[],{...t,windowsHide:!0})}var Np=new Set([".cmd",".bat"]),Up=new Set([".exe",".com"]),qb=new Set([...Up,...Np]);var ot=require("fs"),tc=Ee(require("path"),1);C();ce();var $p=["CLAUDECODE_","CLAUDE_CODE_"],Bp=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Wp=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"]),jp=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_TMPDIR","CLAUDE_CODE_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...Wp]);function Ge(r=process.env){let e={};for(let[t,n]of Object.entries(r))if(n!==void 0){if(jp.has(t)){e[t]=n;continue}Bp.has(t)||$p.some(s=>t.startsWith(s))||(e[t]=n)}return e}U();var di=require("child_process"),Ja=require("fs");C();var Hp=5e3,qa=new Map,ui=0;function Xa(r,e,t){if(t.status!==0)return null;if(typeof t.stdout!="string")return f.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:r,status:t.status}),null;let n=t.stdout.trim();return n.length>0?n:null}function Kp(r){ui+=1;let e=(0,di.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${r}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Ge(process.env),LC_ALL:"C",LANG:"C"}});return Xa("powershell-cim",r,e)}function Gp(r,e=!1){if(!e){let n=qa.get(r);if(n&&(r===process.pid||Date.now()-n.capturedAtMs<Hp))return n.token}let t=null;try{t=Kp(r)}catch(n){f.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:r,error:n instanceof Error?n.message:String(n)}),t=null}return(t!==null||r!==process.pid)&&qa.set(r,{token:t,capturedAtMs:Date.now()}),t}function Qa(r,e){if(!Number.isInteger(r)||r<=0)return null;if(process.platform==="linux"){ui+=1;try{let t=(0,Ja.readFileSync)(`/proc/${r}/stat`,"utf-8"),n=t.lastIndexOf(") ");if(n<0)return null;let i=t.slice(n+2).split(" ")[19];return i&&/^\d+$/.test(i)?i:null}catch(t){return f.debug("SYSTEM","captureProcessStartToken: /proc read failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}if(process.platform==="win32")return Gp(r,e);ui+=1;try{let t=(0,di.spawnSync)("ps",["-p",String(r),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Ge(process.env),LC_ALL:"C",LANG:"C"}});return Xa("ps-lstart",r,t)}catch(t){return f.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}function Me(r){return Qa(r,!1)}function ye(r,e){if(e===null)return!0;let t=Qa(r,!0);return t===null?!0:t===e}var Za=require("child_process"),nn=require("fs"),ec=require("util");C();var fi=(0,ec.promisify)(Za.execFile),zp=128,Vp=/not found|no running instance|no tasks/i,tn=class extends Error{pid;constructor(e,t,n){super(t,n),this.name="ProcessTreeKillError",this.pid=e}};async function ue(r,e={}){let t=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:Me(r),s=()=>ye(r,n);if(!s()){f.warn("PROCESS","Skipping tree-kill: root PID was reused since it was captured",{pid:r});return}if(f.debug("PROCESS",`Killing process tree rooted at PID ${r}`,{immediate:t}),process.platform==="win32"){try{await fi("taskkill",["/PID",String(r),"/T","/F"],{timeout:5e3,windowsHide:!0})}catch(i){let o=i.code,a=String(i.stderr??""),c=i instanceof Error?i.message:String(i);if(o===zp||Vp.test(`${a} ${c}`)){f.debug("PROCESS","taskkill reported the process was already gone",{pid:r});return}throw new tn(r,`taskkill failed for PID ${r} (exit ${String(o)}): ${a.trim()||c}`,{cause:i})}return}try{let i=t?"SIGKILL":"SIGTERM",o=await rn(r);for(let l of o){if(!ye(l.pid,l.startToken)){f.debug("PROCESS",`Skipping ${i}: descendant PID was reused since enumeration`,{pid:l.pid,rootPid:r});continue}try{process.kill(l.pid,i)}catch{}}if(s())try{process.kill(r,i)}catch(l){let u=l instanceof Error?l:new Error(String(l)),d=u.code;d!=="ESRCH"&&f.debug("PROCESS",`Failed to ${i} PID ${r}`,{code:d},u)}else f.warn("PROCESS","Skipping root signal: PID was reused during descendant enumeration",{pid:r,signal:i});t||await new Promise(l=>setTimeout(l,500));let a=s()?await rn(r):[],c=new Map;for(let l of o)c.set(l.pid,l.startToken);for(let l of a)c.set(l.pid,l.startToken);for(let[l,u]of c){if(!ye(l,u)){f.debug("PROCESS","Skipping SIGKILL: descendant PID was reused since the scan",{pid:l,rootPid:r});continue}try{process.kill(l,"SIGKILL")}catch{}}if(!t&&s())try{process.kill(r,"SIGKILL")}catch{}}catch(i){throw new tn(r,`tree-kill failed for PID ${r}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function Yp(){return process.platform==="win32"?Xp():process.platform==="linux"?qp():Jp()}function qp(){let r=[],e;try{e=(0,nn.readdirSync)("/proc")}catch(t){return f.warn("PROCESS","Cannot read /proc \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),r}for(let t of e){if(!/^\d+$/.test(t))continue;let n;try{n=(0,nn.readFileSync)(`/proc/${t}/stat`,"utf-8")}catch{continue}let s=n.lastIndexOf(") ");if(s<0)continue;let i=n.slice(s+2).split(" "),o=Number.parseInt(i[1]??"",10),a=i[19];Number.isFinite(o)&&r.push({pid:Number.parseInt(t,10),ppid:o,startToken:a&&/^\d+$/.test(a)?a:null})}return r}async function Jp(){let r;try{r=(await fi("ps",["-eo","pid=,ppid=,lstart="],{timeout:1e4,maxBuffer:33554432,env:{...process.env,LC_ALL:"C",LANG:"C"}})).stdout}catch(t){return f.warn("PROCESS","Cannot enumerate the process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(`
17
- `)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function Xp(){let r;try{r=(await fi("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Csv -NoTypeInformation"],{timeout:3e4,windowsHide:!0,maxBuffer:33554432})).stdout}catch(t){return f.warn("PROCESS","Cannot enumerate the Windows process table \u2014 tree-kill degrades to a single-PID kill",{error:t instanceof Error?t.message:String(t)}),[]}let e=[];for(let t of r.split(/\r?\n/).slice(1)){let n=t.match(/^"(\d+)","(\d+)","(.*)"$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function rn(r){let e=await Yp(),t=new Map;for(let o of e){let a=t.get(o.ppid);a?a.push(o):t.set(o.ppid,[o])}let n=new Set([r]),s=[],i=o=>{for(let a of t.get(o)??[])n.has(a.pid)||(n.add(a.pid),i(a.pid),s.push({pid:a.pid,startToken:a.startToken}))};return i(r),s}var Qp=5e3,Zp=1e3,eg=$.supervisorRegistry(),tg=null;function z(r){if(!Number.isInteger(r)||r<0||r===0)return!1;try{return process.kill(r,0),!0}catch(e){if(e instanceof Error){let t=e.code;return t==="EPERM"?!0:(f.debug("SYSTEM","PID check failed",{pid:r,code:t}),!1)}return f.warn("SYSTEM","PID check threw non-Error",{pid:r,error:String(e)}),!1}}async function sn(r,e){let t=Date.now()+e;for(;Date.now()<t;){if(r.every(n=>!z(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function rc(r){if(!r||!z(r.pid))return!1;if(!r.startToken)return!0;let e=Me(r.pid);if(e===null)return!0;let t=e===r.startToken;return t||f.debug("SYSTEM","verifyPidFileOwnership: start-token mismatch (PID reused)",{pid:r.pid,stored:r.startToken,current:e}),t}var rg={platform:process.platform,readCommandLine:r=>(0,ot.readFileSync)(`/proc/${r}/cmdline`,"utf-8")};function on(r,e=rg){if(!rc(r))return!1;if(r.startToken||e.platform!=="linux")return!0;let t;try{t=e.readCommandLine(r.pid)}catch(s){return f.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:r.pid,error:s instanceof Error?s.message:String(s)}),!0}let n=t.split("\0").some(s=>tc.default.basename(s)==="worker-service.cjs");return n||f.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:r.pid}),n}function ze(r=$.workerPid()){if(!(0,ot.existsSync)(r))return null;let e;try{e=JSON.parse((0,ot.readFileSync)(r,"utf-8"))}catch{return null}return e!==null&&on(e)?e:null}var mi=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=eg){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!(0,ot.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,ot.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(n))this.entries.set(s,i)}catch(t){t instanceof Error?f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath},t):f.warn("SYSTEM","Failed to parse supervisor registry, rebuilding",{path:this.registryPath,error:String(t)}),this.entries.clear()}let e=this.pruneDeadEntries();e>0&&f.info("SYSTEM","Removed dead processes from supervisor registry",{removed:e}),this.persist()}retainSupersededEntry(e,t){let n=this.entries.get(e);if(!n||n.pid===t||!z(n.pid))return;let s=`${e}#superseded:${n.pid}`;this.entries.set(s,n);let i=this.runtimeProcesses.get(e);i&&(this.runtimeProcesses.set(s,i),this.runtimeProcesses.delete(e)),f.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:s,supersededPid:n.pid,incomingPid:t})}register(e,t,n){this.initialize(),this.retainSupersededEntry(e,t.pid),this.entries.set(e,t),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e,t){this.initialize();let n=e,s=this.entries.get(n);t!==void 0&&s?.pid!==t&&(n=`${e}#superseded:${t}`,s=this.entries.get(n),s?.pid!==t)||s&&(this.entries.delete(n),this.runtimeProcesses.delete(n),this.persist(),s?.type==="sdk"&&gi())}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,t])=>({id:e,...t})).sort((e,t)=>{let n=Date.parse(e.startedAt),s=Date.parse(t.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}getBySession(e){let t=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===t)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,t=0;for(let[n,s]of this.entries)z(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(t+=1));e>0&&this.persist();for(let n=0;n<t;n+=1)gi();return e}async reapSession(e){this.initialize();let t=this.getBySession(e);if(t.length===0)return 0;let n=typeof e=="number"?e:Number(e)||void 0;f.info("SYSTEM",`Reaping ${t.length} process(es) for session ${e}`,{sessionId:n,pids:t.map(a=>a.pid)});let s=t.filter(a=>z(a.pid)),i=new Map(s.map(a=>[a.pid,Me(a.pid)]));for(let a of s)try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:i.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGTERM session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},c):f.warn("SYSTEM",`Failed to SIGTERM session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(c)})}await sn(s,Qp);let o=s.filter(a=>z(a.pid));for(let a of o){f.warn("SYSTEM",`Session process PID ${a.pid} did not exit after SIGTERM, sending SIGKILL`,{pid:a.pid,pgid:a.pgid,sessionId:n});let c=i.get(a.pid)??null;if(!ye(a.pid,c)){f.warn("SYSTEM","Skipping SIGKILL: session process PID was reused during the grace window",{pid:a.pid,sessionId:n});continue}try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:c}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(l){l instanceof Error?l.code!=="ESRCH"&&f.debug("SYSTEM",`Failed to SIGKILL session process PID ${a.pid}`,{pid:a.pid,pgid:a.pgid},l):f.warn("SYSTEM",`Failed to SIGKILL session process PID ${a.pid} (non-Error)`,{pid:a.pid,pgid:a.pgid,error:String(l)})}}if(o.length>0){let a=Date.now()+Zp;for(;Date.now()<a&&o.filter(l=>z(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of t)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of t)a.type==="sdk"&&gi();return f.info("SYSTEM",`Reaped ${t.length} process(es) for session ${e}`,{sessionId:n,reaped:t.length}),t.length}persist(){let e={processes:Object.fromEntries(this.entries.entries())};try{H(this.registryPath,e),this.persistDegraded=!1}catch(t){this.reportPersistFailure(t)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let t=e instanceof Error?e:new Error(String(e));f.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},t);try{tg?.({errorCategory:t.code??"unknown"})}catch{}}},pi=null;function an(){return pi||(pi=new mi),pi}var mw=180*1e3,ng=[];function gi(){let r=ng.shift();r&&r.notify()}var Rt=require("fs");C();U();var sg=$.workerPid();async function sc(r){let e=r.currentPid??process.pid,t=r.pidFilePath??sg,n=r.registry.getAll(),s=[...n].filter(c=>c.pid!==e).sort((c,l)=>Date.parse(l.startedAt)-Date.parse(c.startedAt)),i=new Map,o=new Map;for(let c of s){if(!z(c.pid)){r.registry.unregister(c.id);continue}o.set(c.id,Me(c.pid)),i.set(c.id,await rn(c.pid));try{await nc(c,"SIGTERM")}catch(l){l instanceof Error?f.debug("SYSTEM","Failed to send SIGTERM to child process",{pid:c.pid,pgid:c.pgid,type:c.type},l):f.warn("SYSTEM","Failed to send SIGTERM to child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(l)})}}await sn(s,5e3);let a=s.filter(c=>z(c.pid)||(i.get(c.id)??[]).some(l=>z(l.pid)));for(let c of a){let l=ye(c.pid,o.get(c.id)??null);l||f.warn("SYSTEM","Skipping tree-kill: root PID was reused during the grace window",{pid:c.pid,type:c.type});try{l&&await nc(c,"SIGKILL")}catch(u){u instanceof Error?f.debug("SYSTEM","Failed to force kill child process",{pid:c.pid,pgid:c.pgid,type:c.type},u):f.warn("SYSTEM","Failed to force kill child process (non-Error)",{pid:c.pid,pgid:c.pgid,type:c.type,error:String(u)})}finally{ig(i.get(c.id)??[],c.pid)}}await sn(a,1e3);for(let c of s)r.registry.unregister(c.id);for(let c of n.filter(l=>l.pid===e))r.registry.unregister(c.id);ic(t,e),r.registry.pruneDeadEntries()}function ic(r,e,t=!1){if(!(0,Rt.existsSync)(r))return;let n=null;try{let o=JSON.parse((0,Rt.readFileSync)(r,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){f.debug("SYSTEM","PID file unreadable \u2014 leaving it (cannot prove ownership)",{pidFilePath:r,error:o instanceof Error?o.message:String(o)});return}let s=e!==null&&n===e,i=n===null||!z(n);if(!s&&!(t&&i)){f.debug("SYSTEM","PID file not owned by this process \u2014 leaving it for its owner (restart successor?)",{pidFilePath:r,recordedPid:n,currentPid:e});return}try{(0,Rt.rmSync)(r,{force:!0})}catch(o){o instanceof Error?f.debug("SYSTEM","Failed to remove PID file",{pidFilePath:r},o):f.warn("SYSTEM","Failed to remove PID file (non-Error)",{pidFilePath:r,error:String(o)})}}function ig(r,e){for(let{pid:t,startToken:n}of r)if(!(t===e||!z(t))){if(!ye(t,n)){f.debug("SYSTEM","Skipping reap: PID was recycled during the grace window",{pid:t,rootPid:e});continue}try{process.kill(t,"SIGKILL"),f.debug("SYSTEM","Reaped orphaned descendant during shutdown cascade",{pid:t,rootPid:e})}catch(s){let i=s instanceof Error?s.code:void 0;i!=="ESRCH"&&f.warn("SYSTEM","Failed to reap orphaned descendant during shutdown cascade",{pid:t,rootPid:e,errno:i})}}}async function nc(r,e){let{pid:t,pgid:n}=r;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}if(e==="SIGKILL"){await ue(t,{signalMode:"immediate"});return}try{process.kill(t,e)}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}return}await ue(t)}C();var oc=3e4,Mt=null;function og(){let e=an().pruneDeadEntries();e>0&&f.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function ac(){Mt===null&&(Mt=setInterval(og,oc),Mt.unref(),f.debug("SYSTEM","Health checker started",{intervalMs:oc}))}function cc(){Mt!==null&&(clearInterval(Mt),Mt=null,f.debug("SYSTEM","Health checker stopped"))}var lc=require("child_process"),uc=require("util");C();var ag=(0,uc.promisify)(lc.execFile),cg=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function lg(r){let e=[];for(let t of r.split(`
18
- `)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function ug(){let r=await ag("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return lg(r.stdout)}function dg(r,e){let t=r.filter(o=>cg.test(o.command)&&o.pid!==e.selfPid),n=new Set(t.map(o=>o.pid)),s=t.filter(o=>!n.has(o.ppid)),i=s.filter(o=>o.ppid===e.selfPid?!1:o.ppid===1?!0:!e.isAlive(o.ppid));return{matched:t,roots:s,orphans:i}}async function dc(r={}){let e=r.platform??process.platform,t={matched:0,trees:0,orphans:0,killed:0,failed:0,unregistered:0,skipped:null};if(e==="win32")return t.skipped="windows",t;let n=r.readTable??ug,s=r.isAlive??z,i=r.killTree??(g=>ue(g,{signalMode:"graceful"})),o=r.selfPid??process.pid,a;try{a=await n()}catch(g){return f.warn("PROCESS","Orphaned chroma-mcp sweep skipped: cannot read the process table",{error:g instanceof Error?g.message:String(g)}),t.skipped="unreadable",t}let{matched:c,roots:l,orphans:u}=dg(a,{isAlive:s,selfPid:o});if(t.matched=c.length,t.trees=l.length,t.orphans=u.length,u.length===0)return f.debug("PROCESS","No orphaned chroma-mcp trees found",{matched:t.matched,trees:t.trees}),t;f.warn("PROCESS","Reaping orphaned chroma-mcp trees left by dead workers",{orphans:u.length,roots:u.map(g=>g.pid)});let d=new Set,p=8;for(let g=0;g<u.length;g+=p){let m=u.slice(g,g+p);(await Promise.allSettled(m.map(E=>i(E.pid)))).forEach((E,_)=>{let b=m[_];E.status==="fulfilled"?(t.killed+=1,d.add(b.pid)):(t.failed+=1,f.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:b.pid,ppid:b.ppid,error:E.reason instanceof Error?E.reason.message:String(E.reason)}))})}if(r.registry)for(let g of r.registry.getAll())g.type==="chroma"&&d.has(g.pid)&&(r.registry.unregister(g.id),t.unregistered+=1);return f.info("PROCESS","Orphaned chroma-mcp sweep finished",{orphans:t.orphans,killed:t.killed,failed:t.failed,unregistered:t.unregistered}),t}U();var fg=$.workerPid(),hi=class{registry;started=!1;stopPromise=null;signalHandlersRegistered=!1;shutdownInitiated=!1;shutdownHandler=null;constructor(e){this.registry=e}async start(){if(this.started)return;if(this.registry.initialize(),fc({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,dc({registry:this.registry}).catch(t=>{f.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:t instanceof Error?t.message:String(t)})}),ac()}configureSignalHandlers(e){if(this.shutdownHandler=e,this.signalHandlersRegistered)return;this.signalHandlersRegistered=!0;let t=async n=>{if(this.shutdownInitiated){f.warn("SYSTEM",`Received ${n} but shutdown already in progress`);return}this.shutdownInitiated=!0,f.info("SYSTEM",`Received ${n}, shutting down...`);try{this.shutdownHandler?await this.shutdownHandler():await this.stop()}catch(s){s instanceof Error?f.error("SYSTEM","Error during shutdown",{},s):f.error("SYSTEM","Error during shutdown (non-Error)",{error:String(s)});try{await this.stop()}catch(i){i instanceof Error?f.debug("SYSTEM","Supervisor shutdown fallback failed",{},i):f.debug("SYSTEM","Supervisor shutdown fallback failed",{error:String(i)})}}process.exit(0)};process.on("SIGTERM",()=>{t("SIGTERM")}),process.on("SIGINT",()=>{t("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{f.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{t("SIGHUP")}))}async stop(){if(this.stopPromise){await this.stopPromise;return}cc(),this.stopPromise=sc({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,t,n){this.registry.register(e,t,n)}unregisterProcess(e,t){this.registry.unregister(e,t)}getRegistry(){return this.registry}},Lw=new hi(an());function fc(r={}){let e=r.pidFilePath??fg;if(!(0,at.existsSync)(e))return"missing";let t=null;try{t=JSON.parse((0,at.readFileSync)(e,"utf-8"))}catch(s){return s instanceof Error?f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e},s):f.warn("SYSTEM","Failed to parse worker PID file, removing it",{path:e,error:String(s)}),(0,at.rmSync)(e,{force:!0}),"invalid"}return on(t)&&t?((r.logAlive??!0)&&f.info("SYSTEM","Worker already running (PID alive)",{existingPid:t.pid,existingPort:t.port,startedAt:t.startedAt}),"alive"):(r.removeStale===!1||(f.info("SYSTEM","Removing stale PID file (worker process is dead or PID has been reused)",{pid:t?.pid,port:t?.port,startedAt:t?.startedAt}),(0,at.rmSync)(e,{force:!0})),"stale")}zr();var _i=require("path"),ln=require("fs"),gc=require("crypto");U();var cn=require("fs");ce();function pc(r,e){if(!(0,cn.existsSync)(r))return e;try{return zt((0,cn.readFileSync)(r,"utf-8"))}catch(t){throw new Error(`Corrupt JSON file, refusing to overwrite: ${r}: ${t instanceof Error?t.message:String(t)}`)}}C();var mc="telemetry.json";function pg(r){let e=r.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function gg(r,e){if(pg(r))return{enabled:!1,source:"DO_NOT_TRACK"};let t=r.CLAUDE_MEM_TELEMETRY?.toLowerCase();return t==="0"||t==="false"||t==="off"?{enabled:!1,source:"env"}:t==="1"||t==="true"||t==="on"?{enabled:!0,source:"env"}:e?.enabled===!0?{enabled:!0,source:"config"}:e?.enabled===!1?{enabled:!1,source:"config"}:{enabled:!0,source:"default"}}function un(r,e){return gg(r,e).enabled}function hc(r){let e=r.CLAUDE_MEM_TELEMETRY_ERRORS?.toLowerCase();return!(e==="0"||e==="false"||e==="off")}function mg(){return(0,_i.join)(se(),mc)}function Zt(){let r;try{r=pc(mg(),null)}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.warn("SYSTEM","Telemetry: corrupt telemetry.json; treating as no recorded consent",void 0,t),null}return!r||typeof r!="object"||typeof r.installId!="string"||r.enabled!==void 0&&typeof r.enabled!="boolean"?null:{enabled:r.enabled,installId:r.installId,decidedAt:typeof r.decidedAt=="string"?r.decidedAt:""}}function hg(r){let e=se();(0,ln.mkdirSync)(e,{recursive:!0}),(0,ln.writeFileSync)((0,_i.join)(e,mc),JSON.stringify(r,null,2)+`
19
- `)}function dn(){let r=Zt();if(r?.installId)return r.installId;let e=(0,gc.randomUUID)();return hg({installId:e,decidedAt:""}),e}var Sc=Ee(require("os"),1);C();var _c=500;var Ec=8192,de="[REDACTED]";function yc(r){try{if(typeof r!="string"){if(r==null)return"";try{r=String(r)}catch(t){let n=t instanceof Error?t:new Error(String(t));return f.warn("SYSTEM","error-scrub: String() coercion of non-string input failed",void 0,n),""}}let e=r;return e.length>Ec?e.slice(0,Ec):e}catch{return""}}function Ei(r){if(typeof r!="string"||r.length===0)return r??"";let e="";try{e=Sc.default.homedir()||""}catch(n){let s=n instanceof Error?n:new Error(String(n));f.warn("SYSTEM","error-scrub: os.homedir() failed; skipping home-dir redaction",void 0,s),e=""}if(!e)return r;let t=e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");try{return r.replace(new RegExp(t,"g"),"~")}catch(n){let s=n instanceof Error?n:new Error(String(n));return f.warn("SYSTEM","error-scrub: home-dir RegExp replace failed; using split/join fallback",void 0,s),r.split(e).join("~")}}function Si(r){return typeof r!="string"||r.length===0?r??"":r.replace(/(?<![~\w])\/(?:[^\s/:"'()]+\/)+([^\s/:"'()]+)/g,"$1").replace(/[A-Za-z]:\\(?:[^\s\\:"'()]+\\)*([^\s\\:"'()]+)/g,"$1").replace(/\\\\[^\s\\:"'()]+(?:\\[^\s\\:"'()]+)*\\([^\s\\:"'()]+)/g,"$1")}function _g(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>/^https?:\/\/hooks\.slack\.com\/services\//i.test(e)?e.replace(/^(https?:\/\/hooks\.slack\.com\/services\/)[^\s"'()]+/i,`$1${de}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${de}@`))}function Eg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\?[^\s"'()]*/g,"")}function Sg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let t=e.indexOf("=");return`${e.slice(0,t+1)}${de}`})}function yg(r){if(typeof r!="string"||r.length===0)return r??"";let e=r;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,de),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,de),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,de),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,de),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,de),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,de),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,de),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,de),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,de),e}function bg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
20
- `).trim()}function yi(r){let e=yc(r);return e.length===0?"":(e=Ei(e),e=_g(e),e=Si(e),e=Eg(e),e=Sg(e),e=yg(e),e)}function bc(r){try{let e=bg(yi(yc(r)));return e.length>_c?e.slice(0,_c):e}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.warn("SYSTEM","error-scrub: message scrub failed; emitting empty message",void 0,t),""}}function wc(r){return(typeof r=="string"?r:"").replace(/\[REDACTED\]/g,"\xA7").replace(/'[^']*'/g,"'\xA7'").replace(/"[^"]*"/g,'"\xA7"').replace(/\b\d+\b/g,"\xA7").replace(/[ \t]+/g," ").trim().slice(0,200)}var wg=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","phase","install_method","interactive","provider_source","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_aborted_deadline_exceeded","outcomes_invalid_output","top_model","top_abort_reason","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),Tc=200;function Tg(r,e){if(!(!r||typeof r!="object"))for(let t of Object.keys(r)){if(!wg.has(t))continue;let n=r[t];if(typeof n=="string"){let s=n.length>Tc?n.slice(0,Tc):n;e[t]=yi(s)}else(typeof n=="number"&&Number.isFinite(n)||typeof n=="boolean")&&(e[t]=n)}}function fn(r){let e={};try{Tg(r,e)}catch{}return e}var bi=Ee(require("os"),1);C();var Ag="13.34.2",vg="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Rg="https://us.i.posthog.com";function pn(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||vg}function gn(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Rg}var Mg=["version","os","os_version","is_wsl","arch","runtime","locale","ide","provider","runtime_mode","install_method","claude_code_version","first_active_date","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs"];function mn(r){let e={};for(let t of Mg)r[t]!==void 0&&(e[t]=r[t]);return e}function Cg(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||bi.default.release().toLowerCase().includes("microsoft")}catch(r){let e=r instanceof Error?r:new Error(String(r));return f.warn("SYSTEM","Telemetry: WSL detection failed; reporting is_wsl=false",void 0,e),!1}}function hn(){return{version:Ag,os:process.platform,os_version:bi.default.release(),is_wsl:Cg(),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 Pg=2e3;async function Ac(r,e,t){try{if(!un(process.env,Zt()))return;let n=fn({...hn(),...e??{}});if(t?.person?n.$set=mn(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
21
- `);return}let s=pn(),i=new AbortController,o=setTimeout(()=>i.abort(),Pg);try{await Ig(s,r,n,i.signal)}finally{clearTimeout(o)}}catch{}}async function Ig(r,e,t,n){await fetch(`${gn()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r,event:e,distinct_id:dn(),properties:t}),signal:n})}var re=Ee(require("path"),1),Oi=require("os"),oe=require("fs"),wn=require("child_process");C();C();C();var Q=Ee(require("path"),1),Ct=require("fs"),bn=require("os"),Mi=require("child_process");Vt();U();C();var _n=require("fs"),Ve=Ee(require("path"),1);C();var er={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function vc(r){let e=Ve.default.join(r,".git"),t;try{t=(0,_n.statSync)(e)}catch(c){return c instanceof Error&&c.code!=="ENOENT"&&f.warn("GIT","Unexpected error checking .git",{error:c instanceof Error?c.message:String(c)}),er}if(!t.isFile())return er;let n;try{n=(0,_n.readFileSync)(e,"utf-8").trim()}catch(c){return f.warn("GIT","Failed to read .git file",{error:c instanceof Error?c.message:String(c)}),er}let s=n.match(/^gitdir:\s*(.+)$/);if(!s)return er;let i=Ve.default.resolve(Ve.default.dirname(e),s[1]),o=i.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(o){let c=o[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}let a=i.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let c=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}return er}var Mc=require("fs");var wi=require("path");Vt();C();function Rc(r){let e=ve(r.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return t=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${t}$`)}function Ti(r,e){if(!e.length)return!1;let t=r.replace(/\\/g,"/"),n=(0,wi.basename)(t);for(let s of e){let i=s.trim();if(i)try{let o=Rc(i);if(o.test(t)||o.test(n))return!0}catch(o){f.warn("PROJECT_NAME","Invalid glob pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}}return!1}function En(r,e){if(!e||!e.trim())return!1;let t=r.replace(/\\/g,"/"),n=(0,wi.basename)(t),s=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of s)try{let o=Rc(i);if(o.test(t)||o.test(n))return!0}catch(o){f.warn("PROJECT_NAME","Invalid exclusion pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}return!1}C();function Cc(r){let e=r;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(n){return f.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:n instanceof Error?n.message:String(n)}),[]}}if(!Array.isArray(e))return e!=null&&f.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let t=[];for(let n of e){let s=typeof n?.name=="string"?n.name.trim():"",i=Array.isArray(n?.patterns)?n.patterns.filter(o=>typeof o=="string"&&o.trim()!==""):[];if(!s||i.length===0){f.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:s});continue}t.push({name:s,patterns:i})}return t}function Og(r){try{return(0,Mc.realpathSync)(r)}catch{return r}}function Ai(r,e){if(e.length===0)return null;let t=[...new Set([r,Og(r)])].flatMap(n=>[n,`${n.replace(/[\\/]+$/,"")}/`]);for(let n of e)if(t.some(s=>Ti(s,n.patterns)))return n.name;return null}var Ci="unknown-project";function Oc(r){try{return(0,Mi.execFileSync)("git",["rev-parse","--show-toplevel"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim()||null}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("PROJECT_NAME","git rev-parse failed, falling back to non-git root",{dir:r},t),null}}var kg=[".claude-mem-project",".claude-mem.json"],Dg=64;function kc(r){try{return(0,Ct.realpathSync)(r)}catch{return r}}function xg(r,e){let t=Q.default.relative(e,r);return t===""||!t.startsWith("..")&&!Q.default.isAbsolute(t)}function Lg(){return[(0,bn.homedir)(),(0,bn.tmpdir)(),rt].flatMap(r=>{let e=Q.default.resolve(r);return[e,kc(e)]})}function Dc(r){let e=Lg(),t=Q.default.resolve(r);if([Q.default.resolve(rt),kc(Q.default.resolve(rt))].some(s=>xg(t,s)))return null;for(let s=0;s<Dg;s++){if(e.includes(t))return null;let i=Q.default.dirname(t);if(i===t)return null;if(kg.some(o=>(0,Ct.existsSync)(Q.default.join(t,o))))return t;t=i}return null}function Ri(r,e){let t=Q.default.basename(e);if(t===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return f.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return f.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),Ci}return t}var Fg="CLAUDE_MEM_PROJECT_NAME_SOURCE",Sn=null;function Pc(){try{return(0,Ct.statSync)(ie).mtimeMs}catch{return-1}}function xc(){let r=Pc();if(r===-1)return B.getAllDefaults();if(Sn&&Sn.mtimeMs===r)return Sn.settings;let e=B.loadFromFile(ie);return Sn={mtimeMs:Pc(),settings:e},e}function Ng(){let r=process.env[Fg]??xc().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(r??"path").trim().toLowerCase()==="git-remote"}var Ug="CLAUDE_MEM_PROJECT_ENVIRONMENTS",yn=null;function Lc(){let r=process.env[Ug]??xc().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!yn||yn.raw!==r)&&(yn={raw:r,environments:Cc(r)}),yn.environments}function $g(r){let e=(r??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let n=e.replace(/\/+$/,"").replace(/\.git$/i,""),s=n.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),i=s?null:n.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),o=s?.[1]??i?.[1];if(!o)return null;let a=o.split("/").filter(c=>c&&c!=="_git");return a.length>=2?a.slice(-2).join("/"):a.length===1?a[0]:null}function Bg(r){try{let e=(0,Mi.execFileSync)("git",["remote","get-url","origin"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return $g(e)}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:r},t),null}}var vi=new Map;function Fc(r){return Ng()?(vi.has(r)||vi.set(r,Bg(r)),vi.get(r)??null):null}function Wg(r,e=process.platform){if(!r||r.trim()==="")return f.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),Ci;let t=ve(r,e),n=Ai(t,Lc());if(n)return n;let s=Oc(t),i=s?Fc(s):null;if(i)return i;let o=s??Dc(t)??t;return Ri(r,o)}function Nc(r,e){return e===r?r:`${r}/${e}`}function jg(r,e){if(!r.isSubmodule||!r.parentRepoPath)return null;let t=Q.default.relative(r.parentRepoPath,e);return!t||t.startsWith("..")||Q.default.isAbsolute(t)?null:t.split(Q.default.sep).join("/")}function ct(r,e=process.platform){if(!r||r.trim()===""){let c=Wg(r,e);return{primary:c,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[c],keySource:"path"}}let t=ve(r,e),n=Oc(t),s=Hg(r,t,n),i=n?Fc(n):null,o=i?Ic(s,i,"git-remote"):s,a=Ai(t,Lc());return a?Ic(o,a,"environment"):o}function Ic(r,e,t){return{primary:e,parent:null,isWorktree:r.isWorktree,isSubmodule:r.isSubmodule,allProjects:[...r.allProjects.filter(n=>n!==e),e],keySource:t}}function Hg(r,e,t){let n=t?null:Dc(e),s=Ri(r,t??n??e),i=t??e,o=vc(i);if((o.isWorktree||o.isSubmodule)&&o.parentProjectName){let a=o.parentProjectName,c,l;return o.isSubmodule?(c=`${a}/${jg(o,i)??s}`,l=s!==a?[s]:[]):(c=Nc(a,s),l=c===a?[`${a}/${s}`]:[]),{primary:c,parent:a,isWorktree:o.isWorktree,isSubmodule:o.isSubmodule,allProjects:[...new Set([a,...l,c])].filter(u=>u!==c).concat(c),keySource:"path"}}if(n&&Q.default.resolve(n)!==Q.default.resolve(e)){let a=Ri(r,e);if(a!==s&&a!==Ci)return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a,s],keySource:"path"}}return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[s],keySource:"path"}}U();var Uc=Re(Y.POWERSHELL_COMMAND);function Gg(r){return r===void 0?Uc:Math.max(1,Math.min(Uc,r))}var LT=$.dataDir(),FT=$.workerPid(),zg="Bun runtime not found \u2014 install from https://bun.sh and ensure it is on PATH, under ~/.bun/bin, or set BUN / BUN_PATH / BUN_INSTALL. The worker daemon requires Bun because it uses bun:sqlite.";function Vg(r){try{return(0,oe.realpathSync)(r)}catch{return null}}function Pi(r){return r?/(^|[\\/])bun(\.exe)?$/i.test(r.trim()):!1}function Yg(r,e){let t=e==="win32"?"where.exe":"which",n=[r],s;try{s=(0,wn.execFileSync)(t,n,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(o){return o instanceof Error?f.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},o):f.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},new Error(String(o))),null}return s.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0)||null}var Ii;function ki(r={}){let e=Object.keys(r).length===0;if(e&&Ii!==void 0)return Ii;let t=qg(r);return e&&t!==null&&(Ii=t),t}function $c(r,e){let t=r?.trim();return t?e==="win32"?[re.default.join(t,"bin","bun.exe"),re.default.join(t,"bin","bun"),re.default.join(t,"bun.exe")]:[re.default.join(t,"bin","bun"),re.default.join(t,"bun")]:[]}function qg(r){let e=r.platform??process.platform,t=r.execPath??process.execPath;if(Pi(t))return t;let n=r.env??process.env,s=r.homeDirectory??(0,Oi.homedir)(),i=r.pathExists??oe.existsSync,o=r.lookupInPath??Yg,a=r.realpath??Vg,c=e==="win32"?[n.BUN,n.BUN_PATH,...$c(n.BUN_INSTALL,e),re.default.join(s,".bun","bin","bun.exe"),re.default.join(s,".bun","bin","bun"),n.USERPROFILE?re.default.join(n.USERPROFILE,".bun","bin","bun.exe"):void 0,n.LOCALAPPDATA?re.default.join(n.LOCALAPPDATA,"bun","bun.exe"):void 0,n.LOCALAPPDATA?re.default.join(n.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,n.npm_config_prefix?re.default.join(n.npm_config_prefix,"bun.exe"):void 0]:[n.BUN,n.BUN_PATH,...$c(n.BUN_INSTALL,e),re.default.join(s,".bun","bin","bun"),"/usr/local/bin/bun","/opt/homebrew/bin/bun","/home/linuxbrew/.linuxbrew/bin/bun","/usr/bin/bun","/snap/bin/bun",n.npm_config_prefix?re.default.join(n.npm_config_prefix,"bin","bun"):void 0];for(let d of c){let p=d?.trim();if(p&&(Pi(p)&&i(p)||p.toLowerCase()==="bun"))return p}let l=o("bun",e)?.trim();if(!l||!Pi(l))return null;let u=a(l)??l;return i(u)?u:null}function Di(){let r=$.dataDir();return(0,oe.mkdirSync)(r,{recursive:!0}),r}function Jg(r,e,t=Di()){let n=s=>s.replace(/'/g,"''");return`Start-Process -FilePath '${n(r)}' -ArgumentList @('"${n(e)}"','--daemon') -WorkingDirectory '${n(t)}' -WindowStyle Hidden`}function Xg(r=process.env){let e=r.SystemRoot||r.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function Qg(r,e,t=Di()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(Jg(r,e,t),"utf16le").toString("base64")]}function xi(r,e,t,n=process.platform,s){if(n==="win32"){let u=Xg(t),d=Qg(r,e),p=Gg(s);try{let g=(0,wn.spawnSync)(u,d,{stdio:"ignore",windowsHide:!0,env:t,timeout:p,killSignal:"SIGTERM"});if(g.error)throw g.error;if(g.signal)throw new Error(`powershell Start-Process killed by signal=${g.signal} after ${p}ms`);if(g.status!==0)throw new Error(`powershell Start-Process exited ${g.status??"null"}`);return 0}catch(g){let m=g instanceof Error?g:new Error(String(g));f.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:r,powershell:u},m);return}}let i="/usr/bin/setsid",o=(0,oe.existsSync)(i),a=o?i:r,l=li(a,o?[r,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:Di(),env:t});if(l.on("error",u=>{f.error("SYSTEM",zg,{runtimePath:r,execPath:a},u)}),l.pid!==void 0)return l.unref(),l.pid}var Wc=Ee(require("net"),1);C();U();function Bc(r){let e=r?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var Li="Set CLAUDE_MEM_WORKER_PORT to a port between 1024 and 65535 and CLAUDE_MEM_WORKER_HOST to an address of this machine (127.0.0.1 by default) in claude-mem settings";function Fi(){return B.loadFromFile(ie).CLAUDE_MEM_WORKER_HOST}function jc(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var lt=5e3;async function Hc(r,e,t="GET",n=lt){let s=await fetch(`http://${jc(Fi())}:${r}${e}`,{method:t,signal:AbortSignal.timeout(Math.max(1,n))}),i="";try{i=await s.text()}catch{}return{ok:s.ok,statusCode:s.status,body:i}}async function Kc(r,e=lt){let t=Date.now()+e;if(process.platform==="win32")try{let s=await fetch(`http://${jc(Fi())}:${r}/api/health`,{signal:AbortSignal.timeout(Math.max(1,t-Date.now()))});if(s.ok)return!0;f.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:r,status:s.status})}catch(s){s instanceof Error?f.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,message:s.message}):f.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,error:String(s)})}let n=await Tn(r,Math.max(1,t-Date.now()));return n==="occupied"||n==="indeterminate"}async function Tn(r,e=lt){return(await Zg(r,e)).occupancy}function Zg(r,e=lt){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(t=>{let n=!1,s=!1,i=!1,o;try{o=Wc.default.createServer()}catch{t({occupancy:"indeterminate"});return}let a=u=>{if(i){u?.();return}i=!0;try{o.close(u)}catch(d){u?.(d instanceof Error?d:new Error(String(d)))}},c=setTimeout(()=>{if(s)a();else try{o.close()}catch{}l({occupancy:"indeterminate"})},e),l=u=>{n||(n=!0,clearTimeout(c),t(u))};o.once("error",u=>{if(s)a();else try{o.close()}catch{}u.code==="EADDRINUSE"?l({occupancy:"occupied"}):Bc(u)?l({occupancy:"unbindable",bindErrorCode:u.code}):l({occupancy:"indeterminate"})}),o.once("listening",()=>{if(s=!0,n){a();return}try{a(u=>l({occupancy:u?"indeterminate":"free"}))}catch{l({occupancy:"indeterminate"})}});try{o.listen(r,Fi())}catch{try{o.close()}catch{}l({occupancy:"indeterminate"})}})}async function em(r,e,t,n){let s=Date.now()+t;for(;Date.now()<s;){try{let o=s-Date.now();if((await Hc(r,e,"GET",Math.min(lt,o))).ok)return!0}catch(o){o instanceof Error?f.debug("SYSTEM",n,{},o):f.debug("SYSTEM",n,{error:String(o)})}let i=Math.min(500,s-Date.now());i>0&&await new Promise(o=>setTimeout(o,i))}return!1}function Gc(r,e=3e4){return em(r,"/api/health",e,"Service not ready yet, will retry")}async function tm(r,e=lt){try{let t=await Hc(r,"/api/health","GET",e);return t.ok?JSON.parse(t.body).version:null}catch{return f.debug("SYSTEM","Could not fetch worker version",{}),null}}async function zc(r,e,t=lt){let n=e??"unknown",s=await tm(r,t);return!s||n==="unknown"?{matches:!0,pluginVersion:n,workerVersion:s}:{matches:n===s,pluginVersion:n,workerVersion:s}}C();var An=require("path"),q=require("fs");U();C();var Yc=9e4,tA=Yc/3;function qc(){return(0,An.join)(se(),"spawn.lock")}function Vc(r){try{let e=JSON.parse((0,q.readFileSync)(r,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function rm(r){if(r===null)return null;try{return process.kill(r,0),!0}catch(e){return e?.code==="EPERM"}}function Ni(){let r=qc(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let t=0;t<2;t++)try{return(0,q.mkdirSync)((0,An.dirname)(r),{recursive:!0}),(0,q.writeFileSync)(r,e,{flag:"wx"}),!0}catch(n){let s=n instanceof Error?n:new Error(String(n)),i=s.code;if(i!=="EEXIST")return f.warn("SYSTEM","Spawn lock write failed for a non-contention reason; failing open (spawning unlocked)",{lockPath:r,code:i},s),!0;if(t>0)return!1;let o;try{o=(0,q.statSync)(r).mtimeMs}catch{continue}let a=Vc(r),c=null;if(a===null)try{c=(0,q.readFileSync)(r,"utf-8")}catch{continue}if(Date.now()-o<=Yc&&rm(a)!==!1)return!1;let u;try{u=(0,q.statSync)(r).mtimeMs}catch{continue}if(u!==o)return!1;if(a!==null){if(Vc(r)!==a)return!1}else try{if((0,q.readFileSync)(r,"utf-8")!==c)return!1}catch{continue}try{(0,q.unlinkSync)(r)}catch{return!1}}return!1}function Ui(){let r=qc();try{if(JSON.parse((0,q.readFileSync)(r,"utf-8")).pid!==process.pid)return;(0,q.unlinkSync)(r)}catch{}}var Qc=require("node:child_process"),Zc=require("node:util");C();U();var vn=(0,Zc.promisify)(Qc.execFile),nm=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;function Jc(r){return nm.test(r.trim())}function sm(r,e){if(!r)return!1;let t=r.toLowerCase().replace(/\\/g,"/"),n=t.indexOf("--data-dir");if(n<0)return!1;let s=t.slice(n+10).trim();if(s.startsWith('"')){let o=s.indexOf('"',1);s=o<0?s.slice(1):s.slice(1,o)}let i=e.toLowerCase().replace(/\\/g,"/");return s===i||s.startsWith(i)&&s[i.length]==="/"}function Rn(r,e){return e===void 0?r:Math.max(1,Math.min(r,e))}async function im(r){try{let e=await vn("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,CommandLine,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Json -Compress"],{timeout:Rn(3e4,r),windowsHide:!0,maxBuffer:33554432}),t=JSON.parse(e.stdout),n=Array.isArray(t)?t:t===null?[]:[t],s=[];for(let i of n){let o=typeof i.Name=="string"?i.Name.trim():"";if(!o)continue;let a=typeof i.ProcessId=="number"?i.ProcessId:Number.parseInt(String(i.ProcessId),10),c=typeof i.ParentProcessId=="number"?i.ParentProcessId:Number.parseInt(String(i.ParentProcessId),10);!Number.isInteger(a)||!Number.isInteger(c)||s.push({pid:a,ppid:c,name:o,cmdline:typeof i.CommandLine=="string"?i.CommandLine:null,startToken:typeof i.StartToken=="string"&&i.StartToken.length>0?i.StartToken:null})}return s}catch(e){return f.warn("PROCESS","Cannot enumerate the Windows process table with names \u2014 ghost-port reclaim disabled",{error:e instanceof Error?e.message:String(e)}),null}}async function om(r,e){try{let t=await vn("netstat",["-ano"],{timeout:Rn(15e3,e),windowsHide:!0,maxBuffer:16777216});return um(t.stdout,r)}catch(t){return f.warn("PROCESS","netstat failed \u2014 ghost-port reclaim disabled for this attempt",{port:r,error:t instanceof Error?t.message:String(t)}),null}}async function am(r,e){try{let t=await vn("lsof",["-nP",`-iTCP:${r}`,"-sTCP:LISTEN","-t"],{timeout:Rn(1e4,e),maxBuffer:1048576});return cm(t.stdout)}catch(t){let n=t;return n.code===1&&typeof n.stdout=="string"&&n.stdout.trim()===""?[]:(f.warn("PROCESS","lsof failed \u2014 cannot verify the worker port owner",{port:r,error:t instanceof Error?t.message:String(t)}),null)}}function cm(r){let e=new Set;for(let t of r.split(/\r?\n/)){let n=Number.parseInt(t.trim(),10);Number.isInteger(n)&&n>0&&e.add(n)}return[...e]}async function lm(r,e){try{let n=(await vn("ps",["-p",String(r),"-o","command="],{timeout:Rn(5e3,e)})).stdout.trim();return n.length>0?n:null}catch{return null}}function um(r,e){let t=new Set,n=`:${e}`;for(let s of r.split(/\r?\n/)){let i=s.trim();if(!/^TCP\b/i.test(i))continue;let o=i.split(/\s+/);if(!o[1]?.endsWith(n)||o[3]!=="LISTENING")continue;let c=Number.parseInt(o[4]??"",10);Number.isInteger(c)&&c>0&&t.add(c)}return[...t]}var dm=/worker-service/i,el=1500,tl=1e3,$i=5500,Xc=2*el+tl+$i;async function fm(r,e){let t=e.readOwnedWorker();if(t===null||t.port!==r)return null;let n=(l,u={})=>(f.info("PROCESS","Wedged-worker reclaim declined",{port:r,pid:t.pid,reason:l,...u}),{reclaimed:!1,reason:l,killedPids:[]}),s=(e.now()-Date.parse(t.startedAt))/1e3;if(!Number.isFinite(s)||s<e.minOwnerAgeSeconds)return n("owner-booting",{ageSeconds:s,minOwnerAgeSeconds:e.minOwnerAgeSeconds});for(let l=0;l<2;l++)if(l>0&&await e.sleep(tl),await e.probeHealth(r))return n("owner-responding");let i=await e.listOwners(r);if(i===null)return n("netstat-unreadable");if(!i.includes(t.pid))return f.info("PROCESS","Wedged-worker reclaim: our worker does not own the port \u2014 deferring to the ghost-listener check",{port:r,pid:t.pid,listeners:i}),null;let o=await e.readIdentity(t.pid),a=t.startToken!==void 0&&o.startToken!==null&&o.startToken!==t.startToken;if(a||o.cmdline===null||!dm.test(o.cmdline))return n("owner-identity-mismatch",{tokenMismatch:a,hasCmdline:o.cmdline!==null});if(!e.hasKillBudget())return n("out-of-budget");f.warn("PROCESS","Reclaiming wedged worker: past its boot grace, silent on two health probes, and still holding the port",{port:r,pid:t.pid,ageSeconds:Math.round(s)});try{await e.killTree(t.pid,{expectedStartToken:o.startToken??t.startToken??void 0,signalMode:"graceful"})}catch(l){return f.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:r,pid:t.pid},l instanceof Error?l:new Error(String(l))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let c=await e.listOwners(r);return c!==null&&c.length===0?(f.info("PROCESS","Wedged worker reclaimed \u2014 port is free again",{port:r,killedPids:[t.pid]}),{reclaimed:!0,killedPids:[t.pid]}):(f.warn("PROCESS","Wedged-worker reclaim killed the worker but the port is still bound",{port:r,pid:t.pid,stillOwnedBy:c}),{reclaimed:!1,reason:"still-bound",killedPids:[t.pid]})}async function pm(r,e,t,n){let s=Me(r),i=e?(await t(n))?.find(o=>o.pid===r)?.cmdline??null:await lm(r,n);return ye(r,s)?{startToken:s,cmdline:i}:{startToken:null,cmdline:null}}async function rl(r,e={}){let t=e.isWin32??(()=>process.platform==="win32"),n=e.now??Date.now,s=e.deadlineAt??null,i=S=>s!==null&&s-n()<S,o=()=>s===null?void 0:Math.max(1,s-n());if(i(Xc))return f.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:r,remainingMs:o(),neededMs:Xc}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((S,I)=>t()?om(S,I):am(S,I)),c=S=>a(S,o()),l=e.readTable??im,u=()=>l(o()),d=e.killTree??((S,I)=>ue(S,I)),p=e.dataDir??(()=>F),g=e.readIdentity??((S,I)=>pm(S,t(),l,I)),m=await fm(r,{listOwners:c,killTree:d,readOwnedWorker:e.readOwnedWorker??ze,probeHealth:e.probeHealth??(S=>Gc(S,el)),readIdentity:S=>g(S,o()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??Ma(),now:n,sleep:e.sleep??(S=>new Promise(I=>setTimeout(I,S))),hasKillBudget:()=>!i($i)});if(m!==null)return m;if(!t())return{reclaimed:!1,reason:"not-supported",killedPids:[]};let h=await c(r);if(h===null)return{reclaimed:!1,reason:"netstat-unreadable",killedPids:[]};if(h.length===0)return{reclaimed:!1,reason:"no-listener",killedPids:[]};let E=await u();if(E===null)return{reclaimed:!1,reason:"table-unreadable",killedPids:[]};if(h.filter(S=>z(S)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let b=new Map;for(let S of E){let I=b.get(S.ppid);I?I.push(S):b.set(S.ppid,[S])}let w=new Map,T=new Set,M=S=>{for(let I of b.get(S)??[])T.has(I.pid)||(T.add(I.pid),M(I.pid),Jc(I.name)&&w.set(I.pid,I))};for(let S of h)M(S);let R=p();if(R)for(let S of E)w.has(S.pid)||Jc(S.name)&&sm(S.cmdline,R)&&w.set(S.pid,S);if(w.size===0)return f.info("PROCESS","Ghost listener owner is dead but no chroma-sidecar descendants found",{port:r,deadOwners:h,processTableRows:E.length,dataDir:R??"(unresolved)"}),{reclaimed:!1,reason:"no-chroma-descendants",killedPids:[]};f.warn("PROCESS","Reclaiming ghost listener: killing dead worker's surviving chroma sidecar chain",{port:r,deadOwners:h,targets:[...w.values()].map(S=>({pid:S.pid,name:S.name}))});let y=[];for(let S of w.values()){if(i($i))return f.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:r,killedPids:y}),{reclaimed:!1,reason:"out-of-budget",killedPids:y};try{await d(S.pid,{expectedStartToken:S.startToken,signalMode:"immediate"}),y.push(S.pid)}catch(I){return f.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:r,pid:S.pid},I instanceof Error?I:new Error(String(I))),{reclaimed:!1,reason:"kill-failed",killedPids:y}}}let A=await c(r);return A!==null&&A.length===0?(f.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:r,killedPids:y}),{reclaimed:!0,killedPids:y}):(f.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:r,killedPids:y,stillOwnedBy:A}),{reclaimed:!1,reason:"still-bound",killedPids:y})}ce();var Pt=require("fs"),sl=require("module"),Ye=Ee(require("path"),1),gm=["zod/v3","zod/v4","zod/v4-mini"];function nl(r){try{return(0,Pt.realpathSync)(r)}catch{return r}}function mm(r,e){let t=Ye.default.relative(e,r);return t!==""&&!t.startsWith("..")&&!Ye.default.isAbsolute(t)}function il(r){let e;try{let s=JSON.parse((0,Pt.readFileSync)(Ye.default.join(r,"package.json"),"utf-8"));e=Object.keys(s?.dependencies??{})}catch{return[]}if(e.length===0)return[];let t=Ye.default.join(r,"node_modules"),n=e.filter(s=>!(0,Pt.existsSync)(Ye.default.join(t,...s.split("/"),"package.json")));if(e.includes("zod")&&!n.includes("zod")){let s=(0,sl.createRequire)(Ye.default.join(t,"noop.js")),i=nl(Ye.default.join(t,"zod"));for(let o of gm)try{let a=s.resolve(o,{paths:[t]});mm(nl(a),i)||n.push(o)}catch{n.push(o)}}return n}function _l(r,e,t){let n=process.env[r];if(n){let s=parseInt(n,10);if(Number.isFinite(s)&&s>=t.min&&s<=t.max)return s;f.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max})}return e}var ft=_l("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Re(Y.HEALTH_CHECK),{min:500,max:3e5}),tr=_l("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Re(Y.HOOK_READINESS_WAIT),{min:0,max:3e5}),hm=5e3,_m={min:500,max:3e5},Em={min:500,max:Y.SESSION_INIT_REQUEST_MAX},ji=100;function El(r=process.env){let e=r.CLAUDE_MEM_FETCH_VERBOSE;if(e===void 0)return!1;let t=e.trim().toLowerCase();return t==="1"||t==="true"||t==="on"||t==="yes"}function Sm(r){return El()?{...r,verbose:!0}:r}function ym(r){let e={},t=r;for(let n=0;t&&n<4;n++){let s=n===0?"error":`cause${n}`;if(t instanceof Error){let i=t;e[s]={name:t.name,message:t.message,...i.code!==void 0?{code:i.code}:{}},t=t.cause;continue}e[s]=String(t);break}return e}function bm(r,e,t){let n=typeof e.method=="string"?e.method:"GET",s=ym(t),i=JSON.stringify(s);f.warn("SYSTEM","Worker IPC fetch failed",{url:r,method:n},i),Le(`[claude-mem] fetch verbose: ${n} ${r} ${i}
22
- `)}async function Hi(r,e={}){let t=Sm(e);try{return await fetch(r,t)}catch(n){throw El()&&bm(r,e,n),n}}async function Ki(r,e={},t){try{return await Hi(r,{...e,signal:AbortSignal.timeout(t)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${t}ms`):n}}function wm(r,e){let t=new AbortController,n=null,s=null,i=null,o=!1,a=()=>{s!==null&&(clearTimeout(s),s=null)},c=()=>{o=!0,a(),i!==null&&(clearTimeout(i),i=null)},l=d=>{o||(n=d,c(),t.abort(d))},u=()=>{o||(a(),s=setTimeout(()=>l(new Error(`Request timed out after ${r.idleTimeoutMs}ms idle`)),r.idleTimeoutMs))};if(r.absoluteCapMs!==void 0&&r.absoluteCapMs>0){let d=r.absoluteCapMs;i=setTimeout(()=>l(new Error(`Request timed out after ${d}ms`)),d)}return u(),{signal:e?AbortSignal.any([e,t.signal]):t.signal,touch:u,pause:a,dispose:c,translate:d=>n??d}}async function Sl(r,e,t){let n=wm(t,e.signal),s;try{s=await Hi(r,{...e,signal:n.signal})}catch(l){throw n.dispose(),n.translate(l)}n.touch();let i=s.body,o=i?i.getReader():null,a=!1;async function*c(){if(!o){a=!0,n.dispose();return}try{for(;;){n.touch();let l;try{l=await o.read()}catch(u){throw a=!0,n.translate(u)}if(l.done){a=!0;return}n.pause(),t.onChunk?.(l.value),yield l.value}}finally{n.dispose(),a||await o.cancel()}}return{status:s.status,statusText:s.statusText,ok:s.ok,headers:s.headers,chunks:c(),cancel:async()=>{n.dispose(),o&&!a&&(a=!0,await o.cancel())}}}async function Tm(r,e,t){let n=await Sl(r,e,t),s=new TextDecoder,i="";for await(let o of n.chunks)i+=s.decode(o,{stream:!0});return i+=s.decode(),{status:n.status,statusText:n.statusText,ok:n.ok,headers:n.headers,text:i}}var Mn=null,Cn=null,Pn=null,In=null,On=null;function Am(){return D.default.join(B.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Gi(){return Pn!==null||(Pn=B.loadFromFile(Am())),Pn}function ol(r,e){if(!r)return null;let t=parseInt(r,10);return Number.isFinite(t)&&t>=e.min&&t<=e.max?t:null}function yl(r,e,t){let n=process.env[r];if(n!==void 0){let o=ol(n,t);return o!==null?o:(f.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max}),e)}let s=Gi()[r],i=ol(s,t);return i!==null?i:(f.warn("SYSTEM",`Invalid ${r} in settings.json, using default`,{value:s,min:t.min,max:t.max}),e)}function fe(){if(Mn!==null)return Mn;let r=Gi();return Mn=parseInt(r.CLAUDE_MEM_WORKER_PORT,10),Mn}function zi(){return Cn!==null||(Cn=Gi().CLAUDE_MEM_WORKER_HOST),Cn}function vm(){return In!==null||(In=yl("CLAUDE_MEM_API_TIMEOUT_MS",Re(Y.API_REQUEST),_m)),In}function bl(){return On!==null||(On=Math.min(yl("CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS",Yt(),Em),Ca())),On}function Vi(r){return r===null?null:Math.max(0,r-Date.now())}function Dn(r){let e=Vi(r);return e!==null&&e<ji}function qe(r,e){let t=Vi(e);return t===null?r:Math.max(1,Math.min(r,t))}function wl(r){return`http://${ai(zi())}:${fe()}${r}`}function Ce(r,e={}){let t=e.method??"GET",n=wl(r),s={method:t};if(e.headers&&(s.headers=e.headers),e.body&&(s.body=e.body),e.idleTimeoutMs!==void 0&&e.idleTimeoutMs>0)return Tm(n,s,{idleTimeoutMs:e.idleTimeoutMs,absoluteCapMs:e.timeoutMs}).then(o=>new Response(o.text.length>0?o.text:null,{status:o.status,statusText:o.statusText,headers:o.headers}));let i=e.timeoutMs??vm();return i>0?Ki(n,s,i):Hi(n,s)}async function Rm(r){return(await Ce("/api/health",{timeoutMs:r})).ok}async function al(r=ft){return(await Ce("/api/readiness",{timeoutMs:r})).ok}function Tl(r){let e=(0,P.existsSync)(D.default.join(r,"plugin","scripts"))?D.default.join(r,"plugin"):r;return D.default.join(e,"scripts","worker-service.cjs")}function Mm(r,e){let t=d=>{let p=d.split("-")[0].split(".");return[parseInt(p[0],10)||0,parseInt(p[1],10)||0,parseInt(p[2],10)||0]},[n,s,i]=t(r),[o,a,c]=t(e);if(o!==n)return o-n;if(a!==s)return a-s;if(c!==i)return c-i;let l=r.includes("-")?1:0,u=e.includes("-")?1:0;return l!==u?l-u:r<e?1:r>e?-1:0}function Cm(r=D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem")){try{return(0,P.readdirSync)(r).filter(e=>/^\d/.test(e)).map(e=>D.default.join(r,e)).filter(e=>{try{if(!(0,P.statSync)(e).isDirectory())return!1}catch{return!1}return!(0,P.existsSync)(D.default.join(e,".orphaned_at"))}).map(e=>({scriptPath:Tl(e),version:D.default.basename(e)}))}catch{return[]}}function cl(r){try{let e=JSON.parse((0,P.readFileSync)(r,"utf-8"));return typeof e.version=="string"?e.version:null}catch(e){let t=e.code;return t!=="ENOENT"&&f.debug("SYSTEM","Could not read package version for worker resolution",{packageJsonPath:r,code:t}),null}}function Pm(){return{cacheRoot:D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem"),marketplaceRoot:At,cwd:process.cwd()}}function Yi(r=Pm()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if((0,P.existsSync)(e))return{scriptPath:e,version:null};f.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let t=[...Cm(r.cacheRoot),{scriptPath:Tl(D.default.join(r.marketplaceRoot,"plugin")),version:cl(D.default.join(r.marketplaceRoot,"package.json"))},{scriptPath:D.default.join(r.cwd,"plugin","scripts","worker-service.cjs"),version:cl(D.default.join(r.cwd,"package.json"))}];return km(t)}function Im(r){return D.default.dirname(D.default.dirname(r))}function Om(r){return il(Im(r.scriptPath)).length===0}function km(r,e=Om){let t=r.filter(n=>(0,P.existsSync)(n.scriptPath));return t.length===0?null:(t.sort((n,s)=>n.version===null&&s.version===null?0:n.version===null?1:s.version===null?-1:Mm(n.version,s.version)),t.find(e)??t[0])}function Dm(){return Yi()?.scriptPath??null}async function xm(r){let e=r.deadlineAt??null,t=r.backoffMs;for(let n=1;n<=r.attempts;n++){if(Dn(e))return!1;if(await kl(e??Number.POSITIVE_INFINITY))return!0;n<r.attempts&&(await new Promise(s=>setTimeout(s,qe(t,e))),t*=2)}return!1}function ll(r){return r instanceof Error&&/^Request timed out after \d+ms idle$/.test(r.message)}function ul(r){return r instanceof Error&&/^Request timed out after \d+ms$/.test(r.message)}async function Lm(r){let e;try{e=await Sl(wl("/api/ready"),{method:"GET"},{idleTimeoutMs:hm,absoluteCapMs:Math.max(1,r)})}catch(i){return ll(i)?{outcome:"unresponsive",detail:"no response headers within the idle window"}:ul(i)?{outcome:"still_booting",detail:"budget spent before response headers"}:(f.debug("SYSTEM","Worker /api/ready connection failed",{error:i instanceof Error?i.message:String(i)}),{outcome:"not_running"})}let t=()=>e.cancel().catch(i=>{f.debug("SYSTEM","Releasing the /api/ready body failed",{error:i instanceof Error?i.message:String(i)})}),n=e.headers?.get("content-type")??"";if(!e.ok||!n.includes("text/event-stream"))return xn(),await t(),{outcome:"unsupported"};let s=null;try{for await(let i of Ya(e.chunks)){if(i.event!=="phase")continue;let o=JSON.parse(i.data);if(s=typeof o.phase=="string"?o.phase:null,s==="ready")return xn(),await t(),{outcome:"ready"};if(s==="failed")return await t(),{outcome:"failed",detail:typeof o.message=="string"?o.message:"unknown init failure"}}}catch(i){return ul(i)?(xn(),{outcome:"still_booting",detail:`last phase ${s??"none"}`}):ll(i)?{outcome:"unresponsive",detail:`silent past the idle window after response headers (last phase ${s??"none"})`}:{outcome:"wedged",detail:`stream error: ${i instanceof Error?i.message:String(i)} (last phase ${s??"none"})`}}return{outcome:"wedged",detail:`stream closed before ready/failed (last phase ${s??"none"})`}}async function Fm(r){if(r<=0)try{return await al()?{outcome:"ready"}:{outcome:"still_booting"}}catch(t){return f.debug("SYSTEM","Worker readiness check threw",{},t instanceof Error?t:new Error(String(t))),{outcome:"still_booting"}}let e=Date.now();do{let t=r-(Date.now()-e);try{if(await al(Math.max(1,Math.min(ft,t))))return{outcome:"ready"}}catch(s){f.debug("SYSTEM","Worker readiness check threw",{error:s instanceof Error?s.message:String(s)})}let n=r-(Date.now()-e);if(n<=0)break;await new Promise(s=>setTimeout(s,Math.min(250,n)))}while(Date.now()-e<r);return{outcome:"still_booting",detail:"legacy /api/readiness never reported ready"}}async function It(r=tr){let e=r>0?r:ft,t=await Lm(e);return t.outcome==="ready"&&Hm(),t.outcome!=="unsupported"?t:(f.debug("SYSTEM","Worker has no /api/ready stream; falling back to /api/readiness"),Fm(r))}async function Nm(r=ft){try{let t=await(await Ce("/api/health",{timeoutMs:r})).json();return typeof t.version=="string"?t.version:null}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.debug("SYSTEM","Worker health-version fetch failed",{},t),null}}async function Um(r=5e3){let e=Date.now()+r;for(;;){let t=e-Date.now();if(t<=0)return!1;if(await Tn(fe(),Math.min(1e3,t))==="free")return!0;let n=Math.min(200,e-Date.now());n>0&&await new Promise(s=>setTimeout(s,n))}}function Al(r,e){if(!r)return null;try{let t=(0,P.statSync)(r.scriptPath);return JSON.stringify([r.scriptPath,e,t.size,t.mtimeMs,t.ctimeMs])}catch{return null}}function vl(){return D.default.join(se(),"worker-version-recycle.json")}function $m(r,e){if(r===null||e===null)return!1;try{let t=JSON.parse((0,P.readFileSync)(vl(),"utf-8"));return t?.buildKey===r&&t?.workerVersion===e}catch{return!1}}async function dl(r,e=null,t=ft){let n=await Nm(t);if(n!==null&&n!==r){if(e!==null)try{H(vl(),{buildKey:e,workerVersion:n})}catch(s){f.warn("SYSTEM","Could not persist the failed worker version recycle",{error:s instanceof Error?s.message:String(s)})}f.warn("SYSTEM","Worker is ready but still reports a stale version; rebuild or reinstall the worker bundle before retrying",{pluginVersion:r,workerVersion:n})}}var Rl=3e4;function qi(){return D.default.join(se(),"worker-unresponsive.json")}function Bm(){try{let r=JSON.parse((0,P.readFileSync)(qi(),"utf-8"));return typeof r?.pid!="number"||typeof r?.firstUnresponsiveAtEpochMs!="number"?null:{pid:r.pid,firstUnresponsiveAtEpochMs:r.firstUnresponsiveAtEpochMs}}catch{return null}}function xn(){let r=qi();if((0,P.existsSync)(r))try{(0,P.unlinkSync)(r)}catch(e){f.debug("SYSTEM","Could not clear the unresponsive-worker record",{error:e instanceof Error?e.message:String(e)})}}function Wm(r=Date.now()){let e=ze()?.pid??null;if(e===null)return!1;let t=Bm();if(t!==null&&t.pid===e)return r-t.firstUnresponsiveAtEpochMs>=Rl;try{H(qi(),{pid:e,firstUnresponsiveAtEpochMs:r})}catch(n){f.warn("SYSTEM","Could not persist the unresponsive-worker record",{error:n instanceof Error?n.message:String(n)})}return!1}function Ji(){return D.default.join(se(),"worker-never-ready-recycle.json")}function jm(){try{let r=JSON.parse((0,P.readFileSync)(Ji(),"utf-8"));return typeof r?.buildKey!="string"||typeof r?.failureMessage!="string"?null:{buildKey:r.buildKey,failureMessage:r.failureMessage,refusalLogged:r.refusalLogged===!0}}catch{return null}}function Ml(r){try{H(Ji(),r)}catch(e){f.warn("SYSTEM","Could not persist the never-ready worker recycle",{error:e instanceof Error?e.message:String(e)})}}function Hm(){let r=Ji();if((0,P.existsSync)(r))try{(0,P.unlinkSync)(r)}catch(e){f.debug("SYSTEM","Could not clear the never-ready worker recycle record",{error:e instanceof Error?e.message:String(e)})}}function Cl(r){return Al(r,r?.version??"unknown")??"unresolved-worker-bundle"}function Pl(r){return r.outcome==="failed"?r.detail??"unknown init failure":r.outcome}function Il(r,e){if(r.outcome==="unresponsive"&&!Wm())return f.warn("SYSTEM","Worker went silent on /api/ready; skipping this hook without killing it",{detail:r.detail,wedgedAfterMs:Rl}),!1;let t=Pl(r),n=jm();return n!==null&&n.buildKey===e&&n.failureMessage===t?(n.refusalLogged?f.debug("SYSTEM","Never-ready worker recycle already refused for this bundle and failure",{failureMessage:t}):(f.error("SYSTEM","Worker keeps failing to start the same way after a recycle; not recycling again. Run `npx claude-mem doctor` and check the worker logs",{outcome:r.outcome,failureMessage:t,logsDir:D.default.join(se(),"logs")}),Ml({...n,refusalLogged:!0})),!1):!0}function Ol(r,e){Ml({buildKey:e,failureMessage:Pl(r)}),xn()}async function kl(r=Number.POSITIVE_INFINITY){let e=r-Date.now();if(e<=0)return!1;let t;try{t=await Rm(Math.min(ft,e))}catch(n){return f.debug("SYSTEM","Worker health check threw",{error:n instanceof Error?n.message:String(n)}),!1}return t}async function Dl(r,e){let t=ze();if(t===null||t.port!==fe())return f.error("SYSTEM","Stale worker is serving the port but the PID file does not identify it; kill the claude-mem worker process manually",{port:fe(),pidFilePid:t?.pid??null,pidFilePort:t?.port??null}),!1;if(e("stale-worker recycle"))return!1;try{await ue(t.pid,{signalMode:"immediate"})}catch(n){return f.error("SYSTEM","Could not kill stale worker",{pid:t.pid,port:t.port},n instanceof Error?n:new Error(String(n))),!1}return await Um(qe(5e3,r))?!0:(e("stale port release")||(dt=fe(),f.error("SYSTEM","Stale worker port still open after SIGKILL; skipping spawn this hook event",{pid:t.pid,port:fe(),fix:Fn})),!1)}async function Ln(r){let e=r===void 0?null:Date.now()+r,t=h=>Dn(e)?(f.warn("SYSTEM","Worker check ran out of the hook budget; skipping the rest this hook event",{step:h,budgetMs:r}),!0):!1,n=()=>e===null?void 0:qe(ft,e),s=Math.min(Date.now()+5e3,e??Number.POSITIVE_INFINITY),i=Yi(),o=null,a=null,c=!1,l=null,u=null,d=en(le());if(t("health probe"))return!1;if(await kl(s)){if(t("version probe"))return!1;let{matches:h,pluginVersion:E,workerVersion:_}=await zc(fe(),i?.version??null,n());if(E!=="unknown"&&(o=E),h){if(t("readiness wait"))return!1;let b=await It(qe(tr,e));if(b.outcome==="ready")return o!==null&&!Dn(e)&&await dl(o,null,n()),!0;if(b.outcome==="still_booting"||b.outcome==="not_running")return f.warn("SYSTEM","Worker is healthy but not ready yet; skipping hook API call",{outcome:b.outcome,detail:b.detail}),!1;if(d)return f.warn("SYSTEM","Worker will never become ready; CLAUDE_MEM_WORKER_AUTOSTART=false, so leaving it to whatever manages it",{outcome:b.outcome,detail:b.detail}),!1;if(u=Cl(i),!Il(b,u))return!1;l=b,f.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:b.outcome,detail:b.detail,version:_})}else{if(d)return f.warn("SYSTEM","Worker version differs from the installed plugin; CLAUDE_MEM_WORKER_AUTOSTART=false, so using it as is",{pluginVersion:E,workerVersion:_}),t("readiness wait")?!1:(await It(qe(tr,e))).outcome==="ready";if(a=Al(i,E),$m(a,_))return f.warn("SYSTEM","Skipping repeated worker recycle: the unchanged bundle still reports a stale version; rebuild or reinstall it",{pluginVersion:E,workerVersion:_,scriptPath:i?.scriptPath}),t("readiness wait")?!1:(await It(qe(tr,e))).outcome==="ready";f.info("SYSTEM","Worker version mismatch \u2014 killing stale worker",{pluginVersion:E,workerVersion:_})}if(!await Dl(e,t))return!1;l!==null&&u!==null&&Ol(l,u),c=!0}if(d)return f.debug("SYSTEM","Worker not running and CLAUDE_MEM_WORKER_AUTOSTART=false \u2014 not lazy-spawning"),!1;let p=i?.scriptPath??null;if(t("lazy spawn"))return!1;let g=Ni();try{if(g){if(!c&&!await Km(s,e))return!1;let E=ki();if(!E)return f.warn("SYSTEM","Cannot lazy-spawn worker: Bun runtime not found (PATH, BUN / BUN_PATH / BUN_INSTALL, or ~/.bun/bin)"),!1;if(!p)return f.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;f.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:E,scriptPath:p});try{if(xi(E,p,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Vi(e)??void 0)===void 0)return!1}catch(_){return _ instanceof Error?f.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:E,scriptPath:p},_):f.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:E,scriptPath:p,error:String(_)}),!1}}else f.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await xm({attempts:6,backoffMs:500,deadlineAt:e}))return t("cold-boot port wait")||(f.warn("SYSTEM",g?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),ze()===null&&await Kc(fe(),e===null?void 0:qe(5e3,e))&&(dt=fe(),f.error("SYSTEM","Worker port is occupied by an unreachable process that no PID file claims (likely an orphaned OS socket); every lazy-spawn on this port will be silently refused",{port:dt,fix:Fn}))),!1}finally{g&&Ui()}if(t("readiness wait"))return!1;let m=await It(qe(tr,e));return m.outcome!=="ready"?(f.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout",{outcome:m.outcome,detail:m.detail}),!1):(o!==null&&!Dn(e)&&await dl(o,a,n()),!0)}var Fn="Set CLAUDE_MEM_WORKER_PORT to a different port in claude-mem settings, or reboot to release the stuck port",dt=null,Wi=null;async function Km(r,e){let t=fe(),n=r-Date.now();if(n<=0)return!1;let s=await Tn(t,n);if(s==="free")return!0;if(s==="unbindable")return Wi=t,f.error("SYSTEM","Worker port cannot be bound (EACCES or EADDRNOTAVAIL) \u2014 skipping lazy-spawn",{port:t,host:zi(),fix:Li}),!1;if(s==="indeterminate")return f.warn("SYSTEM","Worker port state could not be determined in time \u2014 skipping lazy-spawn",{port:t}),!1;let i=await rl(t,{deadlineAt:e});return i.reclaimed?(f.info("SYSTEM","Reclaimed the worker port before lazy-spawn",{port:t,killedPids:i.killedPids}),!0):(ze()===null&&(dt=t),f.warn("SYSTEM","Worker port is held by a listener that does not answer health \u2014 skipping lazy-spawn",{port:t,reclaimReason:i.reason,...dt===t?{fix:Fn}:{}}),!1)}var kn=null;async function Gm(r){return kn!==null||(kn=await Ln(r)),kn}async function zm(r){let e=Date.now()+r,t=()=>e-Date.now(),n=l=>t()>=ji?!1:(f.debug("SYSTEM","Bounded worker startup ran out of budget",{step:l,budgetMs:r}),!0),s=await It(Math.max(1,t()));if(s.outcome==="ready")return!0;if(s.outcome==="still_booting")return f.warn("SYSTEM","Worker is still booting; bounded startup budget spent, skipping this call",{detail:s.detail,budgetMs:r}),!1;if(!!en(le()))return fl(e);let o=ki(),a=Dm();if(!o||!a)return!1;if(s.outcome==="failed"||s.outcome==="wedged"||s.outcome==="unresponsive"){let l=Cl(Yi());if(!Il(s,l)||(f.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:s.outcome,detail:s.detail}),!await Dl(e,n)))return!1;Ol(s,l)}let c=Ni();try{return c&&xi(o,a,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Math.max(1,t()))===void 0?!1:await fl(e)}catch(l){return f.debug("SYSTEM","Bounded worker startup failed",{error:l instanceof Error?l.message:String(l)}),!1}finally{c&&Ui()}}async function fl(r){for(;r-Date.now()>0;){let e=await It(Math.max(1,r-Date.now()));if(e.outcome==="ready")return!0;if(e.outcome!=="not_running")return f.debug("SYSTEM","Bounded worker startup did not reach ready",{outcome:e.outcome,detail:e.detail}),!1;let t=Math.min(100,r-Date.now());t>0&&await new Promise(n=>setTimeout(n,t))}return!1}var Vm=3,xl=20,Ll=1e3,Ym=10,Fl=5e3,qm=Fl+Ll;function Nn(){return D.default.join(F,"state")}function Nl(){return D.default.join(Nn(),"hook-failures.json")}function Ul(){return D.default.join(Nn(),"hook-failures.lock")}async function Xi(r=Ll){let e=Nn(),t=Ul(),n=(0,hl.randomUUID)(),s=JSON.stringify({pid:process.pid,token:n}),i=Date.now()+r;for(;Date.now()<=i;)try{return(0,P.mkdirSync)(e,{recursive:!0}),(0,P.writeFileSync)(t,s,{flag:"wx"}),n}catch(o){let a=o instanceof Error?o:new Error(String(o)),c=a.code;if(c!=="EEXIST")return f.warn("SYSTEM","Hook-failure lock unavailable; skipping failure-state update",{lockPath:t,code:c},a),null;let l;try{l=(0,P.statSync)(t).mtimeMs}catch{continue}if(Date.now()-l>Fl){let u;try{u=(0,P.statSync)(t).mtimeMs}catch{continue}if(u===l)try{(0,P.unlinkSync)(t);continue}catch{}}await new Promise(u=>setTimeout(u,Ym))}return f.warn("SYSTEM","Timed out waiting for hook-failure lock; skipping failure-state update",{lockPath:t,waitMs:r}),null}function Qi(r){let e=Ul();try{if(JSON.parse((0,P.readFileSync)(e,"utf-8")).token!==r)return;(0,P.unlinkSync)(e)}catch{}}function Jm(r){let e=JSON.parse(r);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0,thresholdTripped:e.thresholdTripped===!0,notifiedSessionIds:Array.isArray(e.notifiedSessionIds)?e.notifiedSessionIds.filter(t=>typeof t=="string").slice(-xl):void 0}}function rr(){try{return Jm((0,P.readFileSync)(Nl(),"utf-8"))}catch{return{consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1}}}function Zi(r){let e=Nn(),t=Nl(),n=`${t}.tmp`;try{return(0,P.existsSync)(e)||(0,P.mkdirSync)(e,{recursive:!0}),(0,P.writeFileSync)(n,JSON.stringify(r),"utf-8"),(0,P.renameSync)(n,t),!0}catch(s){return f.debug("SYSTEM","Failed to persist hook-failure counter",{error:s instanceof Error?s.message:String(s)}),!1}}function Xm(){try{let e=le().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,t=parseInt(e,10);if(Number.isFinite(t)&&t>=1)return t}catch{}return Vm}var pl=null;function $l(r){let e=Wi!==null?`The worker cannot bind port ${Wi} on ${zi()}: the system refuses it (EACCES or EADDRNOTAVAIL). ${Li}.`:dt!==null?`Port ${dt} is held by an unreachable process that no PID file claims, so the worker cannot bind it. ${Fn}.`:"Run `npx claude-mem restart`; if it keeps failing, run `npx claude-mem doctor`.";return`claude-mem worker unreachable for ${r} consecutive hooks \u2014 memory features are degraded, but your prompts are not blocked. ${e}`}var Qm=!1,gl=!1;async function Bi(){if(Qm){if(gl)return rr().consecutiveFailures;gl=!0}let r=await Xi();if(r===null)return rr().consecutiveFailures;let e,t=!1;try{let n=rr();e={consecutiveFailures:n.consecutiveFailures+1,lastFailureAt:Date.now(),thresholdTripped:n.thresholdTripped,notifiedSessionIds:n.notifiedSessionIds};let s=Xm();t=e.consecutiveFailures>=s&&!e.thresholdTripped,t&&(e.thresholdTripped=!0);let i=Zi(e);t=t&&i}finally{Qi(r)}return t&&(await Ac("hook_failed",{...pl!==null?{hook_type:pl}:{},error_mode:"worker_unavailable",consecutive_failures:e.consecutiveFailures,threshold_tripped:!0}),Le(`${$l(e.consecutiveFailures)}
23
- `)),e.consecutiveFailures}async function Bl(r){if(!r)return null;let e=await Xi();if(e===null)return null;try{let t=rr(),n=t.notifiedSessionIds??[];return!t.thresholdTripped||n.includes(r)?null:Zi({...t,notifiedSessionIds:[...n,r].slice(-xl)})?$l(t.consecutiveFailures):null}finally{Qi(e)}}async function ml(){let r=await Xi(qm);if(r!==null)try{let e=rr();if(e.consecutiveFailures===0&&!e.thresholdTripped)return;Zi({consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1})}finally{Qi(r)}}var ut=Symbol.for("claude-mem/worker-fallback");function Wl(r){return typeof r=="object"&&r!==null&&r[ut]===!0}async function jl(r,e,t,n={}){let s=Date.now(),i=n.workerStartupTimeoutMs!==void 0;if(!(i?await zm(n.workerStartupTimeoutMs):await Gm(n.timeoutMs)))return en(le())?{continue:!0,reason:"worker_autostart_disabled",[ut]:!0}:(i||await Bi(),{continue:!0,reason:"worker_unreachable",[ut]:!0});let a={method:e};if(t!==void 0&&(a.headers={"Content-Type":"application/json"},a.body=JSON.stringify(t)),n.timeoutMs!==void 0){let u=i?n.timeoutMs:n.timeoutMs-(Date.now()-s);if(u<ji)return f.debug("SYSTEM","Hook budget spent before the worker request; skipping it",{url:r}),i||await Bi(),{continue:!0,reason:"worker_budget_exhausted",[ut]:!0};a.timeoutMs=u}let c;try{c=await Ce(r,a)}catch(u){if(!i)throw u;return f.debug("SYSTEM","Worker unavailable for best-effort hook call",{error:u instanceof Error?u.message:String(u)}),{continue:!0,reason:"worker_unreachable",[ut]:!0}}if(!c.ok){let u=await c.text().catch(()=>"");if(await ml(),c.status===429||c.status>=500)return f.warn("SYSTEM",`Worker API ${e} ${r} returned ${c.status}; skipping hook API call`,{body:u.substring(0,200)}),{continue:!0,reason:`worker_api_${c.status}`,[ut]:!0};let d=u;try{d=JSON.parse(u)}catch{}return d}let l;try{l=await c.text()}catch(u){return f.debug("SYSTEM","Worker response body could not be read; treating the worker as unreachable",{error:u instanceof Error?u.message:String(u)}),i||await Bi(),{continue:!0,reason:"worker_body_read_failed",[ut]:!0}}if(await ml(),l.length!==0)try{return JSON.parse(l)}catch{return l}}C();var Pe=require("path");U();var Zm="plugins",eh="cache",th="thedotmack",rh="claude-mem",nh="plugin",sh=(0,Pe.join)(rt,Zm,eh,th,rh),ih=(0,Pe.join)(At,nh);function eo(r,e){let t=(0,Pe.normalize)(r),n=(0,Pe.normalize)(e);if(t===n)return!0;let s=(0,Pe.relative)(n,t);return s.length>0&&!s.startsWith("..")&&!(0,Pe.isAbsolute)(s)}function Un(r){if(process.env.CLAUDE_MEM_INTERNAL==="1")return!1;if(!r)return!0;if(eo(r,qr)||eo(r,sh)||eo(r,ih))return!1;let e=le();return!En(r,e.CLAUDE_MEM_EXCLUDED_PROJECTS)}var Hl="claude";function oh(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function Z(r){if(!r)return Hl;let e=oh(r);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e.includes("kimi")?"kimi":e==="pi-mono"?"pi":e==="agy"||e==="antigravity"||e.startsWith("antigravity-")?"antigravity-cli":e:Hl}C();var $n=require("fs");C();U();ce();var ah=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s*[=:]\s*['"]?)[A-Za-z0-9/+=]{40}/g},{name:"github_pat",regex:/\bgh[oprs]_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"openai_key",regex:/\bsk-(?!ant-)[A-Za-z0-9_-]{20,}\b/g},{name:"anthropic_key",regex:/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g},{name:"slack_token",regex:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"jwt",regex:/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g},{name:"private_key_pem",regex:/-----BEGIN (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g},{name:"stripe_key",regex:/\b(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"google_api_key",regex:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"claude_mem_key",regex:/\bcmem_[A-Za-z0-9_-]{32,}|\bcm_pro_[A-Za-z0-9_-]{8,}/g}],ch=1024*1024,lh="<redacted type='oversize'/>";function zl(r,e){if(!e.enabled||r.length===0)return{redacted:r,counts:{},oversize:!1};if(r.length>ch)return f.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:r.length}),{redacted:lh,counts:{oversize:1},oversize:!0};let t=new Set(e.disabledBuiltinPatterns??[]),n={},s=r,i=[];for(let a of e.customPatterns??[]){if(!a.name||a.name.length===0){f.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:a});continue}try{i.push({name:a.name,regex:new RegExp(a.regex,"g")})}catch(c){f.warn("REDACT","custom pattern skipped: invalid regex",{name:a.name},c instanceof Error?c:new Error(String(c)))}}let o=[...i,...ah];for(let a of o)t.has(a.name)||(a.regex.lastIndex=0,s=s.replace(a.regex,()=>(n[a.name]=(n[a.name]??0)+1,`<redacted type='${a.name}'/>`)));return e.logMatches&&Object.keys(n).length>0&&f.debug("REDACT","patterns matched",void 0,{counts:n}),{redacted:s,counts:n,oversize:!1}}function uh(r){if(!r||r.trim()==="")return[];try{let e=JSON.parse(r);return Array.isArray(e)?e.filter(t=>t&&typeof t.name=="string"&&typeof t.regex=="string"):(f.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return f.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function dh(r){return{enabled:r.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(r.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:uh(r.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:r.CLAUDE_MEM_REDACT_LOG_MATCHES==="true"}}var nr=null,Kl=0,fh=5e3,sr=null,Gl=!1,ph={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},gh=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;function mh(r){if(!(0,$n.existsSync)(r))return null;try{return(0,$n.readFileSync)(r,"utf-8")}catch{return""}}function hh(r){if(r===null)return!1;try{let e=JSON.parse(Js(r));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function _h(r,e,t){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(sr?.enabled===!0||gh.test(e))?t:(Gl||(Gl=!0,f.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:r,using:sr?.enabled?"the last configuration that loaded":"the built-in patterns"})),sr?.enabled?sr:ph)}function Vl(r=ie){let e=Date.now();if(nr&&e-Kl<fh)return nr;let t=B.loadFromFile(r),n=dh(t),s=n.enabled?null:mh(r);return hh(s)?nr=_h(r,s,n):(nr=n,sr=n),Kl=e,nr}var Jl=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],Yl=new RegExp(`<(${Jl.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g");var ql=100;function Eh(r){let e=Object.fromEntries(Jl.map(i=>[i,0]));Yl.lastIndex=0;let t=0,n=r.replace(Yl,(i,o)=>(e[o]=(e[o]??0)+1,t+=1,""));return t>ql&&f.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:t,maxAllowed:ql,contentLength:r.length}),{stripped:zl(n.trim(),Vl()).redacted,counts:e}}function to(r){return Eh(r).stripped}var Sh=["task-notification"],yh=new RegExp(`^\\s*<(${Sh.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),bh=256*1024;function Xl(r){return!r||r.length>bh?!1:yh.test(r)}var wh=[/^You are a helpful assistant\. You will be presented with a user prompt, and your job is to provide a short title/,/^## Memory Writing Agent: Phase 2 \(Consolidation\)/,/^# Overview\r?\n(?:\r?\n)?Generate 0 to 3 hyperpersonalized suggestions/];function Ql(r){let e=r.trimStart();return wh.some(t=>t.test(e))}C();var Th=Re(Y.API_REQUEST),Ue=class extends Error{kind;status;cause;constructor(e,t,n={}){super(t),this.name="ServerClientError",this.kind=e,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Wn=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=Ah(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??Th}async startSession(e,t={}){let n=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",n,t)}async recordEvent(e){let t=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,t)}async endSession(e){if(!e.sessionId)throw new Ue("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e,t={}){let n={projectId:e.projectId};return e.query!==void 0&&(n.query=e.query),e.limit!==void 0&&(n.limit=e.limit),e.platformSource!==void 0&&(n.platformSource=Bn(e.platformSource)),e.folderProjects&&e.folderProjects.length>0&&(n.folderProjects=e.folderProjects),e.excludeSubagents!==void 0&&(n.excludeSubagents=e.excludeSubagents),this.request("POST","/v1/context",n,t)}async getJobStatus(e){if(!e)throw new Ue("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let t=e.content,n=e.kind??"manual",s=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,content:t,...s?{title:s}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{}}}buildStartSessionPayload(e){return{projectId:e.projectId,...e.externalSessionId!==void 0?{externalSessionId:e.externalSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.agentId!==void 0?{agentId:e.agentId}:{},...e.agentType!==void 0?{agentType:e.agentType}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildEventPayload(e){return{projectId:e.projectId,sourceType:e.sourceType,eventType:e.eventType,occurredAtEpoch:e.occurredAtEpoch,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Bn(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,t,n,s={}){if(!this.apiKey||!this.apiKey.trim())throw new Ue("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let i=`${this.baseUrl}${t}`,o={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(o.body=JSON.stringify(n));let a,c=s.timeoutMs??this.timeoutMs;try{a=await Ki(i,o,c)}catch(u){let d=u instanceof Error?u.message:String(u),p=/timed out|timeout/i.test(d);throw new Ue(p?"timeout":"transport",`Server ${e} ${t} failed: ${d}`,{cause:u})}if(!a.ok){let u=await a.text().catch(()=>"");throw new Ue("http_error",`Server ${e} ${t} returned ${a.status}: ${vh(u,200)}`,{status:a.status})}let l=await a.text();if(!l||l.length===0)return{};try{return JSON.parse(l)}catch(u){let d=u instanceof Error?u:new Error(String(u));throw new Ue("invalid_response",`Server ${e} ${t} returned non-JSON response`,{cause:d})}}};function Zl(r){return r instanceof Ue}function Ah(r){return r.replace(/\/+$/,"")}function Bn(r){return typeof r=="string"?Z(r):null}function vh(r,e){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function Rh(){let e=(le().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Mh(){let r=le(),e=(...o)=>{for(let a of o){let c=(a??"").trim();if(c.length>0)return c}return""},t=e(r.CLAUDE_MEM_SERVER_URL,r.CLAUDE_MEM_SERVER_BETA_URL),n=e(r.CLAUDE_MEM_SERVER_API_KEY,r.CLAUDE_MEM_SERVER_BETA_API_KEY),s=e(r.CLAUDE_MEM_SERVER_PROJECT_ID,r.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!t)return f.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return f.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!s)return f.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let i={serverBaseUrl:t,apiKey:n};return{runtime:"server",client:new Wn(i),projectId:s,serverBaseUrl:t}}function eu(){if(Rh()!=="server")return{runtime:"worker"};let r=Mh();return r||{runtime:"worker"}}function tu(r,e){f.warn("HOOK",`[server-fallback] reason=${r}`,e??{})}var Ch={executeWithWorkerFallback:jl,getSessionInitRequestTimeoutMs:bl,isWorkerFallback:Wl,consumeWorkerOutageNotice:Bl,loadFromFileOnce:le,resolveRuntimeContext:eu,logServerFallback:tu,shouldTrackProject:Un,readHookEnvironment:()=>process.env},be=Ch,Ph=2,ro=500,Ih=2e3;var jn=class extends Error{constructor(t){super(`session-init did not record the prompt (${t})`);this.reason=t;this.name="SessionPromptNotRecordedError"}reason};function su(r){return Dh.run(r,!0)}var Oh=r=>r?r.replace(/\\/g,"/").includes("/.qwen/"):!1,kh=(r,e=process.env)=>r?e.QWEN_PROJECT_DIR?!0:Oh(r):!1,Dh={async run(r,e){let{sessionId:t,prompt:n,submittedPrompt:s}=r,i=r.cwd??process.cwd();if(!t)return f.warn("HOOK","session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS};if(!be.shouldTrackProject(i))return f.info("HOOK","Project excluded from tracking",{cwd:i}),{continue:!0,suppressOutput:!0};if(n&&Xl(n))return f.debug("HOOK","session-init: skipping internal protocol payload",{preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(n&&Z(r.platform)==="codex"&&Ql(n))return f.debug("HOOK","session-init: skipping a Codex internal helper prompt",{reason:"internal_system_prompt",preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(s===null)return f.debug("HOOK","session-init: host reported no user-submitted text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};if(s===void 0&&!n?.trim()&&kh(r.transcriptPath,be.readHookEnvironment()))return f.debug("HOOK","session-init: Qwen send carried no submitted_prompt and no prompt text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};let o=s??n,a=!o||!o.trim()?"[media prompt]":o,c=ct(i),l=c.primary,u=Z(r.platform),d=be.loadFromFileOnce(),p=String(d.CLAUDE_MEM_SEMANTIC_INJECT).toLowerCase()==="true",g=be.resolveRuntimeContext(),m=Date.now(),h=be.getSessionInitRequestTimeoutMs();if(g.runtime==="server")try{return await xh(g,r,t,u,l,a,Math.max(ro,Math.floor(h/Ph))),{continue:!0,suppressOutput:!0}}catch(M){if(Zl(M)&&M.isFallbackEligible())be.logServerFallback(M.kind,{status:M.status,message:M.message,route:"/v1/sessions/start"});else return f.error("HOOK","Server session-start failed (non-recoverable)",{error:M instanceof Error?M.message:String(M)}),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS}}f.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:t,project:l});let E=ru(m,h);if(E<ro){if(f.warn("HOOK","session-init: skipping the worker call because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:E}),e)throw new jn("budget_exhausted");return{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS}}let _=await be.executeWithWorkerFallback("/api/sessions/init","POST",{contentSessionId:t,project:l,prompt:a,platformSource:u,cwd:i,projectKeySource:c.keySource},nu(u,E));if(be.isWorkerFallback(_)){if(e)throw new jn("reason"in _?_.reason:"worker_fallback");let M=await be.consumeWorkerOutageNotice(t);return{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS,...M?{systemMessage:M}:{}}}if(typeof _?.sessionDbId!="number")return f.failure("HOOK","Session initialization returned malformed response",{contentSessionId:t,project:l}),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS};let b=_.sessionDbId,w=_.promptNumber;if(f.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:b,promptNumber:w,skipped:_.skipped,contextInjected:_.contextInjected}),f.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${t} | prompt#=${w} | sessionDbId=${b}`),_.skipped&&_.reason==="private")return f.info("HOOK",`INIT_COMPLETE | sessionDbId=${b} | promptNumber=${w} | skipped=true | reason=private`,{sessionId:b}),{continue:!0,suppressOutput:!0};let T="";if(p&&a&&a.length>=20&&a!=="[media prompt]"){let M=d.CLAUDE_MEM_SEMANTIC_INJECT_LIMIT||"5",R=ru(m,h);if(R<ro)f.warn("HOOK","session-init: skipping semantic injection because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:R});else{let y=await be.executeWithWorkerFallback("/api/context/semantic","POST",{q:a,project:l,projects:c.allProjects,limit:M,platformSource:u},nu(u,R));!be.isWorkerFallback(y)&&y?.context&&(f.debug("HOOK",`Semantic injection: ${y.count} observations for prompt`,{sessionId:b,count:y.count}),T=y.context)}}return f.info("HOOK",`INIT_COMPLETE | sessionDbId=${b} | promptNumber=${w} | project=${l}`,{sessionId:b}),T?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:T}}:{continue:!0,suppressOutput:!0}}};async function xh(r,e,t,n,s,i,o){await r.client.startSession({projectId:r.projectId,externalSessionId:t,contentSessionId:t,agentId:e.agentId??null,agentType:e.agentType??null,platformSource:n,metadata:{project:s,prompt:i}},{timeoutMs:o}),f.info("HOOK","session-init: server session started",{contentSessionId:t,project:s})}function ru(r,e){return Math.max(0,e-(Date.now()-r))}function nu(r,e){return r==="codex"?{workerStartupTimeoutMs:Y.POST_SPAWN_WAIT,timeoutMs:Math.min(Ih,e)}:{timeoutMs:e}}var io=require("crypto"),K=require("fs"),Ie=require("path");ce();U();C();var Lh=["observation","file_edit","summarize","session_end","advisor_calls"],Fh=/^[a-z_]+-[A-Za-z0-9_-]+\.json$/,au=/^[A-Za-z0-9_-]{1,128}$/,Nh="corrupt",Uh="expired",iu=10080*60*1e3;function $h(){return(0,Ie.join)(se(),"state","hook-spool")}function oo(r){if(r===null||typeof r!="object")return JSON.stringify(r)??"null";if(Array.isArray(r))return`[${r.map(oo).join(",")}]`;let e=r;return`{${Object.keys(e).filter(n=>e[n]!==void 0).sort().map(n=>`${JSON.stringify(n)}:${oo(e[n])}`).join(",")}}`}function Bh(r,e){let t=e.toolUseId;return typeof t=="string"&&au.test(t)?`${(0,io.createHash)("sha256").update(e.contentSessionId).update("\0").update(Z(e.platformSource)).digest("hex")}-${t}`:(0,io.createHash)("sha256").update(r).update("\0").update(e.contentSessionId).update("\0").update(oo(e)).digest("hex")}function ou(r){return typeof r=="string"&&r.length>0}function no(r){let e;try{e=JSON.parse(r)}catch(i){return{corruptReason:`invalid JSON: ${i instanceof Error?i.message:String(i)}`}}if(e===null||typeof e!="object")return{corruptReason:"not an object"};let t=e;if(!Lh.includes(t.kind))return{corruptReason:`unknown kind ${JSON.stringify(t.kind)}`};if(typeof t.enqueuedAtEpochMs!="number"||!Number.isFinite(t.enqueuedAtEpochMs))return{corruptReason:"missing enqueuedAtEpochMs"};let n=t.payload;if(n===null||typeof n!="object"||!ou(n.contentSessionId))return{corruptReason:"payload missing contentSessionId"};let s=t.kind;return(s==="observation"||s==="file_edit")&&!ou(n.toolName)?{corruptReason:"observation payload missing toolName"}:s==="summarize"&&typeof n.lastAssistantMessage!="string"?{corruptReason:"summarize payload missing lastAssistantMessage"}:s==="advisor_calls"&&(!Array.isArray(n.calls)||n.calls.length===0)?{corruptReason:"advisor_calls payload has no calls"}:{kind:s,payload:{...n,platformSource:Z(n.platformSource)},enqueuedAtEpochMs:t.enqueuedAtEpochMs}}var so=0;function Wh(){return so=Math.max(Date.now(),so+1),so}var Hn=class{constructor(e=$h()){this.directory=e}directory;get corruptDirectory(){return(0,Ie.join)(this.directory,Nh)}get expiredDirectory(){return(0,Ie.join)(this.directory,Uh)}enqueue(e,t,n){let s={...t,platformSource:Z(t.platformSource)},i=(0,Ie.join)(this.directory,`${e}-${Bh(e,s)}.json`),o=s.toolUseId;if(typeof o=="string"&&au.test(o)){let c=(0,Ie.join)(this.directory,`${e}-${o}.json`);try{let l=no((0,K.readFileSync)(c,"utf8"));!("corruptReason"in l)&&l.kind===e&&l.payload.contentSessionId===s.contentSessionId&&l.payload.platformSource===s.platformSource&&(i=c)}catch{}}let a=this.existingEnqueuedAt(i)??n??Wh();return H(i,{kind:e,payload:s,enqueuedAtEpochMs:a}),i}entries(){return this.readEntries().files.map(e=>e.entry)}async drain(e,t){let{files:n,quarantined:s}=this.readEntries(),i=0,o=0,a=0;t?.pruneConsumedBefore(Date.now()-iu);let c=new Set;for(let l of n){let u=l.filename.replace(/\.json$/,"");if(t?.isConsumed(u)){f.info("HOOK","Hook spool entry was already handed to ingest before a restart; removing it without ingesting again",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename}),this.unlinkEntry(l)?(t.clearConsumed(u),i++):o++;continue}let d=JSON.stringify([l.entry.payload.contentSessionId,l.entry.payload.platformSource]);if((l.entry.kind==="summarize"||l.entry.kind==="session_end")&&c.has(d)){o++;continue}let p=!1,g=()=>{if(!p){p=!0;try{t?.markConsumed(u,Date.now())}catch(h){f.error("HOOK","Could not record a hook spool hand-off marker; a crash before the file is removed would ingest it twice",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h)))}}},m;try{m=await e(l.entry,g)}catch(h){f.warn("HOOK",p?"Hook spool entry failed after ingest accepted it; removing it (a retry would send it twice)":"Hook spool entry failed to ingest; keeping it for the next drain",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h))),m=!1}if(p&&(m=!0),!m){this.expireIfPastRetryWindow(l)?a++:((l.entry.kind==="observation"||l.entry.kind==="file_edit")&&c.add(d),o++);continue}this.unlinkEntry(l)?(t?.clearConsumed(u),i++):o++}return{drained:i,retained:o,quarantined:s,expired:a}}unlinkEntry(e){try{return(0,K.unlinkSync)(e.path),!0}catch(t){return t.code==="ENOENT"?!0:(f.warn("HOOK","Hook spool entry was ingested but could not be removed",{kind:e.entry.kind,file:e.filename},t instanceof Error?t:new Error(String(t))),!1)}}expireIfPastRetryWindow(e){let t=Date.now()-e.entry.enqueuedAtEpochMs;if(t<=iu)return!1;let n={kind:e.entry.kind,contentSessionId:e.entry.payload.contentSessionId,ageHours:Math.round(t/36e5),file:e.filename,expiredDirectory:this.expiredDirectory};try{(0,K.mkdirSync)(this.expiredDirectory,{recursive:!0}),(0,K.renameSync)(e.path,(0,Ie.join)(this.expiredDirectory,e.filename))}catch(s){return f.error("HOOK","Hook spool entry is past its retry window but could not be moved to expired/; keeping it",n,s instanceof Error?s:new Error(String(s))),!1}return f.error("HOOK","Hook spool entry was never accepted within its retry window; moved to expired/",n),!0}existingEnqueuedAt(e){if(!(0,K.existsSync)(e))return null;try{let t=no((0,K.readFileSync)(e,"utf-8"));return"corruptReason"in t?null:t.enqueuedAtEpochMs}catch(t){return f.debug("HOOK","Could not read existing hook spool entry; writing a fresh one",{entryPath:e},t instanceof Error?t:new Error(String(t))),null}}quarantine(e,t){let n=(0,Ie.join)(this.directory,e);try{return(0,K.mkdirSync)(this.corruptDirectory,{recursive:!0}),(0,K.renameSync)(n,(0,Ie.join)(this.corruptDirectory,e)),f.error("HOOK","Quarantined corrupt hook spool entry",{file:e,reason:t,corruptDirectory:this.corruptDirectory}),!0}catch(s){return f.error("HOOK","Corrupt hook spool entry could not be quarantined; leaving it in place",{file:e,reason:t},s instanceof Error?s:new Error(String(s))),!1}}readEntries(){if(!(0,K.existsSync)(this.directory))return{files:[],quarantined:0};let e;try{e=(0,K.readdirSync)(this.directory).filter(s=>Fh.test(s))}catch(s){return f.warn("HOOK","Could not list hook spool entries",{directory:this.directory},s instanceof Error?s:new Error(String(s))),{files:[],quarantined:0}}let t=[],n=0;for(let s of e){let i=(0,Ie.join)(this.directory,s),o;try{o=(0,K.readFileSync)(i,"utf-8")}catch(c){c.code!=="ENOENT"&&f.warn("HOOK","Could not read hook spool entry; will retry",{file:s},c instanceof Error?c:new Error(String(c)));continue}let a=no(o);if("corruptReason"in a){this.quarantine(s,a.corruptReason)&&n++;continue}t.push({entry:a,path:i,filename:s})}return t.sort((s,i)=>s.entry.enqueuedAtEpochMs-i.entry.enqueuedAtEpochMs||s.filename.localeCompare(i.filename)),{files:t,quarantined:n}}};C();var jh=250,cu=new Set,ir=null;function Hh(){if(ir)return ir;let r=(async()=>{try{await(await Ce("/api/spool/nudge",{method:"POST",timeoutMs:jh})).body?.cancel()}catch(e){f.debug("HOOK","Hook spool nudge not delivered (worker will pick the entry up on its own)",{error:e instanceof Error?e.message:String(e)})}})();return ir=r,cu.add(r),r.finally(()=>{cu.delete(r),ir===r&&(ir=null)}),r}function or(r,e){let t=new Hn().enqueue(r,e);return f.debug("HOOK","Hook event spooled for the worker",{kind:r,entryPath:t}),Hh(),t}C();var lu={async execute(r){let{sessionId:e,cwd:t,filePath:n,edits:s}=r,i=Z(r.platform);if(!n)throw new Error("fileEditHandler requires filePath");if(f.dataIn("HOOK",`FileEdit: ${n}`,{editCount:s?.length??0}),!t)throw new Error(`Missing cwd in FileEdit hook input for session ${e}, file ${n}`);return Un(t)?(or("file_edit",{contentSessionId:e,platformSource:i,toolName:"write_file",toolInput:{filePath:n,edits:s},toolResponse:{success:!0},cwd:t}),f.debug("HOOK","File edit observation spooled",{filePath:n}),{continue:!0,suppressOutput:!0}):(f.debug("HOOK","Project excluded from tracking, skipping file edit observation",{cwd:t,filePath:n}),{continue:!0,suppressOutput:!0,exitCode:He.SUCCESS})}};U();C();var we=require("fs"),Gn=require("path");C();C();U();var ar="<claude-mem-context>",Kn="</claude-mem-context>";function uu(r){let e=r.indexOf(ar);if(e===-1)return null;let t=r.indexOf(Kn,e+ar.length);return t===-1?null:{start:r.lastIndexOf(ar,t),end:t+Kn.length}}var zv=$.settings();function du(r,e){let t=`${ar}
14
+ `)}else Ne(p+`
15
+ `)}debug(e,t,n,s){this.log(0,e,t,n,s)}info(e,t,n,s){this.log(1,e,t,n,s)}warn(e,t,n,s){this.log(2,e,t,n,s)}setErrorSink(e){Zs=e}error(e,t,n,s){this.log(3,e,t,n,s),this.routeErrorToSink(t,n,s)}routeErrorToSink(e,t,n){try{if(!Zs||!(n instanceof Error))return;Zs(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 ti});var ap=require("fs");U();var st=require("fs"),Ke=require("path"),Jt=require("os");var Y={HEALTH_CHECK:3e3,API_REQUEST:3e4,SESSION_INIT_HOOK_CAP:15e3,SESSION_INIT_REQUEST:1e4,SESSION_INIT_REQUEST_MAX:14e3,HOOK_READINESS_WAIT:1e4,POST_SPAWN_WAIT:15e3,READINESS_WAIT:3e4,PORT_IN_USE_WAIT:3e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},Rp=300,Oa={min:60,max:86400};function ka(r=process.env){let e=Number.parseInt(r.CLAUDE_MEM_WEDGED_WORKER_UPTIME_S??"",10);return Number.isFinite(e)&&e>=Oa.min&&e<=Oa.max?e:Rp}var Re={SUCCESS:0};function Mp(r=process.platform){return r==="win32"?8e3:5e3}function qt(r=process.platform){return Y.SESSION_INIT_HOOK_CAP-Mp(r)}function Da(r=process.platform){return r==="win32"?qt(r):Y.SESSION_INIT_REQUEST_MAX}function Me(r){return process.platform==="win32"?Math.round(r*Y.WINDOWS_MULTIPLIER):r}le();M();function La(r){try{return new URL(r).hostname.toLowerCase()==="openrouter.ai"}catch{return!1}}Yr();var Cp="security_alert",Pp="sync-hub.black-pond-afbb.workers.dev",Ip="ziczmqtpmaxbornfghye.supabase.co",Op="https://sync.cmem.ai",kp=new Set(["xiaomi/mimo-v2-flash:free"]);function Dp(r){return typeof r=="boolean"?String(r):r}function xp(r){let e=r.CLAUDE_MEM_OPENROUTER_MODEL;if(typeof e!="string"||!kp.has(e.trim()))return!1;let t=typeof r.CLAUDE_MEM_OPENROUTER_BASE_URL=="string"?r.CLAUDE_MEM_OPENROUTER_BASE_URL.trim():"";return t===""||La(t)}var Fa=18e4,Na=[{key:"CLAUDE_MEM_LLM_TIMEOUT_MS",legacy:"30000",markerTag:"llm-timeout-migrated-v1"},{key:"CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS",legacy:"30000",markerTag:"field-optimize-timeout-migrated-v1"}];function $a(r,e){return(0,Ke.join)((0,Ke.dirname)(r),`.${(0,Ke.basename)(r)}.${e.markerTag}`)}function ri(r,e){try{(0,st.writeFileSync)($a(r,e),new Date().toISOString(),{encoding:"utf-8",mode:384})}catch{}}var Ua=new Set;function Lp(r){if(typeof r!="string")return null;let e=r.trim();if(e.length===0)return null;try{let t=new URL(e).hostname;if(t===Pp||t===Ip)return Op}catch{return null}return null}var $=class{static DEFAULTS={CLAUDE_MEM_MEMORY_SEARCH_HOOK_ENABLED:"true",CLAUDE_MEM_MEMORY_INSTRUCTIONS_ENABLED:"true",CLAUDE_MEM_MEMORY_WATCH_ROOTS:"",CLAUDE_MEM_MODEL:"claude-haiku-4-5-20251001",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_SESSION_START_INCLUDE_ALL_SOURCES:"false",CLAUDE_MEM_WORKER_PORT:String(37700+(process.getuid?.()??77)%100),CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_ALLOWED_ORIGINS:"",CLAUDE_MEM_PUBLIC_URL:"",CLAUDE_MEM_API_TIMEOUT_MS:String(Me(Y.API_REQUEST)),CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS:String(qt()),CLAUDE_MEM_IDLE_EXIT_SEC:"0",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_SKIP_BASH_PATTERNS:"",CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS:"false",CLAUDE_MEM_SKIP_AGENT_TYPES:"",CLAUDE_MEM_CAPTURE_ADVISOR_CALLS:"false",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CODEX_MODEL:"",CLAUDE_MEM_CODEX_PATH:"codex",CLAUDE_MEM_CODEX_REASONING_EFFORT:"low",CLAUDE_MEM_CODEX_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_SIZE:"8",CLAUDE_MEM_CODEX_OBSERVATION_BATCH_MAX_CHARS:"32000",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"subscription",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_API_KEYS:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-flash-latest",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_API_KEYS:"",CLAUDE_MEM_OPENROUTER_MODEL:"cohere/north-mini-code:free",CLAUDE_MEM_OPENROUTER_BASE_URL:"",CLAUDE_MEM_OPENROUTER_TEMPERATURE:"",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_EXTRA_BODY:"",CLAUDE_MEM_OPENROUTER_REASONING_EFFORT:"",CLAUDE_MEM_OPENAI_COMPAT_PRESET:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEY:"",CLAUDE_MEM_OPENAI_COMPAT_API_KEYS:"",CLAUDE_MEM_OPENAI_COMPAT_BASE_URL:"",CLAUDE_MEM_OPENAI_COMPAT_MODEL:"",CLAUDE_MEM_QUOTA_FALLBACK_PROVIDER:"",CLAUDE_MEM_QUOTA_FALLBACK_MODEL:"",CLAUDE_MEM_QUOTA_THRESHOLD_FIVE_HOUR:"0.95",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_OPUS:"0.93",CLAUDE_MEM_QUOTA_THRESHOLD_SEVEN_DAY_SONNET:"0.92",CLAUDE_MEM_QUOTA_THRESHOLD_OVERAGE:"0.95",CLAUDE_MEM_DATA_DIR:(0,Ke.join)((0,Jt.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_OBSERVER_CLAUDE_CONFIG_DIR:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:"",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"",CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_CONTEXT_MAIN_AGENT_ONLY:"true",CLAUDE_MEM_REINFORCE_ALPHA:"0",CLAUDE_MEM_CONTEXT_SHOW_TERMINAL_OUTPUT:"true",CLAUDE_MEM_WELCOME_HINT_ENABLED:"true",CLAUDE_MEM_WORK_STATE_ENABLED:"true",CLAUDE_MEM_FILE_READ_GATE_ENABLED:"true",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_FOLDER_USE_LOCAL_MD:"false",CLAUDE_MEM_TRANSCRIPTS_ENABLED:"true",CLAUDE_MEM_TRANSCRIPTS_CONFIG_PATH:(0,Ke.join)((0,Jt.homedir)(),".claude-mem","transcript-watch.json"),CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION:"false",CLAUDE_MEM_CODEX_SUBAGENT_INGESTION:"false",CLAUDE_MEM_MAX_CONCURRENT_AGENTS:"2",CLAUDE_MEM_OBSERVER_MAX_CONVERSATION_CHARS:"400000",CLAUDE_MEM_OBSERVER_CONTEXT_WINDOW:"",CLAUDE_MEM_OBSERVER_MAX_OUTPUT_TOKENS:"4096",CLAUDE_MEM_OBSERVE_BARE_PROMPTS:"false",CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD:"3",CLAUDE_MEM_REDACT_ENABLED:"false",CLAUDE_MEM_REDACT_DISABLED_BUILTINS:"",CLAUDE_MEM_REDACT_CUSTOM_PATTERNS:"[]",CLAUDE_MEM_REDACT_LOG_MATCHES:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_PROJECT_ENVIRONMENTS:"[]",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_FOLDER_MD_SKELETON_DENYLIST:"[]",CLAUDE_MEM_SEMANTIC_INJECT:"false",CLAUDE_MEM_SEMANTIC_INJECT_LIMIT:"5",CLAUDE_MEM_SEMANTIC_INJECT_FORMAT:"narrative",CLAUDE_MEM_TIER_ROUTING_ENABLED:"true",CLAUDE_MEM_TIER_SIMPLE_MODEL:"haiku",CLAUDE_MEM_TIER_SUMMARY_MODEL:"",CLAUDE_MEM_TIER_FAST_MODEL:"haiku",CLAUDE_MEM_TIER_SMART_MODEL:"sonnet",CLAUDE_MEM_CHROMA_ENABLED:"true",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database",CLAUDE_MEM_CHROMA_PREWARM_TIMEOUT_MS:"120000",CLAUDE_MEM_CHROMA_MUTATION_TIMEOUT_MS:"600000",CLAUDE_MEM_CHROMA_MAX_PENDING_MUTATIONS:"5000",CLAUDE_MEM_CHROMA_EMBEDDING_FUNCTION:"default",CLAUDE_MEM_CHROMA_UVX_PATH:"",CLAUDE_MEM_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,Jt.hostname)(),CLAUDE_MEM_CLOUD_SYNC_WS:"true",CLAUDE_MEM_CLOUD_SYNC_CONTENT_BATCH_SIZE:"40",CLAUDE_MEM_CLOUD_SYNC_REQUEST_TIMEOUT_MS:"90000",CLAUDE_MEM_LLM_TIMEOUT_MS:String(Fa),CLAUDE_MEM_FIELD_OPTIMIZE_TIMEOUT_MS:String(Fa),CLAUDE_MEM_TV_TOKEN:"",CLAUDE_MEM_PRO_TRIAL_EMAIL:"",CLAUDE_MEM_PRO_TRIAL_AT:"",CLAUDE_MEM_PRO_TRIAL_STATE:"",CLAUDE_MEM_PRO_TRIAL_ENDS_AT:"",CLAUDE_MEM_PRO_PLAN:"",CLAUDE_MEM_PRO_FALLBACK_AT:"",CLAUDE_MEM_PRO_FALLBACK_MESSAGE:"",CLAUDE_MEM_PRO_FALLBACK_ACTION:"",CLAUDE_MEM_PRO_FALLBACK_URL:"",CLAUDE_MEM_PRO_MEMORY_KEY:"",CLAUDE_MEM_PRO_MEMORY_BASE_URL:"",CLAUDE_MEM_PRO_MEMORY_MODEL:"",CLAUDE_MEM_TELEGRAM_ENABLED:"true",CLAUDE_MEM_TELEGRAM_BOT_TOKEN:"",CLAUDE_MEM_TELEGRAM_CHAT_ID:"",CLAUDE_MEM_TELEGRAM_WRAPUPS_ENABLED:"true",CLAUDE_MEM_TELEGRAM_OBSERVATION_ALERTS_ENABLED:"false",CLAUDE_MEM_TELEGRAM_WRAPUP_ROUTES:"{}",CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:"security_alert,sensitive",CLAUDE_MEM_TELEGRAM_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_AWARENESS_ENABLED:"true",CLAUDE_MEM_GROK_BOT_AWARENESS_AGENT_IDS:"521e962d-2ec3-4488-bfbc-54d5209ce118,95601360-61f7-4fd9-bb3a-2c976b2b85c0",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_GROK_BOT_AWARENESS_TRIGGER_CONCEPTS:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_URL:"",CLAUDE_MEM_GROK_BOT_WEBHOOK_SECRET:"",CLAUDE_MEM_GROK_BOT_INJECT_ENABLED:"true",CLAUDE_MEM_GROK_BOT_INJECT_AGENT_IDS:"*",CLAUDE_MEM_GROK_BOT_INJECT_TIER:"episode",CLAUDE_MEM_GROK_BOT_INJECT_WINDOW:"80",CLAUDE_MEM_GROK_BOT_INJECT_FALLBACK:"house",CLAUDE_MEM_GROK_BOT_INJECT_PLATFORM_SOURCE:"",CLAUDE_MEM_GROK_BOT_INJECT_PROJECTS_BY_AGENT:"",CLAUDE_MEM_GROK_BOT_INJECT_MAX_LINE_CHARS:"160",CLAUDE_MEM_GROK_BOT_INJECT_DEBOUNCE_MS:"1500",CLAUDE_MEM_GROK_BOT_INJECT_STANDING_LINE:"",CLAUDE_MEM_CCS_ALIGN_ENABLED:"true",CLAUDE_MEM_CCS_ALIGN_VIEWER_IDS:"ccs-align",CLAUDE_MEM_CCS_ALIGN_TRIGGER_TYPES:"decision,bugfix,security_alert,sensitive",CLAUDE_MEM_CCS_ALIGN_PATCH_SHADOWS:"false",CLAUDE_MEM_QUEUE_ENGINE:"sqlite",CLAUDE_MEM_REDIS_URL:"",CLAUDE_MEM_REDIS_HOST:"127.0.0.1",CLAUDE_MEM_REDIS_PORT:"6379",CLAUDE_MEM_REDIS_MODE:"external",CLAUDE_MEM_QUEUE_REDIS_PREFIX:`claude_mem_${process.env.CLAUDE_MEM_WORKER_PORT??String(37700+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_AUTH_MODE:"api-key",CLAUDE_MEM_RUNTIME:"worker",CLAUDE_MEM_SERVER_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_API_KEY:"",CLAUDE_MEM_SERVER_PROJECT_ID:"",CLAUDE_MEM_SERVER_BETA_URL:`http://127.0.0.1:${process.env.CLAUDE_MEM_SERVER_PORT??String(37877+(process.getuid?.()??77)%100)}`,CLAUDE_MEM_SERVER_BETA_API_KEY:"",CLAUDE_MEM_SERVER_BETA_PROJECT_ID:"",CLAUDE_MEM_DEDUP_ENABLED:"false",CLAUDE_MEM_DEDUP_COSINE_THRESHOLD:"0.80",CLAUDE_MEM_DEDUP_IDF_VETO_DF:"10",CLAUDE_MEM_DEDUP_MIN_SHARED_TOKENS:"2",CLAUDE_MEM_DEDUP_MIN_PROJECT_DOCS:"10",CLAUDE_MEM_DEDUP_MAX_SCAN:"2000",CLAUDE_MEM_DEDUP_MAX_BACKFILL_ROWS:"50000",CLAUDE_MEM_TOOL_USES_RETENTION_DAYS:"0",CLAUDE_MEM_WORKER_AUTOSTART:"true",CLAUDE_MEM_PROJECT_NAME_SOURCE:"path"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){let 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,n={}){try{if(!(0,st.existsSync)(e)){let p=this.getAllDefaults();if(!n.readOnly)try{j(e,p,{mode:384});for(let g of Na)ri(e,g);console.warn("[SETTINGS] Created settings file with defaults:",e)}catch(g){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,g instanceof Error?g.message:String(g))}return this.finalizeSettings(p,t)}let s=(0,st.readFileSync)(e,"utf-8"),i=Vt(s),o=Tt(i),a=o!==i,c=va(i),l=a&&Object.keys(c).some(p=>p!=="env");if(a&&!l&&!n.readOnly)try{j(e,o,{mode:384}),console.warn("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(p){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,p instanceof Error?p.message:String(p))}if(o.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES===Cp&&(o={...o,CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES:this.DEFAULTS.CLAUDE_MEM_TELEGRAM_TRIGGER_TYPES},!n.readOnly))try{j(e,l?{...c,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated Telegram trigger types off the legacy default:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate Telegram trigger types:",e,p instanceof Error?p.message:String(p))}if(xp(o)){let p=String(o.CLAUDE_MEM_OPENROUTER_MODEL).trim();if(o={...o,CLAUDE_MEM_OPENROUTER_MODEL:this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL},!n.readOnly)try{j(e,l?{...c,env:o}:o,{mode:384}),console.warn(`[SETTINGS] Migrated OpenRouter model off the retired default ${p} to ${this.DEFAULTS.CLAUDE_MEM_OPENROUTER_MODEL}:`,e)}catch(g){console.warn("[SETTINGS] Failed to migrate the retired OpenRouter model:",e,g instanceof Error?g.message:String(g))}}let u=Lp(o.CLAUDE_MEM_CLOUD_SYNC_HUB_URL);if(u!==null&&(o={...o,CLAUDE_MEM_CLOUD_SYNC_HUB_URL:u},!n.readOnly))try{j(e,l?{...c,env:o}:o,{mode:384}),console.warn("[SETTINGS] Migrated cloud sync hub URL to",u,"from a retired hub host:",e)}catch(p){console.warn("[SETTINGS] Failed to migrate cloud sync hub URL:",e,p instanceof Error?p.message:String(p))}for(let p of Na)if(!(0,st.existsSync)($a(e,p))){if(o[p.key]!==p.legacy){n.readOnly||ri(e,p);continue}if(o={...o,[p.key]:this.DEFAULTS[p.key]},!n.readOnly)try{j(e,l?{...c,env:o}:o,{mode:384}),ri(e,p),console.warn(`[SETTINGS] Migrated ${p.key} off the old ${p.legacy}ms default to ${this.DEFAULTS[p.key]}ms:`,e)}catch(g){let m=`${p.key}\0${e}`;Ua.has(m)||(Ua.add(m),console.warn(`[SETTINGS] Failed to migrate ${p.key}; using the new default in memory (reported once per process):`,e,g instanceof Error?g.message:String(g)))}}let f={...this.DEFAULTS};for(let p of Object.keys(this.DEFAULTS))o[p]!==void 0&&(f[p]=Dp(o[p]));return this.finalizeSettings(f,t)}catch(s){console.warn("[SETTINGS] Failed to load settings, using defaults:",e,s instanceof Error?s.message:String(s));let i=this.getAllDefaults();return this.finalizeSettings(i,t)}}};var it=require("fs"),Wa=require("os"),Qr=require("path");le();U();var vt=B.transcriptsConfig(),Zr=B.transcriptsState(),Fp={version:1,schemas:{},watches:[],stateFile:Zr};function Ha(r){let e=typeof r.schema=="string"?r.schema:r.schema?.name;if(!(r.name==="codex"||e==="codex")||!r.path)return!1;let n=X(r.path).replace(/\\/g,"/"),s=(0,Qr.join)((0,Wa.homedir)(),".codex","sessions").replace(/\\/g,"/");return n===`${s}/**/*.jsonl`}function ja(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&&Ha(r)}var Np={path:"payload.source.subagent.thread_spawn"};function Ka(r,e){if(e.CLAUDE_MEM_CODEX_TRANSCRIPT_INGESTION==="true")return{config:r,scoped:0,removed:0};let t=e.CLAUDE_MEM_CODEX_SUBAGENT_INGESTION==="true"&&e.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS!=="true",n=0,s=0,i=[];for(let o of r.watches)Ha(o)?t?(n+=1,i.push({...o,subagentOnly:!0,subagentSource:{...Np}})):s+=1:i.push(o);return{config:{...r,watches:i},scoped:n,removed:s}}function X(r){return r&&Ia(r)}var ye=r=>typeof r=="object"&&r!==null&&!Array.isArray(r),Ba={session_init:!0,session_context:!0,user_message:!0,assistant_message:!0,tool_use:!0,tool_result:!0,observation:!0,file_edit:!0,session_end:!0};function k(r,e,t){if(!r)throw new Error(`${e} ${t}`)}function Xt(r,e){k(r===void 0||typeof r=="string",e,"must be a string")}function Xr(r,e){k(typeof r=="string"&&r.trim().length>0,e,"must be a non-empty string")}function Ga(r,e){k(r===void 0||typeof r=="boolean",e,"must be true or false")}function za(r,e){typeof r!="string"&&(k(ye(r),e,"must be a path string or an object"),Xt(r.path,`${e}.path`),r.coalesce!==void 0&&(k(Array.isArray(r.coalesce),`${e}.coalesce`,"must be an array"),r.coalesce.forEach((t,n)=>za(t,`${e}.coalesce[${n}]`))))}function Va(r,e){k(ye(r),e,"must be an object");for(let t of["path","regex","contains","not_contains","starts_with","not_starts_with"])Xt(r[t],`${e}.${t}`);if(typeof r.regex=="string")try{new RegExp(r.regex)}catch{k(!1,`${e}.regex`,"must be a valid regular expression")}Ga(r.exists,`${e}.exists`);for(let t of["in","not_in"])k(r[t]===void 0||Array.isArray(r[t]),`${e}.${t}`,"must be an array");for(let t of["all","any"]){let n=r[t];n!==void 0&&(k(Array.isArray(n),`${e}.${t}`,"must be an array"),n.forEach((s,i)=>Va(s,`${e}.${t}[${i}]`)))}}function ni(r,e){k(ye(r),e,"must be an object"),Xr(r.name,`${e}.name`);for(let t of["eventTypePath","sessionIdPath","cwdPath","projectPath"])Xt(r[t],`${e}.${t}`);k(Array.isArray(r.events),`${e}.events`,"must be an array"),r.events.forEach((t,n)=>{let s=`${e}.events[${n}]`;if(k(ye(t),s,"must be an object"),k(typeof t.name=="string",`${s}.name`,"must be a string"),k(typeof t.action=="string"&&Object.hasOwn(Ba,t.action),`${s}.action`,`must be one of ${Object.keys(Ba).join(", ")}`),t.match!==void 0&&Va(t.match,`${s}.match`),t.fields!==void 0){k(ye(t.fields),`${s}.fields`,"must be an object");for(let[i,o]of Object.entries(t.fields))za(o,`${s}.fields.${i}`)}})}function Up(r,e,t){k(ye(r),e,"must be an object"),Xr(r.name,`${e}.name`),Xr(r.path,`${e}.path`);for(let o of["workspace","project","agentId"])Xt(r[o],`${e}.${o}`);for(let o of["startAtEnd","subagentOnly"])Ga(r[o],`${e}.${o}`);let{subagentSource:n,context:s}=r;if(n!==void 0&&(k(ye(n),`${e}.subagentSource`,"must be an object"),k(typeof n.path=="string",`${e}.subagentSource.path`,"must be a string")),s!==void 0&&(k(ye(s),`${e}.context`,"must be an object"),k(s.mode==="agents",`${e}.context.mode`,'must be "agents"'),Xt(s.path,`${e}.context.path`),s.updateOn!==void 0&&(k(Array.isArray(s.updateOn),`${e}.context.updateOn`,"must be an array"),s.updateOn.forEach((o,a)=>k(o==="session_start"||o==="session_end",`${e}.context.updateOn[${a}]`,'must be "session_start" or "session_end"')))),typeof r.schema!="string"){k(ye(r.schema),`${e}.schema`,"must be a schema name or an inline schema object"),ni(r.schema,`${e}.schema`);return}Xr(r.schema,`${e}.schema`);let i=t?.[r.schema];i!==void 0&&ni(i,`schemas.${r.schema}`)}function $p(r){k(ye(r),"the top level","must be an object"),k(r.version===1,"version","must be 1");let{stateFile:e,schemas:t,watches:n}=r;if(k(e==null||typeof e=="string","stateFile","must be a string"),t!==void 0){k(ye(t),"schemas","must be an object");for(let[s,i]of Object.entries(t))ni(i,`schemas.${s}`)}k(Array.isArray(n),"watches","must be an array"),n.forEach((s,i)=>Up(s,`watches[${i}]`,t))}function si(r=vt){let e=X(r);if(!(0,it.existsSync)(e))throw new Error(`Transcript watch config not found: ${e}`);let t=Ue(e);try{$p(t)}catch(n){let s=n instanceof Error?n.message:String(n);throw new Error(`Invalid transcript watch config: ${e} (${s})`,{cause:n})}return t.stateFile||(t.stateFile=Zr),t}function ii(r=vt){let e=X(r),t=(0,Qr.dirname)(e);(0,it.existsSync)(t)||(0,it.mkdirSync)(t,{recursive:!0}),(0,it.writeFileSync)(e,JSON.stringify(Fp,null,2))}var rp=require("crypto"),N=require("fs"),np=require("fs/promises"),H=require("path");M();var Qt=require("fs"),qa=require("path");M();le();function Ce(r,e){return typeof r!="object"||r===null||Array.isArray(r)?{}:Object.fromEntries(Object.entries(r).filter(t=>e(t[1])))}function Ja(r){try{if(!(0,Qt.existsSync)(r))return{offsets:{}};let e=Ue(r);if(!e||typeof e!="object"||Array.isArray(e))return{offsets:{}};let t=o=>typeof o=="number"&&Number.isSafeInteger(o)&&o>=0,n=o=>typeof o=="string",s={offsets:Ce(e.offsets,t)},i=o=>Object.fromEntries(Object.entries(o).filter(([a])=>Object.hasOwn(s.offsets,a)));if(e.partials!==void 0&&(s.partials=i(Ce(e.partials,n))),e.partialBytes!==void 0&&(s.partialBytes=i(Ce(e.partialBytes,o=>typeof o=="string"&&o.length>0&&Buffer.from(o,"base64").toString("base64")===o))),e.frameLines!==void 0&&(s.frameLines=i(Ce(e.frameLines,t))),e.fileIdentities!==void 0&&(s.fileIdentities=i(Ce(e.fileIdentities,n))),e.checkpointFingerprints!==void 0&&(s.checkpointFingerprints=i(Ce(e.checkpointFingerprints,n))),e.pendingTools!==void 0){let o=c=>typeof c=="object"&&c!==null&&!Array.isArray(c),a=c=>o(c)&&typeof c.toolName=="string"&&c.toolName.length>0;s.pendingTools=Object.fromEntries(Object.entries(i(Ce(e.pendingTools,o))).map(([c,l])=>[c,Object.fromEntries(Object.entries(Ce(l,o)).map(([u,f])=>[u,Ce(f,a)]))]))}return e.cwds!==void 0&&(s.cwds=Ce(e.cwds,n)),s}catch(e){return d.warn("TRANSCRIPT","Failed to load watch state, starting fresh",{statePath:r,error:e instanceof Error?e.message:String(e)}),{offsets:{}}}}var Bp=64*1024,Ya=new WeakMap;function Wp(r){let e=Ya.get(r);return e||(e=(r.toolInput===void 0?0:Buffer.byteLength(JSON.stringify(r.toolInput)??""))<=Bp?r:{toolName:r.toolName},Ya.set(r,e)),e}function Hp(r){let e={};for(let[t,n]of Object.entries(r)){e[t]={};for(let[s,i]of Object.entries(n)){e[t][s]={};for(let[o,a]of Object.entries(i))e[t][s][o]=Wp(a)}}return e}function Zt(r,e){try{let t=(0,qa.dirname)(r);(0,Qt.existsSync)(t)||(0,Qt.mkdirSync)(t,{recursive:!0});let n=e.pendingTools?{...e,pendingTools:Hp(e.pendingTools)}:e;j(r,n,{mode:384})}catch(t){d.warn("TRANSCRIPT","Failed to save watch state",{statePath:r,error:t instanceof Error?t.message:String(t)})}}var jr=Ee(require("path"),1);var D=Ee(require("path"),1),wl=require("crypto"),C=require("fs");M();var oi=class extends Error{constructor(t){super(`SSE event exceeded ${t} bytes`);this.maxEventBytes=t;this.name="SseEventTooLargeError"}maxEventBytes},ai=class extends Error{constructor(t){super(`SSE stream ended before a terminal event (${t.join(", ")})`);this.terminalEventNames=t;this.name="StreamEndedEarlyError"}terminalEventNames},Xa=13,Qa=10,jp=58;async function*Kp(r){if(!(r instanceof ReadableStream)){yield*r;return}let e=r.getReader(),t=!1;try{for(;;){let{done:n,value:s}=await e.read();if(n){t=!0;return}yield s}}finally{try{t||await e.cancel()}finally{e.releaseLock()}}}function Gp(r,e){if(r.length===1)return r[0];let t=new Uint8Array(e),n=0;for(let s of r)t.set(s,n),n+=s.length;return t}async function*Za(r,e={}){let t=e.maxEventBytes??1048576,n=new TextDecoder,s=[],i=0,o=!1,a=0,c=null,l,u=null,f=!1,p=m=>{if(a+m>t)throw new oi(t)},g=m=>{if(m.length===0){let A=c!==null||u!==null?{event:c||"message",data:(u??[]).join(`
16
+ `),...l!==void 0?{id:l}:{}}:null;return c=null,l=void 0,u=null,a=0,A}if(m[0]===jp)return e.onActivity?.(),null;p(m.length),a+=m.length;let h=n.decode(m),_=h.indexOf(":"),E=_===-1?h:h.slice(0,_),y=_===-1?"":h.slice(_+1);return y.startsWith(" ")&&(y=y.slice(1)),E==="event"?c=y:E==="data"?(u??=[]).push(y):E==="id"&&(l=y),null};for await(let m of Kp(r)){let h=0;for(let _=0;_<m.length;_++){let E=m[_];if(o&&(o=!1,E===Qa)){h=_+1;continue}if(E!==Xa&&E!==Qa)continue;s.push(m.subarray(h,_));let y=Gp(s,i+(_-h));s=[],i=0;let w=g(y);w&&(e.terminalEventNames?.includes(w.event)&&(f=!0),yield w),o=E===Xa,h=_+1}if(h<m.length){let _=m.slice(h);s.push(_),i+=_.length,p(i)}}if(e.terminalEventNames&&e.terminalEventNames.length>0&&!f)throw new ai(e.terminalEventNames)}U();U();var en=null;function re(){return en!==null||(en=$.loadFromFile(oe)),en}function tn(r){return(r.CLAUDE_MEM_WORKER_AUTOSTART??"true").trim().toLowerCase()==="false"}function ci(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var at=require("fs");M();var li=require("node:child_process");function ui(r,e,t){return(0,li.spawn)(r,e??[],{...t,windowsHide:!0})}var zp=new Set([".cmd",".bat"]),Vp=new Set([".exe",".com"]),aw=new Set([...Vp,...zp]);var ot=require("fs"),oc=Ee(require("path"),1);M();le();var Yp=["CLAUDECODE_","CLAUDE_CODE_"],qp=new Set(["CLAUDECODE","CLAUDE_CODE_SESSION","CLAUDE_CODE_ENTRYPOINT","MCP_SESSION_ID"]),Jp=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"]),Xp=new Set(["CLAUDE_CODE_OAUTH_TOKEN","CLAUDE_CODE_GIT_BASH_PATH","CLAUDE_CODE_TMPDIR","CLAUDE_CODE_PATH","CLAUDE_CODE_USE_BEDROCK","CLAUDE_CODE_USE_VERTEX","CLAUDE_CODE_USE_FOUNDRY","CLAUDE_CODE_SKIP_BEDROCK_AUTH","CLAUDE_CODE_SKIP_VERTEX_AUTH","CLAUDE_CODE_SKIP_FOUNDRY_AUTH","ANTHROPIC_BEDROCK_BASE_URL","AWS_REGION","AWS_PROFILE","AWS_ACCESS_KEY_ID","AWS_SECRET_ACCESS_KEY","AWS_SESSION_TOKEN","ANTHROPIC_VERTEX_PROJECT_ID","CLOUD_ML_REGION","GOOGLE_APPLICATION_CREDENTIALS",...Jp]);function Ge(r=process.env){let e={};for(let[t,n]of Object.entries(r))if(n!==void 0){if(Xp.has(t)){e[t]=n;continue}qp.has(t)||Yp.some(s=>t.startsWith(s))||(e[t]=n)}return e}U();var fi=require("child_process"),tc=require("fs");M();var Qp=5e3,ec=new Map,di=0;function rc(r,e,t){if(t.status!==0)return null;if(typeof t.stdout!="string")return d.warn("SYSTEM","captureProcessStartToken: start-token probe returned no stdout",{pid:e,source:r,status:t.status}),null;let n=t.stdout.trim();return n.length>0?n:null}function Zp(r){di+=1;let e=(0,fi.spawnSync)("powershell.exe",["-NoProfile","-NonInteractive","-Command",`(Get-CimInstance Win32_Process -Filter "ProcessId=${r}").CreationDate.ToString('yyyyMMddHHmmss.ffffff')`],{encoding:"utf-8",timeout:5e3,windowsHide:!0,env:{...Ge(process.env),LC_ALL:"C",LANG:"C"}});return rc("powershell-cim",r,e)}function eg(r,e=!1){if(!e){let n=ec.get(r);if(n&&(r===process.pid||Date.now()-n.capturedAtMs<Qp))return n.token}let t=null;try{t=Zp(r)}catch(n){d.debug("SYSTEM","captureProcessStartToken: powershell CIM lookup failed",{pid:r,error:n instanceof Error?n.message:String(n)}),t=null}return(t!==null||r!==process.pid)&&ec.set(r,{token:t,capturedAtMs:Date.now()}),t}function nc(r,e){if(!Number.isInteger(r)||r<=0)return null;if(process.platform==="linux"){di+=1;try{let t=(0,tc.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 eg(r,e);di+=1;try{let t=(0,fi.spawnSync)("ps",["-p",String(r),"-o","lstart="],{encoding:"utf-8",timeout:2e3,env:{...Ge(process.env),LC_ALL:"C",LANG:"C"}});return rc("ps-lstart",r,t)}catch(t){return d.debug("SYSTEM","captureProcessStartToken: ps exec failed",{pid:r,error:t instanceof Error?t.message:String(t)}),null}}function Pe(r){return nc(r,!1)}function be(r,e){if(e===null)return!0;let t=nc(r,!0);return t===null?!0:t===e}var sc=require("child_process"),sn=require("fs"),ic=require("util");M();var pi=(0,ic.promisify)(sc.execFile),tg=128,rg=/not found|no running instance|no tasks/i,rn=class extends Error{pid;constructor(e,t,n){super(t,n),this.name="ProcessTreeKillError",this.pid=e}};async function ue(r,e={}){let t=e.signalMode==="immediate",n=e.expectedStartToken!==void 0?e.expectedStartToken:Pe(r),s=()=>be(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 pi("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===tg||rg.test(`${a} ${c}`)){d.debug("PROCESS","taskkill reported the process was already gone",{pid:r});return}throw new rn(r,`taskkill failed for PID ${r} (exit ${String(o)}): ${a.trim()||c}`,{cause:i})}return}try{let i=t?"SIGKILL":"SIGTERM",o=await nn(r);for(let l of o){if(!be(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 nn(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(!be(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 rn(r,`tree-kill failed for PID ${r}: ${i instanceof Error?i.message:String(i)}`,{cause:i})}}async function ng(){return process.platform==="win32"?og():process.platform==="linux"?sg():ig()}function sg(){let r=[],e;try{e=(0,sn.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,sn.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 ig(){let r;try{r=(await pi("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(`
17
+ `)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);if(!n)continue;let s=n[3].trim();e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),startToken:s.length>0?s:null})}return e}async function og(){let r;try{r=(await pi("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 nn(r){let e=await ng(),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 cg=5e3,lg=1e3,ug=B.supervisorRegistry(),dg=null;function z(r){if(!Number.isInteger(r)||r<0||r===0)return!1;try{return process.kill(r,0),!0}catch(e){if(e instanceof Error){let t=e.code;return t==="EPERM"?!0:(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 on(r,e){let t=Date.now()+e;for(;Date.now()<t;){if(r.every(n=>!z(n.pid)))return;await new Promise(n=>setTimeout(n,100))}}function ac(r){if(!r||!z(r.pid))return!1;if(!r.startToken)return!0;let e=Pe(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 fg={platform:process.platform,readCommandLine:r=>(0,ot.readFileSync)(`/proc/${r}/cmdline`,"utf-8")};function an(r,e=fg){if(!ac(r))return!1;if(r.startToken||e.platform!=="linux")return!0;let t;try{t=e.readCommandLine(r.pid)}catch(s){return d.debug("SYSTEM","Could not read the command line of a token-less worker PID; trusting the live PID",{pid:r.pid,error:s instanceof Error?s.message:String(s)}),!0}let n=t.split("\0").some(s=>oc.default.basename(s)==="worker-service.cjs");return n||d.debug("SYSTEM","Token-less worker PID now belongs to another program (PID reused)",{pid:r.pid}),n}function ze(r=B.workerPid()){if(!(0,ot.existsSync)(r))return null;let e;try{e=JSON.parse((0,ot.readFileSync)(r,"utf-8"))}catch{return null}return e!==null&&an(e)?e:null}var hi=class{registryPath;entries=new Map;runtimeProcesses=new Map;initialized=!1;persistDegraded=!1;constructor(e=ug){this.registryPath=e}initialize(){if(this.initialized)return;if(this.initialized=!0,!(0,ot.existsSync)(this.registryPath)){this.persist();return}try{let n=JSON.parse((0,ot.readFileSync)(this.registryPath,"utf-8")).processes??{};for(let[s,i]of Object.entries(n))this.entries.set(s,i)}catch(t){t instanceof Error?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()}retainSupersededEntry(e,t){let n=this.entries.get(e);if(!n||n.pid===t||!z(n.pid))return;let s=`${e}#superseded:${n.pid}`;this.entries.set(s,n);let i=this.runtimeProcesses.get(e);i&&(this.runtimeProcesses.set(s,i),this.runtimeProcesses.delete(e)),d.warn("SYSTEM","Registry id reused while the previous process was still alive; kept it for reaping",{id:e,supersededId:s,supersededPid:n.pid,incomingPid:t})}register(e,t,n){this.initialize(),this.retainSupersededEntry(e,t.pid),this.entries.set(e,t),n&&this.runtimeProcesses.set(e,n),this.persist()}unregister(e,t){this.initialize();let n=e,s=this.entries.get(n);t!==void 0&&s?.pid!==t&&(n=`${e}#superseded:${t}`,s=this.entries.get(n),s?.pid!==t)||s&&(this.entries.delete(n),this.runtimeProcesses.delete(n),this.persist(),s?.type==="sdk"&&mi())}clear(){this.entries.clear(),this.runtimeProcesses.clear(),this.persist()}getAll(){return this.initialize(),Array.from(this.entries.entries()).map(([e,t])=>({id:e,...t})).sort((e,t)=>{let n=Date.parse(e.startedAt),s=Date.parse(t.startedAt);return(Number.isNaN(n)?0:n)-(Number.isNaN(s)?0:s)})}getBySession(e){let t=String(e);return this.getAll().filter(n=>n.sessionId!==void 0&&String(n.sessionId)===t)}getRuntimeProcess(e){return this.runtimeProcesses.get(e)}pruneDeadEntries(){this.initialize();let e=0,t=0;for(let[n,s]of this.entries)z(s.pid)||(this.entries.delete(n),this.runtimeProcesses.delete(n),e+=1,s.type==="sdk"&&(t+=1));e>0&&this.persist();for(let n=0;n<t;n+=1)mi();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=>z(a.pid)),i=new Map(s.map(a=>[a.pid,Pe(a.pid)]));for(let a of s)try{process.platform==="win32"?await ue(a.pid,{expectedStartToken:i.get(a.pid)??null}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGTERM"):process.kill(a.pid,"SIGTERM")}catch(c){c instanceof Error?c.code!=="ESRCH"&&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 on(s,cg);let o=s.filter(a=>z(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(!be(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 ue(a.pid,{expectedStartToken:c}):typeof a.pgid=="number"?process.kill(-a.pgid,"SIGKILL"):process.kill(a.pid,"SIGKILL")}catch(l){l instanceof Error?l.code!=="ESRCH"&&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()+lg;for(;Date.now()<a&&o.filter(l=>z(l.pid)).length!==0;)await new Promise(l=>setTimeout(l,100))}for(let a of t)this.entries.delete(a.id),this.runtimeProcesses.delete(a.id);this.persist();for(let a of t)a.type==="sdk"&&mi();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())};try{j(this.registryPath,e),this.persistDegraded=!1}catch(t){this.reportPersistFailure(t)}}reportPersistFailure(e){if(this.persistDegraded)return;this.persistDegraded=!0;let t=e instanceof Error?e:new Error(String(e));d.warn("SYSTEM","Failed to persist supervisor registry; keeping it in memory",{path:this.registryPath},t);try{dg?.({errorCategory:t.code??"unknown"})}catch{}}},gi=null;function cn(){return gi||(gi=new hi),gi}var Rw=180*1e3,pg=[];function mi(){let r=pg.shift();r&&r.notify()}var Rt=require("fs");M();U();var gg=B.workerPid();async function lc(r){let e=r.currentPid??process.pid,t=r.pidFilePath??gg,n=r.registry.getAll(),s=[...n].filter(c=>c.pid!==e).sort((c,l)=>Date.parse(l.startedAt)-Date.parse(c.startedAt)),i=new Map,o=new Map;for(let c of s){if(!z(c.pid)){r.registry.unregister(c.id);continue}o.set(c.id,Pe(c.pid)),i.set(c.id,await nn(c.pid));try{await cc(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 on(s,5e3);let a=s.filter(c=>z(c.pid)||(i.get(c.id)??[]).some(l=>z(l.pid)));for(let c of a){let l=be(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 cc(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{mg(i.get(c.id)??[],c.pid)}}await on(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);uc(t,e),r.registry.pruneDeadEntries()}function uc(r,e,t=!1){if(!(0,Rt.existsSync)(r))return;let n=null;try{let o=JSON.parse((0,Rt.readFileSync)(r,"utf-8"));n=typeof o.pid=="number"?o.pid:null}catch(o){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||!z(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,Rt.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 mg(r,e){for(let{pid:t,startToken:n}of r)if(!(t===e||!z(t))){if(!be(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 cc(r,e){let{pid:t,pgid:n}=r;if(process.platform!=="win32"){if(typeof n=="number")try{process.kill(-n,e);return}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}if(e==="SIGKILL"){await ue(t,{signalMode:"immediate"});return}try{process.kill(t,e)}catch(s){if((s instanceof Error?s.code:void 0)!=="ESRCH")throw s}return}await ue(t)}M();var dc=3e4,Mt=null;function hg(){let e=cn().pruneDeadEntries();e>0&&d.info("SYSTEM",`Health check: pruned ${e} dead process(es) from registry`)}function fc(){Mt===null&&(Mt=setInterval(hg,dc),Mt.unref(),d.debug("SYSTEM","Health checker started",{intervalMs:dc}))}function pc(){Mt!==null&&(clearInterval(Mt),Mt=null,d.debug("SYSTEM","Health checker stopped"))}var gc=require("child_process"),mc=require("util");M();var _g=(0,mc.promisify)(gc.execFile),Eg=/(?:^|\/)(?:uvx|uv|python[\d.]*)(?:\s|$).*chroma-mcp/;function Sg(r){let e=[];for(let t of r.split(`
18
+ `)){let n=t.trim().match(/^(\d+)\s+(\d+)\s+(.*)$/);n&&e.push({pid:Number.parseInt(n[1],10),ppid:Number.parseInt(n[2],10),command:n[3].trim()})}return e}async function yg(){let r=await _g("ps",["-eo","pid=,ppid=,command="],{timeout:1e4,maxBuffer:33554432});return Sg(r.stdout)}function bg(r,e){let t=r.filter(o=>Eg.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 hc(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??yg,s=r.isAlive??z,i=r.killTree??(g=>ue(g,{signalMode:"graceful"})),o=r.selfPid??process.pid,a;try{a=await n()}catch(g){return 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}=bg(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 m=u.slice(g,g+p);(await Promise.allSettled(m.map(_=>i(_.pid)))).forEach((_,E)=>{let y=m[E];_.status==="fulfilled"?(t.killed+=1,f.add(y.pid)):(t.failed+=1,d.warn("PROCESS","Failed to reap an orphaned chroma-mcp tree",{pid:y.pid,ppid:y.ppid,error:_.reason instanceof Error?_.reason.message:String(_.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 wg=B.workerPid(),_i=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(),_c({logAlive:!1})==="alive")throw new Error("Worker already running");this.started=!0,hc({registry:this.registry}).catch(t=>{d.warn("PROCESS","Orphaned chroma-mcp sweep failed",{error:t instanceof Error?t.message:String(t)})}),fc()}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}pc(),this.stopPromise=lc({registry:this.registry,currentPid:process.pid}).finally(()=>{this.started=!1,this.stopPromise=null}),await this.stopPromise}assertCanSpawn(e){if(this.stopPromise!==null)throw new Error(`Supervisor is shutting down, refusing to spawn ${e}`)}registerProcess(e,t,n){this.registry.register(e,t,n)}unregisterProcess(e,t){this.registry.unregister(e,t)}getRegistry(){return this.registry}},zw=new _i(cn());function _c(r={}){let e=r.pidFilePath??wg;if(!(0,at.existsSync)(e))return"missing";let t=null;try{t=JSON.parse((0,at.readFileSync)(e,"utf-8"))}catch(s){return s instanceof Error?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,at.rmSync)(e,{force:!0}),"invalid"}return an(t)&&t?((r.logAlive??!0)&&d.info("SYSTEM","Worker already running (PID alive)",{existingPid:t.pid,existingPort:t.port,startedAt:t.startedAt}),"alive"):(r.removeStale===!1||(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,at.rmSync)(e,{force:!0})),"stale")}Vr();var Ei=require("path"),un=require("fs"),Sc=require("crypto");U();var ln=require("fs");le();function Ec(r,e){if(!(0,ln.existsSync)(r))return e;try{return Vt((0,ln.readFileSync)(r,"utf-8"))}catch(t){throw new Error(`Corrupt JSON file, refusing to overwrite: ${r}: ${t instanceof Error?t.message:String(t)}`)}}M();var yc="telemetry.json";function Tg(r){let e=r.DO_NOT_TRACK;return e===void 0||e===""?!1:e!=="0"&&e!=="false"}function Ag(r,e){if(Tg(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 dn(r,e){return Ag(r,e).enabled}function bc(r){let e=r.CLAUDE_MEM_TELEMETRY_ERRORS?.toLowerCase();return!(e==="0"||e==="false"||e==="off")}function vg(){return(0,Ei.join)(ie(),yc)}function er(){let r;try{r=Ec(vg(),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 Rg(r){let e=ie();(0,un.mkdirSync)(e,{recursive:!0}),(0,un.writeFileSync)((0,Ei.join)(e,yc),JSON.stringify(r,null,2)+`
19
+ `)}function fn(){let r=er();if(r?.installId)return r.installId;let e=(0,Sc.randomUUID)();return Rg({installId:e,decidedAt:""}),e}var Ac=Ee(require("os"),1);M();var wc=500;var Tc=8192,de="[REDACTED]";function vc(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>Tc?e.slice(0,Tc):e}catch{return""}}function Si(r){if(typeof r!="string"||r.length===0)return r??"";let e="";try{e=Ac.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 yi(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 Mg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b[A-Za-z][A-Za-z0-9+.-]*:\/\/[^\s"'()]+/g,e=>/^https?:\/\/hooks\.slack\.com\/services\//i.test(e)?e.replace(/^(https?:\/\/hooks\.slack\.com\/services\/)[^\s"'()]+/i,`$1${de}`):e.replace(/[?#].*$/,"").replace(/^([A-Za-z][A-Za-z0-9+.-]*:\/\/)[^/@\s]+@/,`$1${de}@`))}function Cg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\?[^\s"'()]*/g,"")}function Pg(r){return typeof r!="string"||r.length===0?r??"":r.replace(/\b(?:access[_-]?token|api[_-]?key|auth(?:orization)?|secret|password|passwd|jwt|session[_-]?id|token)=[^\s"'&]+/gi,e=>{let t=e.indexOf("=");return`${e.slice(0,t+1)}${de}`})}function Ig(r){if(typeof r!="string"||r.length===0)return r??"";let e=r;return e=e.replace(/[A-Za-z0-9._%+-]{1,64}@[A-Za-z0-9.-]{1,255}\.[A-Za-z]{2,24}/g,de),e=e.replace(/\b[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\.[A-Za-z0-9_-]{10,512}\b/g,de),e=e.replace(/\b(?:sk|pk|rk|ak|phc|phx|ph|ghp|gho|ghs|xox[bpasr])[-_][A-Za-z0-9_-]{8,512}\b/gi,de),e=e.replace(/\bBearer\s+[A-Za-z0-9._-]{8,512}\b/gi,de),e=e.replace(/\b(?:AKIA|ASIA|AGPA|AIDA|AROA|ANPA|ANVA|AIPA)[0-9A-Z]{16}\b/g,de),e=e.replace(/\b[0-9a-fA-F]{24,4096}\b/g,de),e=e.replace(/\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\b/g,de),e=e.replace(/\b(?=[A-Za-z0-9+/_-]{0,4096}\d)[A-Za-z0-9+/_-]{32,4096}={0,2}\b/g,de),e=e.replace(/\b(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}\b/g,de),e}function Og(r){return typeof r!="string"||r.length===0?r??"":r.replace(/[ \t\f\v]+/g," ").replace(/ *\n */g,`
20
+ `).trim()}function bi(r){let e=vc(r);return e.length===0?"":(e=Si(e),e=Mg(e),e=yi(e),e=Cg(e),e=Pg(e),e=Ig(e),e)}function Rc(r){try{let e=Og(bi(vc(r)));return e.length>wc?e.slice(0,wc):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 Mc(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 kg=new Set(["version","os","os_version","is_wsl","arch","runtime","runtime_version","node_version","duration_ms","outcome","error_category","locale","is_ci","endpoint","ide","provider","runtime_mode","trigger","count","has_summary","is_update","stage","phase","install_method","interactive","provider_source","bun_version","uv_version","claude_code_version","trial_days","trial_variant","offer_surface","funnel_source","observation_count","session_count","timeline_depth_days","has_session_summary","obs_type_bugfix","obs_type_discovery","obs_type_decision","obs_type_refactor","obs_type_other","tokens_injected","tokens_saved_vs_naive","mode","search_strategy","observation_type","hook","compression_ms","tokens_input","tokens_output","compression_ratio","model","cost_usd","endpoint_class","db_observation_count","db_session_count","db_summary_count","db_project_count","db_size_mb","install_age_days","obs_count_7d","obs_count_30d","days_since_last_obs","result_count","chroma_available","fallback_reason","invalid_output_class","consecutive_invalid_outputs","respawn_triggered","abort_reason","previous_shutdown","previous_uptime_seconds","uptime_seconds","shutdown_reason","process_rss_mb","heap_used_mb","hook_type","error_mode","consecutive_failures","threshold_tripped","limit_window","overage_status","is_using_overage","resets_in_minutes","discovery_tokens","read_tokens","summary_count","prompt_count","project_count","backfilled","first_active_date","session_completed_count","session_failed_count","sessions_claude_count","sessions_codex_count","sessions_gemini_count","sessions_other_platform_count","subagent_obs_count","total_tokens_input","total_tokens_output","total_cost_usd","avg_duration_ms","avg_compression_ms","outcomes_ok","outcomes_error","outcomes_aborted","outcomes_aborted_deadline_exceeded","outcomes_invalid_output","top_model","top_abort_reason","observed_model","observed_billing","window_start_ts","rollup_reason","window_seq","total_tokens","avg_tokens","skill_id","skill_source","skill_trigger","observations_created","total_observations_injected","total_tokens_saved_vs_naive"]),Cc=200;function Dg(r,e){if(!(!r||typeof r!="object"))for(let t of Object.keys(r)){if(!kg.has(t))continue;let n=r[t];if(typeof n=="string"){let s=n.length>Cc?n.slice(0,Cc):n;e[t]=bi(s)}else(typeof n=="number"&&Number.isFinite(n)||typeof n=="boolean")&&(e[t]=n)}}function pn(r){let e={};try{Dg(r,e)}catch{}return e}var wi=Ee(require("os"),1);M();var xg="13.36.0",Lg="phc_BKJAeNbpj932N9qEiU6qhutZEiu6LLfRpXfTbLM9MLaG",Fg="https://us.i.posthog.com";function gn(){return process.env.CLAUDE_MEM_TELEMETRY_KEY||Lg}function mn(){return process.env.CLAUDE_MEM_TELEMETRY_HOST||Fg}var Ng=["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 hn(r){let e={};for(let t of Ng)r[t]!==void 0&&(e[t]=r[t]);return e}function Ug(){if(process.platform!=="linux")return!1;try{return!!process.env.WSL_DISTRO_NAME||wi.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 _n(){return{version:xg,os:process.platform,os_version:wi.default.release(),is_wsl:Ug(),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 $g=2e3;async function Pc(r,e,t){try{if(!dn(process.env,er()))return;let n=pn({..._n(),...e??{}});if(t?.person?n.$set=hn(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
21
+ `);return}let s=gn(),i=new AbortController,o=setTimeout(()=>i.abort(),$g);try{await Bg(s,r,n,i.signal)}finally{clearTimeout(o)}}catch{}}async function Bg(r,e,t,n){await fetch(`${mn()}/capture/`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({api_key:r,event:e,distinct_id:fn(),properties:t}),signal:n})}var ne=Ee(require("path"),1),ki=require("os"),ae=require("fs"),Tn=require("child_process");M();M();M();var Q=Ee(require("path"),1),Ct=require("fs"),wn=require("os"),Ci=require("child_process");Yt();U();M();var En=require("fs"),Ve=Ee(require("path"),1);M();var tr={isWorktree:!1,isSubmodule:!1,worktreeName:null,parentRepoPath:null,parentProjectName:null};function Ic(r){let e=Ve.default.join(r,".git"),t;try{t=(0,En.statSync)(e)}catch(c){return c instanceof Error&&c.code!=="ENOENT"&&d.warn("GIT","Unexpected error checking .git",{error:c instanceof Error?c.message:String(c)}),tr}if(!t.isFile())return tr;let n;try{n=(0,En.readFileSync)(e,"utf-8").trim()}catch(c){return d.warn("GIT","Failed to read .git file",{error:c instanceof Error?c.message:String(c)}),tr}let s=n.match(/^gitdir:\s*(.+)$/);if(!s)return tr;let i=Ve.default.resolve(Ve.default.dirname(e),s[1]),o=i.match(/^(.+)[/\\]\.git[/\\]worktrees[/\\]([^/\\]+)$/);if(o){let c=o[1];return{isWorktree:!0,isSubmodule:!1,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}let a=i.match(/^(.+)[/\\]\.git[/\\]modules[/\\](.+)$/);if(a){let c=a[1];return{isWorktree:!1,isSubmodule:!0,worktreeName:Ve.default.basename(r),parentRepoPath:c,parentProjectName:Ve.default.basename(c)}}return tr}var kc=require("fs");var Ti=require("path");Yt();M();function Oc(r){let e=ve(r.replace(/\\/g,"/"));e=e.replace(/\\/g,"/");let t=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return t=t.replace(/\*\*/g,"<<<GLOBSTAR>>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<<GLOBSTAR>>>/g,".*"),new RegExp(`^${t}$`)}function Ai(r,e){if(!e.length)return!1;let t=r.replace(/\\/g,"/"),n=(0,Ti.basename)(t);for(let s of e){let i=s.trim();if(i)try{let o=Oc(i);if(o.test(t)||o.test(n))return!0}catch(o){d.warn("PROJECT_NAME","Invalid glob pattern",{pattern:i,error:o instanceof Error?o.message:String(o)});continue}}return!1}function Sn(r,e){if(!e||!e.trim())return!1;let t=r.replace(/\\/g,"/"),n=(0,Ti.basename)(t),s=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of s)try{let o=Oc(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}M();function Dc(r){let e=r;if(typeof e=="string"){if(!e.trim())return[];try{e=JSON.parse(e)}catch(n){return d.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS is not valid JSON; ignoring it",{error:n instanceof Error?n.message:String(n)}),[]}}if(!Array.isArray(e))return e!=null&&d.warn("PROJECT_NAME","CLAUDE_MEM_PROJECT_ENVIRONMENTS must be an array; ignoring it",{}),[];let t=[];for(let n of e){let s=typeof n?.name=="string"?n.name.trim():"",i=Array.isArray(n?.patterns)?n.patterns.filter(o=>typeof o=="string"&&o.trim()!==""):[];if(!s||i.length===0){d.warn("PROJECT_NAME","Ignoring a project environment without a name or patterns",{name:s});continue}t.push({name:s,patterns:i})}return t}function Wg(r){try{return(0,kc.realpathSync)(r)}catch{return r}}function vi(r,e){if(e.length===0)return null;let t=[...new Set([r,Wg(r)])].flatMap(n=>[n,`${n.replace(/[\\/]+$/,"")}/`]);for(let n of e)if(t.some(s=>Ai(s,n.patterns)))return n.name;return null}var Pi="unknown-project";function Fc(r){try{return(0,Ci.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 non-git root",{dir:r},t),null}}var Hg=[".claude-mem-project",".claude-mem.json"],jg=64;function Nc(r){try{return(0,Ct.realpathSync)(r)}catch{return r}}function Kg(r,e){let t=Q.default.relative(e,r);return t===""||!t.startsWith("..")&&!Q.default.isAbsolute(t)}function Gg(){return[(0,wn.homedir)(),(0,wn.tmpdir)(),rt].flatMap(r=>{let e=Q.default.resolve(r);return[e,Nc(e)]})}function Uc(r){let e=Gg(),t=Q.default.resolve(r);if([Q.default.resolve(rt),Nc(Q.default.resolve(rt))].some(s=>Kg(t,s)))return null;for(let s=0;s<jg;s++){if(e.includes(t))return null;let i=Q.default.dirname(t);if(i===t)return null;if(Hg.some(o=>(0,Ct.existsSync)(Q.default.join(t,o))))return t;t=i}return null}function Mi(r,e){let t=Q.default.basename(e);if(t===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return d.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return d.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),Pi}return t}var zg="CLAUDE_MEM_PROJECT_NAME_SOURCE",yn=null;function xc(){try{return(0,Ct.statSync)(oe).mtimeMs}catch{return-1}}function $c(){let r=xc();if(r===-1)return $.getAllDefaults();if(yn&&yn.mtimeMs===r)return yn.settings;let e=$.loadFromFile(oe);return yn={mtimeMs:xc(),settings:e},e}function Vg(){let r=process.env[zg]??$c().CLAUDE_MEM_PROJECT_NAME_SOURCE;return String(r??"path").trim().toLowerCase()==="git-remote"}var Yg="CLAUDE_MEM_PROJECT_ENVIRONMENTS",bn=null;function Bc(){let r=process.env[Yg]??$c().CLAUDE_MEM_PROJECT_ENVIRONMENTS;return(!bn||bn.raw!==r)&&(bn={raw:r,environments:Dc(r)}),bn.environments}function qg(r){let e=(r??"").trim();if(!e||/^file:/i.test(e)||e.startsWith("/")||e.startsWith(".")||e.startsWith("~")||e.startsWith("\\\\")||/^[a-z]:[\\/]/i.test(e))return null;let n=e.replace(/\/+$/,"").replace(/\.git$/i,""),s=n.match(/^[a-z][a-z0-9+.-]*:\/\/[^/]+\/(.+)$/i),i=s?null:n.match(/^(?:[^/@\s]+@)?[^:/\s]+:(?!\/\/)(.+)$/),o=s?.[1]??i?.[1];if(!o)return null;let a=o.split("/").filter(c=>c&&c!=="_git");return a.length>=2?a.slice(-2).join("/"):a.length===1?a[0]:null}function Jg(r){try{let e=(0,Ci.execFileSync)("git",["remote","get-url","origin"],{cwd:r,encoding:"utf-8",stdio:["ignore","pipe","ignore"],windowsHide:!0}).trim();return qg(e)}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.debug("PROJECT_NAME","No usable origin remote, keeping the path-based name",{repoRoot:r},t),null}}var Ri=new Map;function Wc(r){return Vg()?(Ri.has(r)||Ri.set(r,Jg(r)),Ri.get(r)??null):null}function Xg(r,e=process.platform){if(!r||r.trim()==="")return d.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),Pi;let t=ve(r,e),n=vi(t,Bc());if(n)return n;let s=Fc(t),i=s?Wc(s):null;if(i)return i;let o=s??Uc(t)??t;return Mi(r,o)}function Hc(r,e){return e===r?r:`${r}/${e}`}function Qg(r,e){if(!r.isSubmodule||!r.parentRepoPath)return null;let t=Q.default.relative(r.parentRepoPath,e);return!t||t.startsWith("..")||Q.default.isAbsolute(t)?null:t.split(Q.default.sep).join("/")}function ct(r,e=process.platform){if(!r||r.trim()===""){let c=Xg(r,e);return{primary:c,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[c],keySource:"path"}}let t=ve(r,e),n=Fc(t),s=Zg(r,t,n),i=n?Wc(n):null,o=i?Lc(s,i,"git-remote"):s,a=vi(t,Bc());return a?Lc(o,a,"environment"):o}function Lc(r,e,t){return{primary:e,parent:null,isWorktree:r.isWorktree,isSubmodule:r.isSubmodule,allProjects:[...r.allProjects.filter(n=>n!==e),e],keySource:t}}function Zg(r,e,t){let n=t?null:Uc(e),s=Mi(r,t??n??e),i=t??e,o=Ic(i);if((o.isWorktree||o.isSubmodule)&&o.parentProjectName){let a=o.parentProjectName,c,l;return o.isSubmodule?(c=`${a}/${Qg(o,i)??s}`,l=s!==a?[s]:[]):(c=Hc(a,s),l=c===a?[`${a}/${s}`]:[]),{primary:c,parent:a,isWorktree:o.isWorktree,isSubmodule:o.isSubmodule,allProjects:[...new Set([a,...l,c])].filter(u=>u!==c).concat(c),keySource:"path"}}if(n&&Q.default.resolve(n)!==Q.default.resolve(e)){let a=Mi(r,e);if(a!==s&&a!==Pi)return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[a,s],keySource:"path"}}return{primary:s,parent:null,isWorktree:!1,isSubmodule:!1,allProjects:[s],keySource:"path"}}U();var jc=Me(Y.POWERSHELL_COMMAND);function tm(r){return r===void 0?jc:Math.max(1,Math.min(jc,r))}var zT=B.dataDir(),VT=B.workerPid(),rm="Bun runtime not found \u2014 install from https://bun.sh and ensure it is on PATH, under ~/.bun/bin, or set BUN / BUN_PATH / BUN_INSTALL. The worker daemon requires Bun because it uses bun:sqlite.";function nm(r){try{return(0,ae.realpathSync)(r)}catch{return null}}function Ii(r){return r?/(^|[\\/])bun(\.exe)?$/i.test(r.trim()):!1}function sm(r,e){let t=e==="win32"?"where.exe":"which",n=[r],s;try{s=(0,Tn.execFileSync)(t,n,{stdio:["ignore","pipe","ignore"],encoding:"utf-8",windowsHide:!0})}catch(o){return o instanceof Error?d.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},o):d.debug("SYSTEM",`Binary lookup failed for ${r}`,{command:t,args:n},new Error(String(o))),null}return s.split(/\r?\n/).map(o=>o.trim()).find(o=>o.length>0)||null}var Oi;function Di(r={}){let e=Object.keys(r).length===0;if(e&&Oi!==void 0)return Oi;let t=im(r);return e&&t!==null&&(Oi=t),t}function Kc(r,e){let t=r?.trim();return t?e==="win32"?[ne.default.join(t,"bin","bun.exe"),ne.default.join(t,"bin","bun"),ne.default.join(t,"bun.exe")]:[ne.default.join(t,"bin","bun"),ne.default.join(t,"bun")]:[]}function im(r){let e=r.platform??process.platform,t=r.execPath??process.execPath;if(Ii(t))return t;let n=r.env??process.env,s=r.homeDirectory??(0,ki.homedir)(),i=r.pathExists??ae.existsSync,o=r.lookupInPath??sm,a=r.realpath??nm,c=e==="win32"?[n.BUN,n.BUN_PATH,...Kc(n.BUN_INSTALL,e),ne.default.join(s,".bun","bin","bun.exe"),ne.default.join(s,".bun","bin","bun"),n.USERPROFILE?ne.default.join(n.USERPROFILE,".bun","bin","bun.exe"):void 0,n.LOCALAPPDATA?ne.default.join(n.LOCALAPPDATA,"bun","bun.exe"):void 0,n.LOCALAPPDATA?ne.default.join(n.LOCALAPPDATA,"bun","bin","bun.exe"):void 0,n.npm_config_prefix?ne.default.join(n.npm_config_prefix,"bun.exe"):void 0]:[n.BUN,n.BUN_PATH,...Kc(n.BUN_INSTALL,e),ne.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?ne.default.join(n.npm_config_prefix,"bin","bun"):void 0];for(let f of c){let p=f?.trim();if(p&&(Ii(p)&&i(p)||p.toLowerCase()==="bun"))return p}let l=o("bun",e)?.trim();if(!l||!Ii(l))return null;let u=a(l)??l;return i(u)?u:null}function xi(){let r=B.dataDir();return(0,ae.mkdirSync)(r,{recursive:!0}),r}function om(r,e,t=xi()){let n=s=>s.replace(/'/g,"''");return`Start-Process -FilePath '${n(r)}' -ArgumentList @('"${n(e)}"','--daemon') -WorkingDirectory '${n(t)}' -WindowStyle Hidden`}function am(r=process.env){let e=r.SystemRoot||r.SYSTEMROOT;return e?`${e}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`:"powershell.exe"}function cm(r,e,t=xi()){return["-NoProfile","-WindowStyle","Hidden","-EncodedCommand",Buffer.from(om(r,e,t),"utf16le").toString("base64")]}function Li(r,e,t,n=process.platform,s){if(n==="win32"){let u=am(t),f=cm(r,e),p=tm(s);try{let g=(0,Tn.spawnSync)(u,f,{stdio:"ignore",windowsHide:!0,env:t,timeout:p,killSignal:"SIGTERM"});if(g.error)throw g.error;if(g.signal)throw new Error(`powershell Start-Process killed by signal=${g.signal} after ${p}ms`);if(g.status!==0)throw new Error(`powershell Start-Process exited ${g.status??"null"}`);return 0}catch(g){let m=g instanceof Error?g:new Error(String(g));d.error("SYSTEM","Failed to spawn worker daemon on Windows",{runtimePath:r,powershell:u},m);return}}let i="/usr/bin/setsid",o=(0,ae.existsSync)(i),a=o?i:r,l=ui(a,o?[r,e,"--daemon"]:[e,"--daemon"],{detached:!0,stdio:"ignore",cwd:xi(),env:t});if(l.on("error",u=>{d.error("SYSTEM",rm,{runtimePath:r,execPath:a},u)}),l.pid!==void 0)return l.unref(),l.pid}var zc=Ee(require("net"),1);M();U();function Gc(r){let e=r?.code;return e==="EACCES"||e==="EADDRNOTAVAIL"}var Fi="Set CLAUDE_MEM_WORKER_PORT to a port between 1024 and 65535 and CLAUDE_MEM_WORKER_HOST to an address of this machine (127.0.0.1 by default) in claude-mem settings";function Ni(){return $.loadFromFile(oe).CLAUDE_MEM_WORKER_HOST}function Vc(r){return r.startsWith("[")&&r.endsWith("]")?r:r.includes(":")?`[${r}]`:r}var lt=5e3;async function Yc(r,e,t="GET",n=lt){let s=await fetch(`http://${Vc(Ni())}:${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 qc(r,e=lt){let t=Date.now()+e;if(process.platform==="win32")try{let s=await fetch(`http://${Vc(Ni())}:${r}/api/health`,{signal:AbortSignal.timeout(Math.max(1,t-Date.now()))});if(s.ok)return!0;d.debug("SYSTEM","Windows health check returned non-ok; falling through to socket probe",{port:r,status:s.status})}catch(s){s instanceof Error?d.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,message:s.message}):d.debug("SYSTEM","Windows health check threw; falling through to socket probe",{port:r,error:String(s)})}let n=await An(r,Math.max(1,t-Date.now()));return n==="occupied"||n==="indeterminate"}async function An(r,e=lt){return(await lm(r,e)).occupancy}function lm(r,e=lt){return e<=0?Promise.resolve({occupancy:"indeterminate"}):new Promise(t=>{let n=!1,s=!1,i=!1,o;try{o=zc.default.createServer()}catch{t({occupancy:"indeterminate"});return}let a=u=>{if(i){u?.();return}i=!0;try{o.close(u)}catch(f){u?.(f instanceof Error?f:new Error(String(f)))}},c=setTimeout(()=>{if(s)a();else try{o.close()}catch{}l({occupancy:"indeterminate"})},e),l=u=>{n||(n=!0,clearTimeout(c),t(u))};o.once("error",u=>{if(s)a();else try{o.close()}catch{}u.code==="EADDRINUSE"?l({occupancy:"occupied"}):Gc(u)?l({occupancy:"unbindable",bindErrorCode:u.code}):l({occupancy:"indeterminate"})}),o.once("listening",()=>{if(s=!0,n){a();return}try{a(u=>l({occupancy:u?"indeterminate":"free"}))}catch{l({occupancy:"indeterminate"})}});try{o.listen(r,Ni())}catch{try{o.close()}catch{}l({occupancy:"indeterminate"})}})}async function um(r,e,t,n){let s=Date.now()+t;for(;Date.now()<s;){try{let o=s-Date.now();if((await Yc(r,e,"GET",Math.min(lt,o))).ok)return!0}catch(o){o instanceof Error?d.debug("SYSTEM",n,{},o):d.debug("SYSTEM",n,{error:String(o)})}let i=Math.min(500,s-Date.now());i>0&&await new Promise(o=>setTimeout(o,i))}return!1}function Jc(r,e=3e4){return um(r,"/api/health",e,"Service not ready yet, will retry")}async function dm(r,e=lt){try{let t=await Yc(r,"/api/health","GET",e);return t.ok?JSON.parse(t.body).version:null}catch{return d.debug("SYSTEM","Could not fetch worker version",{}),null}}async function Xc(r,e,t=lt){let n=e??"unknown",s=await dm(r,t);return!s||n==="unknown"?{matches:!0,pluginVersion:n,workerVersion:s}:{matches:n===s,pluginVersion:n,workerVersion:s}}M();var vn=require("path"),q=require("fs");U();M();var Zc=9e4,fA=Zc/3;function el(){return(0,vn.join)(ie(),"spawn.lock")}function Qc(r){try{let e=JSON.parse((0,q.readFileSync)(r,"utf-8"));return typeof e.pid!="number"||!Number.isInteger(e.pid)||e.pid<=0?null:e.pid}catch{return null}}function fm(r){if(r===null)return null;try{return process.kill(r,0),!0}catch(e){return e?.code==="EPERM"}}function Ui(){let r=el(),e=JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()});for(let t=0;t<2;t++)try{return(0,q.mkdirSync)((0,vn.dirname)(r),{recursive:!0}),(0,q.writeFileSync)(r,e,{flag:"wx"}),!0}catch(n){let s=n instanceof Error?n:new Error(String(n)),i=s.code;if(i!=="EEXIST")return 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,q.statSync)(r).mtimeMs}catch{continue}let a=Qc(r),c=null;if(a===null)try{c=(0,q.readFileSync)(r,"utf-8")}catch{continue}if(Date.now()-o<=Zc&&fm(a)!==!1)return!1;let u;try{u=(0,q.statSync)(r).mtimeMs}catch{continue}if(u!==o)return!1;if(a!==null){if(Qc(r)!==a)return!1}else try{if((0,q.readFileSync)(r,"utf-8")!==c)return!1}catch{continue}try{(0,q.unlinkSync)(r)}catch{return!1}}return!1}function $i(){let r=el();try{if(JSON.parse((0,q.readFileSync)(r,"utf-8")).pid!==process.pid)return;(0,q.unlinkSync)(r)}catch{}}var nl=require("node:child_process");var sl=require("node:util");M();U();var Rn=(0,sl.promisify)(nl.execFile),pm=/^(uv|uvx|python|chroma-mcp)(\.exe)?$/i;function tl(r){return pm.test(r.trim())}function gm(r,e){if(!r)return!1;let t=r.toLowerCase().replace(/\\/g,"/"),n=t.indexOf("--data-dir");if(n<0)return!1;let s=t.slice(n+10).trim();if(s.startsWith('"')){let o=s.indexOf('"',1);s=o<0?s.slice(1):s.slice(1,o)}let i=e.toLowerCase().replace(/\\/g,"/");return s===i||s.startsWith(i)&&s[i.length]==="/"}function Mn(r,e){return e===void 0?r:Math.max(1,Math.min(r,e))}async function mm(r){try{let e=await Rn("powershell.exe",["-NoProfile","-NonInteractive","-Command","Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,CommandLine,@{Name='StartToken';Expression={$_.CreationDate.ToString('yyyyMMddHHmmss.ffffff')}} | ConvertTo-Json -Compress"],{timeout:Mn(3e4,r),windowsHide:!0,maxBuffer:33554432}),t=JSON.parse(e.stdout),n=Array.isArray(t)?t:t===null?[]:[t],s=[];for(let i of n){let o=typeof i.Name=="string"?i.Name.trim():"";if(!o)continue;let a=typeof i.ProcessId=="number"?i.ProcessId:Number.parseInt(String(i.ProcessId),10),c=typeof i.ParentProcessId=="number"?i.ParentProcessId:Number.parseInt(String(i.ParentProcessId),10);!Number.isInteger(a)||!Number.isInteger(c)||s.push({pid:a,ppid:c,name:o,cmdline:typeof i.CommandLine=="string"?i.CommandLine:null,startToken:typeof i.StartToken=="string"&&i.StartToken.length>0?i.StartToken:null})}return s}catch(e){return d.warn("PROCESS","Cannot enumerate the Windows process table with names \u2014 ghost-port reclaim disabled",{error:e instanceof Error?e.message:String(e)}),null}}async function hm(r,e){try{let t=await Rn("netstat",["-ano"],{timeout:Mn(15e3,e),windowsHide:!0,maxBuffer:16777216});return ym(t.stdout,r)}catch(t){return d.warn("PROCESS","netstat failed \u2014 ghost-port reclaim disabled for this attempt",{port:r,error:t instanceof Error?t.message:String(t)}),null}}async function _m(r,e){try{let t=await Rn("lsof",["-nP",`-iTCP:${r}`,"-sTCP:LISTEN","-t"],{timeout:Mn(1e4,e),maxBuffer:1048576});return Em(t.stdout)}catch(t){let n=t;return n.code===1&&typeof n.stdout=="string"&&n.stdout.trim()===""?[]:(d.warn("PROCESS","lsof failed \u2014 cannot verify the worker port owner",{port:r,error:t instanceof Error?t.message:String(t)}),null)}}function Em(r){let e=new Set;for(let t of r.split(/\r?\n/)){let n=Number.parseInt(t.trim(),10);Number.isInteger(n)&&n>0&&e.add(n)}return[...e]}async function Sm(r,e){try{let n=(await Rn("ps",["-p",String(r),"-o","command="],{timeout:Mn(5e3,e)})).stdout.trim();return n.length>0?n:null}catch{return null}}function ym(r,e){let t=new Set,n=`:${e}`;for(let s of r.split(/\r?\n/)){let i=s.trim();if(!/^TCP\b/i.test(i))continue;let o=i.split(/\s+/);if(!o[1]?.endsWith(n)||o[3]!=="LISTENING")continue;let c=Number.parseInt(o[4]??"",10);Number.isInteger(c)&&c>0&&t.add(c)}return[...t]}var bm=/worker-service/i,il=1500,ol=1e3,Bi=5500,rl=2*il+ol+Bi;async function wm(r,e){let t=e.readOwnedWorker();if(t===null||t.port!==r)return null;let n=(l,u={})=>(d.info("PROCESS","Wedged-worker reclaim declined",{port:r,pid:t.pid,reason:l,...u}),{reclaimed:!1,reason:l,killedPids:[]}),s=(e.now()-Date.parse(t.startedAt))/1e3;if(!Number.isFinite(s)||s<e.minOwnerAgeSeconds)return n("owner-booting",{ageSeconds:s,minOwnerAgeSeconds:e.minOwnerAgeSeconds});for(let l=0;l<2;l++)if(l>0&&await e.sleep(ol),await e.probeHealth(r))return n("owner-responding");let i=await e.listOwners(r);if(i===null)return n("netstat-unreadable");if(!i.includes(t.pid))return d.info("PROCESS","Wedged-worker reclaim: our worker does not own the port \u2014 deferring to the ghost-listener check",{port:r,pid:t.pid,listeners:i}),null;let o=await e.readIdentity(t.pid),a=t.startToken!==void 0&&o.startToken!==null&&o.startToken!==t.startToken;if(a||o.cmdline===null||!bm.test(o.cmdline))return n("owner-identity-mismatch",{tokenMismatch:a,hasCmdline:o.cmdline!==null});if(!e.hasKillBudget())return n("out-of-budget");d.warn("PROCESS","Reclaiming wedged worker: past its boot grace, silent on two health probes, and still holding the port",{port:r,pid:t.pid,ageSeconds:Math.round(s)});try{await e.killTree(t.pid,{expectedStartToken:o.startToken??t.startToken??void 0,signalMode:"graceful"})}catch(l){return d.error("PROCESS","Wedged-worker reclaim tree-kill failed",{port:r,pid:t.pid},l instanceof Error?l:new Error(String(l))),{reclaimed:!1,reason:"kill-failed",killedPids:[]}}let c=await e.listOwners(r);return c!==null&&c.length===0?(d.info("PROCESS","Wedged worker reclaimed \u2014 port is free again",{port:r,killedPids:[t.pid]}),{reclaimed:!0,killedPids:[t.pid]}):(d.warn("PROCESS","Wedged-worker reclaim killed the worker but the port is still bound",{port:r,pid:t.pid,stillOwnedBy:c}),{reclaimed:!1,reason:"still-bound",killedPids:[t.pid]})}async function Tm(r,e,t,n){let s=Pe(r),i=e?(await t(n))?.find(o=>o.pid===r)?.cmdline??null:await Sm(r,n);return be(r,s)?{startToken:s,cmdline:i}:{startToken:null,cmdline:null}}async function al(r,e={}){let t=e.isWin32??(()=>process.platform==="win32"),n=e.now??Date.now,s=e.deadlineAt??null,i=S=>s!==null&&s-n()<S,o=()=>s===null?void 0:Math.max(1,s-n());if(i(rl))return d.info("PROCESS","Port reclaim skipped: not enough of the hook budget is left to finish one",{port:r,remainingMs:o(),neededMs:rl}),{reclaimed:!1,reason:"out-of-budget",killedPids:[]};let a=e.listOwners??((S,I)=>t()?hm(S,I):_m(S,I)),c=S=>a(S,o()),l=e.readTable??mm,u=()=>l(o()),f=e.killTree??((S,I)=>ue(S,I)),p=e.dataDir??(()=>F),g=e.readIdentity??((S,I)=>Tm(S,t(),l,I)),m=await wm(r,{listOwners:c,killTree:f,readOwnedWorker:e.readOwnedWorker??ze,probeHealth:e.probeHealth??(S=>Jc(S,il)),readIdentity:S=>g(S,o()),minOwnerAgeSeconds:e.minOwnerAgeSeconds??ka(),now:n,sleep:e.sleep??(S=>new Promise(I=>setTimeout(I,S))),hasKillBudget:()=>!i(Bi)});if(m!==null)return m;if(!t())return{reclaimed:!1,reason:"not-supported",killedPids:[]};let h=await c(r);if(h===null)return{reclaimed:!1,reason:"netstat-unreadable",killedPids:[]};if(h.length===0)return{reclaimed:!1,reason:"no-listener",killedPids:[]};let _=await u();if(_===null)return{reclaimed:!1,reason:"table-unreadable",killedPids:[]};if(h.filter(S=>z(S)).length>0)return{reclaimed:!1,reason:"owner-alive",killedPids:[]};let y=new Map;for(let S of _){let I=y.get(S.ppid);I?I.push(S):y.set(S.ppid,[S])}let w=new Map,A=new Set,T=S=>{for(let I of y.get(S)??[])A.has(I.pid)||(A.add(I.pid),T(I.pid),tl(I.name)&&w.set(I.pid,I))};for(let S of h)T(S);let P=p();if(P)for(let S of _)w.has(S.pid)||tl(S.name)&&gm(S.cmdline,P)&&w.set(S.pid,S);if(w.size===0)return d.info("PROCESS","Ghost listener owner is dead but no chroma-sidecar descendants found",{port:r,deadOwners:h,processTableRows:_.length,dataDir:P??"(unresolved)"}),{reclaimed:!1,reason:"no-chroma-descendants",killedPids:[]};d.warn("PROCESS","Reclaiming ghost listener: killing dead worker's surviving chroma sidecar chain",{port:r,deadOwners:h,targets:[...w.values()].map(S=>({pid:S.pid,name:S.name}))});let b=[];for(let S of w.values()){if(i(Bi))return d.info("PROCESS","Ghost-listener reclaim stopped before a kill: the hook budget is spent",{port:r,killedPids:b}),{reclaimed:!1,reason:"out-of-budget",killedPids:b};try{await f(S.pid,{expectedStartToken:S.startToken,signalMode:"immediate"}),b.push(S.pid)}catch(I){return d.error("PROCESS","Ghost-port reclaim tree-kill failed",{port:r,pid:S.pid},I instanceof Error?I:new Error(String(I))),{reclaimed:!1,reason:"kill-failed",killedPids:b}}}let v=await c(r);return v!==null&&v.length===0?(d.info("PROCESS","Ghost listener reclaimed \u2014 port is free again",{port:r,killedPids:b}),{reclaimed:!0,killedPids:b}):(d.warn("PROCESS","Ghost-port reclaim killed the sidecar chain but the port is still bound",{port:r,killedPids:b,stillOwnedBy:v}),{reclaimed:!1,reason:"still-bound",killedPids:b})}le();var Pt=require("fs"),ll=require("module"),Ye=Ee(require("path"),1),Am=["zod/v3","zod/v4","zod/v4-mini"];function cl(r){try{return(0,Pt.realpathSync)(r)}catch{return r}}function vm(r,e){let t=Ye.default.relative(e,r);return t!==""&&!t.startsWith("..")&&!Ye.default.isAbsolute(t)}function ul(r){let e;try{let s=JSON.parse((0,Pt.readFileSync)(Ye.default.join(r,"package.json"),"utf-8"));e=Object.keys(s?.dependencies??{})}catch{return[]}if(e.length===0)return[];let t=Ye.default.join(r,"node_modules"),n=e.filter(s=>!(0,Pt.existsSync)(Ye.default.join(t,...s.split("/"),"package.json")));if(e.includes("zod")&&!n.includes("zod")){let s=(0,ll.createRequire)(Ye.default.join(t,"noop.js")),i=cl(Ye.default.join(t,"zod"));for(let o of Am)try{let a=s.resolve(o,{paths:[t]});vm(cl(a),i)||n.push(o)}catch{n.push(o)}}return n}function Tl(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 ft=Tl("CLAUDE_MEM_HEALTH_TIMEOUT_MS",Me(Y.HEALTH_CHECK),{min:500,max:3e5}),rr=Tl("CLAUDE_MEM_HOOK_READINESS_TIMEOUT_MS",Me(Y.HOOK_READINESS_WAIT),{min:0,max:3e5}),Rm=5e3,Mm={min:500,max:3e5},Cm={min:500,max:Y.SESSION_INIT_REQUEST_MAX},Gi=100;function Al(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 Pm(r){return Al()?{...r,verbose:!0}:r}function Im(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 Om(r,e,t){let n=typeof e.method=="string"?e.method:"GET",s=Im(t),i=JSON.stringify(s);d.warn("SYSTEM","Worker IPC fetch failed",{url:r,method:n},i),Ne(`[claude-mem] fetch verbose: ${n} ${r} ${i}
22
+ `)}async function zi(r,e={}){let t=Pm(e);try{return await fetch(r,t)}catch(n){throw Al()&&Om(r,e,n),n}}async function Vi(r,e={},t){try{return await zi(r,{...e,signal:AbortSignal.timeout(t)})}catch(n){throw n instanceof DOMException&&n.name==="TimeoutError"?new Error(`Request timed out after ${t}ms`):n}}function km(r,e){let t=new AbortController,n=null,s=null,i=null,o=!1,a=()=>{s!==null&&(clearTimeout(s),s=null)},c=()=>{o=!0,a(),i!==null&&(clearTimeout(i),i=null)},l=f=>{o||(n=f,c(),t.abort(f))},u=()=>{o||(a(),s=setTimeout(()=>l(new Error(`Request timed out after ${r.idleTimeoutMs}ms idle`)),r.idleTimeoutMs))};if(r.absoluteCapMs!==void 0&&r.absoluteCapMs>0){let f=r.absoluteCapMs;i=setTimeout(()=>l(new Error(`Request timed out after ${f}ms`)),f)}return u(),{signal:e?AbortSignal.any([e,t.signal]):t.signal,touch:u,pause:a,dispose:c,translate:f=>n??f}}async function vl(r,e,t){let n=km(t,e.signal),s;try{s=await zi(r,{...e,signal:n.signal})}catch(l){throw n.dispose(),n.translate(l)}n.touch();let i=s.body,o=i?i.getReader():null,a=!1;async function*c(){if(!o){a=!0,n.dispose();return}try{for(;;){n.touch();let l;try{l=await o.read()}catch(u){throw a=!0,n.translate(u)}if(l.done){a=!0;return}n.pause(),t.onChunk?.(l.value),yield l.value}}finally{n.dispose(),a||await o.cancel()}}return{status:s.status,statusText:s.statusText,ok:s.ok,headers:s.headers,chunks:c(),cancel:async()=>{n.dispose(),o&&!a&&(a=!0,await o.cancel())}}}async function Dm(r,e,t){let n=await vl(r,e,t),s=new TextDecoder,i="";for await(let o of n.chunks)i+=s.decode(o,{stream:!0});return i+=s.decode(),{status:n.status,statusText:n.statusText,ok:n.ok,headers:n.headers,text:i}}var Wi=null,Hi=null,Cn=null,Pn=null,In=null;function dl(){return D.default.join($.get("CLAUDE_MEM_DATA_DIR"),"settings.json")}function Yi(r={}){return r.readOnly?$.loadFromFile(dl(),!0,r):(Cn!==null||(Cn=$.loadFromFile(dl())),Cn)}function fl(r,e){if(!r)return null;let t=parseInt(r,10);return Number.isFinite(t)&&t>=e.min&&t<=e.max?t:null}function Rl(r,e,t){let n=process.env[r];if(n!==void 0){let o=fl(n,t);return o!==null?o:(d.warn("SYSTEM",`Invalid ${r}, using default`,{value:n,min:t.min,max:t.max}),e)}let s=Yi()[r],i=fl(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 fe(r={}){if(!r.readOnly&&Wi!==null)return Wi;let e=parseInt(Yi(r).CLAUDE_MEM_WORKER_PORT,10);return r.readOnly||(Wi=e),e}function qi(r={}){if(!r.readOnly&&Hi!==null)return Hi;let e=Yi(r).CLAUDE_MEM_WORKER_HOST;return r.readOnly||(Hi=e),e}function xm(){return Pn!==null||(Pn=Rl("CLAUDE_MEM_API_TIMEOUT_MS",Me(Y.API_REQUEST),Mm)),Pn}function Ml(){return In!==null||(In=Math.min(Rl("CLAUDE_MEM_SESSION_INIT_TIMEOUT_MS",qt(),Cm),Da())),In}function Ji(r){return r===null?null:Math.max(0,r-Date.now())}function kn(r){let e=Ji(r);return e!==null&&e<Gi}function qe(r,e){let t=Ji(e);return t===null?r:Math.max(1,Math.min(r,t))}function Cl(r){return`http://${ci(qi())}:${fe()}${r}`}function Ie(r,e={}){let t=e.method??"GET",n=Cl(r),s={method:t};if(e.headers&&(s.headers=e.headers),e.body&&(s.body=e.body),e.idleTimeoutMs!==void 0&&e.idleTimeoutMs>0)return Dm(n,s,{idleTimeoutMs:e.idleTimeoutMs,absoluteCapMs:e.timeoutMs}).then(o=>new Response(o.text.length>0?o.text:null,{status:o.status,statusText:o.statusText,headers:o.headers}));let i=e.timeoutMs??xm();return i>0?Vi(n,s,i):zi(n,s)}async function Lm(r){return(await Ie("/api/health",{timeoutMs:r})).ok}async function pl(r=ft){return(await Ie("/api/readiness",{timeoutMs:r})).ok}function Pl(r){let e=(0,C.existsSync)(D.default.join(r,"plugin","scripts"))?D.default.join(r,"plugin"):r;return D.default.join(e,"scripts","worker-service.cjs")}function Fm(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 Nm(r=D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem")){try{return(0,C.readdirSync)(r).filter(e=>/^\d/.test(e)).map(e=>D.default.join(r,e)).filter(e=>{try{if(!(0,C.statSync)(e).isDirectory())return!1}catch{return!1}return!(0,C.existsSync)(D.default.join(e,".orphaned_at"))}).map(e=>({scriptPath:Pl(e),version:D.default.basename(e)}))}catch{return[]}}function gl(r){try{let e=JSON.parse((0,C.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 Um(){return{cacheRoot:D.default.join(D.default.dirname(D.default.dirname(At)),"cache","thedotmack","claude-mem"),marketplaceRoot:At,cwd:process.cwd()}}function Xi(r=Um()){let e=process.env.CLAUDE_MEM_WORKER_SCRIPT_PATH?.trim();if(e){if((0,C.existsSync)(e))return{scriptPath:e,version:null};d.debug("SYSTEM","Ignoring missing CLAUDE_MEM_WORKER_SCRIPT_PATH override",{override:e})}let t=[...Nm(r.cacheRoot),{scriptPath:Pl(D.default.join(r.marketplaceRoot,"plugin")),version:gl(D.default.join(r.marketplaceRoot,"package.json"))},{scriptPath:D.default.join(r.cwd,"plugin","scripts","worker-service.cjs"),version:gl(D.default.join(r.cwd,"package.json"))}];return Wm(t)}function $m(r){return D.default.dirname(D.default.dirname(r))}function Bm(r){return ul($m(r.scriptPath)).length===0}function Wm(r,e=Bm){let t=r.filter(n=>(0,C.existsSync)(n.scriptPath));return t.length===0?null:(t.sort((n,s)=>n.version===null&&s.version===null?0:n.version===null?1:s.version===null?-1:Fm(n.version,s.version)),t.find(e)??t[0])}function Hm(){return Xi()?.scriptPath??null}async function jm(r){let e=r.deadlineAt??null,t=r.backoffMs;for(let n=1;n<=r.attempts;n++){if(kn(e))return!1;if(await Ul(e??Number.POSITIVE_INFINITY))return!0;n<r.attempts&&(await new Promise(s=>setTimeout(s,qe(t,e))),t*=2)}return!1}function ml(r){return r instanceof Error&&/^Request timed out after \d+ms idle$/.test(r.message)}function hl(r){return r instanceof Error&&/^Request timed out after \d+ms$/.test(r.message)}async function Km(r){let e;try{e=await vl(Cl("/api/ready"),{method:"GET"},{idleTimeoutMs:Rm,absoluteCapMs:Math.max(1,r)})}catch(i){return ml(i)?{outcome:"unresponsive",detail:"no response headers within the idle window"}:hl(i)?{outcome:"still_booting",detail:"budget spent before response headers"}:(d.debug("SYSTEM","Worker /api/ready connection failed",{error:i instanceof Error?i.message:String(i)}),{outcome:"not_running"})}let t=()=>e.cancel().catch(i=>{d.debug("SYSTEM","Releasing the /api/ready body failed",{error:i instanceof Error?i.message:String(i)})}),n=e.headers?.get("content-type")??"";if(!e.ok||!n.includes("text/event-stream"))return Dn(),await t(),{outcome:"unsupported"};let s=null;try{for await(let i of Za(e.chunks)){if(i.event!=="phase")continue;let o=JSON.parse(i.data);if(s=typeof o.phase=="string"?o.phase:null,s==="ready")return Dn(),await t(),{outcome:"ready"};if(s==="failed")return await t(),{outcome:"failed",detail:typeof o.message=="string"?o.message:"unknown init failure"}}}catch(i){return hl(i)?(Dn(),{outcome:"still_booting",detail:`last phase ${s??"none"}`}):ml(i)?{outcome:"unresponsive",detail:`silent past the idle window after response headers (last phase ${s??"none"})`}:{outcome:"wedged",detail:`stream error: ${i instanceof Error?i.message:String(i)} (last phase ${s??"none"})`}}return{outcome:"wedged",detail:`stream closed before ready/failed (last phase ${s??"none"})`}}async function Gm(r){if(r<=0)try{return await pl()?{outcome:"ready"}:{outcome:"still_booting"}}catch(t){return d.debug("SYSTEM","Worker readiness check threw",{},t instanceof Error?t:new Error(String(t))),{outcome:"still_booting"}}let e=Date.now();do{let t=r-(Date.now()-e);try{if(await pl(Math.max(1,Math.min(ft,t))))return{outcome:"ready"}}catch(s){d.debug("SYSTEM","Worker readiness check threw",{error:s instanceof Error?s.message:String(s)})}let n=r-(Date.now()-e);if(n<=0)break;await new Promise(s=>setTimeout(s,Math.min(250,n)))}while(Date.now()-e<r);return{outcome:"still_booting",detail:"legacy /api/readiness never reported ready"}}async function It(r=rr){let e=r>0?r:ft,t=await Km(e);return t.outcome==="ready"&&Qm(),t.outcome!=="unsupported"?t:(d.debug("SYSTEM","Worker has no /api/ready stream; falling back to /api/readiness"),Gm(r))}async function zm(r=ft){try{let t=await(await Ie("/api/health",{timeoutMs:r})).json();return typeof t.version=="string"?t.version:null}catch(e){let t=e instanceof Error?e:new Error(String(e));return d.debug("SYSTEM","Worker health-version fetch failed",{},t),null}}async function Vm(r=5e3){let e=Date.now()+r;for(;;){let t=e-Date.now();if(t<=0)return!1;if(await An(fe(),Math.min(1e3,t))==="free")return!0;let n=Math.min(200,e-Date.now());n>0&&await new Promise(s=>setTimeout(s,n))}}function Il(r,e){if(!r)return null;try{let t=(0,C.statSync)(r.scriptPath);return JSON.stringify([r.scriptPath,e,t.size,t.mtimeMs,t.ctimeMs])}catch{return null}}function Ol(){return D.default.join(ie(),"worker-version-recycle.json")}function Ym(r,e){if(r===null||e===null)return!1;try{let t=JSON.parse((0,C.readFileSync)(Ol(),"utf-8"));return t?.buildKey===r&&t?.workerVersion===e}catch{return!1}}async function _l(r,e=null,t=ft){let n=await zm(t);if(n!==null&&n!==r){if(e!==null)try{j(Ol(),{buildKey:e,workerVersion:n})}catch(s){d.warn("SYSTEM","Could not persist the failed worker version recycle",{error:s instanceof Error?s.message:String(s)})}d.warn("SYSTEM","Worker is ready but still reports a stale version; rebuild or reinstall the worker bundle before retrying",{pluginVersion:r,workerVersion:n})}}var kl=3e4;function Qi(){return D.default.join(ie(),"worker-unresponsive.json")}function qm(){try{let r=JSON.parse((0,C.readFileSync)(Qi(),"utf-8"));return typeof r?.pid!="number"||typeof r?.firstUnresponsiveAtEpochMs!="number"?null:{pid:r.pid,firstUnresponsiveAtEpochMs:r.firstUnresponsiveAtEpochMs}}catch{return null}}function Dn(){let r=Qi();if((0,C.existsSync)(r))try{(0,C.unlinkSync)(r)}catch(e){d.debug("SYSTEM","Could not clear the unresponsive-worker record",{error:e instanceof Error?e.message:String(e)})}}function Jm(r=Date.now()){let e=ze()?.pid??null;if(e===null)return!1;let t=qm();if(t!==null&&t.pid===e)return r-t.firstUnresponsiveAtEpochMs>=kl;try{j(Qi(),{pid:e,firstUnresponsiveAtEpochMs:r})}catch(n){d.warn("SYSTEM","Could not persist the unresponsive-worker record",{error:n instanceof Error?n.message:String(n)})}return!1}function Zi(){return D.default.join(ie(),"worker-never-ready-recycle.json")}function Xm(){try{let r=JSON.parse((0,C.readFileSync)(Zi(),"utf-8"));return typeof r?.buildKey!="string"||typeof r?.failureMessage!="string"?null:{buildKey:r.buildKey,failureMessage:r.failureMessage,refusalLogged:r.refusalLogged===!0}}catch{return null}}function Dl(r){try{j(Zi(),r)}catch(e){d.warn("SYSTEM","Could not persist the never-ready worker recycle",{error:e instanceof Error?e.message:String(e)})}}function Qm(){let r=Zi();if((0,C.existsSync)(r))try{(0,C.unlinkSync)(r)}catch(e){d.debug("SYSTEM","Could not clear the never-ready worker recycle record",{error:e instanceof Error?e.message:String(e)})}}function xl(r){return Il(r,r?.version??"unknown")??"unresolved-worker-bundle"}function Ll(r){return r.outcome==="failed"?r.detail??"unknown init failure":r.outcome}function Fl(r,e){if(r.outcome==="unresponsive"&&!Jm())return d.warn("SYSTEM","Worker went silent on /api/ready; skipping this hook without killing it",{detail:r.detail,wedgedAfterMs:kl}),!1;let t=Ll(r),n=Xm();return n!==null&&n.buildKey===e&&n.failureMessage===t?(n.refusalLogged?d.debug("SYSTEM","Never-ready worker recycle already refused for this bundle and failure",{failureMessage:t}):(d.error("SYSTEM","Worker keeps failing to start the same way after a recycle; not recycling again. Run `npx claude-mem doctor` and check the worker logs",{outcome:r.outcome,failureMessage:t,logsDir:D.default.join(ie(),"logs")}),Dl({...n,refusalLogged:!0})),!1):!0}function Nl(r,e){Dl({buildKey:e,failureMessage:Ll(r)}),Dn()}async function Ul(r=Number.POSITIVE_INFINITY){let e=r-Date.now();if(e<=0)return!1;let t;try{t=await Lm(Math.min(ft,e))}catch(n){return d.debug("SYSTEM","Worker health check threw",{error:n instanceof Error?n.message:String(n)}),!1}return t}async function $l(r,e){let t=ze();if(t===null||t.port!==fe())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:fe(),pidFilePid:t?.pid??null,pidFilePort:t?.port??null}),!1;if(e("stale-worker recycle"))return!1;try{await ue(t.pid,{signalMode:"immediate"})}catch(n){return d.error("SYSTEM","Could not kill stale worker",{pid:t.pid,port:t.port},n instanceof Error?n:new Error(String(n))),!1}return await Vm(qe(5e3,r))?!0:(e("stale port release")||(dt=fe(),d.error("SYSTEM","Stale worker port still open after SIGKILL; skipping spawn this hook event",{pid:t.pid,port:fe(),fix:Ln})),!1)}async function xn(r){let e=r===void 0?null:Date.now()+r,t=h=>kn(e)?(d.warn("SYSTEM","Worker check ran out of the hook budget; skipping the rest this hook event",{step:h,budgetMs:r}),!0):!1,n=()=>e===null?void 0:qe(ft,e),s=Math.min(Date.now()+5e3,e??Number.POSITIVE_INFINITY),i=Xi(),o=null,a=null,c=!1,l=null,u=null,f=tn(re());if(t("health probe"))return!1;if(await Ul(s)){if(t("version probe"))return!1;let{matches:h,pluginVersion:_,workerVersion:E}=await Xc(fe(),i?.version??null,n());if(_!=="unknown"&&(o=_),h){if(t("readiness wait"))return!1;let y=await It(qe(rr,e));if(y.outcome==="ready")return o!==null&&!kn(e)&&await _l(o,null,n()),!0;if(y.outcome==="still_booting"||y.outcome==="not_running")return d.warn("SYSTEM","Worker is healthy but not ready yet; skipping hook API call",{outcome:y.outcome,detail:y.detail}),!1;if(f)return d.warn("SYSTEM","Worker will never become ready; CLAUDE_MEM_WORKER_AUTOSTART=false, so leaving it to whatever manages it",{outcome:y.outcome,detail:y.detail}),!1;if(u=xl(i),!Fl(y,u))return!1;l=y,d.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:y.outcome,detail:y.detail,version:E})}else{if(f)return d.warn("SYSTEM","Worker version differs from the installed plugin; CLAUDE_MEM_WORKER_AUTOSTART=false, so using it as is",{pluginVersion:_,workerVersion:E}),t("readiness wait")?!1:(await It(qe(rr,e))).outcome==="ready";if(a=Il(i,_),Ym(a,E))return d.warn("SYSTEM","Skipping repeated worker recycle: the unchanged bundle still reports a stale version; rebuild or reinstall it",{pluginVersion:_,workerVersion:E,scriptPath:i?.scriptPath}),t("readiness wait")?!1:(await It(qe(rr,e))).outcome==="ready";d.info("SYSTEM","Worker version mismatch \u2014 killing stale worker",{pluginVersion:_,workerVersion:E})}if(!await $l(e,t))return!1;l!==null&&u!==null&&Nl(l,u),c=!0}if(f)return d.debug("SYSTEM","Worker not running and CLAUDE_MEM_WORKER_AUTOSTART=false \u2014 not lazy-spawning"),!1;let p=i?.scriptPath??null;if(t("lazy spawn"))return!1;let g=Ui();try{if(g){if(!c&&!await Zm(s,e))return!1;let _=Di();if(!_)return d.warn("SYSTEM","Cannot lazy-spawn worker: Bun runtime not found (PATH, BUN / BUN_PATH / BUN_INSTALL, or ~/.bun/bin)"),!1;if(!p)return d.warn("SYSTEM","Cannot lazy-spawn worker: worker-service.cjs not found in plugin/scripts"),!1;d.info("SYSTEM","Worker not running \u2014 lazy-spawning",{runtimePath:_,scriptPath:p});try{if(Li(_,p,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Ji(e)??void 0)===void 0)return!1}catch(E){return E instanceof Error?d.error("SYSTEM","Lazy-spawn of worker failed",{runtimePath:_,scriptPath:p},E):d.error("SYSTEM","Lazy-spawn of worker failed (non-Error)",{runtimePath:_,scriptPath:p,error:String(E)}),!1}}else d.info("SYSTEM","Another launcher holds the spawn lock \u2014 skipping lazy-spawn and waiting for its worker");if(!await jm({attempts:6,backoffMs:500,deadlineAt:e}))return t("cold-boot port wait")||(d.warn("SYSTEM",g?"Worker port did not open after lazy-spawn within the cold-boot wait (~15s)":"Spawn-lock holder's worker port did not open within the cold-boot wait (~15s)"),ze()===null&&await qc(fe(),e===null?void 0:qe(5e3,e))&&(dt=fe(),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:dt,fix:Ln}))),!1}finally{g&&$i()}if(t("readiness wait"))return!1;let m=await It(qe(rr,e));return m.outcome!=="ready"?(d.warn("SYSTEM","Worker lazy-spawned but did not become ready before hook readiness timeout",{outcome:m.outcome,detail:m.detail}),!1):(o!==null&&!kn(e)&&await _l(o,a,n()),!0)}var Ln="Set CLAUDE_MEM_WORKER_PORT to a different port in claude-mem settings, or reboot to release the stuck port",dt=null,Ki=null;async function Zm(r,e){let t=fe(),n=r-Date.now();if(n<=0)return!1;let s=await An(t,n);if(s==="free")return!0;if(s==="unbindable")return Ki=t,d.error("SYSTEM","Worker port cannot be bound (EACCES or EADDRNOTAVAIL) \u2014 skipping lazy-spawn",{port:t,host:qi(),fix:Fi}),!1;if(s==="indeterminate")return d.warn("SYSTEM","Worker port state could not be determined in time \u2014 skipping lazy-spawn",{port:t}),!1;let i=await al(t,{deadlineAt:e});return i.reclaimed?(d.info("SYSTEM","Reclaimed the worker port before lazy-spawn",{port:t,killedPids:i.killedPids}),!0):(ze()===null&&(dt=t),d.warn("SYSTEM","Worker port is held by a listener that does not answer health \u2014 skipping lazy-spawn",{port:t,reclaimReason:i.reason,...dt===t?{fix:Ln}:{}}),!1)}var On=null;async function eh(r){return On!==null||(On=await xn(r)),On}async function th(r){let e=Date.now()+r,t=()=>e-Date.now(),n=l=>t()>=Gi?!1:(d.debug("SYSTEM","Bounded worker startup ran out of budget",{step:l,budgetMs:r}),!0),s=await It(Math.max(1,t()));if(s.outcome==="ready")return!0;if(s.outcome==="still_booting")return d.warn("SYSTEM","Worker is still booting; bounded startup budget spent, skipping this call",{detail:s.detail,budgetMs:r}),!1;if(!!tn(re()))return El(e);let o=Di(),a=Hm();if(!o||!a)return!1;if(s.outcome==="failed"||s.outcome==="wedged"||s.outcome==="unresponsive"){let l=xl(Xi());if(!Fl(s,l)||(d.info("SYSTEM","Worker will never become ready \u2014 recycling wedged worker",{outcome:s.outcome,detail:s.detail}),!await $l(e,n)))return!1;Nl(s,l)}let c=Ui();try{return c&&Li(o,a,Ge({...process.env,CLAUDE_MEM_WORKER_PORT:String(fe())}),process.platform,Math.max(1,t()))===void 0?!1:await El(e)}catch(l){return d.debug("SYSTEM","Bounded worker startup failed",{error:l instanceof Error?l.message:String(l)}),!1}finally{c&&$i()}}async function El(r){for(;r-Date.now()>0;){let e=await It(Math.max(1,r-Date.now()));if(e.outcome==="ready")return!0;if(e.outcome!=="not_running")return d.debug("SYSTEM","Bounded worker startup did not reach ready",{outcome:e.outcome,detail:e.detail}),!1;let t=Math.min(100,r-Date.now());t>0&&await new Promise(n=>setTimeout(n,t))}return!1}var rh=3,Bl=20,Wl=1e3,nh=10,Hl=5e3,sh=Hl+Wl;function Fn(){return D.default.join(F,"state")}function jl(){return D.default.join(Fn(),"hook-failures.json")}function Kl(){return D.default.join(Fn(),"hook-failures.lock")}async function eo(r=Wl){let e=Fn(),t=Kl(),n=(0,wl.randomUUID)(),s=JSON.stringify({pid:process.pid,token:n}),i=Date.now()+r;for(;Date.now()<=i;)try{return(0,C.mkdirSync)(e,{recursive:!0}),(0,C.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,C.statSync)(t).mtimeMs}catch{continue}if(Date.now()-l>Hl){let u;try{u=(0,C.statSync)(t).mtimeMs}catch{continue}if(u===l)try{(0,C.unlinkSync)(t);continue}catch{}}await new Promise(u=>setTimeout(u,nh))}return d.warn("SYSTEM","Timed out waiting for hook-failure lock; skipping failure-state update",{lockPath:t,waitMs:r}),null}function to(r){let e=Kl();try{if(JSON.parse((0,C.readFileSync)(e,"utf-8")).token!==r)return;(0,C.unlinkSync)(e)}catch{}}function ih(r){let e=JSON.parse(r);return{consecutiveFailures:typeof e.consecutiveFailures=="number"&&Number.isFinite(e.consecutiveFailures)?Math.max(0,Math.floor(e.consecutiveFailures)):0,lastFailureAt:typeof e.lastFailureAt=="number"&&Number.isFinite(e.lastFailureAt)?e.lastFailureAt:0,thresholdTripped:e.thresholdTripped===!0,notifiedSessionIds:Array.isArray(e.notifiedSessionIds)?e.notifiedSessionIds.filter(t=>typeof t=="string").slice(-Bl):void 0}}function nr(){try{return ih((0,C.readFileSync)(jl(),"utf-8"))}catch{return{consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1}}}function ro(r){let e=Fn(),t=jl(),n=`${t}.tmp`;try{return(0,C.existsSync)(e)||(0,C.mkdirSync)(e,{recursive:!0}),(0,C.writeFileSync)(n,JSON.stringify(r),"utf-8"),(0,C.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 oh(){try{let e=re().CLAUDE_MEM_HOOK_FAIL_LOUD_THRESHOLD,t=parseInt(e,10);if(Number.isFinite(t)&&t>=1)return t}catch{}return rh}var Sl=null;function Gl(r){let e=Ki!==null?`The worker cannot bind port ${Ki} on ${qi()}: the system refuses it (EACCES or EADDRNOTAVAIL). ${Fi}.`:dt!==null?`Port ${dt} is held by an unreachable process that no PID file claims, so the worker cannot bind it. ${Ln}.`:"Run `npx claude-mem restart`; if it keeps failing, run `npx claude-mem doctor`.";return`claude-mem worker unreachable for ${r} consecutive hooks \u2014 memory features are degraded, but your prompts are not blocked. ${e}`}var ah=!1,yl=!1;async function ji(){if(ah){if(yl)return nr().consecutiveFailures;yl=!0}let r=await eo();if(r===null)return nr().consecutiveFailures;let e,t=!1;try{let n=nr();e={consecutiveFailures:n.consecutiveFailures+1,lastFailureAt:Date.now(),thresholdTripped:n.thresholdTripped,notifiedSessionIds:n.notifiedSessionIds};let s=oh();t=e.consecutiveFailures>=s&&!e.thresholdTripped,t&&(e.thresholdTripped=!0);let i=ro(e);t=t&&i}finally{to(r)}return t&&(await Pc("hook_failed",{...Sl!==null?{hook_type:Sl}:{},error_mode:"worker_unavailable",consecutive_failures:e.consecutiveFailures,threshold_tripped:!0}),Ne(`${Gl(e.consecutiveFailures)}
23
+ `)),e.consecutiveFailures}async function zl(r){if(!r)return null;let e=await eo();if(e===null)return null;try{let t=nr(),n=t.notifiedSessionIds??[];return!t.thresholdTripped||n.includes(r)?null:ro({...t,notifiedSessionIds:[...n,r].slice(-Bl)})?Gl(t.consecutiveFailures):null}finally{to(e)}}async function bl(){let r=await eo(sh);if(r!==null)try{let e=nr();if(e.consecutiveFailures===0&&!e.thresholdTripped)return;ro({consecutiveFailures:0,lastFailureAt:0,thresholdTripped:!1})}finally{to(r)}}var ut=Symbol.for("claude-mem/worker-fallback");function Vl(r){return typeof r=="object"&&r!==null&&r[ut]===!0}async function Yl(r,e,t,n={}){let s=Date.now(),i=n.workerStartupTimeoutMs!==void 0;if(!(i?await th(n.workerStartupTimeoutMs):await eh(n.timeoutMs)))return tn(re())?{continue:!0,reason:"worker_autostart_disabled",[ut]:!0}:(i||await ji(),{continue:!0,reason:"worker_unreachable",[ut]:!0});let a={method:e};if(t!==void 0&&(a.headers={"Content-Type":"application/json"},a.body=JSON.stringify(t)),n.timeoutMs!==void 0){let u=i?n.timeoutMs:n.timeoutMs-(Date.now()-s);if(u<Gi)return d.debug("SYSTEM","Hook budget spent before the worker request; skipping it",{url:r}),i||await ji(),{continue:!0,reason:"worker_budget_exhausted",[ut]:!0};a.timeoutMs=u}let c;try{c=await Ie(r,a)}catch(u){if(!i)throw u;return d.debug("SYSTEM","Worker unavailable for best-effort hook call",{error:u instanceof Error?u.message:String(u)}),{continue:!0,reason:"worker_unreachable",[ut]:!0}}if(!c.ok){let u=await c.text().catch(()=>"");if(await bl(),c.status===429||c.status>=500)return d.warn("SYSTEM",`Worker API ${e} ${r} returned ${c.status}; skipping hook API call`,{body:u.substring(0,200)}),{continue:!0,reason:`worker_api_${c.status}`,[ut]:!0};let f=u;try{f=JSON.parse(u)}catch{}return f}let l;try{l=await c.text()}catch(u){return d.debug("SYSTEM","Worker response body could not be read; treating the worker as unreachable",{error:u instanceof Error?u.message:String(u)}),i||await ji(),{continue:!0,reason:"worker_body_read_failed",[ut]:!0}}if(await bl(),l.length!==0)try{return JSON.parse(l)}catch{return l}}M();var Oe=require("path");U();var ch="plugins",lh="cache",uh="thedotmack",dh="claude-mem",fh="plugin",ph=(0,Oe.join)(rt,ch,lh,uh,dh),gh=(0,Oe.join)(At,fh);function no(r,e){let t=(0,Oe.normalize)(r),n=(0,Oe.normalize)(e);if(t===n)return!0;let s=(0,Oe.relative)(n,t);return s.length>0&&!s.startsWith("..")&&!(0,Oe.isAbsolute)(s)}function Nn(r){if(process.env.CLAUDE_MEM_INTERNAL==="1")return!1;if(!r)return!0;if(no(r,Jr)||no(r,ph)||no(r,gh))return!1;let e=re();return!Sn(r,e.CLAUDE_MEM_EXCLUDED_PROJECTS)}var ql="claude";function mh(r){return r.trim().toLowerCase().replace(/\s+/g,"-")}function Z(r){if(!r)return ql;let e=mh(r);return e?e==="transcript"||e.includes("codex")?"codex":e.includes("cursor")?"cursor":e.includes("claude")?"claude":e.includes("kimi")?"kimi":e==="pi-mono"?"pi":e==="agy"||e==="antigravity"||e.startsWith("antigravity-")?"antigravity-cli":e:ql}M();var Un=require("fs");M();U();le();var hh=[{name:"aws_access_key",regex:/AKIA[0-9A-Z]{16}/g},{name:"aws_secret_key",regex:/(?<=AWS_SECRET_ACCESS_KEY\s*[=:]\s*['"]?)[A-Za-z0-9/+=]{40}/g},{name:"github_pat",regex:/\bgh[oprs]_[A-Za-z0-9]{36}\b|\bgithub_pat_[A-Za-z0-9_]{82}\b/g},{name:"openai_key",regex:/\bsk-(?!ant-)[A-Za-z0-9_-]{20,}\b/g},{name:"anthropic_key",regex:/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g},{name:"slack_token",regex:/\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g},{name:"jwt",regex:/\beyJ[A-Za-z0-9_-]+\.eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g},{name:"private_key_pem",regex:/-----BEGIN (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |DSA |EC |OPENSSH |PGP )?PRIVATE KEY-----/g},{name:"stripe_key",regex:/\b(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9]{24,}\b/g},{name:"google_api_key",regex:/\bAIza[0-9A-Za-z_-]{35}\b/g},{name:"claude_mem_key",regex:/\bcmem_[A-Za-z0-9_-]{32,}|\bcm_pro_[A-Za-z0-9_-]{8,}/g}],_h=1024*1024,Eh="<redacted type='oversize'/>";function Ql(r,e){if(!e.enabled||r.length===0)return{redacted:r,counts:{},oversize:!1};if(r.length>_h)return d.warn("REDACT","field exceeds the 1M-char redaction cap; replaced by an oversize marker",void 0,{inputLength:r.length}),{redacted:Eh,counts:{oversize:1},oversize:!0};let t=new Set(e.disabledBuiltinPatterns??[]),n={},s=r,i=[];for(let a of e.customPatterns??[]){if(!a.name||a.name.length===0){d.warn("REDACT","custom pattern skipped: missing name",void 0,{pattern:a});continue}try{i.push({name:a.name,regex:new RegExp(a.regex,"g")})}catch(c){d.warn("REDACT","custom pattern skipped: invalid regex",{name:a.name},c instanceof Error?c:new Error(String(c)))}}let o=[...i,...hh];for(let a of o)t.has(a.name)||(a.regex.lastIndex=0,s=s.replace(a.regex,()=>(n[a.name]=(n[a.name]??0)+1,`<redacted type='${a.name}'/>`)));return e.logMatches&&Object.keys(n).length>0&&d.debug("REDACT","patterns matched",void 0,{counts:n}),{redacted:s,counts:n,oversize:!1}}function Sh(r){if(!r||r.trim()==="")return[];try{let e=JSON.parse(r);return Array.isArray(e)?e.filter(t=>t&&typeof t.name=="string"&&typeof t.regex=="string"):(d.warn("REDACT","CLAUDE_MEM_REDACT_CUSTOM_PATTERNS is not a JSON array, ignoring"),[])}catch(e){return d.warn("REDACT","failed to parse CLAUDE_MEM_REDACT_CUSTOM_PATTERNS as JSON",void 0,e instanceof Error?e:new Error(String(e))),[]}}function yh(r){return{enabled:r.CLAUDE_MEM_REDACT_ENABLED==="true",disabledBuiltinPatterns:(r.CLAUDE_MEM_REDACT_DISABLED_BUILTINS??"").split(",").map(e=>e.trim()).filter(Boolean),customPatterns:Sh(r.CLAUDE_MEM_REDACT_CUSTOM_PATTERNS??"[]"),logMatches:r.CLAUDE_MEM_REDACT_LOG_MATCHES==="true"}}var sr=null,Jl=0,bh=5e3,ir=null,Xl=!1,wh={enabled:!0,disabledBuiltinPatterns:[],customPatterns:[],logMatches:!1},Th=/"CLAUDE_MEM_REDACT_ENABLED"\s*:\s*"true"/;function Ah(r){if(!(0,Un.existsSync)(r))return null;try{return(0,Un.readFileSync)(r,"utf-8")}catch{return""}}function vh(r){if(r===null)return!1;try{let e=JSON.parse(Xs(r));return e===null||typeof e!="object"||Array.isArray(e)}catch{return!0}}function Rh(r,e,t){return process.env.CLAUDE_MEM_REDACT_ENABLED==="false"||!(ir?.enabled===!0||Th.test(e))?t:(Xl||(Xl=!0,d.warn("REDACT","settings.json could not be read; secret redaction stays on until it is repaired",{settingsPath:r,using:ir?.enabled?"the last configuration that loaded":"the built-in patterns"})),ir?.enabled?ir:wh)}function Zl(r=oe){let e=Date.now();if(sr&&e-Jl<bh)return sr;let t=$.loadFromFile(r),n=yh(t),s=n.enabled?null:Ah(r);return vh(s)?sr=Rh(r,s,n):(sr=n,ir=n),Jl=e,sr}var ru=["private","claude-mem-context","system_instruction","system-instruction","persisted-output","system-reminder"],eu=new RegExp(`<(${ru.join("|")})\\b[^>]*>[\\s\\S]*?</\\1>`,"g");var tu=100;function Mh(r){let e=Object.fromEntries(ru.map(i=>[i,0]));eu.lastIndex=0;let t=0,n=r.replace(eu,(i,o)=>(e[o]=(e[o]??0)+1,t+=1,""));return t>tu&&d.warn("SYSTEM","tag count exceeds limit",void 0,{tagCount:t,maxAllowed:tu,contentLength:r.length}),{stripped:Ql(n.trim(),Zl()).redacted,counts:e}}function so(r){return Mh(r).stripped}var Ch=["task-notification"],Ph=new RegExp(`^\\s*<(${Ch.join("|")})\\b[^>]*>(?:(?!<\\1\\b|</\\1\\b)[\\s\\S])*</\\1>\\s*$`),Ih=256*1024;function nu(r){return!r||r.length>Ih?!1:Ph.test(r)}var Oh=[/^You are a helpful assistant\. You will be presented with a user prompt, and your job is to provide a short title/,/^## Memory Writing Agent: Phase 2 \(Consolidation\)/,/^# Overview\r?\n(?:\r?\n)?Generate 0 to 3 hyperpersonalized suggestions/];function su(r){let e=r.trimStart();return Oh.some(t=>t.test(e))}M();var kh=Me(Y.API_REQUEST),$e=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)}},Bn=class{baseUrl;apiKey;timeoutMs;constructor(e){this.baseUrl=Dh(e.serverBaseUrl),this.apiKey=e.apiKey,this.timeoutMs=e.timeoutMs??kh}async startSession(e,t={}){let n=this.buildStartSessionPayload(e);return this.request("POST","/v1/sessions/start",n,t)}async recordEvent(e){let t=this.buildEventPayload(e),n=e.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,t)}async endSession(e){if(!e.sessionId)throw new $e("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(e.sessionId)}/end`,{})}async addObservation(e){return this.request("POST","/v1/memories",this.buildAddObservationPayload(e))}async searchObservations(e){return this.request("POST","/v1/search",this.buildSearchPayload(e))}async contextObservations(e,t={}){let n={projectId:e.projectId};return e.query!==void 0&&(n.query=e.query),e.limit!==void 0&&(n.limit=e.limit),e.summaryLimit!==void 0&&(n.summaryLimit=e.summaryLimit),e.platformSource!==void 0&&(n.platformSource=$n(e.platformSource)),e.folderProjects&&e.folderProjects.length>0&&(n.folderProjects=e.folderProjects),e.excludeSubagents!==void 0&&(n.excludeSubagents=e.excludeSubagents),this.request("POST","/v1/context",n,t)}async getJobStatus(e){if(!e)throw new $e("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(e)}`)}buildAddObservationPayload(e){let t=e.content,n=e.kind??"manual",s=typeof e.metadata?.title=="string"?e.metadata.title:void 0;return{projectId:e.projectId,kind:n,content:t,...s?{title:s}:{},...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}}}buildSearchPayload(e){return{projectId:e.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:$n(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:$n(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:$n(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{}}}async request(e,t,n,s={}){if(!this.apiKey||!this.apiKey.trim())throw new $e("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let i=`${this.baseUrl}${t}`,o={method:e,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(o.body=JSON.stringify(n));let a=f=>{let p=f instanceof Error?f.message:String(f),g=/timed out|timeout/i.test(p)||f instanceof Error&&(f.name==="TimeoutError"||f.name==="AbortError");return new $e(g?"timeout":"transport",`Server ${e} ${t} failed: ${p}`,{cause:f})},c,l=s.timeoutMs??this.timeoutMs;try{c=await Vi(i,o,l)}catch(f){throw a(f)}if(!c.ok){let f=await c.text().catch(()=>"");throw new $e("http_error",`Server ${e} ${t} returned ${c.status}: ${xh(f,200)}`,{status:c.status})}let u;try{u=await c.text()}catch(f){throw a(f)}if(!u||u.length===0)return{};try{return JSON.parse(u)}catch(f){let p=f instanceof Error?f:new Error(String(f));throw new $e("invalid_response",`Server ${e} ${t} returned non-JSON response`,{cause:p})}}};function Wn(r){return r instanceof $e}function Dh(r){return r.replace(/\/+$/,"")}function $n(r){return typeof r=="string"?Z(r):null}function xh(r,e){return r.length<=e?r:`${r.slice(0,e)}\u2026`}function Lh(){let e=(re().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return e==="server"||e==="server-beta"?"server":"worker"}function Fh(){let r=re(),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 Bn(i),projectId:s,serverBaseUrl:t}}function Hn(){if(Lh()!=="server")return{runtime:"worker"};let r=Fh();return r||{runtime:"worker"}}function jn(r,e){d.warn("HOOK",`[server-fallback] reason=${r}`,e??{})}var Nh={executeWithWorkerFallback:Yl,getSessionInitRequestTimeoutMs:Ml,isWorkerFallback:Vl,consumeWorkerOutageNotice:zl,loadFromFileOnce:re,resolveRuntimeContext:Hn,logServerFallback:jn,shouldTrackProject:Nn,readHookEnvironment:()=>process.env},we=Nh,Uh=2,io=500,$h=2e3;var Kn=class extends Error{constructor(t){super(`session-init did not record the prompt (${t})`);this.reason=t;this.name="SessionPromptNotRecordedError"}reason};function au(r){return Hh.run(r,!0)}var Bh=r=>r?r.replace(/\\/g,"/").includes("/.qwen/"):!1,Wh=(r,e=process.env)=>r?e.QWEN_PROJECT_DIR?!0:Bh(r):!1,Hh={async run(r,e){let{sessionId:t,prompt:n,submittedPrompt:s}=r,i=r.cwd??process.cwd();if(!t)return d.warn("HOOK","session-init: No sessionId provided, skipping (Codex CLI or unknown platform)"),{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS};if(!we.shouldTrackProject(i))return d.info("HOOK","Project excluded from tracking",{cwd:i}),{continue:!0,suppressOutput:!0};if(n&&nu(n))return d.debug("HOOK","session-init: skipping internal protocol payload",{preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(n&&Z(r.platform)==="codex"&&su(n))return d.debug("HOOK","session-init: skipping a Codex internal helper prompt",{reason:"internal_system_prompt",preview:n.slice(0,80)}),{continue:!0,suppressOutput:!0};if(s===null)return d.debug("HOOK","session-init: host reported no user-submitted text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};if(s===void 0&&!n?.trim()&&Wh(r.transcriptPath,we.readHookEnvironment()))return d.debug("HOOK","session-init: Qwen send carried no submitted_prompt and no prompt text; not storing a prompt",{sessionId:t}),{continue:!0,suppressOutput:!0};let o=s??n,a=!o||!o.trim()?"[media prompt]":o,c=ct(i),l=c.primary,u=Z(r.platform),f=we.loadFromFileOnce(),p=String(f.CLAUDE_MEM_SEMANTIC_INJECT).toLowerCase()==="true",g=we.resolveRuntimeContext(),m=Date.now(),h=we.getSessionInitRequestTimeoutMs();if(g.runtime==="server")try{return await jh(g,r,t,u,l,a,Math.max(io,Math.floor(h/Uh))),{continue:!0,suppressOutput:!0}}catch(T){if(Wn(T)&&T.isFallbackEligible())we.logServerFallback(T.kind,{status:T.status,message:T.message,route:"/v1/sessions/start"});else return d.error("HOOK","Server session-start failed (non-recoverable)",{error:T instanceof Error?T.message:String(T)}),{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS}}d.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:t,project:l});let _=iu(m,h);if(_<io){if(d.warn("HOOK","session-init: skipping the worker call because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:_}),e)throw new Kn("budget_exhausted");return{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS}}let E=await we.executeWithWorkerFallback("/api/sessions/init","POST",{contentSessionId:t,project:l,prompt:a,platformSource:u,cwd:i,projectKeySource:c.keySource},ou(u,_));if(we.isWorkerFallback(E)){if(e)throw new Kn("reason"in E?E.reason:"worker_fallback");let T=await we.consumeWorkerOutageNotice(t);return{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS,...T?{systemMessage:T}:{}}}if(typeof E?.sessionDbId!="number")return d.failure("HOOK","Session initialization returned malformed response",{contentSessionId:t,project:l}),{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS};let y=E.sessionDbId,w=E.promptNumber;if(d.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:y,promptNumber:w,skipped:E.skipped,contextInjected:E.contextInjected}),d.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${t} | prompt#=${w} | sessionDbId=${y}`),E.skipped&&E.reason==="private")return d.info("HOOK",`INIT_COMPLETE | sessionDbId=${y} | promptNumber=${w} | skipped=true | reason=private`,{sessionId:y}),{continue:!0,suppressOutput:!0};let A="";if(p&&a&&a.length>=20&&a!=="[media prompt]"){let T=f.CLAUDE_MEM_SEMANTIC_INJECT_LIMIT||"5",P=iu(m,h);if(P<io)d.warn("HOOK","session-init: skipping semantic injection because the prompt budget is spent",{contentSessionId:t,project:l,remainingMs:P});else{let b=await we.executeWithWorkerFallback("/api/context/semantic","POST",{q:a,project:l,projects:c.allProjects,limit:T,format:f.CLAUDE_MEM_SEMANTIC_INJECT_FORMAT,platformSource:u},ou(u,P));!we.isWorkerFallback(b)&&b?.context&&(d.debug("HOOK",`Semantic injection: ${b.count} observations for prompt`,{sessionId:y,count:b.count}),A=b.context)}}return d.info("HOOK",`INIT_COMPLETE | sessionDbId=${y} | promptNumber=${w} | project=${l}`,{sessionId:y}),A?{continue:!0,suppressOutput:!0,hookSpecificOutput:{hookEventName:"UserPromptSubmit",additionalContext:A}}:{continue:!0,suppressOutput:!0}}};async function jh(r,e,t,n,s,i,o){await r.client.startSession({projectId:r.projectId,externalSessionId:t,contentSessionId:t,agentId:e.agentId??null,agentType:e.agentType??null,platformSource:n,metadata:{project:s,prompt:i}},{timeoutMs:o}),d.info("HOOK","session-init: server session started",{contentSessionId:t,project:s})}function iu(r,e){return Math.max(0,e-(Date.now()-r))}function ou(r,e){return r==="codex"?{workerStartupTimeoutMs:Y.POST_SPAWN_WAIT,timeoutMs:Math.min($h,e)}:{timeoutMs:e}}var co=require("crypto"),K=require("fs"),ke=require("path");le();U();M();var Kh=["observation","file_edit","summarize","session_end","advisor_calls"],Gh=/^[a-z_]+-[A-Za-z0-9_-]+\.json$/,uu=/^[A-Za-z0-9_-]{1,128}$/,zh="corrupt",Vh="expired",cu=10080*60*1e3,Yh=300*1e3;function qh(){return(0,ke.join)(ie(),"state","hook-spool")}function lo(r){if(r===null||typeof r!="object")return JSON.stringify(r)??"null";if(Array.isArray(r))return`[${r.map(lo).join(",")}]`;let e=r;return`{${Object.keys(e).filter(n=>e[n]!==void 0).sort().map(n=>`${JSON.stringify(n)}:${lo(e[n])}`).join(",")}}`}function Jh(r,e){let t=e.toolUseId;return typeof t=="string"&&uu.test(t)?`${(0,co.createHash)("sha256").update(e.contentSessionId).update("\0").update(Z(e.platformSource)).digest("hex")}-${t}`:(0,co.createHash)("sha256").update(r).update("\0").update(e.contentSessionId).update("\0").update(lo(e)).digest("hex")}function lu(r){return typeof r=="string"&&r.length>0}function oo(r){let e;try{e=JSON.parse(r)}catch(i){return{corruptReason:`invalid JSON: ${i instanceof Error?i.message:String(i)}`}}if(e===null||typeof e!="object")return{corruptReason:"not an object"};let t=e;if(!Kh.includes(t.kind))return{corruptReason:`unknown kind ${JSON.stringify(t.kind)}`};if(typeof t.enqueuedAtEpochMs!="number"||!Number.isFinite(t.enqueuedAtEpochMs))return{corruptReason:"missing enqueuedAtEpochMs"};let n=t.payload;if(n===null||typeof n!="object"||!lu(n.contentSessionId))return{corruptReason:"payload missing contentSessionId"};let s=t.kind;return(s==="observation"||s==="file_edit")&&!lu(n.toolName)?{corruptReason:"observation payload missing toolName"}:s==="summarize"&&typeof n.lastAssistantMessage!="string"?{corruptReason:"summarize payload missing lastAssistantMessage"}:s==="advisor_calls"&&(!Array.isArray(n.calls)||n.calls.length===0)?{corruptReason:"advisor_calls payload has no calls"}:{kind:s,payload:{...n,platformSource:Z(n.platformSource)},enqueuedAtEpochMs:t.enqueuedAtEpochMs}}var ao=0;function Xh(){return ao=Math.max(Date.now(),ao+1),ao}var Gn=class{constructor(e=qh()){this.directory=e}directory;get corruptDirectory(){return(0,ke.join)(this.directory,zh)}get expiredDirectory(){return(0,ke.join)(this.directory,Vh)}enqueue(e,t,n){let s={...t,platformSource:Z(t.platformSource)},i=(0,ke.join)(this.directory,`${e}-${Jh(e,s)}.json`),o=s.toolUseId;if(typeof o=="string"&&uu.test(o)){let c=(0,ke.join)(this.directory,`${e}-${o}.json`);try{let l=oo((0,K.readFileSync)(c,"utf8"));!("corruptReason"in l)&&l.kind===e&&l.payload.contentSessionId===s.contentSessionId&&l.payload.platformSource===s.platformSource&&(i=c)}catch{}}let a=this.existingEnqueuedAt(i)??n??Xh();return j(i,{kind:e,payload:s,enqueuedAtEpochMs:a}),i}entries(){return this.readEntries().files.map(e=>e.entry)}async drain(e,t){let{files:n,quarantined:s}=this.readEntries(),i=0,o=0,a=0;t?.pruneConsumedBefore(Date.now()-cu);let c=new Set;for(let l of n){let u=l.filename.replace(/\.json$/,"");if(t?.isConsumed(u)){d.info("HOOK","Hook spool entry was already handed to ingest before a restart; removing it without ingesting again",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename}),this.unlinkEntry(l)?(t.clearConsumed(u),i++):o++;continue}let f=JSON.stringify([l.entry.payload.contentSessionId,l.entry.payload.platformSource]);if((l.entry.kind==="summarize"||l.entry.kind==="session_end")&&c.has(f)){o++;continue}let p=!1,g=()=>{if(!p){p=!0;try{t?.markConsumed(u,Date.now())}catch(h){d.error("HOOK","Could not record a hook spool hand-off marker; a crash before the file is removed would ingest it twice",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h)))}}},m;try{m=await e(l.entry,g)}catch(h){d.warn("HOOK",p?"Hook spool entry failed after ingest accepted it; removing it (a retry would send it twice)":"Hook spool entry failed to ingest; keeping it for the next drain",{kind:l.entry.kind,contentSessionId:l.entry.payload.contentSessionId,file:l.filename},h instanceof Error?h:new Error(String(h))),m=!1}if(p&&(m=!0),m==="expired"){this.expireIfPastWindow(l,Yh,"unknown-session grace window")?a++:o++;continue}if(!m){this.expireIfPastWindow(l,cu,"retry window")?a++:((l.entry.kind==="observation"||l.entry.kind==="file_edit")&&c.add(f),o++);continue}this.unlinkEntry(l)?(t?.clearConsumed(u),i++):o++}return{drained:i,retained:o,quarantined:s,expired:a}}unlinkEntry(e){try{return(0,K.unlinkSync)(e.path),!0}catch(t){return t.code==="ENOENT"?!0:(d.warn("HOOK","Hook spool entry was ingested but could not be removed",{kind:e.entry.kind,file:e.filename},t instanceof Error?t:new Error(String(t))),!1)}}expireIfPastWindow(e,t,n){let s=Date.now()-e.entry.enqueuedAtEpochMs;if(s<=t)return!1;let i={kind:e.entry.kind,contentSessionId:e.entry.payload.contentSessionId,ageMinutes:Math.round(s/6e4),ageHours:Math.round(s/36e5),file:e.filename,expiredDirectory:this.expiredDirectory};try{(0,K.mkdirSync)(this.expiredDirectory,{recursive:!0}),(0,K.renameSync)(e.path,(0,ke.join)(this.expiredDirectory,e.filename))}catch(o){return d.error("HOOK",`Hook spool entry is past its ${n} but could not be moved to expired/; keeping it`,i,o instanceof Error?o:new Error(String(o))),!1}return d.error("HOOK",`Hook spool entry was never accepted within its ${n}; moved to expired/`,i),!0}existingEnqueuedAt(e){if(!(0,K.existsSync)(e))return null;try{let t=oo((0,K.readFileSync)(e,"utf-8"));return"corruptReason"in t?null:t.enqueuedAtEpochMs}catch(t){return d.debug("HOOK","Could not read existing hook spool entry; writing a fresh one",{entryPath:e},t instanceof Error?t:new Error(String(t))),null}}quarantine(e,t){let n=(0,ke.join)(this.directory,e);try{return(0,K.mkdirSync)(this.corruptDirectory,{recursive:!0}),(0,K.renameSync)(n,(0,ke.join)(this.corruptDirectory,e)),d.error("HOOK","Quarantined corrupt hook spool entry",{file:e,reason:t,corruptDirectory:this.corruptDirectory}),!0}catch(s){return d.error("HOOK","Corrupt hook spool entry could not be quarantined; leaving it in place",{file:e,reason:t},s instanceof Error?s:new Error(String(s))),!1}}readEntries(){if(!(0,K.existsSync)(this.directory))return{files:[],quarantined:0};let e;try{e=(0,K.readdirSync)(this.directory).filter(s=>Gh.test(s))}catch(s){return d.warn("HOOK","Could not list hook spool entries",{directory:this.directory},s instanceof Error?s:new Error(String(s))),{files:[],quarantined:0}}let t=[],n=0;for(let s of e){let i=(0,ke.join)(this.directory,s),o;try{o=(0,K.readFileSync)(i,"utf-8")}catch(c){c.code!=="ENOENT"&&d.warn("HOOK","Could not read hook spool entry; will retry",{file:s},c instanceof Error?c:new Error(String(c)));continue}let a=oo(o);if("corruptReason"in a){this.quarantine(s,a.corruptReason)&&n++;continue}t.push({entry:a,path:i,filename:s})}return t.sort((s,i)=>s.entry.enqueuedAtEpochMs-i.entry.enqueuedAtEpochMs||s.filename.localeCompare(i.filename)),{files:t,quarantined:n}}};M();var Qh=250,du=new Set,or=null;function Zh(){if(or)return or;let r=(async()=>{try{await(await Ie("/api/spool/nudge",{method:"POST",timeoutMs:Qh})).body?.cancel()}catch(e){d.debug("HOOK","Hook spool nudge not delivered (worker will pick the entry up on its own)",{error:e instanceof Error?e.message:String(e)})}})();return or=r,du.add(r),r.finally(()=>{du.delete(r),or===r&&(or=null)}),r}function ar(r,e){let t=new Gn().enqueue(r,e);return d.debug("HOOK","Hook event spooled for the worker",{kind:r,entryPath:t}),Zh(),t}M();function zn(r,e){return e?new Set(e.split(",").map(n=>n.trim().toLowerCase()).filter(Boolean)).has(r.toLowerCase()):!1}var uo="write_file",fu={async execute(r){let{sessionId:e,cwd:t,filePath:n,edits:s}=r,i=Z(r.platform);if(!n)throw new Error("fileEditHandler requires filePath");if(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(!Nn(t))return d.debug("HOOK","Project excluded from tracking, skipping file edit observation",{cwd:t,filePath:n}),{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS};let o={filePath:n,edits:s},a={success:!0},c=Hn();if(c.runtime==="server"){if(zn(uo,re().CLAUDE_MEM_SKIP_TOOLS))return d.debug("HOOK","Server runtime: file edit excluded by CLAUDE_MEM_SKIP_TOOLS",{filePath:n}),{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS};let l={projectId:c.projectId,contentSessionId:e,platformSource:i,sourceType:"hook",eventType:"tool_use",occurredAtEpoch:Date.now(),payload:{tool_name:uo,tool_input:o,tool_response:a,cwd:t,platformSource:i}};try{return await c.client.recordEvent(l),d.debug("HOOK","File edit sent successfully via server",{filePath:n}),{continue:!0,suppressOutput:!0}}catch(u){if(Wn(u)&&u.isFallbackEligible())jn(u.kind,{status:u.status,message:u.message,route:"/v1/events"});else return d.error("HOOK","Server file edit failed (non-recoverable)",{error:u instanceof Error?u.message:String(u)}),{continue:!0,suppressOutput:!0,exitCode:Re.SUCCESS}}}return ar("file_edit",{contentSessionId:e,platformSource:i,toolName:uo,toolInput:o,toolResponse:a,cwd:t}),d.debug("HOOK","File edit observation spooled",{filePath:n}),{continue:!0,suppressOutput:!0}}};U();M();var Te=require("fs"),Yn=require("path");M();M();U();var cr="<claude-mem-context>",Vn="</claude-mem-context>";function pu(r){let e=r.indexOf(cr);if(e===-1)return null;let t=r.indexOf(Vn,e+cr.length);return t===-1?null:{start:r.lastIndexOf(cr,t),end:t+Vn.length}}var cR=B.settings();function gu(r,e){let t=`${cr}
24
24
  ${e}
25
- ${Kn}`;if(!r)return t;let n=uu(r);return n?r.substring(0,n.start)+t+r.substring(n.end):r+`
25
+ ${Vn}`;if(!r)return t;let n=pu(r);return n?r.substring(0,n.start)+t+r.substring(n.end):r+`
26
26
 
27
- ${t}`}C();function fu(r,e){if(!r)return;let t=(0,Gn.resolve)(r);if(t.includes("/.git/")||t.includes("\\.git\\")||t.endsWith("/.git")||t.endsWith("\\.git"))return;let n=(0,Gn.dirname)(r);(0,we.existsSync)(n)||(0,we.mkdirSync)(n,{recursive:!0});let s="";(0,we.existsSync)(r)&&(s=(0,we.readFileSync)(r,"utf-8"));let i=`# Memory Context
27
+ ${t}`}M();function mu(r,e){if(!r)return;let t=(0,Yn.resolve)(r);if(t.includes("/.git/")||t.includes("\\.git\\")||t.endsWith("/.git")||t.endsWith("\\.git"))return;let n=(0,Yn.dirname)(r);(0,Te.existsSync)(n)||(0,Te.mkdirSync)(n,{recursive:!0});let s="";(0,Te.existsSync)(r)&&(s=(0,Te.readFileSync)(r,"utf-8"));let i=`# Memory Context
28
28
 
29
- ${e}`,o=du(s,i),a=`${r}.tmp`;try{(0,we.writeFileSync)(a,o),(0,we.renameSync)(a,r)}catch(c){f.error("AGENTS_MD","Failed to write AGENTS.md",{agentsPath:r},c instanceof Error?c:new Error(String(c)))}}C();function Gh(r){let e=r.trim().replace(/^\$\.?/,"");if(!e)return[];let t=[],n=e.split(".");for(let s of n){let i=/([^[\]]+)|\[(\d+)\]/g,o;for(;(o=i.exec(s))!==null;)o[1]?t.push(o[1]):o[2]&&t.push(parseInt(o[2],10))}return t}function cr(r,e){if(!e)return;let t=Gh(e),n=r;for(let s of t){if(n==null)return;n=n[s]}return n}function pu(r){return r==null||r===""}function gu(r,e){if(r.startsWith("$watch.")){let t=r.slice(7);return e.watch[t]}if(r.startsWith("$schema.")){let t=r.slice(8);return e.schema[t]}if(r.startsWith("$session.")){let t=r.slice(9);return e.session?e.session[t]:void 0}if(r==="$cwd")return e.watch.workspace;if(r==="$project")return e.watch.project}function Ot(r,e,t){if(r!==void 0){if(typeof r=="string"){let n=gu(r,t);return n!==void 0?n:cr(e,r)}if(r.coalesce&&Array.isArray(r.coalesce))for(let n of r.coalesce){let s=Ot(n,e,t);if(!pu(s))return s}if(r.path){let n=gu(r.path,t);if(n!==void 0)return n;let s=cr(e,r.path);if(!pu(s))return s}if(r.value!==void 0)return r.value;if(r.default!==void 0)return r.default}}function mu(r,e,t){let n={};if(!r)return n;for(let[s,i]of Object.entries(r))n[s]=Ot(i,e,t);return n}function lr(r,e,t){if(!e)return!0;if(e.all!==void 0){if(!Array.isArray(e.all))return!1;for(let o of e.all)if(!lr(r,o,t))return!1}if(e.any!==void 0&&(!Array.isArray(e.any)||!e.any.some(o=>lr(r,o,t))))return!1;let n=e.path||t.eventTypePath||"type",s=n?cr(r,n):void 0,i=s==null||s==="";if(e.exists!==void 0&&(e.exists&&i||!e.exists&&!i)||e.equals!==void 0&&s!==e.equals||e.not_equals!==void 0&&s===e.not_equals||e.in&&Array.isArray(e.in)&&!e.in.includes(s)||e.not_in&&Array.isArray(e.not_in)&&e.not_in.includes(s)||e.contains!==void 0&&(typeof s!="string"||!s.includes(e.contains))||e.not_contains!==void 0&&typeof s=="string"&&s.includes(e.not_contains)||e.starts_with!==void 0&&(typeof s!="string"||!s.startsWith(e.starts_with))||e.not_starts_with!==void 0&&typeof s=="string"&&s.startsWith(e.not_starts_with))return!1;if(e.regex)try{if(!new RegExp(e.regex).test(String(s??"")))return!1}catch(o){return f.debug("WORKER","Invalid regex in match rule",{regex:e.regex},o instanceof Error?o:void 0),!1}return!0}C();function hu(r,e){return!!r&&!!e}var _u={skip:!1};function zh(r){return new Set((r??"").split(",").map(e=>e.trim()).filter(Boolean))}function Eu(r,e,t){return hu(r,e)?t.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS==="true"?{skip:!0,reason:"subagent_observation"}:e&&zh(t.CLAUDE_MEM_SKIP_AGENT_TYPES).has(e)?{skip:!0,reason:"agent_type_excluded"}:_u:_u}U();C();var zn=class{static checkUserPromptPrivacy(e,t,n,s,i,o){let a=e.getUserPrompt(t,n,i);return a===null?(f.warn("HOOK",`${s}: no user_prompts row for prompt #${n} \u2014 ingesting anyway (session-init likely raced worker boot; see #2794/#2795)`,{sessionId:i,contentSessionId:t,promptNumber:n,...o}),{allow:!0,prompt:""}):a.trim()===""?(f.debug("HOOK",`Skipping ${s} - user prompt was entirely private`,{sessionId:i,promptNumber:n,...o}),{allow:!1,reason:"private"}):{allow:!0,prompt:a}}};var kt=require("path");function yu(){let r=Vh();return async e=>{for(let t of e)t.module=r(t.filename);return e}}function Vh(r=process.argv[1]?(0,kt.dirname)(process.argv[1]):process.cwd(),e=kt.sep==="\\"){let t=e?Su(r):r;return n=>{if(!n)return;let s=e?Su(n):n,{dir:i,base:o,ext:a}=kt.posix.parse(s);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,-1*a.length));let c=decodeURIComponent(o);i||(i=".");let l=i.lastIndexOf("/node_modules");if(l>-1)return`${i.slice(l+14).replace(/\//g,".")}:${c}`;if(i.startsWith(t)){let u=i.slice(t.length+1).replace(/\//g,".");return u?`${u}:${c}`:c}return c}}function Su(r){return r.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var G={};op(G,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>us,DOMExceptionCoercer:()=>Ao,EXCEPTION_STEP_INTERNAL_FIELDS:()=>Sr,ErrorCoercer:()=>mr,ErrorEventCoercer:()=>vo,ErrorPropertiesBuilder:()=>gr,EventCoercer:()=>Ro,ExceptionStepsBuffer:()=>Io,ObjectCoercer:()=>_r,PrimitiveCoercer:()=>Er,PromiseRejectionEventCoercer:()=>Mo,ReduceableCache:()=>Co,StringCoercer:()=>hr,chromeStackLineParser:()=>yo,createDefaultStackParser:()=>To,createStackParser:()=>cd,geckoStackLineParser:()=>bo,getInjectedReleaseId:()=>aE,getUtf8ByteLength:()=>ud,nodeStackLineParser:()=>rd,opera10StackLineParser:()=>Zu,opera11StackLineParser:()=>ed,resolveExceptionStepsConfig:()=>Po,reverseAndStripFrames:()=>ad,stripReservedExceptionStepFields:()=>sE,winjsStackLineParser:()=>Qu});var ne=(function(r){return r.AnonymousId="anonymous_id",r.DistinctId="distinct_id",r.Props="props",r.EnablePersonProcessing="enable_person_processing",r.PersonMode="person_mode",r.FeatureFlagDetails="feature_flag_details",r.FeatureFlags="feature_flags",r.FeatureFlagPayloads="feature_flag_payloads",r.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",r.BootstrapFeatureFlags="bootstrap_feature_flags",r.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",r.OverrideFeatureFlags="override_feature_flags",r.Queue="queue",r.AiQueue="ai_queue",r.AiCaptureQueue="ai_capture_queue",r.LogsQueue="logs_queue",r.OptedOut="opted_out",r.SessionId="session_id",r.SessionStartTimestamp="session_start_timestamp",r.SessionLastTimestamp="session_timestamp",r.PersonProperties="person_properties",r.GroupProperties="group_properties",r.InstalledAppBuild="installed_app_build",r.InstalledAppVersion="installed_app_version",r.SessionReplay="session_replay",r.PushRegistered="push_registered",r.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",r.SurveyLastSeenDate="survey_last_seen_date",r.SurveysInProgress="surveys_in_progress",r.SurveysSeen="surveys_seen",r.Surveys="surveys",r.RemoteConfig="remote_config",r.FlagsEndpointWasHit="flags_endpoint_was_hit",r.DeviceId="device_id",r})({});function Je(r){let e=[];return JSON.stringify(r,function(t,n){if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;e.length>0&&e[e.length-1]!==this;)e.pop();if(e.includes(n))return"[Circular]";e.push(n)}return n}})??"null"}var Yh=Array.isArray,wu=Object.prototype,dR=wu.hasOwnProperty,Vn=wu.toString,ae=Yh||function(r){return Vn.call(r)==="[object Array]"};var ur=r=>r===Object(r)&&!ae(r);var $e=r=>r===void 0,J=r=>Vn.call(r)=="[object String]",ao=r=>J(r)&&r.trim().length===0,co=r=>r===null,Te=r=>$e(r)||co(r),Dt=r=>Vn.call(r)=="[object Number]"&&r===r;var Tu=r=>Vn.call(r)==="[object Boolean]";function Yn(r){return r===null||typeof r!="object"}function pt(r,e){return Object.prototype.toString.call(r)===`[object ${e}]`}function Xe(r){switch(Object.prototype.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Ru(r,Error)}}function Au(r){return pt(r,"ErrorEvent")}function xt(r){return"u">typeof Event&&Ru(r,Event)}function vu(r){return pt(r,"Object")}function Ru(r,e){try{return r instanceof e}catch{return!1}}var qh=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterestbot","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],qn=new Map,Jh=256;function Xh(r,e){let t="";for(let n=0;n<e.length;n++){let s=e[n];t+=s.length+":"+s}return r.length+":"+r+"|"+e.length+":"+t}var Mu=function(r,e=[]){if(!r)return!1;let t=Xh(r,e),n=qn.get(t);if(n!==void 0)return n;let s=r.toLowerCase(),i=qh.concat(e).some(o=>s.indexOf(o.toLowerCase())!==-1);return qn.size>=Jh&&qn.clear(),qn.set(t,i),i};function dr(r,e,t,n,s){return e>t&&(n.warn("min cannot be greater than max."),e=t),Dt(r)?r>t?(n.warn(" cannot be greater than max: "+t+". Using max value instead."),t):r<e?(n.warn(" cannot be less than min: "+e+". Using min value instead."),e):r:(n.warn(" must be a number. using max or fallback. max: "+t+", fallback: "+s),dr(s??t,e,t,n))}var Qh=864e5,Zh=1,e_=10;function Cu(r={}){return{refillRate:r.exceptionRateLimiterRefillRate??r.__exceptionRateLimiterRefillRate??Zh,bucketSize:r.exceptionRateLimiterBucketSize??r.__exceptionRateLimiterBucketSize??e_}}var Jn=class{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=dr(e.bucketSize,0,100,e._logger),this._refillRate=dr(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=dr(e.refillInterval,0,Qh,e._logger)}_applyRefill(e,t){let n=t-e.lastAccess,s=Math.floor(n/this._refillInterval);if(s>0){let i=s*this._refillRate;e.tokens=Math.min(e.tokens+i,this._bucketSize),e.lastAccess=e.lastAccess+s*this._refillInterval}}consumeRateLimit(e){let t=Date.now(),n=String(e),s=this._buckets[n];return s?this._applyRefill(s,t):(s={tokens:this._bucketSize,lastAccess:t},this._buckets[n]=s),s.tokens===0?!0:(s.tokens--,s.tokens===0&&this._onBucketRateLimited?.(e),s.tokens===0)}stop(){this._buckets={}}};var Xn="0123456789abcdef",Qn=class r{constructor(e){this.bytes=e}static ofInner(e){if(e.length===16)return new r(e);throw new TypeError("not 128-bit length")}static fromFieldsV7(e,t,n,s){if(!Number.isInteger(e)||!Number.isInteger(t)||!Number.isInteger(n)||!Number.isInteger(s)||e<0||t<0||n<0||s<0||e>0xffffffffffff||t>4095||n>1073741823||s>4294967295)throw new RangeError("invalid field value");let i=new Uint8Array(16);return i[0]=e/2**40,i[1]=e/2**32,i[2]=e/2**24,i[3]=e/2**16,i[4]=e/256,i[5]=e,i[6]=112|t>>>8,i[7]=t,i[8]=128|n>>>24,i[9]=n>>>16,i[10]=n>>>8,i[11]=n,i[12]=s>>>24,i[13]=s>>>16,i[14]=s>>>8,i[15]=s,new r(i)}static parse(e){let t;switch(e.length){case 32:t=/^[0-9a-f]{32}$/i.exec(e)?.[0];break;case 36:t=/^([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;case 38:t=/^\{([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})\}$/i.exec(e)?.slice(1,6).join("");break;case 45:t=/^urn:uuid:([0-9a-f]{8})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{4})-([0-9a-f]{12})$/i.exec(e)?.slice(1,6).join("");break;default:break}if(t){let n=new Uint8Array(16);for(let s=0;s<16;s+=4){let i=parseInt(t.substring(2*s,2*s+8),16);n[s+0]=i>>>24,n[s+1]=i>>>16,n[s+2]=i>>>8,n[s+3]=i}return new r(n)}throw new SyntaxError("could not parse UUID string")}toString(){let e="";for(let t=0;t<this.bytes.length;t++)e+=Xn.charAt(this.bytes[t]>>>4),e+=Xn.charAt(15&this.bytes[t]),(t===3||t===5||t===7||t===9)&&(e+="-");return e}toHex(){let e="";for(let t=0;t<this.bytes.length;t++)e+=Xn.charAt(this.bytes[t]>>>4),e+=Xn.charAt(15&this.bytes[t]);return e}toJSON(){return this.toString()}getVariant(){let e=this.bytes[8]>>>4;if(e<0)throw new Error("unreachable");if(e<=7)return this.bytes.every(t=>t===0)?"NIL":"VAR_0";if(e<=11)return"VAR_10";if(e<=13)return"VAR_110";if(e<=15)return this.bytes.every(t=>t===255)?"MAX":"VAR_RESERVED";throw new Error("unreachable")}getVersion(){return this.getVariant()==="VAR_10"?this.bytes[6]>>>4:void 0}clone(){return new r(this.bytes.slice(0))}equals(e){return this.compareTo(e)===0}compareTo(e){for(let t=0;t<16;t++){let n=this.bytes[t]-e.bytes[t];if(n!==0)return Math.sign(n)}return 0}},lo=class{constructor(e){this.timestamp=0,this.counter=0,this.random=e??t_()}generate(){return this.generateOrResetCore(Date.now(),1e4)}generateOrAbort(){return this.generateOrAbortCore(Date.now(),1e4)}generateOrResetCore(e,t){let n=this.generateOrAbortCore(e,t);return n===void 0&&(this.timestamp=0,n=this.generateOrAbortCore(e,t)),n}generateOrAbortCore(e,t){if(!Number.isInteger(e)||e<1||e>0xffffffffffff)throw new RangeError("`unixTsMs` must be a 48-bit positive integer");if(t<0||t>0xffffffffffff)throw new RangeError("`rollbackAllowance` out of reasonable range");if(e>this.timestamp)this.timestamp=e,this.resetCounter();else{if(!(e+t>=this.timestamp))return;this.counter++,this.counter>4398046511103&&(this.timestamp++,this.resetCounter())}return Qn.fromFieldsV7(this.timestamp,Math.trunc(this.counter/2**30),this.counter&2**30-1,this.random.nextUint32())}resetCounter(){this.counter=1024*this.random.nextUint32()+(1023&this.random.nextUint32())}generateV4(){let e=new Uint8Array(Uint32Array.of(this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32(),this.random.nextUint32()).buffer);return e[6]=64|e[6]>>>4,e[8]=128|e[8]>>>2,Qn.ofInner(e)}},t_=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),Pu,ee=()=>r_().toString(),r_=()=>(Pu||(Pu=new lo)).generate();var Zn=class{add(e){let t=ee(),n=++this.nextId;return this.promiseByIds[t]={id:n,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length;for(;t>0;)await Promise.all(e),e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length}getPromises(e=[],t=this.nextId){let n=new Set(e);return Object.values(this.promiseByIds).filter(s=>s.id<=t&&!n.has(s.promise)).map(s=>s.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}};function n_(r=console){return{log:r.log.bind(r),warn:r.warn.bind(r),error:r.error.bind(r),debug:r.debug.bind(r)}}var Iu=(r,e,t)=>{function n(i,...o){e(()=>{let a=t[i];a(r,...o)})}return{debug:(...i)=>{n("debug",...i)},info:(...i)=>{n("log",...i)},warn:(...i)=>{n("warn",...i)},error:(...i)=>{n("error",...i)},critical:(...i)=>{t.error(r,...i)},createLogger:i=>Iu(`${r} ${i}`,e,t)}},s_=r=>r();function Ou(r,e=s_){return Iu(r,e,n_())}var Ft="Mobile",ts="iOS",Lt="Android",Fu="Tablet",RR=Lt+" "+Fu;var o_="Apple",MR=o_+" Watch",Nu="Safari",rs="BlackBerry",Uu="Samsung",a_=Uu+"Browser",c_=Uu+" Internet",ns="Chrome",l_=ns+" OS",u_=ns+" "+ts,$u="Internet Explorer",d_=$u+" "+Ft,po="Opera",CR=po+" Mini",Bu="Edge",f_="Microsoft "+Bu,go="Firefox",p_=go+" "+ts,mo="Nintendo",ho="PlayStation",es="Xbox",g_=Lt+" "+Ft,m_=Ft+" "+Nu,fr="Windows",h_=fr+" Phone";var Wu="Generic",PR=Wu+" "+Ft.toLowerCase(),IR=Wu+" "+Fu.toLowerCase(),__="Konqueror",E_="Oculus Browser",ku="Vivaldi",S_="Yandex",Du="Whale",y_="DuckDuckGo",b_="Pale Moon",xu="Waterfox",Lu="Brave",ju="Claude",Hu="Codex",Ku="ChatGPT",w_="Google Search App",L="(\\d+(\\.\\d+)?)",uo=new RegExp("Version/"+L),fo=new RegExp("("+ju+"|"+Hu+"|"+Ku+")\\/"+L);var OR=new RegExp(es,"i"),kR=new RegExp(ho+" \\w+","i"),DR=new RegExp(mo+" \\w+","i"),T_=new RegExp(rs+"|PlayBook|BB10","i"),A_={"NT3.51":"NT 3.11","NT4.0":"NT 4.0","5.0":"2000","5.1":"XP","5.2":"XP","6.0":"Vista","6.1":"7","6.2":"8","6.3":"8.1","6.4":"10","10.0":"10"};var xR={[d_]:[new RegExp("rv:"+L)],[f_]:[new RegExp(Bu+"?\\/"+L)],[ns]:[new RegExp("("+ns+"|CrMo)\\/"+L)],[u_]:[new RegExp("CriOS\\/"+L)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+L)],[Nu]:[uo],[m_]:[uo],[po]:[new RegExp("("+po+"|OPR)\\/"+L)],[go]:[new RegExp(go+"\\/"+L)],[p_]:[new RegExp("FxiOS\\/"+L)],[__]:[new RegExp("Konqueror[:/]?"+L,"i")],[rs]:[new RegExp(rs+" "+L),uo],[g_]:[new RegExp("android\\s"+L,"i")],[c_]:[new RegExp(a_+"\\/"+L)],[E_]:[new RegExp("OculusBrowser\\/"+L)],[ku]:[new RegExp(ku+"\\/"+L)],[S_]:[new RegExp("YaBrowser\\/"+L)],[Du]:[new RegExp(Du+"\\/"+L)],[Lu]:[new RegExp(Lu+"\\/"+L)],[ju]:[fo],[Hu]:[fo],[Ku]:[fo],[y_]:[new RegExp("(DuckDuckGo|Ddg)\\/"+L)],[b_]:[new RegExp("PaleMoon\\/"+L)],[xu]:[new RegExp(xu+"\\/"+L)],[w_]:[new RegExp("GSA\\/"+L)],[$u]:[new RegExp("(rv:|MSIE )"+L)],Mozilla:[new RegExp("rv:"+L)]};var LR=[[new RegExp(es+"; "+es+" (.*?)[);]","i"),r=>[es,r&&r[1]||""]],[new RegExp(mo,"i"),[mo,""]],[new RegExp(ho,"i"),[ho,""]],[T_,[rs,""]],[new RegExp(fr,"i"),(r,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[h_,""];if(new RegExp(Ft).test(e)&&!/IEMobile\b/.test(e))return[fr+" "+Ft,""];let t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){let n=t[1],s=A_[n]||"";return/arm/i.test(e)&&(s="RT"),[fr,s]}return[fr,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,r=>{if(r&&r[3]){let e=[r[3],r[4],r[5]||"0"];return[ts,e.join(".")]}return[ts,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,r=>{let e="";return r&&r.length>=3&&(e=$e(r[2])?r[3]:r[2]),["watchOS",e]}],[new RegExp("("+Lt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Lt+")","i"),r=>{if(r&&r[2]){let e=[r[2],r[3],r[4]||"0"];return[Lt,e.join(".")]}return[Lt,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,r=>{let e=["Mac OS X",""];if(r&&r[1]){let t=[r[1],r[2],r[3]||"0"];e[1]=t.join(".")}return e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[l_,""]],[/Linux|debian/i,["Linux",""]]];var ss="[Circular]",is="[Truncated]",pe="[Unserializable]",Gu="[Function]",UR=Date.prototype.getTime,$R=Date.prototype.toISOString;function Oe(r){let e="";for(let t=0;t<r.length;t++){let n=r.charCodeAt(t);if(n>=55296&&n<=56319){let s=r.charCodeAt(t+1);s>=56320&&s<=57343?(e+=r[t]+r[t+1],t++):e+="\uFFFD"}else e+=n>=56320&&n<=57343?"\uFFFD":r[t]}return e}function Be(r,e){if(!e)return r;let t=[];try{t=Object.keys(e)}catch{t=[]}for(let n of t){let s;try{s=e[n]}catch{s=pe}Object.defineProperty(r,n,{value:s,enumerable:!0,writable:!0,configurable:!0})}return r}function _o(r,e=Date.now()){if(typeof r!="string"||!r)return;let t=r.trim(),n=/^\d+\s*,/.test(t)?t.slice(0,t.indexOf(",")).trim():t;if(/^\d+$/.test(n)){let o=1e3*Math.min(Number(n),300);return o>0?o:void 0}if(!/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*[ ,]/.test(n))return;let s=/^\w{3} \w{3} /.test(n)?n+" GMT":n,i=Date.parse(s)-e;if(!(!Number.isFinite(i)||i<=0))return Math.min(i,3e5)}var gt=class{record(e){if(e.kind==="too-large")return;if(e.kind!=="retry-later")return void this.reset();if(!e.retryAfterMs)return;let t=this.isOpen(),n=Date.now(),s=Math.min(e.retryAfterMs,3e5);if(!t){this._installedAt=n,this._until=n+s;return}this._until=Math.max(this._until,Math.min(n+s,this._installedAt+3e5))}remainingMs(){let e=Date.now();if(e<this._installedAt-5e3)return this.reset(),0;let t=Math.min(3e5,Math.max(0,this._until-e));return t===0&&this.reset(),t}isOpen(){return this.remainingMs()>0}reset(){this._until=0,this._installedAt=0}constructor(){this._until=0,this._installedAt=0}};var zu="utf8",v_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function R_(r){return typeof r=="string"&&v_.test(r)}function mt(r,e){return R_(r)?r:e()}function Nt(r,e){let t=new Error(e);try{Object.defineProperty(t,"name",{value:r,writable:!0,enumerable:!0,configurable:!0})}catch{}return t}function Vu(r){return r?.replace(/\/+$/,"")}async function Yu(r,e){let t=null;for(let n=0;n<e.retryCount+1;n++){n>0&&await new Promise(s=>setTimeout(s,e.retryDelay));try{return await r()}catch(s){if(t=s,!e.retryCheck(s))throw s}}throw t}function Eo(){return new Date().toISOString()}function te(r,e){let t=setTimeout(r,e);return t?.unref&&t?.unref(),t}async function Qe(r,e,t){let n;try{return await Promise.race([r,new Promise((s,i)=>{n=te(()=>{try{t?.(),s()}catch(o){i(o)}},e)})])}finally{clearTimeout(n)}}var qu=r=>r&&typeof r.then=="function";function pr(r){return Promise.all(r.map(e=>(e??Promise.resolve()).then(t=>({status:"fulfilled",value:t}),t=>({status:"rejected",reason:t}))))}var os,Ju,as;function Xu(r){let e=globalThis._posthogChunkIds;if(!e)return;let t=Object.keys(e);return as&&t.length===Ju||(Ju=t.length,as=t.reduce((n,s)=>{os||(os={});let i=os[s];if(i)n[i[0]]=i[1];else{let o=r(s);for(let a=o.length-1;a>=0;a--){let l=o[a]?.filename,u=e[s];if(l&&u){n[l]=u,os[s]=[l,u];break}}}return n},{})),as}var So=50,M_=1e3,C_=100,P_=4,gr=class{constructor(e,t,n=[]){this.coercers=e,this.stackParser=t,this.modifiers=n}buildFromUnknown(e,t={}){let s=t&&t.mechanism||{handled:!0,type:"generic"},o=this.buildCoercingContext(s,t,0).apply(e),a=this.buildParsingContext(t),c=this.parseStacktrace(o,a);return{$exception_list:this.convertToExceptionList(c,s),$exception_level:"error"}}async modifyFrames(e){for(let t of e)t.stacktrace&&t.stacktrace.frames&&ae(t.stacktrace.frames)&&(t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames));return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let n;e.cause!=null&&(n=this.parseStacktrace(e.cause,t));let s;if(e.stack!=""&&e.stack!=null)try{s=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)}catch{}return{...e,cause:n,stack:s,errors:e.errors?.map(i=>this.parseStacktrace(i,t))}}applyChunkIds(e,t){return e.map(n=>(n.filename&&t&&(n.chunk_id=t[n.filename]),n))}applyCoercers(e,t){for(let n of this.coercers)if(n.match(e))return n.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let n of this.modifiers)t=await n(t);return t}convertToExceptionList(e,t){let n=[],s=(i,o,a)=>{let c=n.length,l=o===void 0?{type:typeof t.type=="string"&&t.type.length>0?t.type:"generic",...typeof t.handled=="boolean"?{handled:t.handled}:t.handled===void 0?{handled:!0}:{},synthetic:typeof t.synthetic=="boolean"?t.synthetic:i.synthetic,exception_id:c}:{type:"chained",source:a,synthetic:i.synthetic,exception_id:c,parent_id:o},u={type:i.type,value:i.value,mechanism:l};i.stack&&(u.stacktrace={type:"raw",frames:i.stack}),n.push(u),i.cause&&s(i.cause,c,"cause");for(let d of i.errors??[])s(d,c,"member")};return s(e),n}buildParsingContext(e){return{chunkIdMap:Xu(this.stackParser),skipFirstLines:e.skipFirstLines??1}}getAggregateErrors(e){try{if(Xe(e)){let t=Object.getPrototypeOf(e);for(let n=0;t&&n<C_;n++){let s=Object.getOwnPropertyDescriptor(t,"constructor")?.value;if(typeof s=="function"&&s.name==="AggregateError"){let i=e.errors;return ae(i)?i:void 0}t=Object.getPrototypeOf(t)}}}catch{}}buildCoercingContext(e,t,n=0){let s=0,i=0,o=!1,a=new Set,c=[],l={},u=(g,m,h=0)=>{let E=d(m,h),_=E.apply;if(E.apply=y=>{c.push(g);try{return _(y)}finally{c.pop()}},h>P_||h>0&&c.indexOf(g)!==-1)return this.coerceFallback(E);let b=typeof g=="object"&&g!==null||typeof g=="function";if(h===0&&s>=So||b&&a.has(g))return;b&&a.add(g),h===0&&s++;let w=this.getAggregateErrors(g);o||=!!w;let T;try{if(T=this.applyCoercers(g,E),!T)throw l}catch(y){if(y===l){h===0&&s--;return}if(!o)throw y;T=this.coerceFallback(E)}if(!w||s>=So)return T;let M;try{M=w.length}catch{return T}if(!Number.isInteger(M)||M<0||M>4294967295)return T;let R=[];for(let y=0;s<So&&i<M_&&y<M;y++){i++;let A;try{A=E.next(w[y])}catch{s++,A=this.coerceFallback(d(m+1))}A&&R.push(A)}return{...T,errors:R}},d=(g,m=0)=>({...t,syntheticException:g==0?t.syntheticException:void 0,mechanism:g==0?e:{},apply:h=>{let E=u(h,g,m+1);if(!E)throw l;return E},next:h=>u(h,g+1)}),p=d(n);return{...p,apply:g=>u(g,n)??this.coerceFallback(p)}}};var V="?",I_="<anonymous>",O_=/^([a-z][a-z0-9.+-]+):/i,k_=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function D_(r){if(!r||r===I_)return!1;let e=O_.exec(r);return!e||k_.includes(e[1].toLowerCase())}function ke(r,e,t,n,s){let i={platform:r,filename:e,function:t==="<anonymous>"?V:t,in_app:D_(e)};return $e(n)||(i.lineno=n),$e(s)||(i.colno=s),i}var cs=(r,e)=>{let t=r.indexOf("safari-extension")!==-1,n=r.indexOf("safari-web-extension")!==-1;return t||n?[r.indexOf("@")!==-1?r.split("@")[0]:V,t?`safari-extension:${e}`:`safari-web-extension:${e}`]:[r,e]};var x_=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,L_=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,F_=/\((\S*)(?::(\d+))(?::(\d+))\)/,yo=(r,e)=>{let t=x_.exec(r);if(t){let[,s,i,o]=t;return ke(e,s,V,+i,+o)}let n=L_.exec(r);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=F_.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[i,o]=cs(n[1]||V,n[2]);return ke(e,o,i,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var N_=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,U_=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,bo=(r,e)=>{let t=N_.exec(r);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){let o=U_.exec(t[3]);o&&(t[1]=t[1]||"eval",t[3]=o[1],t[4]=o[2],t[5]="")}let s=t[3],i=t[1]||V;return[i,s]=cs(i,s),ke(e,s,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}};var $_=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,Qu=(r,e)=>{let t=$_.exec(r);return t?ke(e,t[2],t[1]||V,+t[3],t[4]?+t[4]:void 0):void 0};var B_=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,Zu=(r,e)=>{let t=B_.exec(r);return t?ke(e,t[2],t[3]||V,+t[1]):void 0},W_=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,ed=(r,e)=>{let t=W_.exec(r);return t?ke(e,t[5],t[3]||t[4]||V,+t[1],+t[2]):void 0};var j_=/^\s*[-]{4,}$/,H_=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,K_=/^Promise\.(?:all|any)$/,G_=/^index \d+$/,z_="node:internal/promise",rd=(r,e)=>{let t=r.match(H_);if(t){let n,s,i,o,a;if(t[1]){i=t[1];let u=i.lastIndexOf(".");if(i[u-1]==="."&&u--,u>0){n=i.slice(0,u),s=i.slice(u+1);let d=n.indexOf(".Module");d>0&&(i=i.slice(d+1),n=n.slice(0,d))}o=void 0}s&&(o=n,a=s),s==="<anonymous>"&&(a=void 0,i=void 0),i===void 0&&(a=a||V,i=o?`${o}.${a}`:a);let c=t[2]?.startsWith("file://")?t[2].slice(7):t[2],l=t[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&t[5]&&!l&&(c=t[5]),K_.test(i)&&G_.test(c||"")&&(c=z_),{filename:c?decodeURI(c):void 0,module:void 0,function:i,lineno:td(t[3]),colno:td(t[4]),in_app:V_(c||"",l),platform:e}}if(r.match(j_))return{filename:r,platform:e}};function V_(r,e=!1){return!(e||r&&!r.startsWith("/")&&!r.match(/^[A-Z]:/)&&!r.startsWith(".")&&!r.match(/^[a-zA-Z]([a-zA-Z0-9.\-+])*:\/\//))&&r!==void 0&&!r.includes("node_modules/")}function td(r){return parseInt(r||"",10)||void 0}var nd=/\(error: (.*)\)/,sd=50,Y_=10,q_=1e3;function wo(r,e){return r.filename===e.filename&&r.function===e.function&&r.module===e.module&&r.lineno===e.lineno&&r.colno===e.colno}function J_(r){for(let e=1;e<=Y_;e++){let t=r.length-2*e;if(t<0)break;let n=!0;for(let s=0;s<e;s++){let i=r[t+s];if(!wo(i,r[t+e+s])){n=!1;break}}if(n){for(let s=0;s<e;s++)r[t+s]=r[t+e+s];return r.length=t+e,{start:t,length:e}}}}function X_(r,e){let t=e.start+e.length,n=od(r,e);n&&r.splice(t+n===r.length?t:e.start,n)}function id(r,e){let t=e.start;for(;t>0&&wo(r[t-1],r[t-1+e.length]);)t--;return e.start-t}function od(r,e){let t=e.start+e.length,n=t;for(;n<r.length&&wo(r[n],r[n-e.length]);)n++;return n-t}function Q_(r,e){let t=e[0],n=r.length-(t?id(r,t):0);for(let s of e)n-=od(r,s);return n}function Z_(r){let e=r.map(n=>`${n.function}|${n.filename}|${n.lineno}|${n.colno}|${n.module}`),t=0;for(let n=1;n<e.length;n++)eE(e,n,t)&&(t=n);r.push(...r.splice(0,t))}function eE(r,e,t){for(let n=0;n<r.length;n++){let s=r[(e+n)%r.length],i=r[(t+n)%r.length];if(s!==i)return s<i}return!1}function ad(r){if(!r.length)return[];let e=Array.from(r);return e.reverse(),e.slice(0,sd).map(t=>({...t,filename:t.filename||tE(e).filename,function:t.function||V}))}function tE(r){return r[r.length-1]||{}}function To(){return cd("web:javascript",yo,bo)}function cd(r,...e){return(t,n=0)=>{let s=[],i=t.split(`
30
- `),o=Math.min(i.length,n+q_),a=[];for(let u=n;u<o;u++){let d=i[u];if(d.length>1024)continue;let p=nd.test(d)?d.replace(nd,"$1"):d;if(!p.match(/\S*Error: /)){for(let g of e){let m=g(p,r);if(m){s.push(m);let h=J_(s);if(h){for(let E=a.length-1;E>=0;E--){let _=a[E];if(_.start+_.length<=h.start)break;a.pop()}a.push(h)}break}}if(Q_(s,a)>=sd)break}}let c=[...a].sort((u,d)=>d.start-u.start),l=c[c.length-1];if(l){let u=id(s,l);s.splice(l.start-u,u);for(let d of c)d.start-=u}for(let u of c)X_(s,u);return a.some(u=>u.start===0&&s.length===u.length)&&Z_(s),ad(s)}}var Ao=class{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let n=J(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:n?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){let t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?`${t}: ${e.message}`:t}isDOMException(e){return pt(e,"DOMException")}isDOMError(e){return pt(e,"DOMError")}};var mr=class{match(e){return Xe(e)}coerce(e,t){let n=this.getStack(e),s=n===void 0?t.syntheticException?.stack:void 0,i=!!s;return{type:this.getType(e),value:this.getMessage(e,t),stack:n??s,cause:e.cause?t.next(e.cause):void 0,synthetic:i}}getType(e){return e.name||e.constructor.name}getMessage(e,t){let n=e.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(e){try{let t=e.stacktrace;if(typeof t=="string"&&t.length>0)return t;let n=e.stack;return typeof n=="string"&&n.length>0?n:void 0}catch{return}}};var vo=class{match(e){if(!Au(e))return!1;let t=e;return t.error!=null||this._hasUsableMessage(t)}coerce(e,t){if(e.error!=null)return t.apply(e.error);let n=t.apply(e.message);return{...n,stack:this._buildLocationStack(e)??n.stack,synthetic:!0}}_hasUsableMessage(e){return J(e.message)&&e.message.length>0}_buildLocationStack(e){let t=e,n=t.lineno??0,s=t.colno??0;if(!(!J(t.filename)||t.filename.length===0)&&n!==0)return`Error
31
- at ${t.filename}:${n}:${s}`}};var rE=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,hr=class{match(e){return typeof e=="string"}coerce(e,t){let[n,s]=this.getInfos(e);return{type:n??"Error",value:s??e,stack:t.syntheticException?.stack,synthetic:!0}}getInfos(e){let t="Error",n=e,s=e.match(rE);return s&&(t=s[1],n=s[2]),[t,n]}};var ld=["fatal","error","warning","log","info","debug"];function ls(r,e=40){let t=Object.keys(r);if(t.sort(),!t.length)return"[object has no keys]";for(let n=t.length;n>0;n--){let s=t.slice(0,n).join(", ");if(!(s.length>e))return n===t.length||s.length<=e?s:`${s.slice(0,e)}...`}return""}var _r=class{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let n=this.getErrorPropertyFromObject(e);return n?t.apply(n):{type:this.getType(e),value:this.getValue(e),stack:this.getStack(e)??t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){if(xt(e))return e.constructor.name;let t="name"in e?e.name:void 0;return J(t)&&!ao(t)?t:"Error"}getValue(e){if("name"in e&&typeof e.name=="string"){let s=`'${e.name}' captured as exception`;return"message"in e&&typeof e.message=="string"&&(s+=` with message: '${e.message}'`),s}if("message"in e&&typeof e.message=="string")return e.message;let t=this.getObjectClassName(e),n=ls(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(e){return J(e)&&!ao(e)&&ld.indexOf(e)>=0}getStack(e){try{return J(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:J(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];if(Xe(n))return n}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}};var Ro=class{match(e){return xt(e)}coerce(e,t){let n=e.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${ls(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Er=class{match(e){return Yn(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Mo=class{match(e){return pt(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!xt(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let n=this.getUnhandledRejectionReason(e);return Yn(n)?{type:"UnhandledRejection",value:`Non-Error promise rejection captured with value: ${String(n)}`,stack:t.syntheticException?.stack,synthetic:!0}:t.apply(n)}getUnhandledRejectionReason(e){try{if("reason"in e)return e.reason;if("detail"in e&&e.detail!=null&&typeof e.detail=="object"&&"reason"in e.detail)return e.detail.reason}catch{}return e}};var Co=class{constructor(e){this._maxSize=e,this._cache=new Map}get(e){let t=this._cache.get(e);if(t!==void 0)return this._cache.delete(e),this._cache.set(e,t),t}set(e,t){this._cache.set(e,t)}reduce(){for(;this._cache.size>=this._maxSize;){let e=this._cache.keys().next().value;e&&this._cache.delete(e)}}};var Sr={MESSAGE:"$message",TIMESTAMP:"$timestamp"},nE=new Set([Sr.MESSAGE,Sr.TIMESTAMP]),us={enabled:!0,max_bytes:32768};function Po(r){return r?{enabled:r.enabled??us.enabled,max_bytes:iE(r.max_bytes,us.max_bytes)}:{...us}}function sE(r){if(!r)return{sanitizedProperties:{},droppedKeys:[]};let e=[];return{sanitizedProperties:Object.keys(r).reduce((n,s)=>nE.has(s)?(e.push(s),n):(n[s]=r[s],n),{}),droppedKeys:e}}var Io=class{constructor(e){this._entries=[],this._totalBytes=0,this._config=Po(e)}setConfig(e){this._config=Po(e),this._trimToMaxBytes()}add(e){let t=oE(e);if(!t)return;let n=ud(t.json);n>this._config.max_bytes||(this._entries.push({step:t.step,bytes:n}),this._totalBytes+=n,this._trimToMaxBytes())}getAttachable(){return this._entries.map(e=>e.step)}clear(){this._entries=[],this._totalBytes=0}size(){return this._entries.length}_trimToMaxBytes(){for(;this._totalBytes>this._config.max_bytes&&this._entries.length>0;){let e=this._entries.shift();e&&(this._totalBytes-=e.bytes)}}};function iE(r,e){if(!Dt(r)||r===1/0||r===-1/0)return e;let t=Math.floor(r);return t<0?e:t}function oE(r){let e;try{e=Je(r)}catch{return}try{let t=JSON.parse(e);if(!ur(t))return;let n=t,s=n[Sr.MESSAGE],i=n[Sr.TIMESTAMP];return!J(s)||s.trim().length===0||!J(i)&&!Dt(i)?void 0:{step:n,json:e}}catch{return}}function ud(r){if("u">typeof TextEncoder)return new TextEncoder().encode(r).length;let e=encodeURIComponent(r),t=0;for(let n=0;n<e.length;n++)e[n]==="%"?(t+=1,n+=2):t+=1;return t}function aE(){let r=globalThis._posthogReleaseId;return typeof r=="string"&&r.length>0?r:void 0}var Oo=r=>{if("flags"in r){let e=dd(r.flags),t=fd(r.flags);return{...r,featureFlags:e,featureFlagPayloads:t}}{let e=r.featureFlags??{},t=Object.fromEntries(Object.entries(r.featureFlagPayloads||{}).map(([s,i])=>[s,Ut(i)])),n=Object.fromEntries(Object.entries(e).map(([s,i])=>[s,cE(s,i,t[s])]));return{...r,featureFlags:e,featureFlagPayloads:t,flags:n}}};function cE(r,e,t){return{key:r,enabled:typeof e=="string"?!0:e,variant:typeof e=="string"?e:void 0,reason:void 0,metadata:{id:void 0,version:void 0,payload:t?JSON.stringify(t):void 0,description:void 0}}}var dd=r=>Object.fromEntries(Object.entries(r??{}).map(([e,t])=>[e,yr(t)]).filter(([,e])=>e!==void 0)),fd=r=>{let e=r??{};return Object.fromEntries(Object.keys(e).filter(t=>{let n=e[t];return n.enabled&&n.metadata&&n.metadata.payload!==void 0}).map(t=>{let n=e[t].metadata?.payload;return[t,n?Ut(n):void 0]}))},yr=r=>r===void 0?void 0:r.variant??r.enabled,Ut=r=>{if(typeof r!="string")return r;try{return JSON.parse(r)}catch{return r}};var pd=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","oppref","irclid","_kx"],lE=["$feature_flag","$feature_flag_response","$feature_flag_has_experiment","$feature_flag_id","$feature_flag_version","$feature_flag_reason","$feature_flag_request_id","$feature_flag_evaluated_at","$feature_flag_error","locally_evaluated","$groups","$process_person_profile","$geoip_disable","$current_url","$pathname","$referring_domain",...pd,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server","$react_native_version"],br=(r,e=[])=>{let t={},n=s=>{r[s]!==void 0&&(t[s]=r[s])};return lE.forEach(n),e.forEach(n),t};var ds=class{constructor(){this.events={},this.events={}}on(e,t){return this.events[e]||(this.events[e]=[]),this.events[e].push(t),()=>{this.events[e]=this.events[e].filter(n=>n!==t)}}emit(e,t){for(let n of this.events[e]||[])n(t);for(let n of this.events["*"]||[])n(e,t)}};function ko(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var dE="NativeGzipValidationError",fE=31,pE=139,gE=8,mE=r=>r.length>=2&&r[0]===fE&&r[1]===pE;var wr,hE=()=>{if(wr)return wr;wr=[];for(let r=0;r<256;r++){let e=r;for(let t=0;t<8;t++)e=1&e?3988292384^e>>>1:e>>>1;wr[r]=e>>>0}return wr},_E=r=>{let e=hE(),t=4294967295;for(let n=0;n<r.length;n++)t=e[(t^r[n])&255]^t>>>8;return(4294967295^t)>>>0},fs=r=>{throw Nt(dE,`Native gzip produced invalid output: ${r}`)},EE=async(r,e)=>{r.size<18&&fs("too-short");let t=new Uint8Array(await r.slice(0,10).arrayBuffer());(!mE(t)||t[2]!==gE)&&fs("invalid-header");let n=new DataView(await r.slice(r.size-8).arrayBuffer());n.getUint32(0,!0)!==_E(e)&&fs("invalid-crc");let s=e.length>>>0;n.getUint32(4,!0)!==s&&fs("invalid-size")};async function Tr(r,e=!0,t){try{let n=new TextEncoder().encode(r),s=new globalThis.CompressionStream("gzip"),i=s.writable.getWriter(),o=i.write(n).then(()=>i.close()).catch(async l=>{try{await i.abort(l)}catch{}throw l}),a=new Response(s.readable).blob(),[c]=await Promise.all([a,o]);return await EE(c,n),c}catch(n){if(t?.rethrow)throw n;return e&&console.error("Failed to gzip compress data",n),null}}var ge=class extends Error{constructor(e,t,n,s){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.responseBodyDeadline=n,this.abortController=s,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return _o(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let e=Nt("AbortError","Response body read timed out");this.cancelResponseBody(e),this.responseBodyTextPromise=Promise.reject(e)}else{let e=new Promise((n,s)=>{this.responseBodyTimer=te(()=>{this._bodyReadTimedOut=!0;let i=Nt("AbortError","Response body read timed out");s(i),this.cancelResponseBody(i)},this.responseBodyDeadline-Date.now())}),t;try{t=Promise.resolve(this.response.text())}catch(n){t=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([t,e]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(e=>JSON.parse(e))}cancelResponseBody(e){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(e),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},We=class extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}};var Ed=(r,e)=>{for(let t of Object.keys(e))(t.startsWith("$feature/")||t==="$active_feature_flags")&&(r[t]=e[t])};async function gd(r){if(r instanceof ge){let e="";try{e=await r.text}catch{r.bodyReadTimedOut&&(e="<response body read timed out>")}console.error(`Error while flushing PostHog: message=${r.message}, response body=${e}`,r)}else console.error("Error while flushing PostHog",r);return Promise.resolve()}function SE(r){return typeof r=="object"&&(r instanceof ge||Sd(r))}function Sd(r){return r instanceof We}function yE(r){if(r instanceof ge)return r.status===502||r.status===504;if(!(r instanceof We))return!1;let e=r.error;return(e?.code??e?.cause?.code)!=="ECONNREFUSED"}var md=10485760;function hd(r){try{return typeof r!="string"?r instanceof Uint8Array?r.byteLength:r.size:"u">typeof Buffer?Buffer.byteLength(r,zu):new TextEncoder().encode(r).length}catch{return 0}}function $t(r){return typeof r=="object"&&r instanceof ge&&r.status===413}function ps(r){return r instanceof ge?r.status===408||r.status===429||r.status>=500:Sd(r)}function _d(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}var Do="default",Ar=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new gr([new mr,new _r,new hr,new Er],To())}getEvaluationRuntime(){}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new Zn,this._events=new ds,this._isInitialized=!1;let n=typeof e=="string"?e.trim():"",s=typeof t.host=="string"?t.host.trim():"",i=!n;this._logger=Ou("[PostHog]",this.logMsgIfDebug.bind(this)),i&&this._logger.error("You must pass your PostHog project's api key. The client will be disabled."),this.apiKey=n,this.host=Vu(s||"https://us.i.posthog.com"),this.flushAt=t.flushAt?Math.max(t.flushAt,1):20,this.maxBatchSize=Math.max(this.flushAt,t.maxBatchSize??100),this.maxQueueSize=Math.max(this.flushAt,t.maxQueueSize??1e3),this.flushInterval=t.flushInterval??1e4,this.preloadFeatureFlags=t.preloadFeatureFlags??!0,this.defaultOptIn=t.defaultOptIn??!0,this.disableSurveys=t.disableSurveys??!1,this._retryOptions={retryCount:t.fetchRetryCount??3,retryDelay:t.fetchRetryDelay??3e3,retryCheck:ps},this.requestTimeout=t.requestTimeout??1e4,this.featureFlagsRequestTimeoutMs=t.featureFlagsRequestTimeoutMs??3e3,this.featureFlagsRequestMaxRetries=t.featureFlagsRequestMaxRetries??1,this.remoteConfigRequestTimeoutMs=t.remoteConfigRequestTimeoutMs??3e3,this.disableGeoip=t.disableGeoip??!0,this.disabled=(t.disabled??!1)||i,this.historicalMigration=t?.historicalMigration??!1,this._initPromise=Promise.resolve(),this._isInitialized=!0,this.evaluationContexts=t?.evaluationContexts??t?.evaluationEnvironments,t?.evaluationEnvironments&&!t?.evaluationContexts&&this._logger.warn("evaluationEnvironments is deprecated. Use evaluationContexts instead. This property will be removed in a future version."),this.disableCompression=!ko()||(t?.disableCompression??!1)}logMsgIfDebug(e){this.isDebug&&e()}wrap(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized)return e();this._initPromise.then(()=>e())}getCommonEventProperties(){return{$lib:this.getLibraryId(),$lib_version:this.getLibraryVersion()}}get optedOut(){return this.getPersistedProperty(ne.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(ne.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(ne.OptedOut,!0)})}on(e,t){return this._events.on(e,t)}debug(e=!0){if(this.removeDebugCallback?.(),e){let t=this.on("*",(n,s)=>this._logger.info(n,s));this.removeDebugCallback=()=>{t(),this.removeDebugCallback=void 0}}}get isDebug(){return!!this.removeDebugCallback}get isDisabled(){return this.disabled}buildPayload(e){let t=e.properties||{},n={...t,...this.getCommonEventProperties()};return Ed(n,t),e.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=br(n)),{distinct_id:e.distinct_id,event:e.event,properties:n}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,n){this.wrap(()=>{let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",s,n)})}async identifyStatelessImmediate(e,t,n){let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",s,n)}captureStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({distinct_id:e,event:t,properties:n});this.enqueue("capture",i,s)})}async captureStatelessImmediate(e,t,n,s){let i=this.buildPayload({distinct_id:e,event:t,properties:n});await this.sendImmediate("capture",i,s)}aliasStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});this.enqueue("alias",i,s)})}async aliasStatelessImmediate(e,t,n,s){let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",i,s)}groupIdentifyStateless(e,t,n,s,i,o){this.wrap(()=>{let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});this.enqueue("capture",a,s)})}async groupIdentifyStatelessImmediate(e,t,n,s,i,o){let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});await this.sendImmediate("capture",a,s)}async getRemoteConfig(){await this._initPromise;let e=this.host;e==="https://us.i.posthog.com"?e="https://us-assets.i.posthog.com":e==="https://eu.i.posthog.com"&&(e="https://eu-assets.i.posthog.com");let t=`${e}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,n,{type:"required",consume:s=>s.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).catch(s=>{this._logger.error("Remote config could not be loaded",s),this._events.emit("error",s)})}async getFlags(e,t={},n={},s={},i={},o=!1){await this._initPromise;let a=o?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,l={token:this.apiKey,distinct_id:e,groups:t,person_properties:n,group_properties:s,...i};n.$device_id&&(l.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(l.evaluation_contexts=this.evaluationContexts);let u=this.getEvaluationRuntime();u&&(l.evaluation_runtime=u);let d={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(l)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,d,{type:"required",consume:p=>p.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:yE},this.featureFlagsRequestTimeoutMs).then(p=>({success:!0,response:Oo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(e){if(e instanceof ge)return{type:"api_error",statusCode:e.status};if(e instanceof We){let t=e.error;return t instanceof Error&&(t.name==="AbortError"||t.name==="TimeoutError")?{type:"timeout"}:{type:"connection_error"}}return{type:"unknown_error"}}async getFeatureFlagStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailStateless(e,t,n,s,i,o);if(a===void 0)return{response:void 0,requestId:void 0};let c=yr(a.response);return c===void 0&&(c=!1),{response:c,requestId:a.requestId}}async getFeatureFlagDetailStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(t,n,s,i,o,[e]);return a===void 0?void 0:{response:a.flags[e],requestId:a.requestId,evaluatedAt:a.evaluatedAt}}async getFeatureFlagPayloadStateless(e,t,n={},s={},i={},o){await this._initPromise;let a=await this.getFeatureFlagPayloadsStateless(t,n,s,i,o,[e]);if(!a)return;let c=a[e];return c===void 0?null:c}async getFeatureFlagPayloadsStateless(e,t={},n={},s={},i,o){return await this._initPromise,(await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)).payloads}async getFeatureFlagsStateless(e,t={},n={},s={},i,o){return await this._initPromise,await this.getFeatureFlagsAndPayloadsStateless(e,t,n,s,i,o)}async getFeatureFlagsAndPayloadsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a=await this.getFeatureFlagDetailsStateless(e,t,n,s,i,o);return a?{flags:a.featureFlags,payloads:a.featureFlagPayloads,requestId:a.requestId}:{flags:void 0,payloads:void 0,requestId:void 0}}async getFeatureFlagDetailsStateless(e,t={},n={},s={},i,o){await this._initPromise;let a={geoip_disable:i??this.disableGeoip};o&&(a.flag_keys_to_evaluate=o);let c=await this.getFlags(e,t,n,s,a);if(!c.success)return;let l=c.response;return l.errorsWhileComputingFlags&&console.error("[FEATURE FLAGS] Error while computing feature flags, some flags may be missing or incorrect. Learn more at https://posthog.com/docs/feature-flags/best-practices"),l.quotaLimited?.includes("feature_flags")?(console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - feature flags unavailable. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),{flags:{},featureFlags:{},featureFlagPayloads:{},requestId:l?.requestId,quotaLimited:l.quotaLimited}):l}async getSurveysStateless(){if(await this._initPromise,this.disabled)return[];if(this.disableSurveys===!0)return this._logger.info("Loading surveys is disabled."),[];let e=`${this.host}/api/surveys/?token=${this.apiKey}`,t={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}},s=(await this.fetchWithRetry(e,t,{type:"required",consume:i=>{if(i.status!==200||!i.json){let o=`Surveys API could not be loaded: ${i.status}`,a=new Error(o);return this._logger.error(a),this._events.emit("error",new Error(o)),Promise.resolve(void 0)}return i.json()}}).catch(i=>{this._logger.error("Surveys API could not be loaded",i),this._events.emit("error",i)}))?.surveys;return s&&this._logger.info("Surveys fetched from API: ",JSON.stringify(s)),s??[]}get props(){return this._props||(this._props=this.getPersistedProperty(ne.Props)),this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(ne.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(ne.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return Do}persistedQueueKeyForRoute(e){return ne.Queue}getActiveQueueRoutes(){return[Do]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,n,s){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i===null)return;i=this.normalizeMessage(i);let o=this.persistedQueueKeyForRoute(s??this.getQueueRouteKey(i)),a=this.getPersistedProperty(o)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:i}),this.setPersistedProperty(o,a),this._events.emit(e,i),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=te(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(e,t,n,s){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i!==null){i=this.normalizeMessage(i);try{await this.sendBatch([i],void 0,s??this.getQueueRouteKey(i))}catch(o){this._events.emit("error",o)}}}normalizeMessage(e){let{type:t,library:n,library_version:s,...i}=e,o=_d(i.properties)?i.properties:void 0;return n!==void 0&&o?.$lib===void 0&&(o={...o||{},$lib:n}),s!==void 0&&o?.$lib_version===void 0&&(o={...o||{},$lib_version:s}),o&&(i.properties=o),i.uuid=mt(i.uuid,ee),i}normalizeTimestampForWire(e){let t=e instanceof Date?e:typeof e=="string"?new Date(e):null;if(!t||Number.isNaN(t.getTime()))return e;let n=t.toISOString(),s=typeof e=="string"?e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}prepareMessage(e,t){let n={...e,timestamp:t?.timestamp?t?.timestamp:Eo(),uuid:mt(t?.uuid,ee)};return(t?.disableGeoip??this.disableGeoip)&&(_d(n.properties)||(n.properties={}),n.properties.$geoip_disable=!0),n.distinctId&&(n.distinct_id=n.distinctId,delete n.distinctId),n}clearFlushTimer(){this._flushTimer&&(clearTimeout(this._flushTimer),this._flushTimer=void 0)}flushBackground(){this.pendingFlushPromise||this.flushAutomatic().catch(async e=>{await gd(e)})}flushAutomatic(){return this.flush()}async waitForPendingPromises(e,t=[]){let n=t.filter(i=>!!i),s=0;for(;;){let i=this.promiseQueue.getPromises([...n,...this.flushPromises],e);if(i.length===0)return;s>0&&this._logger.debug(`flush() re-checking ${i.length} pending promise(s) before flushing`),await Promise.all(i.map(o=>o.catch(()=>{}))),s++}}flushWithPendingPromises(){return this.flushInternal(!0)}flush(){return this.flushInternal(!1)}flushInternal(e){if(this.disabled)return Promise.resolve();if(!e&&this.pendingFlushPromise)return this.pendingFlushPromise;let t=this.flushPromise,n=this.promiseQueue.maxId,s=Promise.resolve().then(()=>{if(e)return this.waitForPendingPromises(n,[t,s])}).then(()=>pr([t])).then(()=>(this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=s,this.flushPromise=s,this.flushPromises.add(s),this.addPendingPromise(s),pr([s]).then(()=>{this.flushPromises.delete(s),this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this.flushPromise===s&&(this.flushPromise=null)}),s}getCustomHeaders(){let e=this.getCustomUserAgent(),t={};return e&&e!==""&&(t["User-Agent"]=e),t}compressPayload(e){return Tr(e,this.isDebug)}getBatchEndpointPath(e){return"/batch/"}async sendBatch(e,t,n=Do){let s={api_key:this.apiKey,batch:e.map(l=>{if(!l)return l;let u=this.normalizeTimestampForWire(l.timestamp);return u===l.timestamp?l:{...l,timestamp:u}}),sent_at:Eo()};this.historicalMigration&&(s.historical_migration=!0);let i=Je(s),o=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(i),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||i};await this.fetchWithRetry(o,c,{type:"successful-write"},t)}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some(s=>this.getRouteQueue(s).length>0))return;let t=[],n;for(let s of e)try{await this._flushRoute(s,t)}catch(i){n===void 0&&(n=i)}if(n!==void 0)throw n;this._events.emit("flush",t)}async _flushRoute(e,t){let n=this.persistedQueueKeyForRoute(e),s=this.getPersistedProperty(n)||[];if(!s.length)return;let i=s.length,o=0;for(;s.length>0&&o<i;){let a=s.slice(0,this.maxBatchSize),c=a.map(d=>d.message===void 0?d.message:this.normalizeMessage(d.message)),l=async()=>{let d=this.getPersistedProperty(n)||[],p=[...a],g=d.filter(m=>{let h=m.message?.uuid,E=p.findIndex(_=>_===m||typeof h=="string"&&h.length>0&&_.message?.uuid===h);return E===-1?!0:(p.splice(E,1),!1)});this.setPersistedProperty(n,g),s=g,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},u={retryCheck:d=>$t(d)?!1:ps(d)};try{await this.sendBatch(c,u,e)}catch(d){if($t(d)&&c.length>1){this.maxBatchSize=Math.max(1,Math.floor(c.length/2)),this._logger.warn(`Received 413 when sending batch of size ${c.length}, reducing batch size to ${this.maxBatchSize}`);continue}throw d instanceof We||await l(),this._events.emit("error",d),d}await l(),t.push(...c),o+=c.length}}async _sendOtlpBatch({path:e,auth:t,payload:n}){if(this.disabled)return{kind:"fatal",error:new Error("The client is disabled")};let s;try{s=JSON.stringify(n)}catch(u){return this.logMsgIfDebug(()=>console.warn(`[PostHog] Could not serialize a ${e} batch; reporting it as too large`,u)),{kind:"too-large",measuredLocally:!0}}let i=hd(s);if(i>md)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${e} batch of ${i} bytes: the endpoint accepts at most ${md}`)),{kind:"too-large",measuredLocally:!0};let o=t==="bearer"?`${this.host}/i/v1/${e}`:`${this.host}/i/v1/${e}?token=${encodeURIComponent(this.apiKey)}`,a=this.disableCompression?null:await this.compressPayload(s),c=a||s,l={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...t==="bearer"&&{Authorization:`Bearer ${this.apiKey}`},...a!==null&&{"Content-Encoding":"gzip"}},body:c};try{return await this.fetchWithRetry(o,l,{type:"successful-write"},{retryCheck:u=>$t(u)||u instanceof ge&&u.retryAfterMs!==void 0?!1:ps(u)}),{kind:"ok"}}catch(u){if($t(u))return{kind:"too-large"};if(ps(u)){let d=u instanceof ge?u.retryAfterMs:void 0;return{kind:"retry-later",error:u,...d!==void 0&&{retryAfterMs:d}}}return{kind:"fatal",error:u}}}async _sendLogsBatch(e){return this._sendOtlpBatch({path:"logs",auth:"query-token",payload:e})}async _sendMetricsBatch(e){return this._sendOtlpBatch({path:"metrics",auth:"query-token",payload:e})}async _sendTracesBatch(e){return this._sendOtlpBatch({path:"traces",auth:"bearer",payload:e})}async fetchWithRetry(e,t,n,s,i){let o=t.body?t.body:"",a=hd(o),c={...this._retryOptions,...s},l=0;return await Yu(async()=>{l++;let u=new AbortController,d=i??this.requestTimeout,p=Date.now()+d,g,m=new Promise((w,T)=>{g=te(()=>{let M=Nt("AbortError",`Request timed out after ${d}ms`);T(M),u.abort(M)},d)}),h,E=!1,_,b=()=>_??=(async()=>{try{await h?.body?.cancel()}catch{}})();try{let w;try{w=this.fetch(e,{signal:u.signal,...t})}catch(R){throw new We(R)}w.then(R=>{u.signal.aborted&&!E&&Promise.resolve(R.body?.cancel()).catch(()=>{})}).catch(()=>{});try{h=await Promise.race([w,m]),E=!0}catch(R){throw new We(R)}let T=t.mode==="no-cors",M=n.type==="successful-write"?300:400;if(!T&&(h.status<200||h.status>=M))throw new ge(h,a,p,u);if(n.type==="successful-write"){try{await Promise.race([b(),m])}catch{}return}try{return await Promise.race([n.consume(h),m])}catch(R){throw u.signal.aborted?new We(R):R}}finally{clearTimeout(g),u.signal.aborted&&h&&b()}},{...c,retryCheck:u=>{let d=c.retryCheck(u);return d&&l<=c.retryCount&&u instanceof ge&&u.cancelResponseBody(),d}})}async _shutdown(e=3e4){await this._initPromise;let t=!1;return this.clearFlushTimer(),this.disabled?void 0:Qe((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(o=>this.getRouteQueue(o).length>0);){let i=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===i){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(s){if(!SE(s))throw s;await gd(s)}})(),e,()=>{this._logger.critical("Timeout while shutting down PostHog. Some events may not have been sent.",{shutdownTimeoutMs:e}),t=!0})}async shutdown(e=3e4){return this.shutdownPromise?this._logger.warn("shutdown() called while already shutting down. shutdown() is meant to be called once before process exit - use flush() for per-request cleanup"):this.shutdownPromise=this._shutdown(e).finally(()=>{this.shutdownPromise=null}),this.shutdownPromise}};var vE=/[a-z][a-z0-9+.-]{0,63}:[^\s<>"]+/gi;var GC=new RegExp(vE.source,"i"),yd=/[a-z][a-z0-9+.-]{0,63}:\/\//i,zC=new RegExp(`^${yd.source}`,"i"),VC=new RegExp(yd.source,"gi");var RE=["is_not","is_set"],ME=1152921504606847e3,v=class r extends Error{constructor(e){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,r.prototype)}};function xo(r){if(typeof r=="boolean")return!0;if(typeof r=="string"){let e=r.toLowerCase();return e==="true"||e==="false"}if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!xo(e in r?r[e]:null))return!1;return!0}function Lo(r){if(typeof r=="boolean")return r;if(typeof r=="string")return r.toLowerCase()==="true";if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(!Lo(e in r?r[e]:null))return!1;return!0}function vr(r){for(let e=0;e<r.length;e++){let t=r.charCodeAt(e);if(t>=55296&&t<=56319){let n=r.charCodeAt(e+1);if(e+1>=r.length||n<56320||n>57343)throw new v("Cannot stringify an unpaired surrogate like the flags service");e++}else if(t>=56320&&t<=57343)throw new v("Cannot stringify an unpaired surrogate like the flags service")}}function ms(r,e=new Set){if(!(r===null||typeof r=="boolean")){if(typeof r=="string")return void vr(r);if(typeof r=="number"){if(!Number.isFinite(r))throw new v(`Cannot represent non-finite number ${r} like the flags service`);return}if(Array.isArray(r)){if(e.has(r))throw new v("Cannot represent a circular array during local evaluation");e.add(r);try{for(let t=0;t<r.length;t++)t in r&&ms(r[t],e)}finally{e.delete(r)}return}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new v("Cannot represent a non-JSON object like the flags service");if(e.has(r))throw new v("Cannot represent a circular object during local evaluation");e.add(r);try{for(let n of Object.keys(r))vr(n),ms(r[n],e)}finally{e.delete(r)}return}throw new v(`Cannot represent ${typeof r} like the flags service`)}}function CE(r,e){let t=0,n=0;for(;t<r.length&&n<e.length;){let s=r.charCodeAt(t),i=e.charCodeAt(n),o=s>=55296&&s<=56319,a=i>=55296&&i<=56319,c=o?r.charCodeAt(t+1):0,l=a?e.charCodeAt(n+1):0,u=o?(s-55296)*1024+c-56320+65536:s,d=a?(i-55296)*1024+l-56320+65536:i;if(u!==d)return u-d;t+=o?2:1,n+=a?2:1}return r.length-e.length}function Fo(r,e=new Set){if(r===null)return"null";if(typeof r=="string")return vr(r),JSON.stringify(r);if(typeof r=="boolean")return r?"true":"false";if(typeof r=="number"){if(!Number.isFinite(r))throw new v(`Cannot stringify non-finite number ${r} like the flags service`);if(Number.isInteger(r))throw new v(`Cannot distinguish integer ${r} from an integral JSON float during local evaluation`);return String(r)}if(Array.isArray(r)){if(e.has(r))throw new v("Cannot stringify a circular array during local evaluation");e.add(r);try{let t=[];for(let n=0;n<r.length;n++)t.push(n in r?Fo(r[n],e):"null");return`[${t.join(",")}]`}finally{e.delete(r)}}if(typeof r=="object"){let t=Object.getPrototypeOf(r);if(t!==Object.prototype&&t!==null)throw new v("Cannot stringify a non-JSON object like the flags service");if(e.has(r))throw new v("Cannot stringify a circular object during local evaluation");e.add(r);try{let n=Object.keys(r);return n.forEach(vr),`{${n.sort(CE).map(s=>`${JSON.stringify(s)}:${Fo(r[s],e)}`).join(",")}}`}finally{e.delete(r)}}throw new v(`Cannot stringify ${typeof r} like the flags service`)}function gs(r){return typeof r=="string"?(vr(r),r):Fo(r)}function bd(r){try{return new RegExp(r),!0}catch{return!1}}function me(r){return String(r).replace(/[A-Z]/g,e=>e.toLowerCase())}function Td(r,e,t){if(!/^\d+$/.test(r)||t==="strict"&&r.length>1&&r[0]==="0")throw new v(`Invalid semver: ${e}`);return parseInt(r,10)}function W(r,e="strict"){let n=String(r).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new v(`Invalid semver: ${r}`);let s=n.split("."),i=o=>o===void 0||o===""?0:Td(o,r,e);return[i(s[0]),i(s[1]),i(s[2])]}function he(r,e){for(let t=0;t<3;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return 0}function PE(r,e){let t=W(r,e);return{lower:[t[0],t[1],t[2]],upper:[t[0],t[1]+1,0]}}function IE(r,e){let[t,n,s]=W(r,e),i=[t,n,s],o;return o=t>0?[t+1,0,0]:n>0?[0,n+1,0]:[0,0,s+1],{lower:i,upper:o}}function OE(r,e){let n=String(r).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new v(`Invalid wildcard semver: ${r}`);let s=n.split("."),i=c=>{if(e==="legacy-permissive"){let l=parseInt(c,10);if(!isNaN(l))return l}else try{return Td(c,r,e)}catch{}throw new v(`Invalid wildcard semver: ${r}`)},o=i(s[0]);if(s.length===1)return{lower:[o,0,0],upper:[o+1,0,0]};let a=i(s[1]);return{lower:[o,a,0],upper:[o,a+1,0]}}function wd(r){if(r instanceof Date)return r;if(typeof r=="string"||typeof r=="number"){let e=new Date(r);if(!isNaN(e.valueOf()))return e;throw new v(`${r} is in an invalid date format`)}throw new v(`The date provided ${r} must be a string, number, or date object`)}function No(r){let e=/^-?(?<number>[0-9]+)(?<interval>[a-z])$/,t=r.match(e),n=new Date(new Date().toISOString());if(!t||!t.groups)return null;let s=parseInt(t.groups.number);if(s>=1e4)return null;let i=t.groups.interval;if(i==="h")n.setUTCHours(n.getUTCHours()-s);else if(i==="d")n.setUTCDate(n.getUTCDate()-s);else if(i==="w")n.setUTCDate(n.getUTCDate()-7*s);else if(i==="m")n.setUTCMonth(n.getUTCMonth()-s);else{if(i!=="y")return null;n.setUTCFullYear(n.getUTCFullYear()-s)}return n}function Uo(r,e,t={}){let n=r.key,s=r.value,i=r.operator||"exact",o=t.semverParsingPolicy??"strict";if(Object.prototype.hasOwnProperty.call(e,n)){if(i==="is_not_set")return!1;if(i==="is_set")return!0}else throw new v(`Property ${n} not found in propertyValues`);let c=e[n];if(c===void 0)return t.warnFunction?.(`Property ${n} cannot have a value of undefined with the ${i} operator`),i==="is_not";if(c===null&&!RE.includes(i)&&i!=="exact"&&i!=="is_not")return t.warnFunction?.(`Property ${n} cannot have a value of null with the ${i} operator`),!1;let l=(d,p)=>{if(t.propertyMatchingVersion!==2&&xo(d)||Array.isArray(d)&&d.length===0)return ms(p),Lo(d)===Lo(p);if(t.propertyMatchingVersion===2&&typeof p=="number"&&xo(d))return ms(p),!1;if(Array.isArray(d)){let g=gs(p).toLowerCase();return d.some(m=>gs(m).toLowerCase()===g)}return gs(d).toLowerCase()===gs(p).toLowerCase()},u=(d,p,g)=>{if(g==="gt")return d>p;if(g==="gte")return d>=p;if(g==="lt")return d<p;if(g==="lte")return d<=p;throw new Error(`Invalid operator: ${g}`)};switch(i){case"exact":return l(s,c);case"is_not":return!l(s,c);case"is_set":return!0;case"icontains":return me(c).includes(me(s));case"not_icontains":return!me(c).includes(me(s));case"starts_with":return me(c).startsWith(me(s));case"not_starts_with":return!me(c).startsWith(me(s));case"ends_with":return me(c).endsWith(me(s));case"not_ends_with":return!me(c).endsWith(me(s));case"regex":return bd(String(s))&&String(c).match(String(s))!==null;case"not_regex":return bd(String(s))&&String(c).match(String(s))===null;case"gt":case"gte":case"lt":case"lte":{let d=typeof s=="number"?s:parseFloat(String(s)),p=typeof c=="number"?c:c!=null?parseFloat(String(c)):NaN;return Number.isFinite(d)&&Number.isFinite(p)?u(p,d,i):u(String(c),String(s),i)}case"is_date_after":case"is_date_before":{if(typeof s=="boolean")throw new v("Date operations cannot be performed on boolean values");let d=No(String(s));d==null&&(d=wd(s));let p=wd(c);return i==="is_date_before"?p<d:p>d}case"semver_eq":return he(W(String(c),o),W(String(s),o))===0;case"semver_neq":return he(W(String(c),o),W(String(s),o))!==0;case"semver_gt":return he(W(String(c),o),W(String(s),o))>0;case"semver_gte":return he(W(String(c),o),W(String(s),o))>=0;case"semver_lt":return he(W(String(c),o),W(String(s),o))<0;case"semver_lte":return he(W(String(c),o),W(String(s),o))<=0;case"semver_tilde":{let d=W(String(c),o),{lower:p,upper:g}=PE(String(s),o);return he(d,p)>=0&&he(d,g)<0}case"semver_caret":{let d=W(String(c),o),{lower:p,upper:g}=IE(String(s),o);return he(d,p)>=0&&he(d,g)<0}case"semver_wildcard":{let d=W(String(c),o),{lower:p,upper:g}=OE(String(s),o);return he(d,p)>=0&&he(d,g)<0}default:throw new v(`Unknown operator: ${i}`)}}async function Ad(r){let e=globalThis.crypto?.subtle;if(!e)throw new Error("SubtleCrypto API not available");let t=await e.digest("SHA-1",new TextEncoder().encode(r));return Array.from(new Uint8Array(t)).map(n=>n.toString(16).padStart(2,"0")).join("")}async function Rr(r,e,t="",n="."){let s=await Ad(`${r}${n}${e}${t}`);return parseInt(s.slice(0,15),16)/ME}async function $o(r,e){if(r==null||r.id==null||r.exclusion_percentage==null)return;let t=Number(r.exclusion_percentage);if(!Number.isFinite(t))return;let n=Math.min(Math.max(t,0),100);if(!(n!==100&&await Rr("holdout",e,"","-")>n/100))return`holdout-${r.id}`}function hs(r){let e=[],t=0;for(let n of r){let s=t+n.rollout_percentage/100;e.push({valueMin:t,valueMax:s,key:n.key}),t=s}return e}async function Bo(r,e,t){let n=await Rr(r,e,"variant");return hs(t).find(s=>n>=s.valueMin&&n<s.valueMax)?.key}function Wo(r,e){if(e===!1||e==null||!r)return null;let t=typeof e=="boolean"?e.toString():e,n=r[t]||null;return n==null?null:Ut(n)}var vd=9223372036854776e3,kE="9223372036854775808",DE=Object.prototype.propertyIsEnumerable;function xE(){return{ancestors:new WeakSet,remainingNodes:1e4}}function De(r,e){try{return Rd(r,e,xE(),0)}catch{return[]}}function LE(r,e){let t=r.toString(),n=BigInt(kE);return r>=n||r<-n?(e?.debug(`Attribute ${t} is outside the int64 range; encoding it as a string`),{stringValue:t}):{intValue:t}}function Ko(r,e,t,n){if(t.remainingNodes<=0)return{stringValue:is};if(t.remainingNodes--,Tu(r))return{boolValue:r};if(typeof r=="bigint")return LE(r,e);if(typeof r=="number"){if(!Number.isFinite(r))return{stringValue:String(r)};if(Number.isInteger(r)){if(Number.isSafeInteger(r))return{intValue:String(r)};if("u"<typeof BigInt)return{stringValue:String(r)};let s=BigInt(r).toString();return r>=vd||r<-vd?(e?.debug(`Attribute ${s} is outside the int64 range; encoding it as a string`),{stringValue:s}):{intValue:s}}return{doubleValue:r}}if(typeof r=="string")return{stringValue:Oe(r)};if(typeof r=="function")return{stringValue:Gu};if(typeof r=="symbol")return{stringValue:String(r)};if(typeof r=="object"&&r!==null){if(t.ancestors.has(r))return{stringValue:ss};if(n>=20)return{stringValue:is};if(r instanceof Date){let s=r.getTime(),i=Number.isFinite(s)?r.toISOString():String(r);return{stringValue:typeof i=="string"?Oe(i):String(i)}}t.ancestors.add(r);try{try{let s=r.toJSON;if(typeof s=="function")return Ko(s.call(r),e,t,n+1)}catch{}return ae(r)?{arrayValue:{values:FE(r,e,t,n+1)}}:{kvlistValue:{values:Rd(r,e,t,n+1)}}}finally{t.ancestors.delete(r)}}return{stringValue:Oe(String(r))}}function FE(r,e,t,n){let s=[],i=Math.min(r.length,1e3),o=0;for(;o<i&&t.remainingNodes>0;o++)try{let a=o in r?r[o]:void 0;if(Te(a))continue;s.push(Ko(a,e,t,n))}catch{s.push({stringValue:pe})}return r.length>o&&s.push({stringValue:is}),s}function Rd(r,e,t,n){let s=[];for(let i in r)if(DE.call(r,i)){if(!i){e?.debug("Dropping an attribute with an empty key");continue}if(s.length>=1e3||t.remainingNodes<=0){e?.debug("Attributes truncated: the value exceeds the OTLP encoder budget");break}try{let o=r[i];if(co(o)||$e(o))continue;s.push({key:Oe(i),value:Ko(o,e,t,n)})}catch{s.push({key:Oe(i),value:{stringValue:pe}})}}return s}function Cr(r,e,t){return{...Be({},r.resourceAttributes),"service.name":r.serviceName||"unknown_service",...r.environment&&{"deployment.environment":r.environment},...r.serviceVersion&&{"service.version":r.serviceVersion},"telemetry.sdk.name":e,"telemetry.sdk.version":t}}var NE=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function Pr(r,e){let t=Be({},r),n={};for(let s of NE)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s],delete t[s]);return[...De(t,e),...De(n,e)]}var Md={darwin:"macOS",win32:"Windows",cygwin:"Windows",linux:"Linux",android:"Android",freebsd:"FreeBSD",openbsd:"OpenBSD",netbsd:"NetBSD",sunos:"SunOS",aix:"AIX",haiku:"Haiku","Mac OS X":"macOS"};function UE(r){if(r)return Object.prototype.hasOwnProperty.call(Md,r)?Md[r]:r}function Go(r,e){let t=UE(r);return{...t?{"os.name":t}:{},...e?{"os.version":e}:{}}}var $E={trace:{text:"TRACE",number:1},debug:{text:"DEBUG",number:5},info:{text:"INFO",number:9},warn:{text:"WARN",number:13},error:{text:"ERROR",number:17},fatal:{text:"FATAL",number:21}},lP=$E.info;var ht=class{constructor(e){this._onFire=e,this._firesAt=0}get pending(){return!!this._timer}arm(e){this.clear(),this._firesAt=Date.now()+e,this._timer=te(()=>{this._timer=void 0,this._onFire()},e)}armNoEarlierThan(e){this._timer&&Date.now()+e<=this._firesAt||this.arm(e)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function Ir(){return 1-.25+Math.random()*.25*2}var _e=1;function Or(r,e,t,n){let s=Math.min(Math.max(0,e-1),6),i=r*2**s,o=n===void 0?i:Math.min(i,Math.max(n,r));return Math.round(o*t)}var kr=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function zo(r){return String(r)+"000000"}function Vo(r,e,t,n){let s="";return n&&(s=Object.keys(n).sort().map(o=>`${JSON.stringify(o)}:${JSON.stringify(n[o])}`).join(",")),`${r}\0${e}\0${t??""}\0${s}`}function Cd(r,e){for(let t=0;t<e.length;t++)if(r<=e[t])return t;return e.length}function Yo(r,e,t){return Cr(r,e,t)}function qo(r,e,t,n){return{resourceMetrics:[{resource:{attributes:Pr(e)},scopeMetrics:[{scope:{name:t,version:n},metrics:r}]}]}}function Es(r){let e=r?.resourceAttributes;return{serviceName:e?.["service.name"]??r?.serviceName,serviceVersion:e?.["service.version"]??r?.serviceVersion,environment:e?.["deployment.environment"]??r?.environment,resourceAttributes:e,beforeSend:r?.beforeSend,flushIntervalMs:r?.flushIntervalMs??1e4,maxSeriesPerFlush:r?.maxSeriesPerFlush??1e3}}var Pd=1,Dr=class{constructor(e,t,n){this._instance=e,this._config=t,this._logger=n,this._series=new Map,this._flushTimer=new ht(()=>this.flush().catch(s=>{this._logger.error("Metrics flush failed:",s)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new gt,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._generation=0}count(e,t=1,n){this._capture({name:e,type:"count",value:t,unit:n?.unit,attributes:n?.attributes})}gauge(e,t,n){this._capture({name:e,type:"gauge",value:t,unit:n?.unit,attributes:n?.attributes})}histogram(e,t,n){this._capture({name:e,type:"histogram",value:t,unit:n?.unit,attributes:n?.attributes})}flush(){let e=this._flushPromise,n=(async()=>{e&&await e.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let n,s;try{n=t.attributes?{...t.attributes}:void 0,s=Vo(t.type,t.name,t.unit,n)}catch(a){this._logger.warn(`Dropping metric '${t.name}': attributes could not be serialized`,a);return}let i=this._series.get(s);if(!i){if(!this._admitNewSeries())return;i={name:t.name,type:t.type,unit:t.unit,attributes:n,windowStartMs:Date.now()},this._series.set(s,i)}let o=this._typeByName.get(t.name);o===void 0?this._typeByName.set(t.name,t.type):o!==t.type&&!this._typeCollisionWarned.has(t.name)&&(this._typeCollisionWarned.add(t.name),this._logger.warn(`Metric name '${t.name}' is already used as a ${o}; recording it as a ${t.type} too will blend both series in charts. Use a distinct name.`)),this._fold(i,t.value),this._armFlushTimer()}_admitNewSeries(){return this._series.size<this._config.maxSeriesPerFlush?!0:(this._seriesCapWarned||(this._seriesCapWarned=!0,this._logger.warn(`Metric series cap reached (${this._config.maxSeriesPerFlush} per flush window); dropping new series until the next flush. Reduce attribute cardinality.`)),!1)}_fold(e,t){switch(e.type){case"count":e.total=(e.total??0)+t;break;case"gauge":e.last=t;break;case"histogram":{e.hist||(e.hist={count:0,sum:0,min:t,max:t,bucketCounts:new Array(kr.length+1).fill(0)});let n=e.hist;n.count+=1,n.sum+=t,n.min=Math.min(n.min,t),n.max=Math.max(n.max,t),n.bucketCounts[Cd(t,kr)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let n=ae(t)?t:[t],s=e;for(let i of n)try{let o=i(s);if(!o)return this._logger.info("Metric was rejected in beforeSend function"),null;s=o}catch(o){return this._logger.error("Error in beforeSend function for metric:",o),null}return s}_armFlushTimer(){this._flushTimer.pending||this._flushTimer.arm(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Or(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}async _doFlush(){if(this._flushTimer.clear(),this._series.size===0)return;let e=this._series;this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set;let t=this._generation,n=await this._instance._sendMetricsBatch(this._buildPayload(e));if(t===this._generation)switch(this._retryAfter.record(n),n.kind==="retry-later"?(this._consecutiveFlushFailures++,this._flushJitter=Ir()):(this._consecutiveFlushFailures=0,this._flushJitter=_e),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(e){return qo(this._buildMetrics(e),Yo(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=zo(Date.now()),n=new Map;for(let s of e.values()){let i=Vo(s.type,s.name,s.unit,void 0),o=n.get(i);o||(o={name:s.name,...s.unit&&{unit:s.unit}},s.type==="count"?o.sum={aggregationTemporality:Pd,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:Pd,dataPoints:[]},n.set(i,o));let a=De(s.attributes??{},this._logger),c=zo(s.windowStartMs);if(s.type==="count"){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,asDouble:s.total??0};o.sum.dataPoints.push(l)}else if(s.type==="gauge"){let l={attributes:a,timeUnixNano:t,asDouble:s.last??0};o.gauge.dataPoints.push(l)}else if(s.hist){let l={attributes:a,startTimeUnixNano:c,timeUnixNano:t,count:s.hist.count,sum:s.hist.sum,min:s.hist.min,max:s.hist.max,bucketCounts:s.hist.bucketCounts,explicitBounds:kr};o.histogram.dataPoints.push(l)}}return Array.from(n.values())}_mergeWindowBack(e){for(let[t,n]of e){let s=this._series.get(t);if(!s){this._admitNewSeries()&&this._series.set(t,n);continue}switch(s.windowStartMs=Math.min(s.windowStartMs,n.windowStartMs),s.type){case"count":s.total=(s.total??0)+(n.total??0);break;case"gauge":break;case"histogram":if(n.hist)if(s.hist){s.hist.count+=n.hist.count,s.hist.sum+=n.hist.sum,s.hist.min=Math.min(s.hist.min,n.hist.min),s.hist.max=Math.max(s.hist.max,n.hist.max);for(let i=0;i<s.hist.bucketCounts.length;i++)s.hist.bucketCounts[i]+=n.hist.bucketCounts[i]}else s.hist=n.hist;break}}}};var HE="0".repeat(32),KE="0".repeat(16),GE=/^[0-9a-f]+$/;function zE(r){let e=new Uint8Array(r),t=globalThis.crypto;if(t&&typeof t.getRandomValues=="function")try{return t.getRandomValues(e),e}catch{}for(let n=0;n<r;n++)e[n]=Math.floor(256*Math.random());return e}function VE(r){let e="";for(let t=0;t<r.length;t++)e+=r[t].toString(16).padStart(2,"0");return e}function Id(r){let e=VE(zE(r));return/[^0]/.test(e)?e:e.slice(0,-1)+"1"}function Od(){return Id(16)}function kd(){return Id(8)}function Dd(r,e,t){return typeof r=="string"&&r.length===e&&r!==t&&GE.test(r)}function xd(r){return Dd(r,32,HE)}function Ld(r){return Dd(r,16,KE)}var YE=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Fd(r){let e=Nd(r);return e&&{traceId:e.traceId,spanId:e.spanId,flags:qE(e.flags)}}function qE(r){return 1&parseInt(r,16)?ys:JE}function Nd(r){if(typeof r!="string")return;let e=YE.exec(r.trim());if(!e)return;let[,t,n,s,i,o]=e;if(t!=="ff"&&!(t==="00"&&o)&&!(!xd(n)||!Ld(s)))return{version:t,traceId:n,spanId:s,flags:i}}function Ud(r){return Nd(r)&&r.trim()}function Ss(r){return Array.isArray(r)&&r.length===1?r[0]:r}var ys="01",JE="00";function $d(r,e,t=ys){return`00-${r}-${e}-${t}`}var XE=32,Jo=512;function bs(r){if(typeof r!="string")return;let e=r.trim();if(!e||/[^\x20-\x7e\t]/.test(e))return;let t=e.split(",");if(!(t.length>XE)){for(let n of t)if(n.trim()&&!n.includes("="))return;return e.length<=Jo?e:ZE(t)}}var QE=128;function ZE(r){let e=[...r],t=()=>e.reduce((n,s)=>n+s.length,0)+e.length-1;for(let n=e.length-1;n>=0&&t()>Jo;n--)e[n].length>QE&&e.splice(n,1);for(;e.length&&t()>Jo;)e.pop();return e.length?e.join(","):void 0}var Bd="unknown";function _t(r,e,t,n){return typeof r=="string"&&r.trim()?r.length>t?r.slice(0,t):r:(n?.debug(`${e} must be a non-empty string; using "${Bd}"`),Bd)}function Bt(r){if(r==null)return;let e=r;if(r instanceof Date)try{e=r.getTime()}catch{return}if(!(typeof e!="number"||!Number.isFinite(e))&&!(e<0||e>9223372036854))return e}function Wd(r,e,t){let n=Bt(r);return n===void 0?(r!==void 0&&t?.debug("Span startTime is out of range or not a valid time; using the current time"),e):(e-n>864e5?t?.debug("Span startTime is more than 24 hours in the past; the server will clamp it to receive time and keep the original in $originalTimestamp"):n>e&&t?.debug("Span startTime is in the future; the span may export with a zero duration"),n)}function ws(r,e){return r<e?e:r}function xr(r,e,t,n){let s=Bt(r);return s===void 0?(r!==void 0&&n?.debug(`Span ${t} is out of range or not a valid time; using the derived time`),e):s}function As(){let r=globalThis.performance;return typeof r?.now=="function"?r.now():void 0}var Wt=class{constructor(e,t,n){this._onEnd=t,this._logger=n,this._events=[],this._ended=!1,this._userAttributeCount=0,this._userEventCount=0,this._droppedAttributes=0,this._droppedEvents=0,this._traceId=e.traceId,this._spanId=e.spanId,this._parentSpanId=e.parentSpanId,this._traceState=e.traceState,this._traceFlags=e.traceFlags??ys,this._parentIsRemote=e.parentIsRemote??!1,this._name=e.name,this._kind=e.kind,this._autoKeys=new Set(e.autoAttributeKeys),this._maxAttributes=e.maxAttributes,this._maxEvents=e.maxEvents,this._maxAttributesPerEvent=e.maxAttributesPerEvent,this._maxAttributeValueLength=e.maxAttributeValueLength,this._attributes=Object.create(null);for(let s of Object.keys(e.attributes))this._writeAttribute(s,e.attributes[s]);this._startMono=e.backdated?void 0:As(),this._startTime=e.clockAnchor&&this._startMono!==void 0?e.clockAnchor.wall+(this._startMono-e.clockAnchor.mono):e.startTime,this._startMono!==void 0&&(this._clockAnchor=e.clockAnchor??{wall:this._startTime,mono:this._startMono})}_now(){if(this._startMono!==void 0){let e=As();if(e!==void 0)return this._startTime+Math.max(0,e-this._startMono)}return Date.now()}_mutable(e){return this._ended?(this._logger?.debug(`Ignoring ${e} on a span that has already ended`),!1):!0}_writeAttribute(e,t){if(Te(t)){e in this._attributes&&!this._autoKeys.has(e)&&this._userAttributeCount--,delete this._attributes[e];return}if(!this._autoKeys.has(e)&&!(e in this._attributes)){if(this._userAttributeCount>=this._maxAttributes)return void this._droppedAttributes++;this._userAttributeCount++}this._attributes[e]=Rs(t,this._maxAttributeValueLength)}setAttribute(e,t){return this._mutable("setAttribute")&&this._writeAttribute(e,t),this}setAttributes(e){if(this._mutable("setAttributes")){let t=Be({},e);for(let n of Object.keys(t))this._writeAttribute(n,t[n])}return this}addEvent(e,t,n){if(this._mutable("addEvent")){if(this._userEventCount>=this._maxEvents)return this._droppedEvents++,this;this._userEventCount++;let s=t&&Gd(t,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:_t(e,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:xr(n,this._now(),"event timestamp",this._logger),...s&&{attributes:s.attributes,...s.dropped&&{droppedAttributesCount:s.dropped}}})}return this}setStatus(e,t){if(this._mutable("setStatus")){if(e!=="ok"&&e!=="error")return this._logger?.debug(`Ignoring unknown span status "${String(e)}"; expected "ok" or "error"`),this;this._status={code:e,...t&&{message:Xo(t,this._maxAttributeValueLength)}}}return this}get statusIsExplicitlyOk(){return this._status?.code==="ok"}recordException(e){if(!this._mutable("recordException"))return this;let{type:t,message:n,stack:s}=Qo(e);return this.addEvent(eS,{"exception.type":t,"exception.message":n,...s&&{"exception.stacktrace":s}}),this.setStatus("error",n)}updateName(e){return this._mutable("updateName")&&(this._name=_t(e,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return $d(this._traceId,this._spanId,this._traceFlags)}tracestate(){return this._traceState??null}childContext(){return{traceId:this._traceId,parentSpanId:this._spanId,traceState:this._traceState,traceFlags:this._traceFlags,clockAnchor:this._clockAnchor}}end(e){if(this._ended)return void this._logger?.debug("Ignoring end() on a span that has already ended");this._ended=!0;let t=this._now(),n=xr(e,t,"end time",this._logger);this._onEnd({traceId:this._traceId,spanId:this._spanId,...this._parentSpanId&&{parentSpanId:this._parentSpanId},...this._traceState&&{traceState:this._traceState},traceFlags:this._traceFlags,parentIsRemote:this._parentIsRemote,name:this._name,kind:this._kind,...this._status&&{status:this._status},attributes:{...this._attributes},events:this._events,startTime:this._startTime,endTime:ws(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},eS="exception",tS=4294967295;function rS(r){try{return typeof r=="string"?r:String(r)}catch{return pe}}function Et(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),tS)}function nS(r,e){if(!e.length)return Object.keys(r);let t=e.filter(s=>Object.prototype.propertyIsEnumerable.call(r,s)),n=new Set(t);return[...t,...Object.keys(r).filter(s=>!n.has(s))]}function Hd(r,e,t,n,s,i,o=[]){let a=0,c=0,l={};for(let g of nS(r.attributes,o)){let m=r.attributes[g];if(!Te(m)){if(!e.has(g)){if(a>=t){c++;continue}a++}Object.defineProperty(l,g,{value:Rs(m,i),enumerable:!0,writable:!0,configurable:!0})}}r.attributes=l,c&&(r.droppedAttributesCount=Et(r.droppedAttributesCount)+c);let u=0,d=0,p=[];for(let g of r.events){if(u>=n){d++;continue}if(u++,g.attributes){let m=Gd(g.attributes,s,i);g.attributes=m.attributes,m.dropped&&(g.droppedAttributesCount=Et(g.droppedAttributesCount)+m.dropped)}p.push(g)}r.events=p,d&&(r.droppedEventsCount=Et(r.droppedEventsCount)+d),r.status?.message&&(r.status={...r.status,message:Xo(rS(r.status.message),i)})}var vs=class{setAttribute(){return this}setAttributes(){return this}addEvent(){return this}setStatus(){return this}recordException(){return this}updateName(){return this}traceparent(){return null}tracestate(){return null}end(){}},Kd=new vs,Lr=class extends vs{constructor(e,t){super(),this._traceparent=e,this._tracestate=t}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function sS(r){try{let e=r.stack;return typeof e=="string"&&e?{stack:e}:{}}catch{return{}}}function Ze(r,e){let t=Ss(r?.parent)??e,n=typeof t=="string"||t==null?t:jd(t,"traceparent"),s=Ud(n);if(!s)return Kd;let i=typeof t=="string"||t==null?r?.tracestate:jd(t,"tracestate");return new Lr(s,bs(i))}function jd(r,e){try{let t=r[e];return typeof t=="function"?t.call(r):void 0}catch{return}}function Xo(r,e){return r.length>e?r.slice(0,e):r}function Rs(r,e){return Ts(r,e,{ancestors:new WeakSet,remainingNodes:1e4},0)}function Ts(r,e,t,n){if(r===null||typeof r!="object")return Te(r)||t.remainingNodes<=0?r:(t.remainingNodes--,typeof r=="string"?Xo(r,e):r);if(t.ancestors.has(r))return ss;if(t.remainingNodes<=0||n>=20)return r;t.remainingNodes--,t.ancestors.add(r);try{if(r instanceof Date)return r;let s=iS(r);if(s.selfDescribed)return Te(s.value)?String(s.value):Ts(s.value,e,t,n+1);if(ae(r)){let a=Math.min(r.length,1e3),c=[];for(let l=0;l<a;l++)try{c.push(Ts(r[l],e,t,n+1))}catch{c.push(pe)}return r.length>a&&(c.length=r.length),c}let i={},o=0;for(let a of Object.keys(r)){if(o>=1e3)break;let c;try{c=Ts(r[a],e,t,n+1)}catch{c=pe}a&&!Te(c)&&o++,Object.defineProperty(i,a,{value:c,enumerable:!0,writable:!0,configurable:!0})}return i}catch{return r}finally{t.ancestors.delete(r)}}function iS(r){try{let e=r.toJSON;if(typeof e=="function")return{selfDescribed:!0,value:e.call(r)}}catch{}return{selfDescribed:!1}}function Gd(r,e,t){let n;try{n=Object.keys(r)}catch{return{attributes:{},dropped:0}}let s={},i=0,o=0;for(let a of n){if(i>=e){o++;continue}let c;try{c=Rs(r[a],t)}catch{c=pe}Te(c)||(i++,Object.defineProperty(s,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:s,dropped:o}}function zd(r,e){for(let t of Object.keys(r))r[t]=Rs(r[t],e);return r}function Fr(r,e,t){return e===Kd?t(e):r.with(e,()=>t(e))}function Qo(r){try{let e=sS(r);if(Xe(r))return{type:r.name||"Error",message:r.message||"",...e};if(typeof r=="string")return{type:"string",message:r};if(r&&typeof r=="object"){let t=r;if(typeof t.message=="string")return{type:typeof t.name=="string"?t.name:"Object",message:t.message,...e}}return{type:typeof r,message:String(r)}}catch{return{type:typeof r,message:""}}}var Zo={internal:1,server:2,client:3,producer:4,consumer:5},oS={ok:1,error:2},aS=1,cS=256,lS=512;function uS(r){let e=parseInt(r.traceFlags,16);return(Number.isFinite(e)?255&e:aS)|cS|(r.parentIsRemote?lS:0)}function Ms(r){if(typeof r=="string")return Oe(r);try{return Oe(String(r))}catch{return pe}}function dS(r){return r&&Object.prototype.hasOwnProperty.call(Zo,r)?Zo[r]:Zo.internal}function ea(r){let e=Math.floor(r),t=Math.round((r-e)*1e6);return t>=1e6&&(e+=1,t=0),String(e)+String(t).padStart(6,"0")}function fS(r,e){let t={name:Ms(r.name),timeUnixNano:ea(r.timestamp)};if(r.attributes){let s=De(r.attributes,e);s.length&&(t.attributes=s)}let n=Et(r.droppedAttributesCount);return n&&(t.droppedAttributesCount=n),t}function Vd(r,e){let t={traceId:r.traceId,spanId:r.spanId,name:Ms(r.name),kind:dS(r.kind),startTimeUnixNano:ea(r.startTime),endTimeUnixNano:ea(r.endTime),flags:uS(r)};r.parentSpanId&&(t.parentSpanId=r.parentSpanId),r.traceState&&(t.traceState=Ms(r.traceState));let n=De(r.attributes,e);n.length&&(t.attributes=n),r.events.length&&(t.events=r.events.map(o=>fS(o,e)));let s=Et(r.droppedAttributesCount);s&&(t.droppedAttributesCount=s);let i=Et(r.droppedEventsCount);return i&&(t.droppedEventsCount=i),r.status&&(t.status={code:oS[r.status.code],...r.status.message&&{message:Ms(r.status.message)}}),t}function Yd(r,e,t){return Cr(r,e,t)}function qd(r,e,t,n,s){return{resourceSpans:[{resource:{attributes:Pr(e,s)},scopeSpans:[{scope:{name:t,version:n},spans:r}]}]}}var Jd=8;function Cs(){return As()??Date.now()}function ta(r){try{return r instanceof Wt}catch{return!1}}function Xd(r,e){let t=Fd(r);if(t)return{traceId:t.traceId,parentSpanId:t.spanId,traceState:bs(e),traceFlags:t.flags,isRemote:!0}}function pS(r){try{return typeof r.traceparent=="function"}catch{return!1}}function gS(r){return!!r.attributes&&typeof r.attributes=="object"&&!Array.isArray(r.attributes)&&Array.isArray(r.events)&&r.name!==void 0&&r.kind!==void 0&&r.startTime!==void 0&&r.endTime!==void 0}function Ps(r,e,t){r[e]!==t&&(r[e]=t)}function mS(r,e){try{let t=Object.getOwnPropertyDescriptors(r);for(let n of["traceId","spanId","parentSpanId","traceState"])t[n]={value:e[n],enumerable:!0,writable:!0,configurable:!0};return Object.create(Object.getPrototypeOf(r),t)}catch{return r}}var Nr=class{constructor(e,t,n,s,i,o){this._instance=e,this._config=t,this._logger=n,this._getContext=s,this._contextManager=i,this._onSpanQueued=o,this._queue=[],this._flushTimer=new ht(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter=new gt,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=t.maxExportBatchSize}startSpan(e,t){if(this._instance.isDisabled||this._instance.optedOut)return Ze(t,this._contextManager.active());let n=Ss(t?.parent);if(n&&typeof n!="string"&&!ta(n)){if(pS(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),Ze(t,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let s=this._resolveParent(n,t);if(this._liveSpans.size>=this._config.maxLiveSpans&&this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),Ze(t,this._contextManager.active());let i=Date.now(),o=Wd(t?.startTime,i,this._logger),a=kd();this._liveSpans.set(a,Cs());let c=this._autoContextAttributes();return new Wt({traceId:s?.traceId??Od(),spanId:a,parentSpanId:s?.parentSpanId,traceState:s?.traceState,traceFlags:s?.traceFlags,parentIsRemote:s?.isRemote,name:_t(e,"Span name",this._config.maxAttributeValueLength,this._logger),kind:t?.kind??"internal",attributes:Be({...c},t?.attributes),autoAttributeKeys:Object.keys(c),maxAttributes:this._config.maxAttributesPerSpan,maxEvents:this._config.maxEventsPerSpan,maxAttributesPerEvent:this._config.maxAttributesPerEvent,maxAttributeValueLength:this._config.maxAttributeValueLength,startTime:o,backdated:o!==i,clockAnchor:Bt(t?.startTime)===void 0?s?.clockAnchor:void 0},(l,u)=>this._onSpanEnd(l,u),this._logger)}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this.startSpan(e,s);try{let a=Fr(this._contextManager,o,i);return qu(a)?a.then(c=>(o.end(),c),c=>{throw this._recordCallbackError(o,c),o.end(),c}):(o.end(),a)}catch(a){throw this._recordCallbackError(o,a),o.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let e=this._generation,t=Promise.resolve().then(()=>e===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===t&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=t,t}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(e,t){if(typeof e=="string"){let s=Xd(e,t?.tracestate);return s||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),s}if(ta(e))return e.childContext();let n=this._contextManager.active();if(ta(n))return n.childContext();if(n instanceof Lr)return Xd(n.traceparent(),n.tracestate()??void 0)}_autoContextAttributes(){let e;try{e=this._getContext()}catch(n){return this._logger.debug("Failed to read tracing context; span will carry no PostHog attributes",n),{}}let t={};return e.distinctId&&(t.posthogDistinctId=e.distinctId),e.sessionId&&(t.sessionId=e.sessionId),e.currentUrl&&(t["url.full"]=e.currentUrl),e.screenName&&(t["screen.name"]=e.screenName),e.appState&&(t["app.state"]=e.appState),t}_recordCallbackError(e,t){if(!(e instanceof Wt))return;let{type:n,message:s,stack:i}=Qo(t);e.addEvent("exception",{"exception.type":n,"exception.message":s,...i&&{"exception.stacktrace":i}}),e.statusIsExplicitlyOk||e.setStatus("error",s)}_evictAgedSpans(){let e=Cs()-this._config.maxSpanAgeMs,t=0;for(let[n,s]of this._liveSpans){if(s>e)break;this._liveSpans.delete(n),t++}t&&this._recordDrop(t,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(e,t){if(!this._liveSpans.delete(e.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(e,t);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(s){this._logger.debug("Span queue notification failed",s)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(e){let t=e.droppedAttributesCount??0,n=e.droppedEventsCount??0,s=0;for(let i of e.events)s+=i.droppedAttributesCount??0;(t||n||s)&&this._logger.debug(`Span limits discarded data from "${e.name}": ${t} attributes, ${n} events, ${s} event attributes`)}_runBeforeSpanSend(e,t){if(!this._config.beforeSpanSend.length)return e;let n={traceId:e.traceId,spanId:e.spanId,parentSpanId:e.parentSpanId,traceState:e.traceState},s={startTime:e.startTime,endTime:e.endTime},i={attributes:e.droppedAttributesCount,events:e.droppedEventsCount},o=Object.keys(e.attributes),a={traceFlags:e.traceFlags,parentIsRemote:e.parentIsRemote},c=e.status&&{...e.status},l=e,u=e;try{for(let g of this._config.beforeSpanSend){let m=g(l);if(!m)return this._recordDrop(1,"beforeSpanSend dropped it"),null;l=this._keepSpanIdentity(m,n)}if(u={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:l.name,kind:l.kind,status:l.status,attributes:l.attributes,events:l.events,startTime:l.startTime,endTime:l.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:i.attributes,droppedEventsCount:i.events},!gS(u))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;u.name=_t(u.name,"Span name",this._config.maxAttributeValueLength,this._logger),u.status&&u.status.code!=="ok"&&u.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),u.status=c),u.startTime=Bt(u.startTime)??s.startTime,u.endTime=ws(Bt(u.endTime)??s.endTime,u.startTime);let p=[];for(let g of u.events)try{p.push({...g,name:_t(g.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:xr(g.timestamp,u.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return u.events=p,Hd(u,t,this._config.maxAttributesPerSpan,this._config.maxEventsPerSpan,this._config.maxAttributesPerEvent,this._config.maxAttributeValueLength,o),u}catch(d){return this._logger.debug("beforeSpanSend failed; dropping the span rather than exporting it unscrubbed",d),this._recordDrop(1,"beforeSpanSend failed"),null}}_keepSpanIdentity(e,t){(e.traceId!==t.traceId||e.spanId!==t.spanId||e.parentSpanId!==t.parentSpanId)&&this._logger.debug("beforeSpanSend changed a span identity field; keeping the original ids");try{Ps(e,"traceId",t.traceId),Ps(e,"spanId",t.spanId),Ps(e,"parentSpanId",t.parentSpanId),Ps(e,"traceState",t.traceState)}catch{return mS(e,t)}return e}_recordDrop(e,t){this._droppedSinceWarning+=e,this._dropReasons.add(t),Date.now()-this._lastDropWarningAt>=this._config.flushIntervalMs&&this._warnAboutDrops()}_warnAboutDrops(){this._droppedSinceWarning&&(this._lastDropWarningAt=Date.now(),this._logger.warn(`Dropping ${this._droppedSinceWarning} span(s): ${[...this._dropReasons].join("; ")}`),this._droppedSinceWarning=0,this._dropReasons.clear())}_encodeBatch(e){let t=[];for(let n of e)try{t.push(Vd(n,this._logger))}catch(s){this._logger.debug("Failed to encode a span; dropping it",s),this._recordDrop(1,"its attributes could not be encoded")}return t}_discardQueueIfConsentWithdrawn(){if(!this._instance.isDisabled&&!this._instance.optedOut)return 0;let e=this._queue.length;return this._queue=[],this._resetHeadBatchBudget(),this._recordDrop(e,"the user has opted out"),this._warnAboutDrops(),e}async _flushInner(){if(!this._queue.length)return 0;let e=this._discardQueueIfConsentWithdrawn();if(e)return e;let t=zd(Yd(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._config.maxAttributeValueLength),n=this._instance.getLibraryId(),s=this._instance.getLibraryVersion(),i=this._queue.length,o=0,a=1/0,c=this._generation;try{for(;i>0&&this._queue.length>0;){let l=this._discardQueueIfConsentWithdrawn();if(l)return o+l;let u=this._headBatchFailures>0?Math.min(this._maxExportBatchSize,this._headBatchSize):this._maxExportBatchSize,d=Math.max(1,Math.min(u,a,i,this._queue.length)),p=this._queue.slice(0,d),g=this._encodeBatch(p);if(!g.length){this._queue.splice(0,d),i-=d,o+=d,this._resetHeadBatchBudget();continue}let m=Cs()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),h=await this._instance._sendTracesBatch(qd(g,t,n,s,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(h),h.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._queue.splice(0,d),i-=d,o+=d,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(h.kind==="too-large"){if(d===1){this._queue.splice(0,1),i-=1,o+=1,this._recordDrop(1,"it is too large for the ingestion endpoint"),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget();continue}let E=Math.max(1,Math.floor(d/2));h.measuredLocally?a=E:this._maxExportBatchSize=E,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${E}`);continue}if(h.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=Ir(),this._headBatchSize=d,m&&(this._headBatchFailures++,this._headBatchChargeableAt=Cs()+this._nextFlushDelay()),this._headBatchFailures<Jd)return this._logger.debug("Span export failed; retrying on the next flush",h.error),o;if(this._queue.splice(0,d),i-=d,o+=d,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(d,`the ingestion endpoint failed ${Jd} times in a row`),this._retryAfter.isOpen())return o;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",h.error),this._queue.splice(0,d),i-=d,o+=d,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(d,"the ingestion endpoint rejected the batch")}return o}finally{this._warnAboutDrops()}}_flushInBackground(){this._backgroundFlush||(this._backgroundFlush=this.flush().catch(e=>{this._logger.debug("Background span flush failed",e)}).finally(()=>{this._backgroundFlush=void 0,this._armFlushTimerIfQueuedNoEarlierThan()}))}_armFlushTimerIfQueued(){this._flushTimer.pending||!this._queue.length||this._flushTimer.arm(this._nextFlushDelay())}_armFlushTimerIfQueuedNoEarlierThan(){this._queue.length&&this._flushTimer.armNoEarlierThan(this._nextFlushDelay())}_nextFlushDelay(){return Math.max(Or(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var Ur=class{active(){return this._active}with(e,t){let n=this._active;this._active=e;try{return t()}finally{this._active=n}}};var hS=5e3,_S=512,ES=2048,SS=128,yS=128,bS=128,wS=8192,TS=1e4,AS=36e5;function et(r,e){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:e}var Qd=["service.name","service.version","deployment.environment"];function vS(r){if(!(!r||typeof r!="object"||Array.isArray(r)))try{if(Qd.every(t=>!(t in r)||typeof r[t]=="string"))return r;let e={...r};for(let t of Qd)t in e&&typeof e[t]!="string"&&delete e[t];return e}catch{return}}function RS(r,e){if(!r)return[];let t=[r].flat().filter(s=>!!s),n=t.filter(s=>typeof s=="function");return n.length!==t.length&&e?.critical(`beforeSpanSend: ignoring ${t.length-n.length} of ${t.length} entries that are not functions. Spans export without them, so whatever they were redacting is not redacted.`),n}function ra(r,e,t){let n=Be({...e},vS(r?.resourceAttributes)),s=et(r?.maxExportBatchSize,_S);return{serviceName:n?.["service.name"]??r?.serviceName,serviceVersion:n?.["service.version"]??r?.serviceVersion,environment:n?.["deployment.environment"]??r?.environment,resourceAttributes:n,beforeSpanSend:RS(r?.beforeSpanSend,t),maxAttributesPerSpan:et(r?.maxAttributesPerSpan,SS),maxEventsPerSpan:et(r?.maxEventsPerSpan,yS),maxAttributesPerEvent:bS,maxAttributeValueLength:et(r?.maxAttributeValueLength,wS),flushIntervalMs:et(r?.flushIntervalMs,hS),maxExportBatchSize:s,maxQueueSize:Math.max(et(r?.maxQueueSize,ES),s),maxLiveSpans:et(r?.maxLiveSpans,TS),maxSpanAgeMs:et(r?.maxSpanAgeMs,AS)}}var na=require("node:fs"),tf=require("node:fs/promises"),ia=require("node:path"),rf=require("node:readline"),Is=new G.ReduceableCache(25),$r=new G.ReduceableCache(20),oa=7,MS=1e3,CS=1e4,sa=10485760;async function nf(r,e=tf.open,t){let n={},s;try{s=process.cwd()}catch{}for(let a=r.length-1;a>=0;a--){let c=r[a],l=c?.filename;if(!c||typeof l!="string"||typeof c.lineno!="number"||DS(l)||xS(c)||!(0,ia.isAbsolute)(l)&&s===void 0)continue;n[l]||(n[l]=[]),n[l].push(c.lineno)}let i=Object.keys(n);if(i.length==0)return r;let o=[];for(let a of i){let c=sf(a,s);if(c===void 0||$r.get(c))continue;let l=n[a];if(!l)continue;l.sort((p,g)=>p-g);let u=FS(l);if(u.every(p=>LS(c,p)))continue;let d=NS(Is,c,{});o.push(IS(a,u,d,c,e,t))}return await Promise.all(o).catch(()=>{}),r&&r.length>0&&OS(r,Is,s),Is.reduce(),r}async function PS(r,e,t){let n,s=!1;try{n=await e(r,na.constants.O_RDONLY|na.constants.O_NONBLOCK);let i=await n.stat();return i.isFile()?i.size>sa?void t?.debug(`Skipping source context for oversized file ${r}: ${i.size} bytes exceeds ${sa}`):(s=!0,n):void 0}catch{return}finally{n&&!s&&await n.close().catch(()=>{})}}async function IS(r,e,t,n,s,i){let o=await PS(r,s,i);if(o===void 0)return void $r.set(n,1);let a=o;return new Promise(c=>{let l=!1;function u(w){l||(l=!0,w?.destroy(),a.close().then(c,c))}let d;try{d=a.createReadStream({autoClose:!1,start:0,end:sa-1})}catch{$r.set(n,1),u();return}let p;try{p=(0,rf.createInterface)({input:d})}catch{$r.set(n,1),u(d);return}let g=0,m=0,h=e[m];if(h===void 0)return void u(d);let E=h[0],_=h[1];function b(){$r.set(n,1),p.close(),p.removeAllListeners(),u(d)}d.on("error",b),p.on("error",b),p.on("close",()=>u(d)),p.on("line",w=>{if(g++,!(g<E)&&(t[g]=US(w,0),g>=_)){if(m===e.length-1){p.close(),p.removeAllListeners();return}m++;let T=e[m];if(T===void 0){p.close(),p.removeAllListeners();return}E=T[0],_=T[1]}})})}function OS(r,e,t){for(let n of r)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let s=sf(n.filename,t),i=s===void 0?void 0:e.get(s);if(i===void 0)continue;kS(n.lineno,n,i)}}function kS(r,e,t){if(e.lineno===void 0||t===void 0)return;e.pre_context=[];for(let s=of(r);s<r;s++){let i=t[s];if(i===void 0)return void Zd(e);e.pre_context.push(i)}if(t[r]===void 0)return void Zd(e);e.context_line=t[r];let n=af(r);e.post_context=[];for(let s=r+1;s<=n;s++){let i=t[s];if(i===void 0)break;e.post_context.push(i)}}function Zd(r){delete r.pre_context,delete r.context_line,delete r.post_context}function DS(r){return r.startsWith("node:")||r.endsWith(".min.js")||r.endsWith(".min.cjs")||r.endsWith(".min.mjs")||r.startsWith("data:")}function xS(r){return r.lineno!==void 0&&r.lineno>CS||r.colno!==void 0&&r.colno>MS}function sf(r,e){return(0,ia.isAbsolute)(r)?JSON.stringify([null,r]):e===void 0?void 0:JSON.stringify([e,r])}function LS(r,e){let t=Is.get(r);if(t===void 0)return!1;for(let n=e[0];n<=e[1];n++)if(t[n]===void 0)return!1;return!0}function FS(r){if(!r.length)return[];let e=0,t=r[0];if(typeof t!="number")return[];let n=ef(t),s=[];for(;;){if(e===r.length-1){s.push(n);break}let i=r[e+1];if(typeof i!="number")break;i<=n[1]?n[1]=i+oa:(s.push(n),n=ef(i)),e++}return s}function ef(r){return[of(r),af(r)]}function of(r){return Math.max(1,r-oa)}function af(r){return r+oa}function NS(r,e,t){let n=r.get(e);return n===void 0?(r.set(e,t),t):n}function US(r,e){let t=r,n=t.length;if(n<=150)return t;e>n&&(e=n);let s=Math.max(e-60,0);s<5&&(s=0);let i=Math.min(s+140,n);return i>n-5&&(i=n),i===n&&(s=Math.max(i-140,0)),t=t.slice(s,i),s>0&&(t=`...${t}`),i<n&&(t+="..."),t}var jt=require("path");function cf(r=process.cwd()){let e=jt.sep==="\\",t=s=>e?s.replace(/\\/g,"/"):s,n=t(r);return async s=>{for(let i of s)!i.filename||i.filename.startsWith("node:")||i.filename.startsWith("data:")||(0,jt.isAbsolute)(i.filename)&&(i.filename=t((0,jt.relative)(n,t(i.filename))));return s}}var lf="5.55.0";var je={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var tt=class r{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e,t={}){let n=this._flags[e];return this._recordAccess(e),n?.enabled??t.defaultValue??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!!t)return t.enabled?t.variant??!0:!1}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let n=this._flags[t];n&&(e[t]=n)}return this._cloneWith(e)}only(e){let t={},n=[];for(let s of e){let i=this._flags[s];i?t[s]=i:n.push(s)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[n,s]of Object.entries(this._flags)){let i=s.enabled===!1?!1:s.variant??!0;e[`$feature/${n}`]=i,s.enabled&&t.push(n)}return t.length>0&&(t.sort(),e.$active_feature_flags=t),e}_cloneWith(e){return new r({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId===""||this._isSlice&&!(e in this._flags))return;let t=this._flags[e],n=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,s={$feature_flag:e,$feature_flag_response:n,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};t?.hasExperiment!==void 0&&(s.$feature_flag_has_experiment=t.hasExperiment),t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(s.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let i=[];this._errorsWhileComputing&&i.push(je.ERRORS_WHILE_COMPUTING),this._quotaLimited&&i.push(je.QUOTA_LIMITED),t===void 0&&i.push(je.FLAG_MISSING),i.length>0&&(s.$feature_flag_error=i.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:s})}};var $S=6e4;function uf(r){return r==="client"||r==="server"?r:"all"}function BS(r,e){return r===e||r==="all"||e==="all"}var Ht=class r extends Error{constructor(e){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,r.prototype)}};function WS(r,e){r.name=e.name,Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype)}var xe=class r extends Error{constructor(e){super(e),WS(this,r)}},Os=class{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:n,timeout:s,host:i,customHeaders:o,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollerStopped=!1,this.filteredOutFlagKeys=new Set,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=s,this.projectApiKey=n,this.host=i,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=o,this.onLoad=a.onLoad,this.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){this.debugMode&&e()}withEvaluationSnapshot(e){return e.definitions?e:{...e,evaluationCache:{},definitions:{featureFlagsByKey:this.featureFlagsByKey,groupTypeMapping:this.groupTypeMapping,cohorts:this.cohorts,filteredOutFlagKeys:this.filteredOutFlagKeys,propertyMatchingVersion:this.propertyMatchingVersion}}}createEvaluationContext(e,t={},n={},s={},i={}){return{distinctId:e,groups:t,personProperties:n,groupProperties:s,evaluationCache:i}}async getFeatureFlag(e,t,n={},s={},i={}){await this.loadFeatureFlags();let o,a;if(!this.loadedSuccessfullyOnce)return o;if(a=this.featureFlagsByKey[e],a!==void 0){let c=this.createEvaluationContext(t,n,s,i);try{o=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${o}`))}catch(l){l instanceof xe||l instanceof v?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${e}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${e}: ${l}`))}}return o}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let n={},s={},i=this.featureFlags.length==0,o=t?t.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a=this.withEvaluationSnapshot({...e,definitions:void 0});return await Promise.all(o.map(async c=>{try{let{value:l,payload:u}=await this.computeFlagAndPayloadLocally(c,a,{skipLoadCheck:!0});n[c.key]=l,u&&(s[c.key]=u)}catch(l){l instanceof xe||l instanceof v?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${c.key}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${l}`)),i=!0}})),{response:n,payloads:s,fallbackToFlags:i}}async computeFlagAndPayloadLocally(e,t,n={}){let{matchValue:s,skipLoadCheck:i=!1}=n;if(this.loadedSuccessfullyOnce&&(t=this.withEvaluationSnapshot(t)),i||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};t=this.withEvaluationSnapshot(t),e=t.definitions.featureFlagsByKey[e.key]??e;let o;o=s!==void 0?s:await this.computeFlagValueLocally(e,t);let a=Wo(e.filters?.payloads,o);return{value:o,payload:a}}async computeFlagValueLocally(e,t){let{distinctId:n,groups:s,personProperties:i,groupProperties:o}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new v("Flag has experience continuity enabled");let c=(e.filters||{}).aggregation_group_type_index;if(c!=null){let l=t.definitions.groupTypeMapping[String(c)];if(!l)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${e.key}`)),new v("Flag has unknown group type index");if(!(l in s))return this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute group feature flag: ${e.key} without group names passed in`)),!1;e.bucketing_identifier==="device_id"&&(i?.$device_id===void 0||i?.$device_id===null||i?.$device_id==="")&&this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Ignoring bucketing_identifier for group flag: ${e.key}`));let u=o[l];return await this.matchFeatureFlagProperties(e,s[l],u,t)}{let l=this.getBucketingValueForFlag(e,n,i);if(l===void 0)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Can't compute feature flag: ${e.key} without $device_id, falling back to server evaluation`)),new v(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,l,i,t)}}getBucketingValueForFlag(e,t,n){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let s=n?.$device_id;return s==null||s===""?void 0:s}return t}async evaluateFlagDependency(e,t,n){let{evaluationCache:s}=n,i=e.key;if(!n.definitions.featureFlagsByKey)throw new v("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new v(`Flag dependency property for '${i}' is missing required 'dependency_chain' field`);let o=e.dependency_chain;if(!Array.isArray(o))throw new v(`Flag dependency property for '${i}' has an invalid 'dependency_chain' (expected array, got ${typeof o})`);if(o.length===0)throw new v(`Circular dependency detected for flag '${i}' (empty dependency chain)`);for(let c of o){if(!(c in s)){let u=n.definitions.featureFlagsByKey[c];if(u)if(u.active)try{let d=await this.computeFlagValueLocally(u,n);s[c]=d}catch(d){throw new v(`Error evaluating flag dependency '${c}' for flag '${i}': ${d}`)}else s[c]=!1;else if(n.definitions.filteredOutFlagKeys.has(c))s[c]=!1;else throw new v(`Missing flag dependency '${c}' for flag '${i}'`)}if(s[c]==null)throw new v(`Dependency '${c}' could not be evaluated`)}let a=s[i];return this.flagEvaluatesToExpectedValue(e.value,a)}flagEvaluatesToExpectedValue(e,t){return typeof e=="boolean"?e===t||typeof t=="string"&&t!==""&&e===!0:typeof e=="string"?t===e:!1}async matchFeatureFlagProperties(e,t,n,s){s=this.withEvaluationSnapshot(s);let i=e.filters||{},o=await $o(i.holdout,t);if(o!==void 0)return o;let a=i.groups||[],c=i.aggregation_group_type_index,l=i.early_exit??!1,{groups:u,groupProperties:d}=s,p=!1,g;for(let m of a)try{let h=m.aggregation_group_type_index!==void 0?m.aggregation_group_type_index:c,E=n,_=t;if(h!==c&&h!=null){let w=s.definitions.groupTypeMapping[String(h)];if(!w||!(w in u)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${h} not available`));continue}if(!(w in d)){p=!0;continue}E=d[w],_=u[w]}let b=await this.isConditionMatch(e,_,m,E,s);if(b==="match"){let w=m.variant,T=i.multivariate?.variants||[];g=w&&T.some(M=>M.key===w)?w:await this.getMatchingVariant(e,_)||!0;break}if(l&&b==="out_of_rollout_bound"){if(p)break;return!1}}catch(h){if(h instanceof xe)throw h;if(h instanceof v)p=!0;else throw h}if(g!==void 0)return g;if(p)throw new v("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,n,s,i){i=this.withEvaluationSnapshot(i);let o=i.definitions,a=n.rollout_percentage,c=l=>{this.logMsgIfDebug(()=>console.warn(l))};if((n.properties||[]).length>0){for(let l of n.properties){let u=l.type,d=!1;if(u==="cohort"){let p=await ff(l,s,o.cohorts,this.debugMode,g=>this.evaluateFlagDependency(g,s,i),o.propertyMatchingVersion);d=l.operator==="not_in"?!p:p}else d=u==="flag"?await this.evaluateFlagDependency(l,s,i):df(l,s,c,o.propertyMatchingVersion);if(!d)return"no_match"}if(a==null)return"match"}return a!=null&&await Rr(e.key,t)>a/100?"out_of_rollout_bound":"match"}async getMatchingVariant(e,t){return Bo(e.key,t,e.filters?.multivariate?.variants||[])}variantLookupTable(e){return hs(e.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(e){if(!this.evaluationContexts||this.evaluationContexts.length===0)return e;let t=new Set(this.evaluationContexts);return e.filter(n=>{let s=n.evaluation_contexts??n.evaluation_tags;return!s||s.length===0?!0:s.some(i=>t.has(i))})}getEvaluationRuntimeForFlag(e){let t=this.featureFlagsByKey[e];return t?uf(t.evaluation_runtime):void 0}getFlagKeysByEvaluationRuntime(e){return this.featureFlags.filter(t=>BS(uf(t.evaluation_runtime),e)).map(t=>t.key)}updateFlagState(e){let t=this.filterFlagsByEvaluationContexts(e.flags);this.featureFlags=t,this.featureFlagsByKey=t.reduce((s,i)=>(s[i.key]=i,s),{});let n=new Set(t.map(s=>s.key));this.filteredOutFlagKeys=new Set(e.flags.filter(s=>!n.has(s.key)).map(s=>s.key)),this.groupTypeMapping=e.group_type_mapping??e.groupTypeMapping??{},this.cohorts=e.cohorts,this.propertyMatchingVersion=e.property_matching_version??e.propertyMatchingVersion,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.((e.minimal_flag_called_events??e.minimalFlagCalledEvents)===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter(n=>n.ensure_experience_continuity);t.length>0&&console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();return t?(this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags),!0):!1}catch(t){return this.onError?.(new Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(!(this.loadedSuccessfullyOnce&&!e))return!e&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(t=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){let e=this.pollingInterval??3e4;return this.shouldBeginExponentialBackoff?Math.min($S,e*2**this.backOffCount):e}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0);try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!e&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Ht(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.propertyMatchingVersion=void 0,this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Ht(`Your secret key does not have permission to fetch feature flag definitions for local evaluation. Setting next polling interval to ${this.getPollingInterval()}ms. Are you sure you're using the correct secret and Project API key pair? More information: https://posthog.com/docs/api/overview`);case 429:throw this.beginBackoff(),new Ht(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await t.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let s=n.group_type_mapping||{},i=n.minimal_flag_called_events===!0,o={flags:n.flags??[],group_type_mapping:s,cohorts:n.cohorts||{},minimal_flag_called_events:i,property_matching_version:n.property_matching_version,propertyMatchingVersion:n.property_matching_version,groupTypeMapping:s,minimalFlagCalledEvents:i};if(this.updateFlagState(o),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(o)}catch(a){this.onError?.(new Error(`Failed to store in cache: ${a}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(e){e instanceof Ht&&this.onError?.(e)}finally{!this.pollerStopped&&this.pollingInterval!==null&&(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}getPersonalApiKeyRequestOptions(e="GET",t){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return t&&(n["If-None-Match"]=t),{method:e,headers:n}}async _requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=te(()=>{i.abort()},this.timeout),t.signal=i.signal}let s=()=>clearTimeout(n);try{let i=this.fetch,o=await i(e,t);return o.status!==200?(s(),o):{status:o.status,headers:o.headers,body:o.body,text:async()=>{try{return await o.text()}finally{s()}},json:async()=>{try{return await o.json()}finally{s()}}}}catch(i){throw s(),i}}async stopPoller(e=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let t=this.cacheProvider.shutdown();t instanceof Promise&&await Qe(t,e,()=>{throw new Error(`Cache shutdown timeout after ${e}ms`)})}catch(t){this.onError?.(new Error(`Error during cache shutdown: ${t}`))}}};function df(r,e,t,n){return Uo(r,e,{warnFunction:t,propertyMatchingVersion:n})}function jS(r,e){if(!(r in e))throw new xe(`cohort ${r} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function ff(r,e,t,n=!1,s,i){let o=String(r.value);jS(o,t);let a=t[o];return pf(a,e,t,n,s,i)}async function pf(r,e,t,n=!1,s,i){if(!r)return!0;let o=r.type,a=r.values;if(!a||a.length===0)return!0;let c=!1;if("values"in a[0]){for(let l of a)try{let u=await pf(l,e,t,n,s,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof xe)throw u;if(u instanceof v)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new v("Can't match cohort without a given cohort property value");return o==="AND"}for(let l of a)try{let u;if(l.type==="cohort")u=await ff(l,e,t,n,s,i);else if(l.type==="flag"){if(!s)throw new v(`Flag dependency '${l.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await s(l)}else u=df(l,e,void 0,i);let d=l.negation||!1;if(o==="AND"){if(!u&&!d||u&&d)return!1}else if(u&&!d||!u&&d)return!0}catch(u){if(u instanceof xe)throw u;if(u instanceof v)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new v("can't match cohort without a given cohort property value");return o==="AND"}var HS=["--unhandled-rejections","--unhandled_rejections"],KS=new Set(["throw","strict","warn","warn-with-error-code","none"]),GS=[...globalThis.process?.execArgv??[]],zS=globalThis.process?.env?.NODE_OPTIONS;function VS(r){let e=[],t="",n=!1;for(let s=0;s<r.length;s++){let i=r[s];i==="\\"&&n&&s+1<r.length?t+=r[++s]:i!==" "||n?i==='"'?n=!n:t+=i:t&&(e.push(t),t="")}return t&&e.push(t),e}function gf(r){let e;for(let t=0;t<r.length;t++){let n=r[t],s=HS.find(o=>n===o||n.startsWith(`${o}=`));if(!s)continue;let i=n===s?r[++t]:n.slice(s.length+1);KS.has(i)&&(e=i)}return e}function YS(r=GS,e=zS){return gf(r)??gf(VS(e??""))??"throw"}var mf=YS();function hf(r,e,t){r(e,{mechanism:{type:t==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function qS(r,e){let t=!1;return Object.assign((n,s)=>{let i=global.process.listeners("uncaughtException").filter(o=>o.name!=="domainUncaughtExceptionClear"&&o._posthogErrorHandler!==!0).length;hf(r,n,s),!t&&i===0&&(t=!0,e(n))},{_posthogErrorHandler:!0})}function _f(r,e,t=mf){let n=globalThis.process;if(n){if(t==="strict")return void n.on("uncaughtExceptionMonitor",(s,i)=>hf(r,s,i));n.on("uncaughtException",qS(r,e))}}function Ef(r,e=mf){let t=globalThis.process;!t||e==="throw"||e==="strict"||e==="warn-with-error-code"||t.on("unhandledRejection",n=>{r(n,{mechanism:{type:"onunhandledrejection",handled:!1}})})}var JS=2e3,aa=class r{constructor(e,t,n){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new Jn({...Cu(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return ur(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,n,s,i){let o={...i},a=e.buildFromUnknown(t,n);a.$exception_list=await e.modifyFrames(a.$exception_list);let c=G.getInjectedReleaseId();return c&&(o.$release_id=c),{event:"$exception",distinctId:s,properties:{...a,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(_f(this.onException.bind(this),this.onFatalError.bind(this)),Ef(this.onException.bind(this)))}onException(e,t){this.client.addPendingPromise((async()=>{if(!r.isPreviouslyCapturedError(e)){let n=await r.buildEventMessage(this.client.getErrorPropertiesBuilder(),e,t),i=n.properties?.$exception_list[0]?.type??"Exception";return this._rateLimiter.consumeRateLimit(i)?void this._logger.info("Skipping exception capture because of client rate limiting.",{exception:i}):this.client._capturePreparedEvent(n,!1)}})())}async onFatalError(e){console.error(e),await this.client.shutdown(JS),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},St=aa;var ks=class{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}};function XS(r){return r==="v0"||r==="v1"}function Sf(){let r="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return XS(r)?r:"v0"}var QS="$ai_",Br="analytics";function yf(r){return typeof r.event=="string"&&r.event.startsWith(QS)}var Kt=class r extends Error{constructor({requestId:e,drops:t,retryExhausted:n,cause:s}){super(r.buildMessage(e,t,n,s)),this.name="CaptureV1Error",this.requestId=e,this.drops=t,this.retryExhausted=n,this.cause=s}static buildMessage(e,t,n,s){let i=`Capture V1 batch ${e} did not fully deliver: ${t.length} dropped, ${n.length} undelivered`;return s instanceof Error&&(i+=` (${s.message})`),i}};function ca(r){if(typeof r=="boolean")return r;if(typeof r=="number")return r!==0;if(typeof r=="string"){let e=r.trim().toLowerCase();if(e==="true"||e==="1")return!0;if(e==="false"||e==="0")return!1}}function ZS(r){return typeof r=="string"?r:void 0}var ey=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:ca},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:ca},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:ca},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:ZS}],ty=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function ry(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function ny(r){if(typeof r=="string"){let t=new Date(r);if(Number.isNaN(t.getTime()))return new Date().toISOString();let n=t.toISOString(),s=r.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1];return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}if(r instanceof Date)return Number.isNaN(r.getTime())?new Date().toISOString():r.toISOString();let e=r==null?new Date:new Date(r);return Number.isNaN(e.getTime())?new Date().toISOString():e.toISOString()}function bf(r,e,t){t!==void 0&&!(e in r)&&(r[e]=t)}function sy(r){let t={...ry(r.properties)?r.properties:{}},n={};for(let{property:i,optionKey:o,coerce:a}of ey)if(i in t){let c=a(t[i]);c!==void 0&&(n[o]=c),delete t[i]}let s={};for(let{property:i,field:o}of ty)if(i in t){let a=t[i];typeof a=="string"&&(s[o]=a),delete t[i]}return delete t.$lib,delete t.$lib_version,bf(t,"$set",r.$set),bf(t,"$set_once",r.$set_once),{event:String(r.event??""),uuid:String(r.uuid??""),distinct_id:String(r.distinct_id??""),timestamp:ny(r.timestamp),...s,options:n,properties:t}}function wf(r,{createdAt:e,historicalMigration:t}){let n={created_at:e,batch:r.map(sy)};return t&&(n.historical_migration=!0),n}var iy="/i/v1/analytics/events",oy=3e4,ay=new Set([408,500,502,503,504]),Ds=class{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??oy,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??(n=>new Promise(s=>te(s,n))),this.generateRequestId=t.generateRequestId??ee,this.compress=t.compress??Tr}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:s}=wf(e,{createdAt:n,historicalMigration:this.config.historicalMigration}),i=`${this.config.host}${iy}`,o=[],a=s,c=Math.max(1,this.config.maxAttempts);for(let l=1;l<=c;l++){let u=l===c,d=Je({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),p,g;try{p=await this.sendOnce(i,d,l,t);let{response:m,signal:h}=p,{status:E}=m;if(E<200||E>=300)if(!u&&ay.has(E)){let _=this.parseRetryAfter(m);await p.waitFor(p.cancelBody()).catch(()=>{}),g=this.backoffDelay(l,_)}else{let _=await this.buildHttpError(m,E,p.waitFor);return this.surfaceBatchFailure(t,o,a,_)}else{let _;try{_=await p.waitFor(this.parseResponse(m))}catch(T){if(h.aborted)throw T;return this.surfaceBatchFailure(t,o,a,new Error(`Capture V1 returned an unparseable ${E} response body`))}let b=this.classify(a,_,o);if(b.length===0)return this.surfacePartialDrops(t,o);if(u)return void this.onError(new Kt({requestId:t,drops:o,retryExhausted:b.map(T=>T.uuid)}));a=b;let w=this.parseRetryAfter(m);g=this.backoffDelay(l,w)}}catch(m){if(p&&!p.signal.aborted)throw m;if(u)return this.surfaceBatchFailure(t,o,a,m);g=this.backoffDelay(l)}finally{p?.cleanup()}g!==void 0&&await this.sleep(g)}}async sendOnce(e,t,n,s){let i=this.buildHeaders(n,s),o=t;if(this.config.compressionEnabled){let d=await this.compress(t,this.config.isDebug);d!==null&&(o=d,i["Content-Encoding"]="gzip")}let a=new AbortController,c="waiting for response headers",l,u=new Promise((d,p)=>{l=te(()=>{let g=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);g.name="AbortError",p(g),a.abort(g)},this.config.requestTimeoutMs)});try{let d=this.fetchFn(e,{method:"POST",headers:i,body:o,signal:a.signal}),p=!1;d.then(_=>{a.signal.aborted&&!p&&this.cancelBody(_)}).catch(()=>{});let g=await Promise.race([d,u]);p=!0,c="while reading the response body";let m=!1,h,E=()=>h??=this.cancelBody(g);return{response:g,signal:a.signal,waitFor:_=>Promise.race([_,u]),cancelBody:E,cleanup:()=>{m||(m=!0,clearTimeout(l),a.signal.aborted&&E())}}}catch(d){throw clearTimeout(l),d}}buildHeaders(e,t){let n=`${this.config.libraryId}/${this.config.libraryVersion}`,s={"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`,"PostHog-Sdk-Info":n,"PostHog-Attempt":String(e),"PostHog-Request-Id":t,"PostHog-Request-Timestamp":new Date(this.now()).toISOString()};return this.config.userAgent&&(s["User-Agent"]=this.config.userAgent),s}classify(e,t,n){let s=t.results??{},i=[];for(let o of e){let a=s[o.uuid];a&&(a.result==="drop"?n.push({uuid:o.uuid,details:a.details??void 0}):a.result==="retry"&&i.push(o))}return i}backoffDelay(e,t){let n=Math.min(this.config.initialRetryDelayMs*2**(e-1),this.maxBackoffMs);return t===void 0?n:Math.max(n,Math.min(t,this.maxBackoffMs))}parseRetryAfter(e){let t=e.headers?.get("Retry-After");if(!t)return;let n=t.trim();if(/^\d+$/.test(n)){let o=parseInt(n,10);return Number.isFinite(o)&&o>0?1e3*o:void 0}let s=Date.parse(n);if(Number.isNaN(s))return;let i=s-this.now();return i>0?i:void 0}async parseResponse(e){let t=await e.text(),n=JSON.parse(t);if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("unexpected response shape");let s=n.results;if(s!==void 0&&(typeof s!="object"||s===null||Array.isArray(s)))throw new Error("unexpected results shape");return{results:s??{}}}async buildHttpError(e,t,n){let s="";try{s=(await n(e.text())).slice(0,512)}catch{}let i=s?`: ${s}`:"";return new Error(`Capture V1 request failed with HTTP ${t}${i}`)}surfaceBatchFailure(e,t,n,s){this.onError(new Kt({requestId:e,drops:t,retryExhausted:n.map(i=>i.uuid),cause:s}))}surfacePartialDrops(e,t){t.length>0&&this.onError(new Kt({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){try{await e.body?.cancel()}catch{}}};var yt="ai-capture",xs="/i/v0/ai/batch/";var ly=new TextEncoder;function ua(r){return ly.encode(Je(r)).length}function Tf(r,e=8388608,t=5242880){let n=[],s=[],i=[],o=0;for(let a of r){if(a===void 0)continue;let c=ua(a);if(c>e){s.push({event:typeof a.event=="string"?a.event:"unknown",bytes:c});continue}i.length>0&&o+c>t&&(n.push(i),i=[],o=0),i.push(a),o+=c}return i.length>0&&n.push(i),{batches:n,dropped:s}}var uy=100,Af=3e4,dy=5e4,fy=50,py=500,gy="https://us.i.posthog.com",vf=new Set;function Fs(r,e){vf.has(r)||(vf.add(r),console.warn(`[PostHog] ${e}`))}function my(r){return typeof r=="string"?r.trim():""}function hy(r){return(typeof r=="string"?r.trim():"")||void 0}function _y(r){return(typeof r=="string"?r.trim():"")||gy}function Ey(r){return(Array.isArray(r)?r:[r]).filter(t=>typeof t=="string"&&t.trim().length>0)}function Sy(r){if(!r)return{};let e={};for(let[n,s]of Object.entries(r))e[`$feature/${n}`]=s;let t=Object.keys(r).filter(n=>r[n]!==!1).sort();return t.length>0&&(e.$active_feature_flags=t),e}var Ns=class extends Ar{constructor(e,t={}){let n=my(e),s={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5e3,host:_y(t.host),personalApiKey:hy(t.secretKey??t.personalApiKey)};if(super(n,s),this._memoryStorage=new ks,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=s,this.captureMode=Sf(),this.enableFullAiCapture=s.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof s.featureFlagsPollingInterval=="number"?Math.max(s.featureFlagsPollingInterval,uy):s.featureFlagsPollingInterval===null?null:Af,typeof s.waitUntilDebounceMs=="number"&&(this.options.waitUntilDebounceMs=Math.max(s.waitUntilDebounceMs,0)),typeof s.waitUntilMaxWaitMs=="number"&&(this.options.waitUntilMaxWaitMs=Math.max(s.waitUntilMaxWaitMs,0)),!this.disabled&&s.personalApiKey){if(s.personalApiKey.includes("phc_"))throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');s.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new Os({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:s.personalApiKey,projectApiKey:n,timeout:s.requestTimeout??1e4,host:this.host,fetch:s.fetch,onError:o=>{this._events.emit("error",o)},onLoad:o=>{this._events.emit("localEvaluationFlagsLoaded",o)},onMinimalFlagCalledEvents:o=>{this._minimalFlagCalledEvents=o},customHeaders:this.getCustomHeaders(),cacheProvider:s.flagDefinitionCacheProvider,strictLocalEvaluation:s.strictLocalEvaluation,evaluationContexts:s.evaluationContexts??s.evaluationEnvironments}))}this.errorTracking=new St(this,s,this._logger),this.distinctIdHasSentFlagCalls={},this.maxCacheSize=s.maxCacheSize||dy}enqueue(e,t,n,s){super.enqueue(e,t,n,s),this.scheduleDebouncedFlush()}_flushEventsAndSpans(e=!1){let t=this.flushWithPendingPromises();return!this._traces||e&&this._traces.throttled?t:pr([t,this._traces.flush().catch(()=>{})]).then(([n])=>{if(n.status==="rejected")throw n.reason})}flushAutomatic(){return this._flushKeepingRuntimeAlive(!0)}async flush(){return this._flushKeepingRuntimeAlive(!1)}_flushKeepingRuntimeAlive(e){let t=this._flushEventsAndSpans(e),n=this.options.waitUntil;if(n&&!this._waitUntilCycle)try{n(t.catch(()=>{}))}catch{}return t}scheduleDebouncedFlush(){let e=this.options.waitUntil;if(!e||this.disabled||this.optedOut)return;if(!this._waitUntilCycle){let o,a=new Promise(c=>{o=c});try{e(a)}catch{return}this._waitUntilCycle={resolve:o,startedAt:Date.now(),timer:void 0}}let t=Date.now()-this._waitUntilCycle.startedAt,n=this.options.waitUntilMaxWaitMs??py,s=t>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),s)return void this.resolveWaitUntilFlush();let i=this.options.waitUntilDebounceMs??fy;this._waitUntilCycle.timer=te(()=>{this.resolveWaitUntilFlush()},i)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;return e&&(clearTimeout(e.timer),this._waitUntilCycle=void 0),e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this._flushEventsAndSpans()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&yf(e)?"ai":Br}persistedQueueKeyForRoute(e){return e===yt?ne.AiCaptureQueue:e==="ai"?ne.AiQueue:ne.Queue}getActiveQueueRoutes(){let e=this.captureMode==="v1"?[Br,"ai"]:[Br];return this._aiCaptureRouteActive&&e.push(yt),e}getBatchEndpointPath(e){return e===yt?xs:super.getBatchEndpointPath(e)}async sendBatch(e,t,n=Br){if(n===yt)return this.sendAiCaptureBatch(e,t);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(e,t,n);let s=e.filter(i=>i!==void 0);await this.getV1Sender().sendV1Batch(s)}async sendAiCaptureBatch(e,t){let{batches:n,dropped:s}=Tf(e);for(let{event:i,bytes:o}of s){let a=`Event ${i} (${o} bytes) exceeds the ${8388608/1048576}MiB limit for ${xs}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let i of n)await this.sendAiSubBatch(i,t)}async sendAiSubBatch(e,t){try{await super.sendBatch(e,t,yt)}catch(n){if(!$t(n))throw n;if(e.length===1){let[i]=e,a=`Event ${typeof i.event=="string"?i.event:"unknown"} (${ua(i)} bytes) was rejected with 413 by ${xs} on its own, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a));return}let s=Math.ceil(e.length/2);await this.sendAiSubBatch(e.slice(0,s),t),await this.sendAiSubBatch(e.slice(s),t)}}getV1Sender(){return this._v1Sender||(this._v1Sender=new Ds({host:this.host,apiKey:this.apiKey,libraryId:this.getLibraryId(),libraryVersion:this.getLibraryVersion(),userAgent:this.getCustomUserAgent()||void 0,historicalMigration:this.historicalMigration,compressionEnabled:!this.disableCompression,requestTimeoutMs:this.requestTimeout,maxAttempts:(this.options.fetchRetryCount??3)+1,initialRetryDelayMs:this.options.fetchRetryDelay??3e3,isDebug:this.isDebug},{fetch:(e,t)=>this.fetch(e,t),onError:e=>this._events.emit("error",e),compress:e=>this.compressPayload(e)})),this._v1Sender}getLibraryVersion(){return lf}get metrics(){return this._metrics||(this._metrics=new Dr(this,Es(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new Ur}hostResourceAttributes(){return{}}get _spanContextManager(){return this._spanContext||(this._spanContext=this.initializeSpanContextManager()),this._spanContext}get _tracesPipeline(){if(this.options.traces)return this._traces||(this._traces=new Nr(this,ra(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let e=this.context?.get();return{distinctId:e?.distinctId,sessionId:e?.sessionId}}startSpan(e,t){return this._tracesPipeline?.startSpan(e,t)??Ze(t,this._spanContextManager.active())}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this._tracesPipeline;return o?s?o.withSpan(e,s,i):o.withSpan(e,i):Fr(this._spanContextManager,Ze(s,this._spanContextManager.active()),i)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let e=super.getCommonEventProperties();return(this.options.isServer??!0)&&(e.$is_server=!0),e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,n){typeof e=="string"&&this._logger.warn(t),e.event==="$exception"&&!e._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(e,t,n,s,i){return this.addPendingPromise(this._prepareEventMessage(t,s).then(({distinctId:o,event:a,properties:c,options:l})=>{let u={timestamp:l.timestamp,disableGeoip:l.disableGeoip,uuid:l.uuid},d={distinctId:o,event:a,properties:{...c,...this.getCommonEventProperties()}};return n?this.sendImmediate(e,d,u,i):this.enqueue(e,d,u,i)}).catch(o=>{o&&console.error(o)}))}_capturePreparedEvent(e,t){return this._sendPreparedEvent("capture",e,t)}capture(e){this._warnIfInvalidCapture(e,"Called capture() with a string as the first argument when an object was expected.","Using `posthog.capture('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureException(error)` instead, which attaches required metadata automatically."),this._capturePreparedEvent(e,!1)}async captureImmediate(e){return this._warnIfInvalidCapture(e,"Called captureImmediate() with a string as the first argument when an object was expected.","Capturing a `$exception` event via `posthog.captureImmediate('$exception')` is unreliable because it does not attach required metadata. Use `posthog.captureExceptionImmediate(error)` instead, which attaches this metadata by default."),this._capturePreparedEvent(e,!0)}captureAi(e){if(this.disabled)return;let t=mt(e.uuid,ee);return this._sendPreparedAiEvent({...e,uuid:t},!1),t}async captureAiImmediate(e){if(this.disabled)return;let t=mt(e.uuid,ee);return await this._sendPreparedAiEvent({...e,uuid:t},!0),t}_sendPreparedAiEvent(e,t){return typeof e?.event=="string"&&!e.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${e.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",e,t,void 0,yt)}identify({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:n={}}){if(Object.keys(t).length===0&&Object.keys(n).length===0)return;let s={};Object.keys(t).length>0&&(s.$set=t),Object.keys(n).length>0&&(s.$set_once=n),this.capture({distinctId:e,event:"$set",properties:s})}unsetPersonProperties({distinctId:e,properties:t}){let n=Ey(t);n.length!==0&&this.capture({distinctId:e,event:"$set",properties:{$unset:n}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}getFeatureFlagEvaluationRuntime(e){return this.featureFlagsPoller?.getEvaluationRuntimeForFlag(e)}getFeatureFlagKeysByEvaluationRuntime(e){return this.featureFlagsPoller?.getFlagKeysByEvaluationRuntime(e)??[]}async waitForLocalEvaluationReady(e=Af){return this.isLocalEvaluationReady()?!0:this.featureFlagsPoller===void 0?!1:new Promise(t=>{let n=setTimeout(()=>{s(),t(!1)},e),s=this._events.on("localEvaluationFlagsLoaded",i=>{clearTimeout(n),s(),t(i>0)})})}_resolveDistinctId(e,t){return typeof e=="string"?{distinctId:e,options:t}:{distinctId:this.context?.get()?.distinctId,options:e}}async _getFeatureFlagResult(e,t,n={},s){if(this.disabled)return void this._logger.warn("The client is disabled");let i=n.sendFeatureFlagEvents??!0;if(this._flagOverrides!==void 0&&e in this._flagOverrides){let y=this._flagOverrides[e];if(y===void 0)return;let A=this._payloadOverrides?.[e];return{key:e,enabled:y!==!1,variant:typeof y=="string"?y:void 0,payload:A}}let{groups:o,disableGeoip:a}=n,{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=n,d=this.addLocalPersonAndGroupProperties(t,o,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(t,o,this.personPropertiesForLocalEvaluation(t,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g,m=!1,h,E,_,b,w,T,M;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let y=this.featureFlagsPoller?.featureFlagsByKey[e];if(y)try{let A=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(y,p,{matchValue:s});if(A){m=!0;let S=A.value;b=y.id,T="Evaluated locally",M=y.has_experiment,g={key:e,enabled:S!==!1,variant:typeof S=="string"?S:void 0,payload:A.payload??void 0,reason:T,reasonCode:y.active===!1?"flag_disabled":void 0}}}catch(A){if(A instanceof xe||A instanceof v)this._logger?.info(`${A.name} when computing flag locally: ${e}: ${A.message}`);else throw A}}if(!m&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,a,[e]);if(y===void 0)_=je.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,h=y.requestId,E=y.evaluatedAt;let A=[];y.errorsWhileComputingFlags&&A.push(je.ERRORS_WHILE_COMPUTING),y.quotaLimited?.includes("feature_flags")&&A.push(je.QUOTA_LIMITED);let S=y.flags[e];if(S===void 0)A.push(je.FLAG_MISSING);else{b=S.metadata?.id,w=S.metadata?.version,T=S.reason?.description??S.reason?.code,M=S.metadata?.has_experiment;let I;if(S.metadata?.payload!==void 0)try{I=JSON.parse(S.metadata.payload)}catch{I=S.metadata.payload}g={key:e,enabled:S.enabled,variant:S.variant??void 0,payload:I,reason:T,reasonCode:S.reason?.code}}A.length>0&&(_=A.join(","))}}if(i){let y=g===void 0?void 0:g.enabled===!1?!1:g.variant??!0,A={$feature_flag:e,$feature_flag_response:y,$feature_flag_id:b,$feature_flag_version:w,$feature_flag_reason:T,locally_evaluated:m,[`$feature/${e}`]:y,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():E};if(M!==void 0&&(A.$feature_flag_has_experiment=M),m&&this.featureFlagsPoller){let S=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();S!==void 0&&(A.$feature_flag_definitions_loaded_at=S)}_&&(A.$feature_flag_error=_),this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:y,groups:o,disableGeoip:a,properties:A})}return g!==void 0&&this._payloadOverrides!==void 0&&e in this._payloadOverrides&&(g={...g,payload:this._payloadOverrides[e]}),g}async getFeatureFlag(e,t,n){Fs("getFeatureFlag","`getFeatureFlag` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlag(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});if(s!==void 0)return s.enabled===!1?!1:s.variant??!0}async getFeatureFlagPayload(e,t,n,s){if(Fs("getFeatureFlagPayload","`getFeatureFlagPayload` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.getFlagPayload(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request."),this._payloadOverrides!==void 0&&e in this._payloadOverrides)return this._payloadOverrides[e];let i=await this._getFeatureFlagResult(e,t,{...s,sendFeatureFlagEvents:!1},n);if(i!==void 0)return i.payload??null}async getFeatureFlagResult(e,t,n){let{distinctId:s,options:i}=this._resolveDistinctId(t,n);return s?this._getFeatureFlagResult(e,s,{...i,sendFeatureFlagEvents:i?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0}):void this._logger.warn("[PostHog] distinctId is required \u2014 pass it explicitly or use withContext()")}async getRemoteConfigPayload(e){if(this.disabled)return void this._logger.warn("The client is disabled");if(!this.options.personalApiKey)throw new Error("Personal API key is required for remote config payload decryption");let t=await this._requestRemoteConfigPayload(e);if(!t)return;let n=await t.json();if(typeof n=="string")try{return JSON.parse(n)}catch{}return n}async isFeatureEnabled(e,t,n){Fs("isFeatureEnabled","`isFeatureEnabled` is deprecated and will be removed in a future major version. Use `posthog.evaluateFlags(distinctId, ...)` and call `flags.isEnabled(key)` instead \u2014 this consolidates flag evaluation into a single `/flags` request per incoming request.");let s=await this._getFeatureFlagResult(e,t,{...n,sendFeatureFlagEvents:n?.sendFeatureFlagEvents??this.options.sendFeatureFlagEvent??!0});return s===void 0?void 0:s.enabled===!1?!1:!!(s.variant??!0)||!1}async getAllFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);return n?(await this.getAllFlagsAndPayloads(n,s)).featureFlags||{}:(this._logger.warn("[PostHog] distinctId is required to get feature flags \u2014 pass it explicitly or use withContext()"),{})}async getAllFlagsAndPayloads(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to get feature flags and payloads \u2014 pass it explicitly or use withContext()"),{featureFlags:{},featureFlagPayloads:{}};if(this.disabled)return this._logger.warn("The client is disabled"),{featureFlags:{},featureFlagPayloads:{}};let{groups:i,disableGeoip:o,flagKeys:a}=s||{},{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},d=this.addLocalPersonAndGroupProperties(n,i,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),m={},h={},E=!0;if(g&&(m=g.response,h=g.payloads,E=g.fallbackToFlags),E&&!c){let _=await super.getFeatureFlagsAndPayloadsStateless(p.distinctId,p.groups,l,u,o,a);m={...m,..._.flags||{}},h={...h,..._.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}async evaluateFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:i,disableGeoip:o}=s||{},a=s?.flagKeys??void 0;if(a?.length===0)return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:{}});let{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},d=this.addLocalPersonAndGroupProperties(n,i,l,u);l=d.allPersonProperties,u=d.allGroupProperties;let p=this.createFeatureFlagEvaluationContext(n,i,this.personPropertiesForLocalEvaluation(n,l),u);c==null&&(c=this.options.strictLocalEvaluation??!1);let g=a?new Set(a):void 0,m={},h,E,_=!1,b=!1,w=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),T=new Set;if(w)for(let[y,A]of Object.entries(w.response)){let S=this.featureFlagsPoller?.featureFlagsByKey[y];m[y]={key:y,enabled:A!==!1,variant:typeof A=="string"?A:void 0,payload:w.payloads[y],id:S?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:S?.has_experiment},T.add(y)}let M=g!==void 0&&Array.from(g).some(y=>this.featureFlagsPoller?.featureFlagsByKey[y]===void 0);if((w?w.fallbackToFlags||M:!0)&&!c){let y=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,o,a);if(y){this._minimalFlagCalledEvents=y.minimalFlagCalledEvents===!0,h=y.requestId,E=y.evaluatedAt,_=!!y.errorsWhileComputingFlags,b=Array.isArray(y.quotaLimited)&&y.quotaLimited.includes("feature_flags");for(let[A,S]of Object.entries(y.flags)){if(T.has(A))continue;let I;if(S.metadata?.payload!==void 0)try{I=JSON.parse(S.metadata.payload)}catch{I=S.metadata.payload}m[A]={key:A,enabled:S.enabled,variant:S.variant,payload:I,id:S.metadata?.id,version:S.metadata?.version,reason:S.reason?.description??S.reason?.code,locallyEvaluated:!1,hasExperiment:S.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[y,A]of Object.entries(this._flagOverrides)){if(A===void 0){delete m[y];continue}let S=m[y];m[y]={key:y,enabled:A!==!1,variant:typeof A=="string"?A:void 0,payload:S?.payload,id:S?.id,version:S?.version,reason:S?.reason,locallyEvaluated:S?.locallyEvaluated??!1,hasExperiment:S?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[y,A]of Object.entries(this._payloadOverrides)){let S=m[y];S&&(m[y]={...S,payload:A})}if(g!==void 0)for(let y of Object.keys(m))g.has(y)||delete m[y];return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:m,requestId:h,evaluatedAt:E,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:_,quotaLimited:b})}_shouldSendMinimalFlagCalledEvent(e,t){return e==="$feature_flag_called"&&this._minimalFlagCalledEvents&&t.$feature_flag_has_experiment===!1}_captureFlagCalledEventIfNeeded(e){let{distinctId:t,key:n,response:s,groups:i,disableGeoip:o,properties:a}=e,c=i&&Object.keys(i).length>0?`_${JSON.stringify(Object.entries(i).sort(([u],[d])=>u<d?-1:u>d?1:0))}`:"",l=`${n}_${s}${c}`;t in this.distinctIdHasSentFlagCalls&&this.distinctIdHasSentFlagCalls[t].has(l)||(Object.keys(this.distinctIdHasSentFlagCalls).length>=this.maxCacheSize&&(this.distinctIdHasSentFlagCalls={}),this.distinctIdHasSentFlagCalls[t]instanceof Set?this.distinctIdHasSentFlagCalls[t].add(l):this.distinctIdHasSentFlagCalls[t]=new Set([l]),this.capture({distinctId:t,event:"$feature_flag_called",properties:a,groups:i,disableGeoip:o}))}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:e=>this._captureFlagCalledEventIfNeeded(e),logWarning:e=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${e}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){await this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=n=>Object.fromEntries(n.map(s=>[s,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){"flags"in e&&(e.flags===!1?this._flagOverrides=void 0:Array.isArray(e.flags)?this._flagOverrides=t(e.flags):e.flags!==void 0&&(this._flagOverrides={...e.flags})),"payloads"in e&&(e.payloads===!1?this._payloadOverrides=void 0:e.payloads!==void 0&&(this._payloadOverrides={...e.payloads}));return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let n=t.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in t){let n=t.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(e,t,n){return this.context?this.context.run(e,t,n):t()}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics&&(await Qe(this._metrics.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._metrics.reset()),this._traces&&(await Qe(this._traces.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this.distinctIdHasSentFlagCalls={},n?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},s=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let i=new AbortController;s=te(()=>{i.abort()},this.options.requestTimeout),n.signal=i.signal}try{return await this.fetch(t,n)}catch(i){this._events.emit("error",i);return}finally{s&&clearTimeout(s)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let n={},s={};for(let[i,o]of Object.entries(e))if(vu(o)&&t&&i in t){let a={};for(let[c,l]of Object.entries(o))a[String(c)]=String(l);s[String(i)]=a}else n[String(i)]=String(o);return{personProperties:n,groupProperties:s}}async getFeatureFlagsForEvent(e,t,n,s){if(this.disabled||!this.apiKey)return void this._logger.warn("The client is disabled");let i=s?.personProperties||{},o=s?.groupProperties||{},a=s?.flagKeys;if(s?.onlyEvaluateLocally??this.options.strictLocalEvaluation??!1)if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,d]of Object.entries(t||{}))l[u]=String(d);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}else return{};if((this.featureFlagsPoller?.featureFlags?.length||0)>0){let l={};for(let[u,d]of Object.entries(t||{}))l[u]=String(d);return await this.getAllFlags(e,{groups:l,personProperties:i,groupProperties:o,disableGeoip:n,onlyEvaluateLocally:!0,flagKeys:a})}return(await super.getFeatureFlagsStateless(e,t,i,o,n)).flags}addLocalPersonAndGroupProperties(e,t,n,s){let i={...n||{}},o={};if(t)for(let a of Object.keys(t))o[a]={$group_key:t[a],...s?.[a]||{}};return{allPersonProperties:i,allGroupProperties:o}}personPropertiesForLocalEvaluation(e,t){return{distinct_id:e,...t||{}}}createFeatureFlagEvaluationContext(e,t,n,s){return{distinctId:e,groups:t||{},personProperties:n||{},groupProperties:s||{},evaluationCache:{}}}captureException(e,t,n,s,i){if(!St.isPreviouslyCapturedError(e)){let o=new Error("PostHog syntheticException");this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,n).then(a=>this._capturePreparedEvent({...a,uuid:s,flags:i},!1)))}}async captureExceptionImmediate(e,t,n,s){if(!St.isPreviouslyCapturedError(e)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:i},t,n).then(o=>this.captureImmediate({...o,flags:s})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:n,event:s,properties:i,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:d}=e,p=this.context?.get(),g=t.includeContextProperties??!0,m=n||p?.distinctId,h=g?{...this.props,...p?.properties||{},...i||{}}:{...i||{}};m||(m=ee(),h.$process_person_profile=!1),g&&p?.sessionId&&!h.$session_id&&(h.$session_id=p.sessionId);let E=this._shouldSendMinimalFlagCalledEvent(s,h)?br(h):h,_=this._runBeforeSend({distinctId:m,event:s,properties:E,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:d});if(!_)return Promise.reject(null);let b=await Promise.resolve().then(async()=>{if(a)return c&&console.warn("[PostHog] Both `flags` and `sendFeatureFlags` were passed to capture(); using `flags` and ignoring `sendFeatureFlags`."),a._getEventProperties();if(c){Fs("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let w=typeof c=="object"?c:void 0,T=await this.getFeatureFlagsForEvent(_.distinctId,o,u,w);return Sy(T)}return{}}).catch(()=>({})).then(w=>{let T=_.groups||o;return{...w,..._.properties||{},...T!==void 0&&Object.keys(T).length>0?{$groups:T}:{}}});return _.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof b.$raw_user_agent=="string"&&Mu(b.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(_.event="$bot_pageview",b.$browser_type="bot"),{distinctId:_.distinctId,event:_.event,properties:b,options:{timestamp:_.timestamp,disableGeoip:_.disableGeoip,uuid:_.uuid}}}_runBeforeSend(e){let t=this.options.before_send;if(!t)return e;let n=Array.isArray(t)?t:[t],s=e;for(let i of n)try{if(s=i(s),!s)return this._logger.info(`Event '${e.event}' was rejected in beforeSend function`),null;if(!s.properties||Object.keys(s.properties).length===0){let o=`Event '${s.event}' has no properties after beforeSend function, this is likely an error.`;this._logger.warn(o)}}catch(o){return this._logger.error(`Error in before_send function for event '${e.event}':`,o),null}return s}};var Rf=require("node:async_hooks"),Us=class{constructor(){this.storage=new Rf.AsyncLocalStorage}get(){return this.storage.getStore()}run(e,t,n){return this.storage.run(this.resolve(e,n),t)}enter(e,t){this.storage.enterWith(this.resolve(e,t))}resolve(e,t){if(t?.fresh===!0)return e;let n=this.get()||{};return{distinctId:e.distinctId??n.distinctId,sessionId:e.sessionId??n.sessionId,properties:{...n.properties||{},...e.properties||{}}}}};var Mf=require("node:async_hooks"),$s=class{active(){return this._storage.getStore()}with(e,t){return this._storage.run(e,t)}constructor(){this._storage=new Mf.AsyncLocalStorage}};var Cf=require("node:zlib"),Pf=require("node:util"),yy=(0,Pf.promisify)(Cf.gzip);async function If(r,e=!0){try{let t=await yy(r);return new Uint8Array(t)}catch(t){return e&&console.error("Failed to gzip compress data",t),null}}var Bs=require("node:os");function Of(){let r,e;try{r=(0,Bs.platform)(),e=(0,Bs.release)()}catch{}return Go(r,e)}var kf="posthog-node";function by(r,{organization:e,projectId:t,prefix:n,severityAllowList:s=["error"],sendExceptionsToPostHog:i=!0}={}){return o=>{if(!(s==="*"||s.includes(o.level)))return o;o.tags||(o.tags={});let c=o.tags[da.POSTHOG_ID_TAG];if(c===void 0)return o;let l=r.options.host??"https://us.i.posthog.com",u=new URL(`/project/${r.apiKey}/person/${c}`,l).toString();o.tags["PostHog Person URL"]=u;let d=o.exception?.values||[],p=d.map(h=>({...h,stacktrace:h.stacktrace?{...h.stacktrace,type:"raw",frames:(h.stacktrace.frames||[]).map(E=>({...E,platform:"node:javascript"}))}:void 0})),g={$exception_message:d[0]?.value||o.message,$exception_type:d[0]?.type,$exception_level:o.level,$exception_list:p,$sentry_event_id:o.event_id,$sentry_exception:o.exception,$sentry_exception_message:d[0]?.value||o.message,$sentry_exception_type:d[0]?.type,$sentry_tags:o.tags},m=G.getInjectedReleaseId();return m&&(g.$release_id=m),e&&t&&(g.$sentry_url=(n||"https://sentry.io/organizations/")+e+"/issues/?project="+t+"&query="+o.event_id),i&&r.capture({event:"$exception",distinctId:c,properties:g}),o}}var da=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(e,t,n,s,i){this.name=kf,this.name=kf,this.setupOnce=function(o,a){let c=a()?.getClient()?.getDsn()?.projectId;o(by(e,{organization:t,projectId:c,prefix:n,severityAllowList:s,sendExceptionsToPostHog:i??!0}))}}};var Ws=class extends Ns{getLibraryId(){return"posthog-node"}compressPayload(e){return If(e,this.isDebug)}initializeContext(){return new Us}initializeSpanContextManager(){return new $s}hostResourceAttributes(){return Of()}createErrorPropertiesBuilder(){return new G.ErrorPropertiesBuilder([new G.EventCoercer,new G.ErrorCoercer,new G.ObjectCoercer,new G.StringCoercer,new G.PrimitiveCoercer],G.createStackParser("node:javascript",G.nodeStackLineParser),[yu(),e=>nf(e,void 0,this._logger),cf()])}};var _k=300*1e3,Ek=3600*1e3;C();var pa=null,wy=!1,Ty=3e4,js=null;function xf(){let r=Date.now();if(js&&r<js.expiresAt)return js.value;let e=un(process.env,Zt());return js={value:e,expiresAt:r+Ty},e}var Ay=!1;function vy(){if(!pa){let r=Ay&&hc(process.env)&&xf();pa=new Ws(pn(),{host:gn(),flushAt:20,flushInterval:1e4,disableGeoip:!1,enableExceptionAutocapture:r,before_send:xy})}return pa}var Ry=6e4,My=500,Wr=new Map;function Cy(r,e,t){let n="";try{let s=(t||"").split(`
32
- `).map(i=>i.trim()).filter(Boolean);n=s.find(i=>i.startsWith("at "))??s[1]??""}catch(s){let i=s instanceof Error?s:new Error(String(s));f.warn("SYSTEM","Telemetry: stack parse failed while fingerprinting; using empty top frame",void 0,i),n=""}return`${r}::${wc(e)}::${n}`.slice(0,400)}function Py(r,e){try{return Iy(r,e)}catch(t){let n=t instanceof Error?t:new Error(String(t));return f.warn("SYSTEM","Telemetry: error rate-limit bookkeeping failed; failing closed (event dropped)",void 0,n),{send:!1,count:0}}}function Iy(r,e){let t=Wr.get(r);if(!t){if(Wr.size>=My){let n=null,s=1/0;for(let[i,o]of Wr){let a=Math.max(o.lastSentTs,o.firstTs);a<s&&(s=a,n=i)}n!==null&&Wr.delete(n)}return t={count:1,firstTs:e,lastSentTs:e},Wr.set(r,t),{send:!0,count:1}}if(t.count+=1,e-t.lastSentTs>=Ry){t.lastSentTs=e;let n=t.count;return t.count=0,{send:!0,count:n}}return{send:!1,count:t.count}}var Df="__cm_rate_limited";function Oy(r){try{return typeof r!="string"||r.length===0?"":Si(Ei(r))}catch(e){let t=e instanceof Error?e:new Error(String(e));return f.warn("SYSTEM","Telemetry: frame filename redaction failed; stripping value entirely",void 0,t),""}}function ky(r){let e=r.$exception_list;if(Array.isArray(e))for(let t of e){if(!t||typeof t!="object")continue;let n=t;typeof n.value=="string"&&(n.value=bc(n.value));let i=n.stacktrace?.frames;if(Array.isArray(i))for(let o of i){if(!o||typeof o!="object")continue;let a=o;delete a.context_line,delete a.pre_context,delete a.post_context,typeof a.filename=="string"&&(a.filename=Oy(a.filename))}}}function Dy(r){try{let e=[],t=i=>{typeof i=="string"&&e.push(i)};t(r.$exception_message),t(r.$exception_type),t(r.error_message),t(r.error_type);let n=r.$exception_list;if(Array.isArray(n))for(let i of n)i&&typeof i=="object"&&(t(i.value),t(i.type));let s=e.join(" ");return/chdir/i.test(s)?/\b(?:EPERM|EACCES)\b|operation not permitted|permission denied/i.test(s):!1}catch{return!1}}function xy(r){try{if(!r||typeof r!="object")return r;let e=r;if(e.event!=="$exception")return r;let t=e.properties??{};if(Dy(t))return null;if(t[Df]){try{delete t[Df],e.properties=t}catch{}return r}ky(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=Cy(n,s,i),a=Py(o,Date.now());if(!a.send)return null;try{t.occurrence_count=a.count,e.properties=t}catch{}return r}catch{return null}}function fa(r,e,t){try{Ly(r,e,t)}catch(n){let s=n instanceof Error?n:new Error(String(n));f.warn("SYSTEM","Telemetry: captureEvent failed; event dropped",{event:r},s)}}function Ly(r,e,t){if(wy||!xf())return;let n=fn({...hn(),...e??{}});if(t?.person?n.$set=mn(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
33
- `);return}vy().capture({distinctId:dn(),event:r,properties:n})}var Fy=["agent-cost-report","babysit","ccs-align","cloud-sync","design-is","do","handoff","how-it-works","knowledge-agent","learn-codebase","make-plan","mem-search","mode-creator","oh-my-issues","pathfinder","smart-explore","standup","timeline-report","version-bump","weekly-digests","what-the","wowerpoint"],Ny=new Set(Fy),Lf={skill_id:"other",skill_source:"third_party"};function Ff(r){let e=Uy(r);return e&&Ny.has(e)?{skill_id:e,skill_source:"first_party"}:Lf}function Nf(r,e){if(r==="Skill"&&!(!e||typeof e!="object"))return e.skill}function Uy(r){if(typeof r!="string")return null;let e=r.trim().toLowerCase();if(!e)return null;e=e.replace(/^\/+/,"");let t=e.lastIndexOf(":");return t!==-1&&(e=e.slice(t+1).replace(/^\/+/,"")),e||null}var Uf=null,$y=new Set(["SetTodoList","TodoList","TaskList","TaskOutput","TaskStop","CronCreate","CronList","CronDelete"]),$f=new Map;function By(r){let e=$f.get(r);if(e!==void 0)return e;let t=null;try{t=new RegExp(r)}catch(n){f.warn("INGEST","Invalid CLAUDE_MEM_SKIP_BASH_PATTERNS regex \u2014 ignoring",{pattern:r,error:n instanceof Error?n.message:String(n)})}return $f.set(r,t),t}function Wy(r,e){if(!e||typeof e!="object")return"";let t=e,n=r==="Bash"?t.command:r==="exec_command"?t.cmd:void 0;return typeof n=="string"?n:""}function jy(){if(!Uf)throw new Error("ingest helpers used before setIngestContext() \u2014 wiring bug");return Uf}async function Bf(r,e={}){let{sessionManager:t,dbManager:n,eventBroadcaster:s,ensureGeneratorRunning:i}=jy(),o=Z(r.platformSource),a=typeof r.cwd=="string"?r.cwd:"",c=a.trim()?ct(a):null,l=c?.primary??"",u=B.loadFromFile(ie);if(a&&En(a,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return{ok:!0,status:"skipped",reason:"project_excluded"};if(new Set(u.CLAUDE_MEM_SKIP_TOOLS.split(",").map(R=>R.trim().toLowerCase()).filter(Boolean)).has(r.toolName.toLowerCase())){if(r.toolName==="Skill"){let{skill_id:R,skill_source:y}=Ff(Nf(r.toolName,r.toolInput));fa("skill_invoked",{skill_id:R,skill_source:y,skill_trigger:"tool",ide:o})}return{ok:!0,status:"skipped",reason:"tool_excluded"}}if(o==="kimi"&&$y.has(r.toolName))return{ok:!0,status:"skipped",reason:"tool_excluded"};let p=u.CLAUDE_MEM_SKIP_BASH_PATTERNS.trim(),g=p?Wy(r.toolName,r.toolInput):"";if(g){let R=By(p);if(R&&R.test(g))return{ok:!0,status:"skipped",reason:"bash_pattern_excluded"}}let m=Eu(r.agentId,r.agentType,u);if(m.skip)return{ok:!0,status:"skipped",reason:m.reason};if(new Set(["Edit","Write","Read","NotebookEdit"]).has(r.toolName)&&r.toolInput&&typeof r.toolInput=="object"){let R=r.toolInput,y=R.file_path||R.notebook_path;if(y&&y.includes("session-memory"))return{ok:!0,status:"skipped",reason:"session_memory_meta"}}let E=n.getSessionStore(),_,b;try{_=E.createSDKSession(r.contentSessionId,l,"",void 0,o),a&&E.setSessionCwd(_,a,c?.keySource),b=E.getPromptNumberFromUserPrompts(r.contentSessionId,_,r.enqueuedAtEpochMs)}catch(R){let y=R instanceof Error?R.message:String(R);return f.error("INGEST","Observation session resolution failed",{contentSessionId:r.contentSessionId,toolName:r.toolName},R instanceof Error?R:new Error(y)),{ok:!1,reason:y,status:500}}if(!zn.checkUserPromptPrivacy(E,r.contentSessionId,b,"observation",_,{tool_name:r.toolName}).allow)return{ok:!0,status:"skipped",reason:"private"};let T=r.toolInput!==void 0?to(JSON.stringify(r.toolInput)):"{}",M=r.toolResponse!==void 0?to(JSON.stringify(r.toolResponse)):"{}";if(r.toolUseId)try{E.upsertToolUse({toolUseId:r.toolUseId,contentSessionId:r.contentSessionId,sessionDbId:_,project:l,platformSource:o,toolName:r.toolName,toolInput:T,toolResponse:M,cwd:a||null,promptNumber:b,agentType:typeof r.agentType=="string"?r.agentType:null,agentId:typeof r.agentId=="string"?r.agentId:null,orGenerationId:typeof r.orGenerationId=="string"?r.orGenerationId:null,orSessionId:typeof r.orSessionId=="string"?r.orSessionId:null})}catch(R){f.warn("INGEST","tool_uses backup write failed (observation still queued)",{sessionId:_,toolName:r.toolName,toolUseId:r.toolUseId},R instanceof Error?R:new Error(String(R)))}return t.queueObservation(_,{tool_name:r.toolName,tool_input:T,tool_response:M,prompt_number:b,cwd:a||(f.error("INGEST","Missing cwd when ingesting observation",{sessionId:_,toolName:r.toolName}),""),agentId:typeof r.agentId=="string"?r.agentId:void 0,agentType:typeof r.agentType=="string"?r.agentType:void 0,toolUseId:typeof r.toolUseId=="string"?r.toolUseId:void 0}),e.markHandedOff?.(),await i?.(_,"observation"),s.broadcastObservationQueued(_),{ok:!0,sessionDbId:_}}var Hy=/agent-transcripts[/\\]([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/\\]|$)/i;function Ky(r){let e=typeof r.agentId=="string"?r.agentId.trim():"";return e&&e!=="*"?e:r.path.match(Hy)?.[1]}var Hr=class extends Error{constructor(e,t){super(`session init failed for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptAnchorError",this.cause=t}},Kr=class extends Error{constructor(e,t){super(`observation not accepted for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptObservationError",this.cause=t}},bt=class extends Error{constructor(e,t){super(`transcript event not persisted for session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptSpoolError",this.cause=t}},Gy=4096,zy=64,Hs=class{constructor(e="in-process"){this.observationTransport=e}observationTransport;sessions=new Map;fileContexts=new Set;fileSessionKeys=new WeakMap;registerFileContext(e){this.fileContexts.add(e)}pendingToolOwners=new WeakMap;subagentSessionKeys=new Set;resetFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t);n&&n.cwd===e.cwd&&(n.cwd=void 0)}this.retireFileContext(e),e.cwd=void 0,e.sessionId=void 0}retireFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t)?.pendingTools;for(let[s,i]of n??[])this.pendingToolOwners.get(i)===e&&n.delete(s)}this.fileContexts.delete(e),this.fileSessionKeys.delete(e),e.pendingTools={}}sessionKeysOf(e){return new Set([...Object.keys(e.pendingTools??{}),...this.fileSessionKeys.get(e)??[]])}async processEntry(e,t,n,s,i){i&&this.registerFileContext(i);for(let o of n.events)lr(e,o.match,n)&&await this.handleEvent(e,t,n,o,s??void 0,i)}getSessionKey(e,t){return`${e.name}:${t}`}getOrCreateSession(e,t){let n=this.getSessionKey(e,t),s=this.sessions.get(n);return s||(s={sessionId:t,platformSource:Z(e.name),...this.subagentSessionKeys.has(n)?{isSubagent:!0}:{}},this.sessions.set(n,s)),s}rememberSubagentSession(e){if(this.subagentSessionKeys.delete(e),this.subagentSessionKeys.add(e),this.subagentSessionKeys.size>Gy){let t=this.subagentSessionKeys.values().next().value;t!==void 0&&this.subagentSessionKeys.delete(t)}}async primeSessionContext(e,t,n,s,i){for(let o of n.events)o.action!=="session_context"||!lr(e,o.match,n)||await this.handleEvent(e,t,n,o,s??void 0,i)}resolveSessionId(e,t,n,s,i){let o={watch:t,schema:n},a=s.fields?.sessionId??(n.sessionIdPath?{path:n.sessionIdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:typeof c=="number"?String(c):i&&i.trim()?i:null}resolveCwd(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.cwd??(n.cwdPath?{path:n.cwdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.workspace?t.workspace:i.cwd}resolveProject(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.project??(n.projectPath?{path:n.projectPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.project?t.project:i.cwd?ct(i.cwd).primary:i.project}async handleEvent(e,t,n,s,i,o){let a=this.resolveSessionId(e,t,n,s,o?.sessionId??i);if(!a){f.debug("TRANSCRIPT","Skipping event without sessionId",{event:s.name,watch:t.name});return}o&&(o.sessionId=a);let c=this.getOrCreateSession(t,a),l=this.getSessionKey(t,a);if(o){let g=this.fileSessionKeys.get(o)??new Set;g.add(l),this.fileSessionKeys.set(o,g)}if(o?.pendingTools?.[l]){c.pendingTools??=new Map;for(let[g,m]of Object.entries(o.pendingTools[l]))this.pendingToolOwners.set(m,o),c.pendingTools.has(g)||c.pendingTools.set(g,m)}!c.cwd&&o?.cwd&&(c.cwd=o.cwd);let u=this.resolveCwd(e,t,n,s,c);u&&(c.cwd=u);let d=this.resolveProject(e,t,n,s,c);if(d&&(c.project=d),t.subagentSource&&!c.isSubagent){let g=cr(e,t.subagentSource.path);g!=null&&(c.isSubagent=!0,this.rememberSubagentSession(this.getSessionKey(t,a)))}if(t.subagentOnly&&!c.isSubagent&&s.action!=="session_context"&&s.action!=="session_end")return;let p=mu(s.fields,e,{watch:t,schema:n,session:c});s.action==="session_context"&&this.applySessionContext(c,p),o&&c.cwd&&(o.cwd=c.cwd);try{switch(s.action){case"session_context":break;case"session_init":await this.handleSessionInit(c,p),t.context?.updateOn?.includes("session_start")&&await this.updateContext(c,t);break;case"user_message":{let g=this.resolveMessageText(p.message)??this.resolveMessageText(p.prompt);g&&await this.anchorUserPrompt(c,g);break}case"assistant_message":c.lastAssistantMessage=this.resolveMessageText(p.message)??c.lastAssistantMessage;break;case"tool_use":await this.handleToolUse(c,t,p,o);break;case"tool_result":await this.handleToolResult(c,t,p,o);break;case"observation":await this.sendObservation(c,t,p);break;case"file_edit":await this.sendFileEdit(c,p);break;case"session_end":await this.handleSessionEnd(c,t);break;default:break}}finally{o&&this.snapshotPendingTools(o,c,l,s.action==="session_end")}}snapshotPendingTools(e,t,n,s){let i=s?{}:{...e.pendingTools?.[n]};for(let[a,c]of t.pendingTools??[])this.pendingToolOwners.get(c)===e&&(i[a]=c);e.pendingTools={...e.pendingTools,[n]:i},Object.keys(i).length===0&&delete e.pendingTools[n];let o=Object.entries(e.pendingTools).flatMap(([a,c])=>Object.keys(c).map(l=>[a,l]));for(let[a,c]of o.slice(0,Math.max(0,o.length-zy))){let l=e.pendingTools[a],u=l[c];delete l[c],Object.keys(l).length===0&&delete e.pendingTools[a];let d=this.sessions.get(a)?.pendingTools;d?.get(c)===u&&d.delete(c)}}applySessionContext(e,t){let n=typeof t.cwd=="string"?t.cwd:void 0,s=typeof t.project=="string"?t.project:void 0;n&&(e.cwd=n),s&&(e.project=s)}resolveMessageText(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=[];for(let n of e)n&&typeof n=="object"&&typeof n.text=="string"&&t.push(n.text);return t.length>0?t.join(`
34
- `):void 0}async handleSessionInit(e,t){let n=typeof t.prompt=="string"?t.prompt:"";await this.anchorUserPrompt(e,n)}async anchorUserPrompt(e,t){t&&(e.lastUserMessage=t);let n=e.cwd;if(!n){this.skipWithoutCwd(e,"user prompt");return}try{await su({sessionId:e.sessionId,cwd:n,prompt:t,platform:e.platformSource})}catch(s){throw new Hr(e.sessionId,s)}}skipWithoutCwd(e,t){f.debug("TRANSCRIPT",`Skipping a ${t}: the session has no known working directory yet`,{sessionId:e.sessionId})}async handleToolUse(e,t,n,s){let i=typeof n.toolId=="string"?n.toolId:void 0,o=typeof n.toolName=="string"?n.toolName:void 0,a=this.maybeParseJson(n.toolInput),c=this.maybeParseJson(n.toolResponse);if(o==="apply_patch"&&typeof a=="string"){let l=this.parseApplyPatchFiles(a);for(let u of l)await this.sendFileEdit(e,{filePath:u,edits:[{type:"apply_patch",patch:a}]})}if(o&&c!==void 0)await this.sendObservation(e,t,{toolName:o,toolInput:a,toolResponse:c,toolUseId:i});else if(o&&i){e.pendingTools||(e.pendingTools=new Map);let l={toolName:o,toolInput:a};s&&this.pendingToolOwners.set(l,s),e.pendingTools.set(i,l)}}async handleToolResult(e,t,n,s){let i=typeof n.toolId=="string"?n.toolId:void 0,o=typeof n.toolName=="string"?n.toolName:void 0,a=this.maybeParseJson(n.toolResponse),c=this.maybeParseJson(n.toolInput),l=s?.pendingTools?.[this.getSessionKey(t,e.sessionId)],u=i?e.pendingTools?.get(i):void 0,d=s,p=s?(i?l?.[i]:void 0)??(u&&this.pendingToolOwners.get(u)===s?u:void 0):u;if(!p&&s&&i){let g=Array.from(this.fileContexts).flatMap(m=>{let h=m.pendingTools?.[this.getSessionKey(t,e.sessionId)]?.[i];return h&&m.isCurrent?.()!==!1?[{context:m,tool:h}]:[]});g.length===1&&(d=g[0].context,p=g[0].tool)}if(p&&(o||(o=p.toolName),c===void 0&&(c=p.toolInput)),o){if(await this.sendObservation(e,t,{toolName:o,toolInput:c,toolResponse:a,toolUseId:i}),i){e.pendingTools&&e.pendingTools.get(i)===p&&e.pendingTools.delete(i);let g=d?.pendingTools?.[this.getSessionKey(t,e.sessionId)];g&&delete g[i]}}else f.debug("TRANSCRIPT","Dropping tool_result with no resolvable toolName",{sessionId:e.sessionId,toolId:i})}async sendObservation(e,t,n){let s=typeof n.toolName=="string"?n.toolName:void 0;if(!s)return;if(!e.cwd){this.skipWithoutCwd(e,"observation");return}let i={contentSessionId:e.sessionId,cwd:e.cwd,toolName:s,toolInput:this.maybeParseJson(n.toolInput),toolResponse:this.maybeParseJson(n.toolResponse),platformSource:e.platformSource,toolUseId:typeof n.toolUseId=="string"?n.toolUseId:void 0,agentId:Ky(t)};if(this.observationTransport==="spool"){try{or("observation",i)}catch(a){throw new bt(e.sessionId,a)}return}let o=!1;try{let a=await Bf(i,{markHandedOff:()=>{o=!0}});if(!a.ok)throw new Error(a.reason)}catch(a){if(o){f.warn("TRANSCRIPT","Observation accepted before generator kick failed",{sessionId:e.sessionId},a instanceof Error?a:void 0);return}throw new Kr(e.sessionId,a)}}async sendFileEdit(e,t){let n=typeof t.filePath=="string"?t.filePath:void 0;if(n){if(!e.cwd){this.skipWithoutCwd(e,"file edit");return}try{await lu.execute({sessionId:e.sessionId,cwd:e.cwd,filePath:n,edits:Array.isArray(t.edits)?t.edits:void 0,platform:e.platformSource})}catch(s){throw new bt(e.sessionId,s)}}}maybeParseJson(e){if(typeof e!="string")return e;let t=e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return e;try{return JSON.parse(t)}catch(n){return f.debug("TRANSCRIPT","Field looked like JSON but did not parse; using raw string",{preview:t.slice(0,120)},n instanceof Error?n:void 0),e}}parseApplyPatchFiles(e){let t=[],n=e.split(`
35
- `);for(let s of n){let i=s.trim();if(i.startsWith("*** Update File: "))t.push(i.replace("*** Update File: ","").trim());else if(i.startsWith("*** Add File: "))t.push(i.replace("*** Add File: ","").trim());else if(i.startsWith("*** Delete File: "))t.push(i.replace("*** Delete File: ","").trim());else if(i.startsWith("*** Move to: "))t.push(i.replace("*** Move to: ","").trim());else if(i.startsWith("+++ ")){let o=i.replace("+++ ","").replace(/^b\//,"").trim();o&&o!=="/dev/null"&&t.push(o)}}return Array.from(new Set(t))}async handleSessionEnd(e,t){(!t.subagentOnly||e.isSubagent)&&(await this.queueSummary(e),await this.updateContext(e,t)),e.pendingTools?.clear();let n=this.getSessionKey(t,e.sessionId);this.sessions.delete(n)}async queueSummary(e){if(this.observationTransport==="spool"){try{or("summarize",{contentSessionId:e.sessionId,platformSource:e.platformSource,lastAssistantMessage:e.lastAssistantMessage??"",...e.cwd?{cwd:e.cwd}:{}})}catch(i){throw new bt(e.sessionId,i)}return}if(!await Ln())return;let n=e.lastAssistantMessage??"",s=JSON.stringify({contentSessionId:e.sessionId,last_assistant_message:n,platformSource:e.platformSource,...e.cwd?{cwd:e.cwd}:{}});try{await Ce("/api/sessions/summarize",{method:"POST",headers:{"Content-Type":"application/json"},body:s})}catch(i){f.warn("TRANSCRIPT","Summary request failed",{error:i instanceof Error?i.message:String(i)})}}async updateContext(e,t){if(!t.context||t.context.mode!=="agents"||Ua(t)||!await Ln())return;let s=e.cwd??t.workspace;if(!s)return;let o=ct(s).allProjects.join(","),a=`/api/context/inject?projects=${encodeURIComponent(o)}&platformSource=${encodeURIComponent(e.platformSource)}`,c=X(t.context.path??`${s}/AGENTS.md`),l=jr.default.resolve(c),u=[jr.default.resolve(s),jr.default.resolve(F)];if(!u.some(m=>l.startsWith(m+jr.default.sep)||l===m)){f.warn("SECURITY","Rejected path traversal attempt in watch.context.path",{original:t.context.path,resolved:l,allowedRoots:u});return}let p;try{p=await Ce(a)}catch(m){f.warn("TRANSCRIPT","Failed to fetch AGENTS.md context",{error:m instanceof Error?m.message:String(m)});return}if(!p.ok)return;let g=(await p.text()).trim();g&&(fu(c,g),f.debug("TRANSCRIPT","Updated AGENTS.md context",{agentsPath:c,watch:t.name}))}};var Wf=Ee(require("node:zlib"),1),Gt=require("node:fs");C();function jf(){let r=Wf.zstdDecompressSync;return typeof r=="function"?r:void 0}function Hf(){return jf()!==void 0}var Vy=4247762216,Yy=64*1024;function Ks(r,e,t,n=Number.POSITIVE_INFINITY){let s=(0,Gt.openSync)(r,"r");try{let i=Buffer.alloc(0),o=0,a=(u,d)=>{if(u+d>t)return null;if(u<o||u+d>o+i.length){let p=Math.min(Math.max(d,Yy),t-u),g=Buffer.alloc(p);if(i=g.subarray(0,(0,Gt.readSync)(s,g,0,p,u)),o=u,i.length<d)return null}return i.subarray(u-o,u-o+d)},c=[],l=e;for(;l<t&&(c.length===0||l-e<n);){let u=l,d=a(l,4);if(!d)return{frames:c,tornStart:u};if(d.readUInt32LE(0)!==Vy)throw new Error(`invalid Zstandard frame magic at byte ${l}`);l+=4;let p=a(l,1);if(!p)return{frames:c,tornStart:u};let g=p.readUInt8(0);if(l+=1,(g&24)!==0)throw new Error(`reserved Zstandard frame-header bit at byte ${l-1}`);let m=g>>>6,h=(g&32)!==0,E=(g&4)!==0,_=g&3,b=_===3?4:_,w=m===0?h?1:0:1<<m,T=(h?0:1)+b+w;if(l+T>t)return{frames:c,tornStart:u};for(l+=T;;){let M=a(l,3);if(!M)return{frames:c,tornStart:u};let R=M.readUIntLE(0,3);l+=3;let y=(R&1)!==0,A=R>>>1&3,S=R>>>3;if(A===3)throw new Error(`reserved Zstandard block type at byte ${l-3}`);let I=A===1?1:S;if(l+I>t)return{frames:c,tornStart:u};if(l+=I,y)break}if(E){if(l+4>t)return{frames:c,tornStart:u};l+=4}c.push({start:u,end:l})}return{frames:c,tornStart:null}}finally{(0,Gt.closeSync)(s)}}function ga(r,e){try{let t=jf();if(!t)throw new Error("this runtime cannot decode Zstandard (zlib.zstdDecompressSync is missing)");return t(r.subarray(e.start,e.end)).toString("utf8")}catch(t){throw f.warn("TRANSCRIPT","Failed to decompress Zstandard frame",{start:e.start,end:e.end,error:t instanceof Error?t.message:String(t)}),t}}var Kf=2e3,qy=1e3,Jy=256*1024,Gf=4*1024*1024,Xy=16*1024*1024,Qy=100,zf=100;function Gr(){return new Promise(r=>setImmediate(r))}var Gs=".jsonl.zstd";async function Zy(r,e){try{let t=0;for(;t<e;){let n=Ks(r,t,e,Xy);if(n.tornStart!==null)return n.tornStart;if(n.frames.length===0)break;t=n.frames[n.frames.length-1].end,await Gr()}return t}catch{return e}}var Vf=1024*1024;async function Jf(r,e,t){let n;if(e){let{frames:i}=Ks(r,0,Math.min(t,Vf),1);if(i.length===0)return null;n=ga(await Vs(r,0,i[0].end),i[0])}else n=(await Vs(r,0,Math.min(t,Vf))).toString("utf8");let s=n.indexOf(`
36
- `);return s<0?null:n.slice(0,s)}async function eb(r,e,t){try{let n=await Jf(r,e,t);if(n===null)return null;let s=JSON.parse(n);for(let i of["timestamp","time","createdAt"]){let o=s?.[i],a=typeof o=="number"?o<1e12?o*1e3:o:typeof o=="string"?Date.parse(o):Number.NaN;if(Number.isFinite(a)&&a>0)return a}return null}catch{return null}}function zs(r){return`${r.dev}:${r.ino}`}function tb(r){try{return(0,N.statSync)(r),!1}catch(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}}var rb=4096;function ha(r,e,t){let n;try{if(n=(0,N.openSync)(r,"r"),zs((0,N.fstatSync)(n))!==t)return null;let s=Math.max(0,e-rb),i=Buffer.alloc(e-s);return(0,N.readSync)(n,i,0,i.length,s)<i.length?null:(0,Yf.createHash)("sha256").update(i).digest("hex")}catch(s){return f.debug("TRANSCRIPT","Could not fingerprint a transcript checkpoint",{file:r},s instanceof Error?s:void 0),null}finally{n!==void 0&&(0,N.closeSync)(n)}}function Xf(r,e,t,n,s){return t<n?!1:s===void 0?!0:ha(r,n,e)===s}async function Vs(r,e,t){let n=await(0,qf.open)(r,"r");try{let s=Buffer.alloc(t),{bytesRead:i}=await n.read(s,0,t,e);return s.subarray(0,i)}finally{await n.close()}}var ma=class{constructor(e,t,n,s,i="",o=0,a,c,l){this.filePath=e;this.onLine=n;this.onOffset=s;this.onReset=l;this.fileIdentity=a,this.checkpointFingerprint=c,this.isZstd=e.endsWith(Gs),this.tailState={offset:t,readOffset:t,partial:this.isZstd?i:""},this.frameLinesDone=this.isZstd?o:0}filePath;onLine;onOffset;onReset;watcher=null;tailState;readTask=null;readPending=!1;closed=!1;isZstd;pendingRecord=Buffer.alloc(0);frameLinesDone;fileIdentity;checkpointFingerprint;start(){this.requestRead();try{this.watcher=(0,N.watch)(this.filePath,{persistent:!0},()=>{this.requestRead()})}catch(e){f.debug("WORKER","Failed to watch transcript file",{file:this.filePath},e instanceof Error?e:void 0),this.watcher=null}}close(){this.closed=!0,this.watcher?.close(),this.watcher=null}poke(){this.requestRead()}requestRead(){if(!this.closed){if(this.readTask){this.readPending=!0;return}this.readTask=this.drainReads().finally(()=>{this.readTask=null})}}async drainReads(){do this.readPending=!1,await this.readNewData().catch(()=>{}),this.readPending&&await Gr();while(this.readPending&&!this.closed)}async readNewData(){if(!(0,N.existsSync)(this.filePath))return;let e=0,t;try{let o=(0,N.statSync)(this.filePath);e=o.size,t=zs(o)}catch(o){f.debug("WORKER","Failed to stat transcript file",{file:this.filePath},o instanceof Error?o:void 0);return}let n=t!==this.fileIdentity,s=!1;n&&this.fileIdentity!==void 0&&(Xf(this.filePath,t,e,this.tailState.offset,this.checkpointFingerprint)?(this.tailState.readOffset=this.tailState.offset,this.pendingRecord=Buffer.alloc(0)):s=!0),this.fileIdentity=t;let i=s||e<this.tailState.readOffset;if(i&&(this.onReset?.(),this.tailState.offset=0,this.tailState.readOffset=0,this.tailState.partial="",this.pendingRecord=Buffer.alloc(0),this.frameLinesDone=0),e===this.tailState.readOffset){(n||i)&&this.checkpoint(this.tailState.offset,this.tailState.partial);return}this.isZstd?await this.readNewZstdFrames(e):await this.readNewJsonl(e)}checkpoint(e,t=""){this.tailState.offset=e,this.tailState.partial=t,this.checkpointFingerprint=this.fileIdentity===void 0?void 0:ha(this.filePath,e,this.fileIdentity)??void 0,this.onOffset(e,t,this.frameLinesDone,this.fileIdentity,this.checkpointFingerprint)}async readNewJsonl(e){let t=this.tailState.readOffset,n;try{n=await Vs(this.filePath,t,Math.min(e-t,Gf))}catch(c){f.debug("WORKER","Failed to read transcript file",{file:this.filePath},c instanceof Error?c:void 0);return}if(n.length===0)return;this.tailState.readOffset=t+n.length;let s=this.pendingRecord.length>0?Buffer.concat([this.pendingRecord,n]):n,i=this.tailState.offset,o=0,a=0;for(let c=s.indexOf(10);c!==-1;c=s.indexOf(10,o)){if(this.closed){this.checkpoint(i+o);return}let l=s.toString("utf8",o,c).trim();if(l)try{await this.onLine(l)}catch{this.pendingRecord=Buffer.alloc(0),this.tailState.readOffset=i+o,this.checkpoint(i+o);return}o=c+1,this.tailState.offset=i+o,l&&++a%zf===0&&(this.checkpoint(this.tailState.offset),await Gr())}this.pendingRecord=Buffer.from(s.subarray(o)),this.checkpoint(i+o),this.tailState.readOffset<e&&(this.readPending=!0)}async readNewZstdFrames(e){let t=this.tailState.offset,n,s;try{if(n=Ks(this.filePath,t,e,Gf),n.frames.length===0)return;let o=n.frames[n.frames.length-1].end;if(s=await Vs(this.filePath,t,o-t),s.length<o-t)return}catch(o){f.warn("TRANSCRIPT","Failed to read zstd transcript frames",{file:this.filePath,error:o instanceof Error?o.message:String(o)});return}let i=0;for(let o of n.frames){let a;try{a=ga(s,{start:o.start-t,end:o.end-t})}catch{this.checkpoint(this.tailState.offset,this.tailState.partial);return}let c=this.tailState.partial,l=(c+a).split(`
37
- `),u=l.pop()??"";for(let d=this.frameLinesDone;d<l.length;d++){if(this.closed){this.frameLinesDone=d,this.checkpoint(o.start,c);return}let p=l[d].trim();if(p){try{await this.onLine(p)}catch{this.frameLinesDone=d,this.tailState.readOffset=o.start,this.checkpoint(o.start,c);return}++i%zf===0&&await Gr()}}this.frameLinesDone=0,this.tailState.offset=o.end,this.tailState.readOffset=o.end,this.tailState.partial=u}this.checkpoint(this.tailState.offset,this.tailState.partial),n.tornStart===null&&this.tailState.offset<e&&(this.readPending=!0)}},Ys=class{constructor(e,t,n="in-process"){this.config=e;this.statePath=t;this.processor=new Hs(n),this.state=Ga(t)}config;statePath;processor;tailers=new Map;state;fileContexts=new Map;retirementCandidates=new Set;retirementTimer=null;missingTranscriptGraceMs=qy;rootWatchers=[];rootWatchSettleTimers=new Set;startedAtMs=0;warnedZstdUnsupported=!1;startingTailers=new Set;stopped=!1;async start(){this.stopped=!1,this.startedAtMs=Date.now();for(let e of this.config.watches)await this.setupWatch(e);if(!this.stopped)for(let e of Object.keys(this.state.pendingTools??{}))this.tailers.has(e)||this.scheduleRetirementCheck(e)}stop(){this.stopped=!0;for(let e of this.tailers.values())e.close();this.tailers.clear();for(let e of this.rootWatchers)e.close();this.rootWatchers=[];for(let e of this.rootWatchSettleTimers)clearTimeout(e);this.rootWatchSettleTimers.clear(),this.retirementTimer&&clearTimeout(this.retirementTimer),this.retirementTimer=null,this.retirementCandidates.clear()}async setupWatch(e){let t=this.resolveSchema(e);if(!t){f.warn("TRANSCRIPT","Missing schema for watch",{watch:e.name});return}let n=X(e.path),s=this.resolveWatchFiles(n);for(let o of s)this.getFileContext(o);let i={stateChanged:!1};for(let o of s)await this.addTailer(o,e,t,!1,i),await Gr();i.stateChanged&&Qt(this.statePath,this.state),this.watchTranscriptRoot(n,e,t)}watchTranscriptRoot(e,t,n,s=!1){let i=this.selectWatchRoot(e);if(!i){f.debug("TRANSCRIPT","Watch root does not exist, skipping fs.watch",{watch:t.name,path:e});return}let{root:o,recursive:a}=i;try{let c=(0,N.watch)(o,{recursive:a,persistent:!0},(l,u)=>{a?this.handleRootWatchEvent(o,e,t,n,u):this.handleAncestorWatchEvent(c,o,e,t,n,u)});this.rootWatchers.push(c),(s||!a)&&this.settleRootWatch(c,o,a,e,t,n),f.info("TRANSCRIPT",a?"Watching transcript root recursively":"Transcript root does not exist yet; watching its closest existing directory",{watch:t.name,watchRoot:o})}catch(c){f.warn("TRANSCRIPT","Failed to start fs.watch on transcript root",{watch:t.name,watchRoot:o},c instanceof Error?c:void 0)}}handleRootWatchEvent(e,t,n,s,i){if(!i)return;let o=(0,j.resolve)(e,i).replace(/\\/g,"/"),a=this.tailers.get(o);if(a){if(!(0,N.existsSync)(o)){a.close(),this.tailers.delete(o),this.scheduleRetirementCheck(o);return}a.poke();return}this.touchesLiteralPrefix(o,t)&&this.addDiscoveredTailers(t,n,s)}handleAncestorWatchEvent(e,t,n,s,i,o){if(this.stopped||!this.rootWatchers.includes(e)||o&&!this.touchesLiteralPrefix((0,j.resolve)(t,o),n))return;let a=this.selectWatchRoot(n);a&&a.root===t&&!a.recursive||(e.close(),this.rootWatchers=this.rootWatchers.filter(c=>c!==e),this.watchTranscriptRoot(n,s,i,!0),this.addDiscoveredTailers(n,s,i))}settleRootWatch(e,t,n,s,i,o){let a=setTimeout(()=>{this.rootWatchSettleTimers.delete(a),!(this.stopped||!this.rootWatchers.includes(e))&&(n?this.addDiscoveredTailers(s,i,o):this.handleAncestorWatchEvent(e,t,s,i,o,null))},Qy);this.rootWatchSettleTimers.add(a)}getFileContext(e){let t=this.fileContexts.get(e);return t||(t={cwd:this.state.cwds?.[e],pendingTools:this.state.pendingTools?.[e],isCurrent:()=>this.isCheckpointedFile(e)},this.fileContexts.set(e,t)),this.processor.registerFileContext(t),t}isCheckpointedFile(e){try{let t=(0,N.statSync)(e);return zs(t)===this.state.fileIdentities?.[e]&&t.size>=(this.state.offsets[e]??0)}catch{return!1}}scheduleRetirementCheck(e){this.retirementCandidates.add(e),this.retirementTimer??=setTimeout(()=>this.retireMissingTranscripts(),this.missingTranscriptGraceMs)}retireMissingTranscripts(){this.retirementTimer=null;let e=[...this.retirementCandidates];if(this.retirementCandidates.clear(),this.stopped)return;let t=!1;for(let n of e){if(this.tailers.has(n)||!tb(n))continue;let s=this.fileContexts.get(n);s&&this.processor.retireFileContext(s),this.fileContexts.delete(n),this.state.pendingTools?.[n]&&(delete this.state.pendingTools[n],t=!0)}t&&Qt(this.statePath,this.state)}forgetReplacedTranscript(e,t){this.processor.resetFileContext(t),delete this.state.pendingTools?.[e],delete this.state.cwds?.[e]}addDiscoveredTailers(e,t,n){for(let s of this.resolveWatchFiles(e))this.tailers.has(s)||this.addTailer(s,t,n,!0).catch(i=>{f.debug("TRANSCRIPT","Failed to add transcript tailer",{file:s,watch:t.name},i instanceof Error?i:void 0)})}touchesLiteralPrefix(e,t){let n=e.replace(/\\/g,"/"),s=(0,j.resolve)(this.literalWatchPrefix(t)).replace(/\\/g,"/"),i=(o,a)=>o.startsWith(a.endsWith("/")?a:a+"/");return n===s||i(n,s)||i(s,n)}literalWatchPrefix(e){let t=e;if(this.hasGlob(e)){let n=e.split(/[/\\]/),s=[];for(let i of n){if(/[*?[\]{}()]/.test(i))break;s.push(i)}if(s.length===0||s.length===1&&s[0]==="")return"";t=s.join(j.sep)}return t}selectWatchRoot(e){let t=this.literalWatchPrefix(e);if(!t)return null;let n=(0,j.resolve)(t);try{return{root:(0,N.statSync)(n).isDirectory()?n:(0,j.resolve)(n,".."),recursive:!0}}catch{}for(let s=(0,j.resolve)(n,"..");(0,j.resolve)(s,"..")!==s;s=(0,j.resolve)(s,".."))try{if((0,N.statSync)(s).isDirectory())return{root:s,recursive:!1}}catch{}return null}resolveSchema(e){return typeof e.schema=="string"?this.config.schemas?.[e.schema]??null:e.schema}resolveWatchFiles(e){if(this.hasGlob(e))return this.scanGlob(this.normalizeGlobPattern(e));if((0,N.existsSync)(e))try{return(0,N.statSync)(e).isDirectory()?[...this.scanGlob(this.normalizeGlobPattern((0,j.join)(e,"**","*.jsonl"))),...this.scanGlob(this.normalizeGlobPattern((0,j.join)(e,"**",`*${Gs}`)))]:[e]}catch(t){return f.debug("WORKER","Failed to stat watch path",{path:e},t instanceof Error?t:void 0),[]}return[]}scanGlob(e){try{return Array.from(new Bun.Glob(e).scanSync({absolute:!0,onlyFiles:!0,dot:!0}))}catch(t){let n=t?.code;if(n==="ENOENT"||n==="ENOTDIR")return[];throw t}}normalizeGlobPattern(e){return e.replace(/\\/g,"/")}hasGlob(e){return/[*?[\]{}()]/.test(e)}async addTailer(e,t,n,s=!1,i){if(e=X(e),!(this.tailers.has(e)||this.startingTailers.has(e))){this.startingTailers.add(e);try{await this.startTailer(e,t,n,s,i)}finally{this.startingTailers.delete(e)}}}async startTailer(e,t,n,s,i){let o=e.endsWith(Gs);if(o&&!Hf()){this.warnedZstdUnsupported||(this.warnedZstdUnsupported=!0,f.warn("TRANSCRIPT","Skipping zstd transcripts: this runtime has no zlib.zstdDecompressSync (update Bun or Node)",{file:e}));return}let a=this.extractSessionIdFromPath(e),c=this.getFileContext(e),l=this.state.offsets[e],u=l??0,d=!1;if(l===void 0&&t.startAtEnd)try{let m=(0,N.statSync)(e);if(s&&m.mtimeMs>=this.startedAtMs-Kf&&await this.startedAfterThisWatcher(e,o,m.size)||(u=o?await Zy(e,m.size):m.size),this.stopped)return;this.state.offsets[e]=u,d=!0}catch(m){f.debug("WORKER","Failed to stat file for startAtEnd offset",{file:e},m instanceof Error?m:void 0),u=0}try{let m=(0,N.statSync)(e),h=zs(m),E=this.state.fileIdentities?.[e],_=l!==void 0&&E!==void 0&&!Xf(e,h,m.size,l,this.state.checkpointFingerprints?.[e]);if(_&&(u=0,this.state.offsets[e]=0,delete this.state.partials?.[e],delete this.state.frameLines?.[e],this.forgetReplacedTranscript(e,c)),_||h!==E){(this.state.fileIdentities??={})[e]=h;let b=ha(e,u,h);b!==null?(this.state.checkpointFingerprints??={})[e]=b:delete this.state.checkpointFingerprints?.[e],d=!0}}catch(m){f.debug("WORKER","Failed to stat transcript file for its identity",{file:e},m instanceof Error?m:void 0)}d&&(s?Qt(this.statePath,this.state):i&&(i.stateChanged=!0));let p=u>0&&(!!n.sessionIdPath||!!t.subagentSource||!c.cwd),g=new ma(e,u,async m=>{try{p&&(p=!1,await this.primeFromFirstLine(e,u,t,n,a,c)),await this.handleLine(m,t,n,e,a,c)}finally{c.pendingTools&&((this.state.pendingTools??={})[e]=c.pendingTools),c.cwd&&c.cwd!==this.state.cwds?.[e]&&((this.state.cwds??={})[e]=c.cwd)}},(m,h,E,_,b)=>{_!==void 0&&((this.state.fileIdentities??={})[e]=_),b!==void 0?(this.state.checkpointFingerprints??={})[e]=b:this.state.checkpointFingerprints&&delete this.state.checkpointFingerprints[e],this.state.offsets[e]=m,h?(this.state.partials??={})[e]=h:this.state.partials&&delete this.state.partials[e],E>0?(this.state.frameLines??={})[e]=E:this.state.frameLines&&delete this.state.frameLines[e],Qt(this.statePath,this.state)},this.state.partials?.[e]??"",this.state.frameLines?.[e]??0,this.state.fileIdentities?.[e],this.state.checkpointFingerprints?.[e],()=>this.forgetReplacedTranscript(e,c));g.start(),this.tailers.set(e,g),f.info("TRANSCRIPT","Watching transcript file",{file:e,watch:t.name,schema:n.name})}async startedAfterThisWatcher(e,t,n){let s=await eb(e,t,n);return s!==null?s>=this.startedAtMs-Kf:n<=Jy}async primeFromFirstLine(e,t,n,s,i,o){try{let a=await Jf(e,e.endsWith(Gs),t);if(a===null)return;await this.processor.primeSessionContext(JSON.parse(a),n,s,i,o)}catch(a){f.debug("TRANSCRIPT","Could not read the first line of a resumed transcript",{watch:n.name,file:(0,j.basename)(e)},a instanceof Error?a:void 0)}}async handleLine(e,t,n,s,i,o){try{let a=JSON.parse(e);await this.processor.processEntry(a,t,n,i??void 0,o)}catch(a){if(a instanceof Hr||a instanceof Kr||a instanceof bt)throw f.warn("TRANSCRIPT","Transcript event not accepted; it is retried from its own line",{watch:t.name,file:(0,j.basename)(s),error:a.message}),a;a instanceof Error?f.debug("TRANSCRIPT","Failed to parse transcript line",{watch:t.name,file:(0,j.basename)(s)},a):f.warn("TRANSCRIPT","Failed to parse transcript line (non-Error thrown)",{watch:t.name,file:(0,j.basename)(s),error:String(a)})}}extractSessionIdFromPath(e){let t=e.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return t?t[0]:null}};function _a(r,e){let t=r.indexOf(e);return t===-1?null:r[t+1]??null}function Qf(r){(0,Zf.existsSync)(X(r))||(si(r),console.log(`Created sample config: ${X(r)}`))}async function ep(r,e){switch(r){case"init":{let t=_a(e,"--config")??vt;return si(t),console.log(`Created sample config: ${X(t)}`),0}case"watch":{let t=_a(e,"--config")??vt;Qf(t);let n=B.loadFromFile(ie),{config:s,scoped:i,removed:o}=$a(ni(t),n);if(i>0&&console.log(`Scoped ${i} Codex transcript watch(es) to subagent sessions (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true); native hooks capture top-level sessions.`),o>0&&console.log(`Skipped ${o} Codex transcript watch(es): native hooks capture top-level Codex sessions, and subagent capture is opt-in (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true).`),s.watches.length===0)return console.log(`No active transcript watches in ${X(t)}; nothing to watch.`),1;let a=X(s.stateFile??Qr),c=new Ys(s,a,"spool");await c.start(),console.log("Transcript watcher running. Press Ctrl+C to stop.");let l=()=>{c.stop(),process.exit(0)};return process.on("SIGINT",l),process.on("SIGTERM",l),await new Promise(()=>{})}case"validate":{let t=_a(e,"--config")??vt;return Qf(t),ni(t),console.log(`Config OK: ${X(t)}`),0}default:return console.log("Usage: claude-mem transcript <init|watch|validate> [--config <path>]"),1}}var nb=process.argv[2],sb=process.argv.slice(3);ep(nb,sb).then(r=>{process.exit(r)}).catch(r=>{console.error(r),process.exit(1)});
29
+ ${e}`,o=gu(s,i),a=`${r}.tmp`;try{(0,Te.writeFileSync)(a,o),(0,Te.renameSync)(a,r)}catch(c){d.error("AGENTS_MD","Failed to write AGENTS.md",{agentsPath:r},c instanceof Error?c:new Error(String(c)))}}M();function t_(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 lr(r,e){if(!e)return;let t=t_(e),n=r;for(let s of t){if(n==null)return;n=n[s]}return n}function hu(r){return r==null||r===""}function _u(r,e){if(r.startsWith("$watch.")){let t=r.slice(7);return e.watch[t]}if(r.startsWith("$schema.")){let t=r.slice(8);return e.schema[t]}if(r.startsWith("$session.")){let t=r.slice(9);return e.session?e.session[t]:void 0}if(r==="$cwd")return e.watch.workspace;if(r==="$project")return e.watch.project}function Ot(r,e,t){if(r!==void 0){if(typeof r=="string"){let n=_u(r,t);return n!==void 0?n:lr(e,r)}if(r.coalesce&&Array.isArray(r.coalesce))for(let n of r.coalesce){let s=Ot(n,e,t);if(!hu(s))return s}if(r.path){let n=_u(r.path,t);if(n!==void 0)return n;let s=lr(e,r.path);if(!hu(s))return s}if(r.value!==void 0)return r.value;if(r.default!==void 0)return r.default}}function Eu(r,e,t){let n={};if(!r)return n;for(let[s,i]of Object.entries(r))n[s]=Ot(i,e,t);return n}function ur(r,e,t){if(!e)return!0;if(e.all!==void 0){if(!Array.isArray(e.all))return!1;for(let o of e.all)if(!ur(r,o,t))return!1}if(e.any!==void 0&&(!Array.isArray(e.any)||!e.any.some(o=>ur(r,o,t))))return!1;let n=e.path||t.eventTypePath||"type",s=n?lr(r,n):void 0,i=s==null||s==="";if(e.exists!==void 0&&(e.exists&&i||!e.exists&&!i)||e.equals!==void 0&&s!==e.equals||e.not_equals!==void 0&&s===e.not_equals||e.in&&Array.isArray(e.in)&&!e.in.includes(s)||e.not_in&&Array.isArray(e.not_in)&&e.not_in.includes(s)||e.contains!==void 0&&(typeof s!="string"||!s.includes(e.contains))||e.not_contains!==void 0&&typeof s=="string"&&s.includes(e.not_contains)||e.starts_with!==void 0&&(typeof s!="string"||!s.startsWith(e.starts_with))||e.not_starts_with!==void 0&&typeof s=="string"&&s.startsWith(e.not_starts_with))return!1;if(e.regex)try{if(!new RegExp(e.regex).test(String(s??"")))return!1}catch(o){return d.debug("WORKER","Invalid regex in match rule",{regex:e.regex},o instanceof Error?o:void 0),!1}return!0}M();function Su(r,e){return!!r&&!!e}var yu={skip:!1};function r_(r){return new Set((r??"").split(",").map(e=>e.trim()).filter(Boolean))}function bu(r,e,t){return Su(r,e)?t.CLAUDE_MEM_SKIP_SUBAGENT_OBSERVATIONS==="true"?{skip:!0,reason:"subagent_observation"}:e&&r_(t.CLAUDE_MEM_SKIP_AGENT_TYPES).has(e)?{skip:!0,reason:"agent_type_excluded"}:yu:yu}U();M();var qn=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 kt=require("path");function Tu(){let r=n_();return async e=>{for(let t of e)t.module=r(t.filename);return e}}function n_(r=process.argv[1]?(0,kt.dirname)(process.argv[1]):process.cwd(),e=kt.sep==="\\"){let t=e?wu(r):r;return n=>{if(!n)return;let s=e?wu(n):n,{dir:i,base:o,ext:a}=kt.posix.parse(s);(a===".js"||a===".mjs"||a===".cjs")&&(o=o.slice(0,-1*a.length));let c=decodeURIComponent(o);i||(i=".");let l=i.lastIndexOf("/node_modules");if(l>-1)return`${i.slice(l+14).replace(/\//g,".")}:${c}`;if(i.startsWith(t)){let u=i.slice(t.length+1).replace(/\//g,".");return u?`${u}:${c}`:c}return c}}function wu(r){return r.replace(/^[A-Z]:/,"").replace(/\\/g,"/")}var G={};gp(G,{DEFAULT_EXCEPTION_STEPS_CONFIG:()=>ds,DOMExceptionCoercer:()=>Po,EXCEPTION_STEP_INTERNAL_FIELDS:()=>yr,ErrorCoercer:()=>hr,ErrorEventCoercer:()=>Io,ErrorPropertiesBuilder:()=>mr,EventCoercer:()=>Oo,ExceptionStepsBuffer:()=>Lo,ObjectCoercer:()=>Er,PrimitiveCoercer:()=>Sr,PromiseRejectionEventCoercer:()=>ko,ReduceableCache:()=>Do,StringCoercer:()=>_r,chromeStackLineParser:()=>vo,createDefaultStackParser:()=>Co,createStackParser:()=>pd,geckoStackLineParser:()=>Ro,getInjectedReleaseId:()=>_E,getUtf8ByteLength:()=>md,nodeStackLineParser:()=>ad,opera10StackLineParser:()=>sd,opera11StackLineParser:()=>id,resolveExceptionStepsConfig:()=>xo,reverseAndStripFrames:()=>fd,stripReservedExceptionStepFields:()=>gE,winjsStackLineParser:()=>nd});var se=(function(r){return r.AnonymousId="anonymous_id",r.DistinctId="distinct_id",r.Props="props",r.EnablePersonProcessing="enable_person_processing",r.PersonMode="person_mode",r.FeatureFlagDetails="feature_flag_details",r.FeatureFlags="feature_flags",r.FeatureFlagPayloads="feature_flag_payloads",r.BootstrapFeatureFlagDetails="bootstrap_feature_flag_details",r.BootstrapFeatureFlags="bootstrap_feature_flags",r.BootstrapFeatureFlagPayloads="bootstrap_feature_flag_payloads",r.OverrideFeatureFlags="override_feature_flags",r.Queue="queue",r.AiQueue="ai_queue",r.AiCaptureQueue="ai_capture_queue",r.LogsQueue="logs_queue",r.OptedOut="opted_out",r.SessionId="session_id",r.SessionStartTimestamp="session_start_timestamp",r.SessionLastTimestamp="session_timestamp",r.PersonProperties="person_properties",r.GroupProperties="group_properties",r.InstalledAppBuild="installed_app_build",r.InstalledAppVersion="installed_app_version",r.SessionReplay="session_replay",r.PushRegistered="push_registered",r.SessionReplayEventTriggerActivatedSession="session_replay_event_trigger_activated_session",r.SurveyLastSeenDate="survey_last_seen_date",r.SurveysInProgress="surveys_in_progress",r.SurveysSeen="surveys_seen",r.Surveys="surveys",r.RemoteConfig="remote_config",r.FlagsEndpointWasHit="flags_endpoint_was_hit",r.DeviceId="device_id",r})({});function Je(r){let e=[];return JSON.stringify(r,function(t,n){if(typeof n=="bigint")return n.toString();if(!(typeof n=="function"||typeof n=="symbol")){if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(n&&typeof n=="object"){for(;e.length>0&&e[e.length-1]!==this;)e.pop();if(e.includes(n))return"[Circular]";e.push(n)}return n}})??"null"}var s_=Array.isArray,vu=Object.prototype,MR=vu.hasOwnProperty,Jn=vu.toString,ce=s_||function(r){return Jn.call(r)==="[object Array]"};var dr=r=>r===Object(r)&&!ce(r);var Be=r=>r===void 0,J=r=>Jn.call(r)=="[object String]",fo=r=>J(r)&&r.trim().length===0,po=r=>r===null,Ae=r=>Be(r)||po(r),Dt=r=>Jn.call(r)=="[object Number]"&&r===r;var Ru=r=>Jn.call(r)==="[object Boolean]";function Xn(r){return r===null||typeof r!="object"}function pt(r,e){return Object.prototype.toString.call(r)===`[object ${e}]`}function Xe(r){switch(Object.prototype.toString.call(r)){case"[object Error]":case"[object Exception]":case"[object DOMException]":case"[object DOMError]":case"[object WebAssembly.Exception]":return!0;default:return Pu(r,Error)}}function Mu(r){return pt(r,"ErrorEvent")}function xt(r){return"u">typeof Event&&Pu(r,Event)}function Cu(r){return pt(r,"Object")}function Pu(r,e){try{return r instanceof e}catch{return!1}}var i_=["amazonbot","amazonproductbot","app.hypefactors.com","applebot","archive.org_bot","awariobot","backlinksextendedbot","baiduspider","bingbot","bingpreview","chrome-lighthouse","dataforseobot","deepscan","duckduckbot","facebookexternal","facebookcatalog","http://yandex.com/bots","hubspot","ia_archiver","leikibot","linkedinbot","meta-externalagent","mj12bot","msnbot","nessus","petalbot","pinterestbot","prerender","rogerbot","screaming frog","sebot-wa","sitebulb","slackbot","slurp","trendictionbot","turnitin","twitterbot","vercel-screenshot","vercelbot","yahoo! slurp","yandexbot","zoombot","bot.htm","bot.php","(bot;","bot/","crawler","ahrefsbot","ahrefssiteaudit","semrushbot","siteauditbot","splitsignalbot","gptbot","oai-searchbot","chatgpt-user","perplexitybot","better uptime bot","sentryuptimebot","uptimerobot","headlesschrome","cypress","google-hoteladsverifier","adsbot-google","apis-google","duplexweb-google","feedfetcher-google","google favicon","google web preview","google-read-aloud","googlebot","googleother","google-cloudvertexbot","googleweblight","mediapartners-google","storebot-google","google-inspectiontool","bytespider"],Qn=new Map,o_=256;function a_(r,e){let t="";for(let n=0;n<e.length;n++){let s=e[n];t+=s.length+":"+s}return r.length+":"+r+"|"+e.length+":"+t}var Iu=function(r,e=[]){if(!r)return!1;let t=a_(r,e),n=Qn.get(t);if(n!==void 0)return n;let s=r.toLowerCase(),i=i_.concat(e).some(o=>s.indexOf(o.toLowerCase())!==-1);return Qn.size>=o_&&Qn.clear(),Qn.set(t,i),i};function fr(r,e,t,n,s){return e>t&&(n.warn("min cannot be greater than max."),e=t),Dt(r)?r>t?(n.warn(" cannot be greater than max: "+t+". Using max value instead."),t):r<e?(n.warn(" cannot be less than min: "+e+". Using min value instead."),e):r:(n.warn(" must be a number. using max or fallback. max: "+t+", fallback: "+s),fr(s??t,e,t,n))}var c_=864e5,l_=1,u_=10;function Ou(r={}){return{refillRate:r.exceptionRateLimiterRefillRate??r.__exceptionRateLimiterRefillRate??l_,bucketSize:r.exceptionRateLimiterBucketSize??r.__exceptionRateLimiterBucketSize??u_}}var Zn=class{constructor(e){this._buckets={},this._onBucketRateLimited=e._onBucketRateLimited,this._bucketSize=fr(e.bucketSize,0,100,e._logger),this._refillRate=fr(e.refillRate,0,this._bucketSize,e._logger),this._refillInterval=fr(e.refillInterval,0,c_,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 es="0123456789abcdef",ts=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+=es.charAt(this.bytes[t]>>>4),e+=es.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+=es.charAt(this.bytes[t]>>>4),e+=es.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}},go=class{constructor(e){this.timestamp=0,this.counter=0,this.random=e??d_()}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 ts.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,ts.ofInner(e)}},d_=()=>({nextUint32:()=>65536*Math.trunc(65536*Math.random())+Math.trunc(65536*Math.random())>>>0}),ku,ee=()=>f_().toString(),f_=()=>(ku||(ku=new go)).generate();var rs=class{add(e){let t=ee(),n=++this.nextId;return this.promiseByIds[t]={id:n,promise:e},e.catch(()=>{}).finally(()=>{delete this.promiseByIds[t]}),e}async join(){let e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length;for(;t>0;)await Promise.all(e),e=Object.values(this.promiseByIds).map(n=>n.promise),t=e.length}getPromises(e=[],t=this.nextId){let n=new Set(e);return Object.values(this.promiseByIds).filter(s=>s.id<=t&&!n.has(s.promise)).map(s=>s.promise)}get maxId(){return this.nextId}get length(){return Object.keys(this.promiseByIds).length}constructor(){this.promiseByIds={},this.nextId=0}};function p_(r=console){return{log:r.log.bind(r),warn:r.warn.bind(r),error:r.error.bind(r),debug:r.debug.bind(r)}}var Du=(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=>Du(`${r} ${i}`,e,t)}},g_=r=>r();function xu(r,e=g_){return Du(r,e,p_())}var Ft="Mobile",ss="iOS",Lt="Android",$u="Tablet",HR=Lt+" "+$u;var h_="Apple",jR=h_+" Watch",Bu="Safari",is="BlackBerry",Wu="Samsung",__=Wu+"Browser",E_=Wu+" Internet",os="Chrome",S_=os+" OS",y_=os+" "+ss,Hu="Internet Explorer",b_=Hu+" "+Ft,_o="Opera",KR=_o+" Mini",ju="Edge",w_="Microsoft "+ju,Eo="Firefox",T_=Eo+" "+ss,So="Nintendo",yo="PlayStation",ns="Xbox",A_=Lt+" "+Ft,v_=Ft+" "+Bu,pr="Windows",R_=pr+" Phone";var Ku="Generic",GR=Ku+" "+Ft.toLowerCase(),zR=Ku+" "+$u.toLowerCase(),M_="Konqueror",C_="Oculus Browser",Lu="Vivaldi",P_="Yandex",Fu="Whale",I_="DuckDuckGo",O_="Pale Moon",Nu="Waterfox",Uu="Brave",Gu="Claude",zu="Codex",Vu="ChatGPT",k_="Google Search App",L="(\\d+(\\.\\d+)?)",mo=new RegExp("Version/"+L),ho=new RegExp("("+Gu+"|"+zu+"|"+Vu+")\\/"+L);var VR=new RegExp(ns,"i"),YR=new RegExp(yo+" \\w+","i"),qR=new RegExp(So+" \\w+","i"),D_=new RegExp(is+"|PlayBook|BB10","i"),x_={"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 JR={[b_]:[new RegExp("rv:"+L)],[w_]:[new RegExp(ju+"?\\/"+L)],[os]:[new RegExp("("+os+"|CrMo)\\/"+L)],[y_]:[new RegExp("CriOS\\/"+L)],"UC Browser":[new RegExp("(UCBrowser|UCWEB)\\/"+L)],[Bu]:[mo],[v_]:[mo],[_o]:[new RegExp("("+_o+"|OPR)\\/"+L)],[Eo]:[new RegExp(Eo+"\\/"+L)],[T_]:[new RegExp("FxiOS\\/"+L)],[M_]:[new RegExp("Konqueror[:/]?"+L,"i")],[is]:[new RegExp(is+" "+L),mo],[A_]:[new RegExp("android\\s"+L,"i")],[E_]:[new RegExp(__+"\\/"+L)],[C_]:[new RegExp("OculusBrowser\\/"+L)],[Lu]:[new RegExp(Lu+"\\/"+L)],[P_]:[new RegExp("YaBrowser\\/"+L)],[Fu]:[new RegExp(Fu+"\\/"+L)],[Uu]:[new RegExp(Uu+"\\/"+L)],[Gu]:[ho],[zu]:[ho],[Vu]:[ho],[I_]:[new RegExp("(DuckDuckGo|Ddg)\\/"+L)],[O_]:[new RegExp("PaleMoon\\/"+L)],[Nu]:[new RegExp(Nu+"\\/"+L)],[k_]:[new RegExp("GSA\\/"+L)],[Hu]:[new RegExp("(rv:|MSIE )"+L)],Mozilla:[new RegExp("rv:"+L)]};var XR=[[new RegExp(ns+"; "+ns+" (.*?)[);]","i"),r=>[ns,r&&r[1]||""]],[new RegExp(So,"i"),[So,""]],[new RegExp(yo,"i"),[yo,""]],[D_,[is,""]],[new RegExp(pr,"i"),(r,e)=>{if(/Phone/.test(e)||/WPDesktop/.test(e))return[R_,""];if(new RegExp(Ft).test(e)&&!/IEMobile\b/.test(e))return[pr+" "+Ft,""];let t=/Windows NT ([0-9.]+)/i.exec(e);if(t&&t[1]){let n=t[1],s=x_[n]||"";return/arm/i.test(e)&&(s="RT"),[pr,s]}return[pr,""]}],[/((iPhone|iPad|iPod).*?OS (\d+)_(\d+)_?(\d+)?|iPhone)/,r=>{if(r&&r[3]){let e=[r[3],r[4],r[5]||"0"];return[ss,e.join(".")]}return[ss,""]}],[/(watch.*\/(\d+\.\d+\.\d+)|watch os,(\d+\.\d+),)/i,r=>{let e="";return r&&r.length>=3&&(e=Be(r[2])?r[3]:r[2]),["watchOS",e]}],[new RegExp("("+Lt+" (\\d+)\\.(\\d+)\\.?(\\d+)?|"+Lt+")","i"),r=>{if(r&&r[2]){let e=[r[2],r[3],r[4]||"0"];return[Lt,e.join(".")]}return[Lt,""]}],[/Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?/i,r=>{let e=["Mac OS X",""];if(r&&r[1]){let t=[r[1],r[2],r[3]||"0"];e[1]=t.join(".")}return e}],[/Mac/i,["Mac OS X",""]],[/CrOS/,[S_,""]],[/Linux|debian/i,["Linux",""]]];var as="[Circular]",cs="[Truncated]",pe="[Unserializable]",Yu="[Function]",eM=Date.prototype.getTime,tM=Date.prototype.toISOString;function De(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 We(r,e){if(!e)return r;let t=[];try{t=Object.keys(e)}catch{t=[]}for(let n of t){let s;try{s=e[n]}catch{s=pe}Object.defineProperty(r,n,{value:s,enumerable:!0,writable:!0,configurable:!0})}return r}function bo(r,e=Date.now()){if(typeof r!="string"||!r)return;let t=r.trim(),n=/^\d+\s*,/.test(t)?t.slice(0,t.indexOf(",")).trim():t;if(/^\d+$/.test(n)){let o=1e3*Math.min(Number(n),300);return o>0?o:void 0}if(!/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)[a-z]*[ ,]/.test(n))return;let s=/^\w{3} \w{3} /.test(n)?n+" GMT":n,i=Date.parse(s)-e;if(!(!Number.isFinite(i)||i<=0))return Math.min(i,3e5)}var gt=class{record(e){if(e.kind==="too-large")return;if(e.kind!=="retry-later")return void this.reset();if(!e.retryAfterMs)return;let t=this.isOpen(),n=Date.now(),s=Math.min(e.retryAfterMs,3e5);if(!t){this._installedAt=n,this._until=n+s;return}this._until=Math.max(this._until,Math.min(n+s,this._installedAt+3e5))}remainingMs(){let e=Date.now();if(e<this._installedAt-5e3)return this.reset(),0;let t=Math.min(3e5,Math.max(0,this._until-e));return t===0&&this.reset(),t}isOpen(){return this.remainingMs()>0}reset(){this._until=0,this._installedAt=0}constructor(){this._until=0,this._installedAt=0}};var qu="utf8",L_=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function F_(r){return typeof r=="string"&&L_.test(r)}function mt(r,e){return F_(r)?r:e()}function Nt(r,e){let t=new Error(e);try{Object.defineProperty(t,"name",{value:r,writable:!0,enumerable:!0,configurable:!0})}catch{}return t}function Ju(r){return r?.replace(/\/+$/,"")}async function Xu(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 wo(){return new Date().toISOString()}function te(r,e){let t=setTimeout(r,e);return t?.unref&&t?.unref(),t}async function Qe(r,e,t){let n;try{return await Promise.race([r,new Promise((s,i)=>{n=te(()=>{try{t?.(),s()}catch(o){i(o)}},e)})])}finally{clearTimeout(n)}}var Qu=r=>r&&typeof r.then=="function";function gr(r){return Promise.all(r.map(e=>(e??Promise.resolve()).then(t=>({status:"fulfilled",value:t}),t=>({status:"rejected",reason:t}))))}var To,Zu,ed,Ut;function rd(r){let e=globalThis._posthogChunkIds,t=globalThis._debugIds;if(!e&&!t)return;let n=e?Object.keys(e):[],s=t?Object.keys(t):[];if(Ut&&td(e,n,Zu)&&td(t,s,ed))return Ut;Zu=e?{...e}:void 0,ed=t?{...t}:void 0,Ut={},To??={};let i=(o,a)=>{for(let c of o){let l=a[c];if(!l)continue;let u=To?.[c];if(u){Ut[u]=l;continue}let f=r(c);for(let p=f.length-1;p>=0;p--){let g=f[p]?.filename;if(g){Ut[g]=l,To[c]=g;break}}}};return t&&i(s,t),e&&i(n,e),Ut}function td(r,e,t){return!r||!t?r===t:e.length===Object.keys(t).length&&e.every(n=>r[n]===t[n])}var Ao=50,N_=1e3,U_=100,$_=4,mr=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&&ce(t.stacktrace.frames)&&(t.stacktrace.frames=await this.applyModifiers(t.stacktrace.frames));return e}coerceFallback(e){return{type:"Error",value:"Unknown error",stack:e.syntheticException?.stack,synthetic:!0}}parseStacktrace(e,t){let n;e.cause!=null&&(n=this.parseStacktrace(e.cause,t));let s;if(e.stack!=""&&e.stack!=null)try{s=this.applyChunkIds(this.stackParser(e.stack,e.synthetic?t.skipFirstLines:0),t.chunkIdMap)}catch{}return{...e,cause:n,stack:s,errors:e.errors?.map(i=>this.parseStacktrace(i,t))}}applyChunkIds(e,t){return e.map(n=>(n.filename&&t&&(n.chunk_id=t[n.filename]),n))}applyCoercers(e,t){for(let n of this.coercers)if(n.match(e))return n.coerce(e,t);return this.coerceFallback(t)}async applyModifiers(e){let t=e;for(let n of this.modifiers)t=await n(t);return t}convertToExceptionList(e,t){let n=[],s=(i,o,a)=>{let c=n.length,l=o===void 0?{type:typeof t.type=="string"&&t.type.length>0?t.type:"generic",...typeof t.handled=="boolean"?{handled:t.handled}:t.handled===void 0?{handled:!0}:{},synthetic:typeof t.synthetic=="boolean"?t.synthetic:i.synthetic,exception_id:c}:{type:"chained",source:a,synthetic:i.synthetic,exception_id:c,parent_id:o},u={type:i.type,value:i.value,mechanism:l};i.stack&&(u.stacktrace={type:"raw",frames:i.stack}),n.push(u),i.cause&&s(i.cause,c,"cause");for(let f of i.errors??[])s(f,c,"member")};return s(e),n}buildParsingContext(e){return{chunkIdMap:rd(this.stackParser),skipFirstLines:e.skipFirstLines??1}}getAggregateErrors(e){try{if(Xe(e)){let t=Object.getPrototypeOf(e);for(let n=0;t&&n<U_;n++){let s=Object.getOwnPropertyDescriptor(t,"constructor")?.value;if(typeof s=="function"&&s.name==="AggregateError"){let i=e.errors;return ce(i)?i:void 0}t=Object.getPrototypeOf(t)}}}catch{}}buildCoercingContext(e,t,n=0){let s=0,i=0,o=!1,a=new Set,c=[],l={},u=(g,m,h=0)=>{let _=f(m,h),E=_.apply;if(_.apply=b=>{c.push(g);try{return E(b)}finally{c.pop()}},h>$_||h>0&&c.indexOf(g)!==-1)return this.coerceFallback(_);let y=typeof g=="object"&&g!==null||typeof g=="function";if(h===0&&s>=Ao||y&&a.has(g))return;y&&a.add(g),h===0&&s++;let w=this.getAggregateErrors(g);o||=!!w;let A;try{if(A=this.applyCoercers(g,_),!A)throw l}catch(b){if(b===l){h===0&&s--;return}if(!o)throw b;A=this.coerceFallback(_)}if(!w||s>=Ao)return A;let T;try{T=w.length}catch{return A}if(!Number.isInteger(T)||T<0||T>4294967295)return A;let P=[];for(let b=0;s<Ao&&i<N_&&b<T;b++){i++;let v;try{v=_.next(w[b])}catch{s++,v=this.coerceFallback(f(m+1))}v&&P.push(v)}return{...A,errors:P}},f=(g,m=0)=>({...t,syntheticException:g==0?t.syntheticException:void 0,mechanism:g==0?e:{},apply:h=>{let _=u(h,g,m+1);if(!_)throw l;return _},next:h=>u(h,g+1)}),p=f(n);return{...p,apply:g=>u(g,n)??this.coerceFallback(p)}}};var V="?",B_="<anonymous>",W_=/^([a-z][a-z0-9.+-]+):/i,H_=["http","https","file","blob","app","capacitor","ionic","webpack","webpack-internal","ng"];function j_(r){if(!r||r===B_)return!1;let e=W_.exec(r);return!e||H_.includes(e[1].toLowerCase())}function xe(r,e,t,n,s){let i={platform:r,filename:e,function:t==="<anonymous>"?V:t,in_app:j_(e)};return Be(n)||(i.lineno=n),Be(s)||(i.colno=s),i}var ls=(r,e)=>{let t=r.indexOf("safari-extension")!==-1,n=r.indexOf("safari-web-extension")!==-1;return t||n?[r.indexOf("@")!==-1?r.split("@")[0]:V,t?`safari-extension:${e}`:`safari-web-extension:${e}`]:[r,e]};var K_=/^\s*at (\S+?)(?::(\d+))(?::(\d+))\s*$/i,G_=/^\s*at (?:(.+?\)(?: \[.+\])?|.*?) ?\((?:address at )?)?(?:async )?((?:<anonymous>|[-a-z]+:|.*bundle|\/)?.*?)(?::(\d+))?(?::(\d+))?\)?\s*$/i,z_=/\((\S*)(?::(\d+))(?::(\d+))\)/,vo=(r,e)=>{let t=K_.exec(r);if(t){let[,s,i,o]=t;return xe(e,s,V,+i,+o)}let n=G_.exec(r);if(n){if(n[2]&&n[2].indexOf("eval")===0){let a=z_.exec(n[2]);a&&(n[2]=a[1],n[3]=a[2],n[4]=a[3])}let[i,o]=ls(n[1]||V,n[2]);return xe(e,o,i,n[3]?+n[3]:void 0,n[4]?+n[4]:void 0)}};var V_=/^\s*(.*?)(?:\((.*?)\))?(?:^|@)?((?:[-a-z]+)?:\/.*?|\[native code\]|[^@]*(?:bundle|\d+\.js)|\/[\w\-. /=]+)(?::(\d+))?(?::(\d+))?\s*$/i,Y_=/(\S+) line (\d+)(?: > eval line \d+)* > eval/i,Ro=(r,e)=>{let t=V_.exec(r);if(t){if(t[3]&&t[3].indexOf(" > eval")>-1){let o=Y_.exec(t[3]);o&&(t[1]=t[1]||"eval",t[3]=o[1],t[4]=o[2],t[5]="")}let s=t[3],i=t[1]||V;return[i,s]=ls(i,s),xe(e,s,i,t[4]?+t[4]:void 0,t[5]?+t[5]:void 0)}};var q_=/^\s*at (?:((?:\[object object\])?.+) )?\(?((?:[-a-z]+):.*?):(\d+)(?::(\d+))?\)?\s*$/i,nd=(r,e)=>{let t=q_.exec(r);return t?xe(e,t[2],t[1]||V,+t[3],t[4]?+t[4]:void 0):void 0};var J_=/ line (\d+).*script (?:in )?(\S+)(?:: in function (\S+))?$/i,sd=(r,e)=>{let t=J_.exec(r);return t?xe(e,t[2],t[3]||V,+t[1]):void 0},X_=/ line (\d+), column (\d+)\s*(?:in (?:<anonymous function: ([^>]+)>|([^)]+))\(.*\))? in (.*):\s*$/i,id=(r,e)=>{let t=X_.exec(r);return t?xe(e,t[5],t[3]||t[4]||V,+t[1],+t[2]):void 0};var Q_=/^\s*[-]{4,}$/,Z_=/at (?:async )?(?:(.+?)\s+\()?(?:(.+):(\d+):(\d+)?|([^)]+))\)?/,eE=/^Promise\.(?:all|any)$/,tE=/^index \d+$/,rE="node:internal/promise",ad=(r,e)=>{let t=r.match(Z_);if(t){let n,s,i,o,a;if(t[1]){i=t[1];let u=i.lastIndexOf(".");if(i[u-1]==="."&&u--,u>0){n=i.slice(0,u),s=i.slice(u+1);let 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||V,i=o?`${o}.${a}`:a);let c=t[2]?.startsWith("file://")?t[2].slice(7):t[2],l=t[5]==="native";return c?.match(/\/[A-Z]:/)&&(c=c.slice(1)),!c&&t[5]&&!l&&(c=t[5]),eE.test(i)&&tE.test(c||"")&&(c=rE),{filename:c?decodeURI(c):void 0,module:void 0,function:i,lineno:od(t[3]),colno:od(t[4]),in_app:nE(c||"",l),platform:e}}if(r.match(Q_))return{filename:r,platform:e}};function nE(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 od(r){return parseInt(r||"",10)||void 0}var cd=/\(error: (.*)\)/,ld=50,sE=10,iE=1e3;function Mo(r,e){return r.filename===e.filename&&r.function===e.function&&r.module===e.module&&r.lineno===e.lineno&&r.colno===e.colno}function oE(r){for(let e=1;e<=sE;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(!Mo(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 aE(r,e){let t=e.start+e.length,n=dd(r,e);n&&r.splice(t+n===r.length?t:e.start,n)}function ud(r,e){let t=e.start;for(;t>0&&Mo(r[t-1],r[t-1+e.length]);)t--;return e.start-t}function dd(r,e){let t=e.start+e.length,n=t;for(;n<r.length&&Mo(r[n],r[n-e.length]);)n++;return n-t}function cE(r,e){let t=e[0],n=r.length-(t?ud(r,t):0);for(let s of e)n-=dd(r,s);return n}function lE(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++)uE(e,n,t)&&(t=n);r.push(...r.splice(0,t))}function uE(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 fd(r){if(!r.length)return[];let e=Array.from(r);return e.reverse(),e.slice(0,ld).map(t=>({...t,filename:t.filename||dE(e).filename,function:t.function||V}))}function dE(r){return r[r.length-1]||{}}function Co(){return pd("web:javascript",vo,Ro)}function pd(r,...e){return(t,n=0)=>{let s=[],i=t.split(`
30
+ `),o=Math.min(i.length,n+iE),a=[];for(let u=n;u<o;u++){let f=i[u];if(f.length>1024)continue;let p=cd.test(f)?f.replace(cd,"$1"):f;if(!p.match(/\S*Error: /)){for(let g of e){let m=g(p,r);if(m){s.push(m);let h=oE(s);if(h){for(let _=a.length-1;_>=0;_--){let E=a[_];if(E.start+E.length<=h.start)break;a.pop()}a.push(h)}break}}if(cE(s,a)>=ld)break}}let c=[...a].sort((u,f)=>f.start-u.start),l=c[c.length-1];if(l){let u=ud(s,l);s.splice(l.start-u,u);for(let f of c)f.start-=u}for(let u of c)aE(s,u);return a.some(u=>u.start===0&&s.length===u.length)&&lE(s),fd(s)}}var Po=class{match(e){return this.isDOMException(e)||this.isDOMError(e)}coerce(e,t){let n=J(e.stack);return{type:this.getType(e),value:this.getValue(e),stack:n?e.stack:void 0,cause:e.cause?t.next(e.cause):void 0,synthetic:!1}}getType(e){return this.isDOMError(e)?"DOMError":"DOMException"}getValue(e){let t=e.name||(this.isDOMError(e)?"DOMError":"DOMException");return e.message?`${t}: ${e.message}`:t}isDOMException(e){return pt(e,"DOMException")}isDOMError(e){return pt(e,"DOMError")}};var hr=class{match(e){return Xe(e)}coerce(e,t){let n=this.getStack(e),s=n===void 0?t.syntheticException?.stack:void 0,i=!!s;return{type:this.getType(e),value:this.getMessage(e,t),stack:n??s,cause:e.cause?t.next(e.cause):void 0,synthetic:i}}getType(e){return e.name||e.constructor.name}getMessage(e,t){let n=e.message;return n.error&&typeof n.error.message=="string"?String(n.error.message):String(n)}getStack(e){try{let t=e.stacktrace;if(typeof t=="string"&&t.length>0)return t;let n=e.stack;return typeof n=="string"&&n.length>0?n:void 0}catch{return}}};var Io=class{match(e){if(!Mu(e))return!1;let t=e;return t.error!=null||this._hasUsableMessage(t)}coerce(e,t){if(e.error!=null)return t.apply(e.error);let n=t.apply(e.message);return{...n,stack:this._buildLocationStack(e)??n.stack,synthetic:!0}}_hasUsableMessage(e){return J(e.message)&&e.message.length>0}_buildLocationStack(e){let t=e,n=t.lineno??0,s=t.colno??0;if(!(!J(t.filename)||t.filename.length===0)&&n!==0)return`Error
31
+ at ${t.filename}:${n}:${s}`}};var fE=/^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/i,_r=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(fE);return s&&(t=s[1],n=s[2]),[t,n]}};var gd=["fatal","error","warning","log","info","debug"];function us(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 Er=class{match(e){return typeof e=="object"&&e!==null}coerce(e,t){let n=this.getErrorPropertyFromObject(e);return n?t.apply(n):{type:this.getType(e),value:this.getValue(e),stack:this.getStack(e)??t.syntheticException?.stack,level:this.isSeverityLevel(e.level)?e.level:"error",synthetic:!0}}getType(e){if(xt(e))return e.constructor.name;let t="name"in e?e.name:void 0;return J(t)&&!fo(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=us(e);return`${t&&t!=="Object"?`'${t}'`:"Object"} captured as exception with keys: ${n}`}isSeverityLevel(e){return J(e)&&!fo(e)&&gd.indexOf(e)>=0}getStack(e){try{return J(e.stacktrace)&&e.stacktrace.length>0?e.stacktrace:J(e.stack)&&e.stack.length>0?e.stack:void 0}catch{return}}getErrorPropertyFromObject(e){for(let t in e)if(Object.prototype.hasOwnProperty.call(e,t)){let n=e[t];if(Xe(n))return n}}getObjectClassName(e){try{let t=Object.getPrototypeOf(e);return t?t.constructor.name:void 0}catch{return}}};var Oo=class{match(e){return xt(e)}coerce(e,t){let n=e.constructor.name;return{type:n,value:`${n} captured as exception with keys: ${us(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var Sr=class{match(e){return Xn(e)}coerce(e,t){return{type:"Error",value:`Primitive value captured as exception: ${String(e)}`,stack:t.syntheticException?.stack,synthetic:!0}}};var ko=class{match(e){return pt(e,"PromiseRejectionEvent")||this.isCustomEventWrappingRejection(e)}isCustomEventWrappingRejection(e){if(!xt(e))return!1;try{let t=e.detail;return t!=null&&typeof t=="object"&&"reason"in t}catch{return!1}}coerce(e,t){let n=this.getUnhandledRejectionReason(e);return Xn(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 Do=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 yr={MESSAGE:"$message",TIMESTAMP:"$timestamp"},pE=new Set([yr.MESSAGE,yr.TIMESTAMP]),ds={enabled:!0,max_bytes:32768};function xo(r){return r?{enabled:r.enabled??ds.enabled,max_bytes:mE(r.max_bytes,ds.max_bytes)}:{...ds}}function gE(r){if(!r)return{sanitizedProperties:{},droppedKeys:[]};let e=[];return{sanitizedProperties:Object.keys(r).reduce((n,s)=>pE.has(s)?(e.push(s),n):(n[s]=r[s],n),{}),droppedKeys:e}}var Lo=class{constructor(e){this._entries=[],this._totalBytes=0,this._config=xo(e)}setConfig(e){this._config=xo(e),this._trimToMaxBytes()}add(e){let t=hE(e);if(!t)return;let n=md(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 mE(r,e){if(!Dt(r)||r===1/0||r===-1/0)return e;let t=Math.floor(r);return t<0?e:t}function hE(r){let e;try{e=Je(r)}catch{return}try{let t=JSON.parse(e);if(!dr(t))return;let n=t,s=n[yr.MESSAGE],i=n[yr.TIMESTAMP];return!J(s)||s.trim().length===0||!J(i)&&!Dt(i)?void 0:{step:n,json:e}}catch{return}}function md(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 _E(){if("u">typeof process){let e=process.env.POSTHOG_RELEASE_ID?.trim();if(e)return e}let r=globalThis._posthogReleaseId;return typeof r=="string"&&r.length>0?r:void 0}var Fo=r=>{if("flags"in r){let e=hd(r.flags),t=_d(r.flags);return{...r,featureFlags:e,featureFlagPayloads:t}}{let e=r.featureFlags??{},t=Object.fromEntries(Object.entries(r.featureFlagPayloads||{}).map(([s,i])=>[s,$t(i)])),n=Object.fromEntries(Object.entries(e).map(([s,i])=>[s,EE(s,i,t[s])]));return{...r,featureFlags:e,featureFlagPayloads:t,flags:n}}};function EE(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 hd=r=>Object.fromEntries(Object.entries(r??{}).map(([e,t])=>[e,br(t)]).filter(([,e])=>e!==void 0)),_d=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?$t(n):void 0]}))},br=r=>r===void 0?void 0:r.variant??r.enabled,$t=r=>{if(typeof r!="string")return r;try{return JSON.parse(r)}catch{return r}};var Ed=["utm_source","utm_medium","utm_campaign","utm_content","utm_term","gad_source","mc_cid","gclid","gclsrc","dclid","gbraid","wbraid","fbclid","msclkid","twclid","li_fat_id","igshid","ttclid","rdt_cid","epik","qclid","sccid","oppref","irclid","_kx"],SE=["$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",...Ed,"$session_id","$window_id","$lib","$lib_version","$device_id","$is_server"],wr=(r,e=[])=>{let t={},n=s=>{r[s]!==void 0&&(t[s]=r[s])};return SE.forEach(n),e.forEach(n),t};var fs=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 No(){return"CompressionStream"in globalThis&&"TextEncoder"in globalThis&&"Response"in globalThis&&typeof Response.prototype.blob=="function"}var bE="NativeGzipValidationError",wE=31,TE=139,AE=8,vE=r=>r.length>=2&&r[0]===wE&&r[1]===TE;var Tr,RE=()=>{if(Tr)return Tr;Tr=[];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;Tr[r]=e>>>0}return Tr},ME=r=>{let e=RE(),t=4294967295;for(let n=0;n<r.length;n++)t=e[(t^r[n])&255]^t>>>8;return(4294967295^t)>>>0},ps=r=>{throw Nt(bE,`Native gzip produced invalid output: ${r}`)},CE=async(r,e)=>{r.size<18&&ps("too-short");let t=new Uint8Array(await r.slice(0,10).arrayBuffer());(!vE(t)||t[2]!==AE)&&ps("invalid-header");let n=new DataView(await r.slice(r.size-8).arrayBuffer());n.getUint32(0,!0)!==ME(e)&&ps("invalid-crc");let s=e.length>>>0;n.getUint32(4,!0)!==s&&ps("invalid-size")};async function Ar(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 CE(c,n),c}catch(n){if(t?.rethrow)throw n;return e&&console.error("Failed to gzip compress data",n),null}}var ge=class extends Error{constructor(e,t,n,s){super("HTTP error while fetching PostHog: status="+e.status+", reqByteLength="+t),this.response=e,this.reqByteLength=t,this.responseBodyDeadline=n,this.abortController=s,this.name="PostHogFetchHttpError",this._bodyReadTimedOut=!1}get status(){return this.response.status}get retryAfterMs(){try{return bo(this.response.headers?.get("retry-after"))}catch{return}}get bodyReadTimedOut(){return this._bodyReadTimedOut}get text(){if(!this.responseBodyTextPromise)if(Date.now()>=this.responseBodyDeadline){this._bodyReadTimedOut=!0;let e=Nt("AbortError","Response body read timed out");this.cancelResponseBody(e),this.responseBodyTextPromise=Promise.reject(e)}else{let e=new Promise((n,s)=>{this.responseBodyTimer=te(()=>{this._bodyReadTimedOut=!0;let i=Nt("AbortError","Response body read timed out");s(i),this.cancelResponseBody(i)},this.responseBodyDeadline-Date.now())}),t;try{t=Promise.resolve(this.response.text())}catch(n){t=Promise.reject(n)}this.responseBodyTextPromise=Promise.race([t,e]).finally(()=>clearTimeout(this.responseBodyTimer))}return this.responseBodyTextPromise}get json(){return this.text.then(e=>JSON.parse(e))}cancelResponseBody(e){clearTimeout(this.responseBodyTimer),this.abortController.signal.aborted||this.abortController.abort(e),(async()=>{try{await this.response.body?.cancel()}catch{}})()}},He=class extends Error{constructor(e){super("Network error while fetching PostHog",e instanceof Error?{cause:e}:{}),this.error=e,this.name="PostHogFetchNetworkError"}};var PE=(r,e)=>{for(let t of Object.keys(e))(t.startsWith("$feature/")||t==="$active_feature_flags")&&(r[t]=e[t])};async function Sd(r){if(r instanceof ge){let e="";try{e=await r.text}catch{r.bodyReadTimedOut&&(e="<response body read timed out>")}console.error(`Error while flushing PostHog: message=${r.message}, response body=${e}`,r)}else console.error("Error while flushing PostHog",r);return Promise.resolve()}function IE(r){return typeof r=="object"&&(r instanceof ge||Td(r))}function Td(r){return r instanceof He}function OE(r){if(r instanceof ge)return r.status===502||r.status===504;if(!(r instanceof He))return!1;let e=r.error;return(e?.code??e?.cause?.code)!=="ECONNREFUSED"}var yd=10485760;function bd(r){try{return typeof r!="string"?r instanceof Uint8Array?r.byteLength:r.size:"u">typeof Buffer?Buffer.byteLength(r,qu):new TextEncoder().encode(r).length}catch{return 0}}function Bt(r){return typeof r=="object"&&r instanceof ge&&r.status===413}function gs(r){return r instanceof ge?r.status===408||r.status===429||r.status>=500:Td(r)}function wd(r){return r!==null&&typeof r=="object"&&!Array.isArray(r)}var Uo="default",vr=class{getErrorPropertiesBuilder(){return this._errorPropertiesBuilder||(this._errorPropertiesBuilder=this.createErrorPropertiesBuilder()),this._errorPropertiesBuilder}createErrorPropertiesBuilder(){return new mr([new hr,new Er,new _r,new Sr],Co())}getEvaluationRuntime(){}constructor(e,t={}){this.flushPromise=null,this.pendingFlushPromise=null,this.flushPromises=new Set,this._dequeuedMessagesCount=0,this.shutdownPromise=null,this.promiseQueue=new rs,this._events=new fs,this._isInitialized=!1;let n=typeof e=="string"?e.trim():"",s=typeof t.host=="string"?t.host.trim():"",i=!n;this._logger=xu("[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=Ju(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:gs},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=!No()||(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(se.OptedOut)??!this.defaultOptIn}async optIn(){this.wrap(()=>{this.setPersistedProperty(se.OptedOut,!1)})}async optOut(){this.wrap(()=>{this.setPersistedProperty(se.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=this.mergeCommonEventProperties(t);return PE(n,t),e.event==="$feature_flag_called"&&n.$feature_flag_has_experiment===!1&&this.isMinimalFlagCalledEventsEnabled()&&(n=wr(n)),{distinct_id:e.distinct_id,event:e.event,properties:n}}mergeCommonEventProperties(e){return{...e,...this.getCommonEventProperties()}}isMinimalFlagCalledEventsEnabled(){return!1}addPendingPromise(e){return this.promiseQueue.add(e)}identifyStateless(e,t,n){this.wrap(()=>{let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};this.enqueue("identify",s,n)})}async identifyStatelessImmediate(e,t,n){let s={...this.buildPayload({distinct_id:e,event:"$identify",properties:t})};await this.sendImmediate("identify",s,n)}captureStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({distinct_id:e,event:t,properties:n});this.enqueue("capture",i,s)})}async captureStatelessImmediate(e,t,n,s){let i=this.buildPayload({distinct_id:e,event:t,properties:n});await this.sendImmediate("capture",i,s)}aliasStateless(e,t,n,s){this.wrap(()=>{let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});this.enqueue("alias",i,s)})}async aliasStatelessImmediate(e,t,n,s){let i=this.buildPayload({event:"$create_alias",distinct_id:t,properties:{...n||{},distinct_id:t,alias:e}});await this.sendImmediate("alias",i,s)}groupIdentifyStateless(e,t,n,s,i,o){this.wrap(()=>{let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});this.enqueue("capture",a,s)})}async groupIdentifyStatelessImmediate(e,t,n,s,i,o){let a=this.buildPayload({distinct_id:i||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{},...o||{}}});await this.sendImmediate("capture",a,s)}async getRemoteConfig(){await this._initPromise;let e=this.host;e==="https://us.i.posthog.com"?e="https://us-assets.i.posthog.com":e==="https://eu.i.posthog.com"&&(e="https://eu-assets.i.posthog.com");let t=`${e}/array/${this.apiKey}/config`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"}};return this.fetchWithRetry(t,n,{type:"required",consume:s=>s.json()},{retryCount:0},this.remoteConfigRequestTimeoutMs).catch(s=>{this._logger.error("Remote config could not be loaded",s),this._events.emit("error",s)})}async getFlags(e,t={},n={},s={},i={},o=!1){await this._initPromise;let a=o?"&config=true":"",c=`${this.host}/flags/?v=2${a}`,l={token:this.apiKey,distinct_id:e,groups:t,person_properties:n,group_properties:s,...i};n.$device_id&&(l.$device_id=n.$device_id),this.evaluationContexts&&this.evaluationContexts.length>0&&(l.evaluation_contexts=this.evaluationContexts);let u=this.getEvaluationRuntime();u&&(l.evaluation_runtime=u);let f={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json"},body:JSON.stringify(l)};return this._logger.info("Flags URL",c),this.fetchWithRetry(c,f,{type:"required",consume:p=>p.json()},{retryCount:this.featureFlagsRequestMaxRetries,retryCheck:OE},this.featureFlagsRequestTimeoutMs).then(p=>({success:!0,response:Fo(p)})).catch(p=>(this._events.emit("error",p),{success:!1,error:this.categorizeRequestError(p)}))}categorizeRequestError(e){if(e instanceof ge)return{type:"api_error",statusCode:e.status};if(e instanceof He){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=br(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(se.Props)),this._props||{}}set props(e){this._props=e}async register(e){this.wrap(()=>{this.props={...this.props,...e},this.setPersistedProperty(se.Props,this.props)})}async unregister(e){this.wrap(()=>{delete this.props[e],this.setPersistedProperty(se.Props,this.props)})}processBeforeEnqueue(e){return e}async flushStorage(){}getQueueRouteKey(e){return Uo}persistedQueueKeyForRoute(e){return se.Queue}getActiveQueueRoutes(){return[Uo]}getRouteQueue(e){return this.getPersistedProperty(this.persistedQueueKeyForRoute(e))||[]}enqueue(e,t,n,s){this.wrap(()=>{if(this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i===null)return;i=this.normalizeMessage(i);let o=this.persistedQueueKeyForRoute(s??this.getQueueRouteKey(i)),a=this.getPersistedProperty(o)||[];a.length>=this.maxQueueSize&&(a.shift(),this._logger.warn("Queue is full, the oldest event is dropped.")),a.push({message:i}),this.setPersistedProperty(o,a),this._events.emit(e,i),a.length>=this.flushAt&&this.flushBackground(),this.flushInterval&&!this._flushTimer&&(this._flushTimer=te(()=>this.flushBackground(),this.flushInterval))})}async sendImmediate(e,t,n,s){if(this.disabled)return void this._logger.warn("The client is disabled");if(this._isInitialized||await this._initPromise,this.optedOut)return void this._events.emit(e,"Library is disabled. Not sending event. To re-enable, call posthog.optIn()");let i=this.prepareMessage(t,n);if(i=this.processBeforeEnqueue(i),i!==null){i=this.normalizeMessage(i);try{await this.sendBatch([i],void 0,s??this.getQueueRouteKey(i))}catch(o){this._events.emit("error",o)}}}normalizeMessage(e){let{type:t,library:n,library_version:s,...i}=e,o=wd(i.properties)?i.properties:void 0;return n!==void 0&&o?.$lib===void 0&&(o={...o||{},$lib:n}),s!==void 0&&o?.$lib_version===void 0&&(o={...o||{},$lib_version:s}),o&&(i.properties=o),i.uuid=mt(i.uuid,ee),i}normalizeTimestampForWire(e){let t=e instanceof Date?e:typeof e=="string"?new Date(e):null;if(!t||Number.isNaN(t.getTime()))return e;let n=t.toISOString(),s=typeof e=="string"?e.match(/\.(\d+)(?:Z|[+-]\d{2}:?\d{2})?$/i)?.[1]:void 0;return s&&s.length>3?n.replace(/\.\d{3}Z$/,`.${s}Z`):n}prepareMessage(e,t){let n={...e,timestamp:t?.timestamp?t?.timestamp:wo(),uuid:mt(t?.uuid,ee)};return(t?.disableGeoip??this.disableGeoip)&&(wd(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 Sd(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(()=>gr([t])).then(()=>(this.pendingFlushPromise===s&&(this.pendingFlushPromise=null),this._flush()));return this.pendingFlushPromise=s,this.flushPromise=s,this.flushPromises.add(s),this.addPendingPromise(s),gr([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 Ar(e,this.isDebug)}getBatchEndpointPath(e){return"/batch/"}async sendBatch(e,t,n=Uo){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:wo()};this.historicalMigration&&(s.historical_migration=!0);let i=Je(s),o=`${this.host}${this.getBatchEndpointPath(n)}`,a=this.disableCompression?null:await this.compressPayload(i),c={method:"POST",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",...a!==null&&{"Content-Encoding":"gzip"}},body:a||i};await this.fetchWithRetry(o,c,{type:"successful-write"},t)}async _flush(){this.clearFlushTimer(),await this._initPromise;let e=this.getActiveQueueRoutes();if(!e.some(s=>this.getRouteQueue(s).length>0))return;let t=[],n;for(let s of e)try{await this._flushRoute(s,t)}catch(i){n===void 0&&(n=i)}if(n!==void 0)throw n;this._events.emit("flush",t)}async _flushRoute(e,t){let n=this.persistedQueueKeyForRoute(e),s=this.getPersistedProperty(n)||[];if(!s.length)return;let i=s.length,o=0;for(;s.length>0&&o<i;){let a=s.slice(0,this.maxBatchSize),c=a.map(f=>f.message===void 0?f.message:this.normalizeMessage(f.message)),l=async()=>{let f=this.getPersistedProperty(n)||[],p=[...a],g=f.filter(m=>{let h=m.message?.uuid,_=p.findIndex(E=>E===m||typeof h=="string"&&h.length>0&&E.message?.uuid===h);return _===-1?!0:(p.splice(_,1),!1)});this.setPersistedProperty(n,g),s=g,this._dequeuedMessagesCount+=a.length,await this.flushStorage()},u={retryCheck:f=>Bt(f)?!1:gs(f)};try{await this.sendBatch(c,u,e)}catch(f){if(Bt(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 He||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=bd(s);if(i>yd)return this.logMsgIfDebug(()=>console.warn(`[PostHog] Not sending a ${e} batch of ${i} bytes: the endpoint accepts at most ${yd}`)),{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=>Bt(u)||u instanceof ge&&u.retryAfterMs!==void 0?!1:gs(u)}),{kind:"ok"}}catch(u){if(Bt(u))return{kind:"too-large"};if(gs(u)){let f=u instanceof ge?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=bd(o),c={...this._retryOptions,...s},l=0;return await Xu(async()=>{l++;let u=new AbortController,f=i??this.requestTimeout,p=Date.now()+f,g,m=new Promise((w,A)=>{g=te(()=>{let T=Nt("AbortError",`Request timed out after ${f}ms`);A(T),u.abort(T)},f)}),h,_=!1,E,y=()=>E??=(async()=>{try{await h?.body?.cancel()}catch{}})();try{let w;try{w=this.fetch(e,{signal:u.signal,...t})}catch(P){throw new He(P)}w.then(P=>{u.signal.aborted&&!_&&Promise.resolve(P.body?.cancel()).catch(()=>{})}).catch(()=>{});try{h=await Promise.race([w,m]),_=!0}catch(P){throw new He(P)}let A=t.mode==="no-cors",T=n.type==="successful-write"?300:400;if(!A&&(h.status<200||h.status>=T))throw new ge(h,a,p,u);if(n.type==="successful-write"){try{await Promise.race([y(),m])}catch{}return}try{return await Promise.race([n.consume(h),m])}catch(P){throw u.signal.aborted?new He(P):P}}finally{clearTimeout(g),u.signal.aborted&&h&&y()}},{...c,retryCheck:u=>{let f=c.retryCheck(u);return f&&l<=c.retryCount&&u instanceof ge&&u.cancelResponseBody(),f}})}async _shutdown(e=3e4){await this._initPromise;let t=!1;return this.clearFlushTimer(),this.disabled?void 0:Qe((async()=>{try{for(await this.promiseQueue.join();this.getActiveQueueRoutes().some(o=>this.getRouteQueue(o).length>0);){let i=this._dequeuedMessagesCount;if(await this.flush(),t)break;if(this._dequeuedMessagesCount===i){this._logger.warn("Shutdown flush completed but did not send any queued events. Stopping drain to avoid a loop.");break}}}catch(s){if(!IE(s))throw s;await Sd(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 FE=/[a-z][a-z0-9+.-]{0,63}:[^\s<>"]+/gi;var aP=new RegExp(FE.source,"i"),Ad=/[a-z][a-z0-9+.-]{0,63}:\/\//i,cP=new RegExp(`^${Ad.source}`,"i"),lP=new RegExp(Ad.source,"gi");var NE=["is_not","is_set"],UE=1152921504606847e3,R=class r extends Error{constructor(e){super(e),this.name=this.constructor.name,Object.setPrototypeOf(this,r.prototype)}};function $o(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(!$o(e in r?r[e]:null))return!1;return!0}function Bo(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(!Bo(e in r?r[e]:null))return!1;return!0}function Rr(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 R("Cannot stringify an unpaired surrogate like the flags service");e++}else if(t>=56320&&t<=57343)throw new R("Cannot stringify an unpaired surrogate like the flags service")}}function hs(r,e=new Set){if(!(r===null||typeof r=="boolean")){if(typeof r=="string")return void Rr(r);if(typeof r=="number"){if(!Number.isFinite(r))throw new R(`Cannot represent non-finite number ${r} like the flags service`);return}if(Array.isArray(r)){if(e.has(r))throw new R("Cannot represent a circular array during local evaluation");e.add(r);try{for(let t=0;t<r.length;t++)t in r&&hs(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 R("Cannot represent a non-JSON object like the flags service");if(e.has(r))throw new R("Cannot represent a circular object during local evaluation");e.add(r);try{for(let n of Object.keys(r))Rr(n),hs(r[n],e)}finally{e.delete(r)}return}throw new R(`Cannot represent ${typeof r} like the flags service`)}}function $E(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 Wo(r,e=new Set){if(r===null)return"null";if(typeof r=="string")return Rr(r),JSON.stringify(r);if(typeof r=="boolean")return r?"true":"false";if(typeof r=="number"){if(!Number.isFinite(r))throw new R(`Cannot stringify non-finite number ${r} like the flags service`);if(Number.isInteger(r))throw new R(`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 R("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?Wo(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 R("Cannot stringify a non-JSON object like the flags service");if(e.has(r))throw new R("Cannot stringify a circular object during local evaluation");e.add(r);try{let n=Object.keys(r);return n.forEach(Rr),`{${n.sort($E).map(s=>`${JSON.stringify(s)}:${Wo(r[s],e)}`).join(",")}}`}finally{e.delete(r)}}throw new R(`Cannot stringify ${typeof r} like the flags service`)}function ms(r){return typeof r=="string"?(Rr(r),r):Wo(r)}function vd(r){try{return new RegExp(r),!0}catch{return!1}}function me(r){return String(r).replace(/[A-Z]/g,e=>e.toLowerCase())}function Md(r,e,t){if(!/^\d+$/.test(r)||t==="strict"&&r.length>1&&r[0]==="0")throw new R(`Invalid semver: ${e}`);return parseInt(r,10)}function W(r,e="strict"){let n=String(r).trim().replace(/^[vV]/,"").split("-")[0].split("+")[0];if(!n||n.startsWith("."))throw new R(`Invalid semver: ${r}`);let s=n.split("."),i=o=>o===void 0||o===""?0:Md(o,r,e);return[i(s[0]),i(s[1]),i(s[2])]}function he(r,e){for(let t=0;t<3;t++){if(r[t]<e[t])return-1;if(r[t]>e[t])return 1}return 0}function BE(r,e){let t=W(r,e);return{lower:[t[0],t[1],t[2]],upper:[t[0],t[1]+1,0]}}function WE(r,e){let[t,n,s]=W(r,e),i=[t,n,s],o;return o=t>0?[t+1,0,0]:n>0?[0,n+1,0]:[0,0,s+1],{lower:i,upper:o}}function HE(r,e){let n=String(r).trim().replace(/^[vV]/,"").replace(/\.\*$/,"").replace(/\*$/,"");if(!n)throw new R(`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 Md(c,r,e)}catch{}throw new R(`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 Rd(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 R(`${r} is in an invalid date format`)}throw new R(`The date provided ${r} must be a string, number, or date object`)}function Ho(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 jo(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 R(`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&&!NE.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(t.propertyMatchingVersion!==2&&$o(f)||Array.isArray(f)&&f.length===0)return hs(p),Bo(f)===Bo(p);if(t.propertyMatchingVersion===2&&typeof p=="number"&&$o(f))return hs(p),!1;if(Array.isArray(f)){let g=ms(p).toLowerCase();return f.some(m=>ms(m).toLowerCase()===g)}return ms(f).toLowerCase()===ms(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 me(c).includes(me(s));case"not_icontains":return!me(c).includes(me(s));case"starts_with":return me(c).startsWith(me(s));case"not_starts_with":return!me(c).startsWith(me(s));case"ends_with":return me(c).endsWith(me(s));case"not_ends_with":return!me(c).endsWith(me(s));case"regex":return vd(String(s))&&String(c).match(String(s))!==null;case"not_regex":return vd(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 R("Date operations cannot be performed on boolean values");let f=Ho(String(s));f==null&&(f=Rd(s));let p=Rd(c);return i==="is_date_before"?p<f:p>f}case"semver_eq":return he(W(String(c),o),W(String(s),o))===0;case"semver_neq":return he(W(String(c),o),W(String(s),o))!==0;case"semver_gt":return he(W(String(c),o),W(String(s),o))>0;case"semver_gte":return he(W(String(c),o),W(String(s),o))>=0;case"semver_lt":return he(W(String(c),o),W(String(s),o))<0;case"semver_lte":return he(W(String(c),o),W(String(s),o))<=0;case"semver_tilde":{let f=W(String(c),o),{lower:p,upper:g}=BE(String(s),o);return he(f,p)>=0&&he(f,g)<0}case"semver_caret":{let f=W(String(c),o),{lower:p,upper:g}=WE(String(s),o);return he(f,p)>=0&&he(f,g)<0}case"semver_wildcard":{let f=W(String(c),o),{lower:p,upper:g}=HE(String(s),o);return he(f,p)>=0&&he(f,g)<0}default:throw new R(`Unknown operator: ${i}`)}}async function Cd(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 Mr(r,e,t="",n="."){let s=await Cd(`${r}${n}${e}${t}`);return parseInt(s.slice(0,15),16)/UE}async function Ko(r,e){if(r==null||r.id==null||r.exclusion_percentage==null)return;let t=Number(r.exclusion_percentage);if(!Number.isFinite(t))return;let n=Math.min(Math.max(t,0),100);if(!(n!==100&&await Mr("holdout",e,"","-")>n/100))return`holdout-${r.id}`}function _s(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 Go(r,e,t){let n=await Mr(r,e,"variant");return _s(t).find(s=>n>=s.valueMin&&n<s.valueMax)?.key}function zo(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:$t(n)}var Pd=9223372036854776e3,jE="9223372036854775808",KE=Object.prototype.propertyIsEnumerable;function GE(){return{ancestors:new WeakSet,remainingNodes:1e4}}function Le(r,e){try{return Id(r,e,GE(),0)}catch{return[]}}function zE(r,e){let t=r.toString(),n=BigInt(jE);return r>=n||r<-n?(e?.debug(`Attribute ${t} is outside the int64 range; encoding it as a string`),{stringValue:t}):{intValue:t}}function qo(r,e,t,n){if(t.remainingNodes<=0)return{stringValue:cs};if(t.remainingNodes--,Ru(r))return{boolValue:r};if(typeof r=="bigint")return zE(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>=Pd||r<-Pd?(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:De(r)};if(typeof r=="function")return{stringValue:Yu};if(typeof r=="symbol")return{stringValue:String(r)};if(typeof r=="object"&&r!==null){if(t.ancestors.has(r))return{stringValue:as};if(n>=20)return{stringValue:cs};if(r instanceof Date){let s=r.getTime(),i=Number.isFinite(s)?r.toISOString():String(r);return{stringValue:typeof i=="string"?De(i):String(i)}}t.ancestors.add(r);try{try{let s=r.toJSON;if(typeof s=="function")return qo(s.call(r),e,t,n+1)}catch{}return ce(r)?{arrayValue:{values:VE(r,e,t,n+1)}}:{kvlistValue:{values:Id(r,e,t,n+1)}}}finally{t.ancestors.delete(r)}}return{stringValue:De(String(r))}}function VE(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(Ae(a))continue;s.push(qo(a,e,t,n))}catch{s.push({stringValue:pe})}return r.length>o&&s.push({stringValue:cs}),s}function Id(r,e,t,n){let s=[];for(let i in r)if(KE.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(po(o)||Be(o))continue;s.push({key:De(i),value:qo(o,e,t,n)})}catch{s.push({key:De(i),value:{stringValue:pe}})}}return s}function Pr(r,e,t){return{...We({},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 YE=["service.name","deployment.environment","service.version","telemetry.sdk.name","telemetry.sdk.version"];function Ir(r,e){let t=We({},r),n={};for(let s of YE)Object.prototype.hasOwnProperty.call(t,s)&&(n[s]=t[s],delete t[s]);return[...Le(t,e),...Le(n,e)]}var Od={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 qE(r){if(r)return Object.prototype.hasOwnProperty.call(Od,r)?Od[r]:r}function Jo(r,e){let t=qE(r);return{...t?{"os.name":t}:{},...e?{"os.version":e}:{}}}var JE={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}},vP=JE.info;var ht=class{constructor(e){this._onFire=e,this._firesAt=0}get pending(){return!!this._timer}arm(e){this.clear(),this._firesAt=Date.now()+e,this._timer=te(()=>{this._timer=void 0,this._onFire()},e)}armNoEarlierThan(e){this._timer&&Date.now()+e<=this._firesAt||this.arm(e)}clear(){this._timer&&(clearTimeout(this._timer),this._timer=void 0)}};function Or(){return 1-.25+Math.random()*.25*2}var _e=1;function kr(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 Dr=[0,5,10,25,50,75,100,250,500,750,1e3,2500,5e3,7500,1e4];function Xo(r){return String(r)+"000000"}function Qo(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 kd(r,e){for(let t=0;t<e.length;t++)if(r<=e[t])return t;return e.length}function Zo(r,e,t){return Pr(r,e,t)}function ea(r,e,t,n){return{resourceMetrics:[{resource:{attributes:Ir(e)},scopeMetrics:[{scope:{name:t,version:n},metrics:r}]}]}}function Ss(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 Dd=1,xr=class{constructor(e,t,n){this._instance=e,this._config=t,this._logger=n,this._series=new Map,this._flushTimer=new ht(()=>this.flush().catch(s=>{this._logger.error("Metrics flush failed:",s)})),this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._retryAfter=new gt,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._generation=0}count(e,t=1,n){this._capture({name:e,type:"count",value:t,unit:n?.unit,attributes:n?.attributes})}gauge(e,t,n){this._capture({name:e,type:"gauge",value:t,unit:n?.unit,attributes:n?.attributes})}histogram(e,t,n){this._capture({name:e,type:"histogram",value:t,unit:n?.unit,attributes:n?.attributes})}flush(){let e=this._flushPromise,n=(async()=>{e&&await e.catch(()=>{}),await this._doFlush()})().finally(()=>{this._flushPromise===n&&(this._flushPromise=null)});return this._flushPromise=n,n}drainWindow(){if(this._series.size===0)return null;let e=this._series;return this._series=new Map,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set,this._buildPayload(e)}reset(){this._generation++,this._retryAfter.reset(),this._consecutiveFlushFailures=0,this._flushJitter=_e,this._flushTimer.clear(),this._series=new Map,this._flushPromise=null,this._seriesCapWarned=!1,this._typeByName=new Map,this._typeCollisionWarned=new Set}_capture(e){if(this._instance.isDisabled||this._instance.optedOut)return;let t=this._runBeforeSend(e);if(t===null)return;if(!t.name||typeof t.name!="string")return void this._logger.warn("Dropping metric with empty name");if(typeof t.value!="number"||!Number.isFinite(t.value))return void this._logger.warn(`Dropping metric '${t.name}': value must be a finite number`);if(t.type==="count"&&t.value<0)return void this._logger.warn(`Dropping count '${t.name}': counters are monotonic, value must be >= 0`);let n,s;try{n=t.attributes?{...t.attributes}:void 0,s=Qo(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(Dr.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[kd(t,Dr)]+=1;break}}}_runBeforeSend(e){let t=this._config.beforeSend;if(!t)return e;let n=ce(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(kr(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=Or()):(this._consecutiveFlushFailures=0,this._flushJitter=_e),this._flushTimer.pending&&this._flushTimer.arm(this._nextFlushDelay()),n.kind){case"ok":return;case"retry-later":this._mergeWindowBack(e),this._flushTimer.armNoEarlierThan(this._nextFlushDelay());return;case"too-large":this._logger.warn("Metrics batch exceeded the server size limit and was dropped");return;case"fatal":this._logger.error("Failed to send metrics batch:",n.error);return}}_buildPayload(e){return ea(this._buildMetrics(e),Zo(this._config,this._instance.getLibraryId(),this._instance.getLibraryVersion()),this._instance.getLibraryId(),this._instance.getLibraryVersion())}_buildMetrics(e){let t=Xo(Date.now()),n=new Map;for(let s of e.values()){let i=Qo(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:Dd,isMonotonic:!0,dataPoints:[]}:s.type==="gauge"?o.gauge={dataPoints:[]}:o.histogram={aggregationTemporality:Dd,dataPoints:[]},n.set(i,o));let a=Le(s.attributes??{},this._logger),c=Xo(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:Dr};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 eS="0".repeat(32),tS="0".repeat(16),rS=/^[0-9a-f]+$/;function nS(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 sS(r){let e="";for(let t=0;t<r.length;t++)e+=r[t].toString(16).padStart(2,"0");return e}function xd(r){let e=sS(nS(r));return/[^0]/.test(e)?e:e.slice(0,-1)+"1"}function Ld(){return xd(16)}function Fd(){return xd(8)}function Nd(r,e,t){return typeof r=="string"&&r.length===e&&r!==t&&rS.test(r)}function Ud(r){return Nd(r,32,eS)}function $d(r){return Nd(r,16,tS)}var iS=/^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})(-.*)?$/;function Bd(r){let e=Wd(r);return e&&{traceId:e.traceId,spanId:e.spanId,flags:oS(e.flags)}}function oS(r){return 1&parseInt(r,16)?bs:aS}function Wd(r){if(typeof r!="string")return;let e=iS.exec(r.trim());if(!e)return;let[,t,n,s,i,o]=e;if(t!=="ff"&&!(t==="00"&&o)&&!(!Ud(n)||!$d(s)))return{version:t,traceId:n,spanId:s,flags:i}}function Hd(r){return Wd(r)&&r.trim()}function ys(r){return Array.isArray(r)&&r.length===1?r[0]:r}var bs="01",aS="00";function jd(r,e,t=bs){return`00-${r}-${e}-${t}`}var cS=32,ta=512;function ws(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>cS)){for(let n of t)if(n.trim()&&!n.includes("="))return;return e.length<=ta?e:uS(t)}}var lS=128;function uS(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()>ta;n--)e[n].length>lS&&e.splice(n,1);for(;e.length&&t()>ta;)e.pop();return e.length?e.join(","):void 0}var Kd="unknown";function _t(r,e,t,n){return typeof r=="string"&&r.trim()?r.length>t?r.slice(0,t):r:(n?.debug(`${e} must be a non-empty string; using "${Kd}"`),Kd)}function Wt(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 Gd(r,e,t){let n=Wt(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 Ts(r,e){return r<e?e:r}function Lr(r,e,t,n){let s=Wt(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 vs(){let r=globalThis.performance;return typeof r?.now=="function"?r.now():void 0}var Ht=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??bs,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:vs(),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=vs();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(Ae(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]=Ms(t,this._maxAttributeValueLength)}setAttribute(e,t){return this._mutable("setAttribute")&&this._writeAttribute(e,t),this}setAttributes(e){if(this._mutable("setAttributes")){let t=We({},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&&qd(t,this._maxAttributesPerEvent,this._maxAttributeValueLength);this._events.push({name:_t(e,"Span event name",this._maxAttributeValueLength,this._logger),timestamp:Lr(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:ra(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}=na(e);return this.addEvent(dS,{"exception.type":t,"exception.message":n,...s&&{"exception.stacktrace":s}}),this.setStatus("error",n)}updateName(e){return this._mutable("updateName")&&(this._name=_t(e,"Span name",this._maxAttributeValueLength,this._logger)),this}traceparent(){return jd(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=Lr(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:Ts(n,this._startTime),...this._droppedAttributes&&{droppedAttributesCount:this._droppedAttributes},...this._droppedEvents&&{droppedEventsCount:this._droppedEvents}},this._autoKeys)}},dS="exception",fS=4294967295;function pS(r){try{return typeof r=="string"?r:String(r)}catch{return pe}}function Et(r){return typeof r!="number"||!Number.isFinite(r)||r<=0?0:Math.min(Math.floor(r),fS)}function gS(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 Vd(r,e,t,n,s,i,o=[]){let a=0,c=0,l={};for(let g of gS(r.attributes,o)){let m=r.attributes[g];if(!Ae(m)){if(!e.has(g)){if(a>=t){c++;continue}a++}Object.defineProperty(l,g,{value:Ms(m,i),enumerable:!0,writable:!0,configurable:!0})}}r.attributes=l,c&&(r.droppedAttributesCount=Et(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 m=qd(g.attributes,s,i);g.attributes=m.attributes,m.dropped&&(g.droppedAttributesCount=Et(g.droppedAttributesCount)+m.dropped)}p.push(g)}r.events=p,f&&(r.droppedEventsCount=Et(r.droppedEventsCount)+f),r.status?.message&&(r.status={...r.status,message:ra(pS(r.status.message),i)})}var Rs=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(){}},Yd=new Rs,Fr=class extends Rs{constructor(e,t){super(),this._traceparent=e,this._tracestate=t}traceparent(){return this._traceparent}tracestate(){return this._tracestate??null}};function mS(r){try{let e=r.stack;return typeof e=="string"&&e?{stack:e}:{}}catch{return{}}}function Ze(r,e){let t=ys(r?.parent)??e,n=typeof t=="string"||t==null?t:zd(t,"traceparent"),s=Hd(n);if(!s)return Yd;let i=typeof t=="string"||t==null?r?.tracestate:zd(t,"tracestate");return new Fr(s,ws(i))}function zd(r,e){try{let t=r[e];return typeof t=="function"?t.call(r):void 0}catch{return}}function ra(r,e){return r.length>e?r.slice(0,e):r}function Ms(r,e){return As(r,e,{ancestors:new WeakSet,remainingNodes:1e4},0)}function As(r,e,t,n){if(r===null||typeof r!="object")return Ae(r)||t.remainingNodes<=0?r:(t.remainingNodes--,typeof r=="string"?ra(r,e):r);if(t.ancestors.has(r))return as;if(t.remainingNodes<=0||n>=20)return r;t.remainingNodes--,t.ancestors.add(r);try{if(r instanceof Date)return r;let s=hS(r);if(s.selfDescribed)return Ae(s.value)?String(s.value):As(s.value,e,t,n+1);if(ce(r)){let a=Math.min(r.length,1e3),c=[];for(let l=0;l<a;l++)try{c.push(As(r[l],e,t,n+1))}catch{c.push(pe)}return r.length>a&&(c.length=r.length),c}let i={},o=0;for(let a of Object.keys(r)){if(o>=1e3)break;let c;try{c=As(r[a],e,t,n+1)}catch{c=pe}a&&!Ae(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 hS(r){try{let e=r.toJSON;if(typeof e=="function")return{selfDescribed:!0,value:e.call(r)}}catch{}return{selfDescribed:!1}}function qd(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=Ms(r[a],t)}catch{c=pe}Ae(c)||(i++,Object.defineProperty(s,a,{value:c,enumerable:!0,writable:!0,configurable:!0}))}return{attributes:s,dropped:o}}function Jd(r,e){for(let t of Object.keys(r))r[t]=Ms(r[t],e);return r}function Nr(r,e,t){return e===Yd?t(e):r.with(e,()=>t(e))}function na(r){try{let e=mS(r);if(Xe(r))return{type:r.name||"Error",message:r.message||"",...e};if(typeof r=="string")return{type:"string",message:r};if(r&&typeof r=="object"){let t=r;if(typeof t.message=="string")return{type:typeof t.name=="string"?t.name:"Object",message:t.message,...e}}return{type:typeof r,message:String(r)}}catch{return{type:typeof r,message:""}}}var sa={internal:1,server:2,client:3,producer:4,consumer:5},_S={ok:1,error:2},ES=1,SS=256,yS=512;function bS(r){let e=parseInt(r.traceFlags,16);return(Number.isFinite(e)?255&e:ES)|SS|(r.parentIsRemote?yS:0)}function Cs(r){if(typeof r=="string")return De(r);try{return De(String(r))}catch{return pe}}function wS(r){return r&&Object.prototype.hasOwnProperty.call(sa,r)?sa[r]:sa.internal}function ia(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 TS(r,e){let t={name:Cs(r.name),timeUnixNano:ia(r.timestamp)};if(r.attributes){let s=Le(r.attributes,e);s.length&&(t.attributes=s)}let n=Et(r.droppedAttributesCount);return n&&(t.droppedAttributesCount=n),t}function Xd(r,e){let t={traceId:r.traceId,spanId:r.spanId,name:Cs(r.name),kind:wS(r.kind),startTimeUnixNano:ia(r.startTime),endTimeUnixNano:ia(r.endTime),flags:bS(r)};r.parentSpanId&&(t.parentSpanId=r.parentSpanId),r.traceState&&(t.traceState=Cs(r.traceState));let n=Le(r.attributes,e);n.length&&(t.attributes=n),r.events.length&&(t.events=r.events.map(o=>TS(o,e)));let s=Et(r.droppedAttributesCount);s&&(t.droppedAttributesCount=s);let i=Et(r.droppedEventsCount);return i&&(t.droppedEventsCount=i),r.status&&(t.status={code:_S[r.status.code],...r.status.message&&{message:Cs(r.status.message)}}),t}function Qd(r,e,t){return Pr(r,e,t)}function Zd(r,e,t,n,s){return{resourceSpans:[{resource:{attributes:Ir(e,s)},scopeSpans:[{scope:{name:t,version:n},spans:r}]}]}}var ef=8;function Ps(){return vs()??Date.now()}function oa(r){try{return r instanceof Ht}catch{return!1}}function tf(r,e){let t=Bd(r);if(t)return{traceId:t.traceId,parentSpanId:t.spanId,traceState:ws(e),traceFlags:t.flags,isRemote:!0}}function AS(r){try{return typeof r.traceparent=="function"}catch{return!1}}function vS(r){return!!r.attributes&&typeof r.attributes=="object"&&!Array.isArray(r.attributes)&&Array.isArray(r.events)&&r.name!==void 0&&r.kind!==void 0&&r.startTime!==void 0&&r.endTime!==void 0}function Is(r,e,t){r[e]!==t&&(r[e]=t)}function RS(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 Ur=class{constructor(e,t,n,s,i,o){this._instance=e,this._config=t,this._logger=n,this._getContext=s,this._contextManager=i,this._onSpanQueued=o,this._queue=[],this._flushTimer=new ht(()=>this._flushInBackground()),this._flushPromise=null,this._droppedSinceWarning=0,this._lastDropWarningAt=0,this._dropReasons=new Set,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter=new gt,this._headBatchFailures=0,this._headBatchSize=0,this._headBatchChargeableAt=0,this._generation=0,this._liveSpans=new Map,this._maxExportBatchSize=t.maxExportBatchSize}startSpan(e,t){if(this._instance.isDisabled||this._instance.optedOut)return Ze(t,this._contextManager.active());let n=ys(t?.parent);if(n&&typeof n!="string"&&!oa(n)){if(AS(n))return this._logger.debug("Span parent is not a span from this SDK; returning an inert span"),Ze(t,this._contextManager.active());this._logger.debug("Ignoring an unusable span parent")}let s=this._resolveParent(n,t);if(this._liveSpans.size>=this._config.maxLiveSpans&&this._evictAgedSpans(),this._liveSpans.size>=this._config.maxLiveSpans)return this._recordDrop(1,`the live-span limit (${this._config.maxLiveSpans}) was reached \u2014 spans are being started and never ended`),Ze(t,this._contextManager.active());let i=Date.now(),o=Gd(t?.startTime,i,this._logger),a=Fd();this._liveSpans.set(a,Ps());let c=this._autoContextAttributes();return new Ht({traceId:s?.traceId??Ld(),spanId:a,parentSpanId:s?.parentSpanId,traceState:s?.traceState,traceFlags:s?.traceFlags,parentIsRemote:s?.isRemote,name:_t(e,"Span name",this._config.maxAttributeValueLength,this._logger),kind:t?.kind??"internal",attributes:We({...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:Wt(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=Nr(this._contextManager,o,i);return Qu(a)?a.then(c=>(o.end(),c),c=>{throw this._recordCallbackError(o,c),o.end(),c}):(o.end(),a)}catch(a){throw this._recordCallbackError(o,a),o.end(),a}}getActiveSpan(){return this._contextManager.active()??null}get throttled(){return this._retryAfter.isOpen()}async flush(){for(;;)if(!this._queue.length||!await(this._flushPromise??this._startFlush()))return}_startFlush(){this._flushTimer.clear();let e=this._generation,t=Promise.resolve().then(()=>e===this._generation?this._flushInner():0).finally(()=>{this._flushPromise===t&&(this._flushPromise=null),this._armFlushTimerIfQueuedNoEarlierThan()});return this._flushPromise=t,t}reset(){this._flushTimer.clear(),this._queue.length&&this._logger.critical(`Discarding ${this._queue.length} span(s) that were still queued when tracing was shut down. Raise the shutdown timeout or flush earlier if they matter.`),this._queue=[],this._liveSpans.clear(),this._flushPromise=null,this._generation++,this._maxExportBatchSize=this._config.maxExportBatchSize,this._droppedSinceWarning=0,this._dropReasons.clear(),this._lastDropWarningAt=0,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._retryAfter.reset(),this._resetHeadBatchBudget()}_resetHeadBatchBudget(){this._headBatchFailures=0,this._headBatchChargeableAt=0}_resolveParent(e,t){if(typeof e=="string"){let s=tf(e,t?.tracestate);return s||this._logger.debug("Ignoring malformed traceparent; starting a new trace"),s}if(oa(e))return e.childContext();let n=this._contextManager.active();if(oa(n))return n.childContext();if(n instanceof Fr)return tf(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 Ht))return;let{type:n,message:s,stack:i}=na(t);e.addEvent("exception",{"exception.type":n,"exception.message":s,...i&&{"exception.stacktrace":i}}),e.statusIsExplicitlyOk||e.setStatus("error",s)}_evictAgedSpans(){let e=Ps()-this._config.maxSpanAgeMs,t=0;for(let[n,s]of this._liveSpans){if(s>e)break;this._liveSpans.delete(n),t++}t&&this._recordDrop(t,`they were still live after ${this._config.maxSpanAgeMs}ms`)}_onSpanEnd(e,t){if(!this._liveSpans.delete(e.spanId))return;if(this._instance.isDisabled||this._instance.optedOut)return void this._recordDrop(1,"the user has opted out");let n=this._runBeforeSpanSend(e,t);if(n){if(this._reportLimitDrops(n),this._queue.length>=this._config.maxQueueSize)return void this._recordDrop(1,`the queue is full (${this._config.maxQueueSize}) \u2014 raise the flush frequency or reduce span volume`);this._queue.push(n);try{this._onSpanQueued?.()}catch(s){this._logger.debug("Span queue notification failed",s)}!(this._queue.length>=this._maxExportBatchSize)||this._consecutiveFlushFailures||this._retryAfter.isOpen()?this._armFlushTimerIfQueued():this._flushInBackground()}}_reportLimitDrops(e){let t=e.droppedAttributesCount??0,n=e.droppedEventsCount??0,s=0;for(let i of e.events)s+=i.droppedAttributesCount??0;(t||n||s)&&this._logger.debug(`Span limits discarded data from "${e.name}": ${t} attributes, ${n} events, ${s} event attributes`)}_runBeforeSpanSend(e,t){if(!this._config.beforeSpanSend.length)return e;let n={traceId:e.traceId,spanId:e.spanId,parentSpanId:e.parentSpanId,traceState:e.traceState},s={startTime:e.startTime,endTime:e.endTime},i={attributes:e.droppedAttributesCount,events:e.droppedEventsCount},o=Object.keys(e.attributes),a={traceFlags:e.traceFlags,parentIsRemote:e.parentIsRemote},c=e.status&&{...e.status},l=e,u=e;try{for(let g of this._config.beforeSpanSend){let m=g(l);if(!m)return this._recordDrop(1,"beforeSpanSend dropped it"),null;l=this._keepSpanIdentity(m,n)}if(u={traceId:n.traceId,spanId:n.spanId,parentSpanId:n.parentSpanId,traceState:n.traceState,name:l.name,kind:l.kind,status:l.status,attributes:l.attributes,events:l.events,startTime:l.startTime,endTime:l.endTime,traceFlags:a.traceFlags,parentIsRemote:a.parentIsRemote,droppedAttributesCount:i.attributes,droppedEventsCount:i.events},!vS(u))return this._logger.debug("beforeSpanSend did not return a span record; dropping the span"),this._recordDrop(1,"beforeSpanSend returned an unusable record"),null;u.name=_t(u.name,"Span name",this._config.maxAttributeValueLength,this._logger),u.status&&u.status.code!=="ok"&&u.status.code!=="error"&&(this._logger.debug("beforeSpanSend set an unknown span status; keeping the original"),u.status=c),u.startTime=Wt(u.startTime)??s.startTime,u.endTime=Ts(Wt(u.endTime)??s.endTime,u.startTime);let p=[];for(let g of u.events)try{p.push({...g,name:_t(g.name,"Span event name",this._config.maxAttributeValueLength,this._logger),timestamp:Lr(g.timestamp,u.startTime,"event timestamp",this._logger)})}catch{this._logger.debug("beforeSpanSend left an unreadable span event; dropping it")}return u.events=p,Vd(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{Is(e,"traceId",t.traceId),Is(e,"spanId",t.spanId),Is(e,"parentSpanId",t.parentSpanId),Is(e,"traceState",t.traceState)}catch{return RS(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(Xd(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=Jd(Qd(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 m=Ps()>=this._headBatchChargeableAt&&!this._retryAfter.isOpen(),h=await this._instance._sendTracesBatch(Zd(g,t,n,s,this._logger));if(c!==this._generation)break;if(this._retryAfter.record(h),h.kind==="ok"){this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._queue.splice(0,f),i-=f,o+=f,this._maxExportBatchSize<this._config.maxExportBatchSize&&this._maxExportBatchSize++;continue}if(h.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=_e,this._resetHeadBatchBudget();continue}let _=Math.max(1,Math.floor(f/2));h.measuredLocally?a=_:this._maxExportBatchSize=_,this._resetHeadBatchBudget(),this._logger.debug(`Batch too large; retrying the same spans in batches of ${_}`);continue}if(h.kind==="retry-later"){if(this._consecutiveFlushFailures++,this._flushJitter=Or(),this._headBatchSize=f,m&&(this._headBatchFailures++,this._headBatchChargeableAt=Ps()+this._nextFlushDelay()),this._headBatchFailures<ef)return this._logger.debug("Span export failed; retrying on the next flush",h.error),o;if(this._queue.splice(0,f),i-=f,o+=f,this._consecutiveFlushFailures=0,this._flushJitter=_e,this._resetHeadBatchBudget(),this._recordDrop(f,`the ingestion endpoint failed ${ef} times in a row`),this._retryAfter.isOpen())return o;continue}this._logger.debug("Dropping a span batch the ingestion endpoint rejected",h.error),this._queue.splice(0,f),i-=f,o+=f,this._consecutiveFlushFailures=0,this._flushJitter=_e,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(kr(this._config.flushIntervalMs,this._consecutiveFlushFailures,this._flushJitter,3e4),this._retryAfter.remainingMs())}};var $r=class{active(){return this._active}with(e,t){let n=this._active;this._active=e;try{return t()}finally{this._active=n}}};var MS=5e3,CS=512,PS=2048,IS=128,OS=128,kS=128,DS=8192,xS=1e4,LS=36e5;function et(r,e){return typeof r=="number"&&Number.isInteger(r)&&r>=1?r:e}var rf=["service.name","service.version","deployment.environment"];function FS(r){if(!(!r||typeof r!="object"||Array.isArray(r)))try{if(rf.every(t=>!(t in r)||typeof r[t]=="string"))return r;let e={...r};for(let t of rf)t in e&&typeof e[t]!="string"&&delete e[t];return e}catch{return}}function NS(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 aa(r,e,t){let n=We({...e},FS(r?.resourceAttributes)),s=et(r?.maxExportBatchSize,CS);return{serviceName:n?.["service.name"]??r?.serviceName,serviceVersion:n?.["service.version"]??r?.serviceVersion,environment:n?.["deployment.environment"]??r?.environment,resourceAttributes:n,beforeSpanSend:NS(r?.beforeSpanSend,t),maxAttributesPerSpan:et(r?.maxAttributesPerSpan,IS),maxEventsPerSpan:et(r?.maxEventsPerSpan,OS),maxAttributesPerEvent:kS,maxAttributeValueLength:et(r?.maxAttributeValueLength,DS),flushIntervalMs:et(r?.flushIntervalMs,MS),maxExportBatchSize:s,maxQueueSize:Math.max(et(r?.maxQueueSize,PS),s),maxLiveSpans:et(r?.maxLiveSpans,xS),maxSpanAgeMs:et(r?.maxSpanAgeMs,LS)}}var ca=require("node:fs"),of=require("node:fs/promises"),ua=require("node:path"),af=require("node:readline"),Os=new G.ReduceableCache(25),Br=new G.ReduceableCache(20),da=7,US=1e3,$S=1e4,la=10485760;async function cf(r,e=of.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"||KS(l)||GS(c)||!(0,ua.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=lf(a,s);if(c===void 0||Br.get(c))continue;let l=n[a];if(!l)continue;l.sort((p,g)=>p-g);let u=VS(l);if(u.every(p=>zS(c,p)))continue;let f=YS(Os,c,{});o.push(WS(a,u,f,c,e,t))}return await Promise.all(o).catch(()=>{}),r&&r.length>0&&HS(r,Os,s),Os.reduce(),r}async function BS(r,e,t){let n,s=!1;try{n=await e(r,ca.constants.O_RDONLY|ca.constants.O_NONBLOCK);let i=await n.stat();return i.isFile()?i.size>la?void t?.debug(`Skipping source context for oversized file ${r}: ${i.size} bytes exceeds ${la}`):(s=!0,n):void 0}catch{return}finally{n&&!s&&await n.close().catch(()=>{})}}async function WS(r,e,t,n,s,i){let o=await BS(r,s,i);if(o===void 0)return void Br.set(n,1);let a=o;return new Promise(c=>{let l=!1;function u(w){l||(l=!0,w?.destroy(),a.close().then(c,c))}let f;try{f=a.createReadStream({autoClose:!1,start:0,end:la-1})}catch{Br.set(n,1),u();return}let p;try{p=(0,af.createInterface)({input:f})}catch{Br.set(n,1),u(f);return}let g=0,m=0,h=e[m];if(h===void 0)return void u(f);let _=h[0],E=h[1];function y(){Br.set(n,1),p.close(),p.removeAllListeners(),u(f)}f.on("error",y),p.on("error",y),p.on("close",()=>u(f)),p.on("line",w=>{if(g++,!(g<_)&&(t[g]=qS(w,0),g>=E)){if(m===e.length-1){p.close(),p.removeAllListeners();return}m++;let A=e[m];if(A===void 0){p.close(),p.removeAllListeners();return}_=A[0],E=A[1]}})})}function HS(r,e,t){for(let n of r)if(n.filename&&n.context_line===void 0&&typeof n.lineno=="number"){let s=lf(n.filename,t),i=s===void 0?void 0:e.get(s);if(i===void 0)continue;jS(n.lineno,n,i)}}function jS(r,e,t){if(e.lineno===void 0||t===void 0)return;e.pre_context=[];for(let s=uf(r);s<r;s++){let i=t[s];if(i===void 0)return void nf(e);e.pre_context.push(i)}if(t[r]===void 0)return void nf(e);e.context_line=t[r];let n=df(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 nf(r){delete r.pre_context,delete r.context_line,delete r.post_context}function KS(r){return r.startsWith("node:")||r.endsWith(".min.js")||r.endsWith(".min.cjs")||r.endsWith(".min.mjs")||r.startsWith("data:")}function GS(r){return r.lineno!==void 0&&r.lineno>$S||r.colno!==void 0&&r.colno>US}function lf(r,e){return(0,ua.isAbsolute)(r)?JSON.stringify([null,r]):e===void 0?void 0:JSON.stringify([e,r])}function zS(r,e){let t=Os.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 VS(r){if(!r.length)return[];let e=0,t=r[0];if(typeof t!="number")return[];let n=sf(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+da:(s.push(n),n=sf(i)),e++}return s}function sf(r){return[uf(r),df(r)]}function uf(r){return Math.max(1,r-da)}function df(r){return r+da}function YS(r,e,t){let n=r.get(e);return n===void 0?(r.set(e,t),t):n}function qS(r,e){let t=r,n=t.length;if(n<=150)return t;e>n&&(e=n);let s=Math.max(e-60,0);s<5&&(s=0);let i=Math.min(s+140,n);return i>n-5&&(i=n),i===n&&(s=Math.max(i-140,0)),t=t.slice(s,i),s>0&&(t=`...${t}`),i<n&&(t+="..."),t}var jt=require("path");function ff(r=process.cwd()){let e=jt.sep==="\\",t=s=>e?s.replace(/\\/g,"/"):s,n=t(r);return async s=>{for(let i of s)!i.filename||i.filename.startsWith("node:")||i.filename.startsWith("data:")||(0,jt.isAbsolute)(i.filename)&&(i.filename=t((0,jt.relative)(n,t(i.filename))));return s}}var pf="5.55.2";var je={ERRORS_WHILE_COMPUTING:"errors_while_computing_flags",FLAG_MISSING:"flag_missing",QUOTA_LIMITED:"quota_limited",UNKNOWN_ERROR:"unknown_error"};var tt=class r{constructor(e){this._host=e.host,this._distinctId=e.distinctId,this._groups=e.groups,this._disableGeoip=e.disableGeoip,this._flags=e.flags,this._requestId=e.requestId,this._evaluatedAt=e.evaluatedAt,this._flagDefinitionsLoadedAt=e.flagDefinitionsLoadedAt,this._errorsWhileComputing=e.errorsWhileComputing??!1,this._quotaLimited=e.quotaLimited??!1,this._accessed=e.accessed??new Set,this._isSlice=e.isSlice??!1}isEnabled(e,t={}){let n=this._flags[e];return this._recordAccess(e),n?.enabled??t.defaultValue??!1}getFlag(e){let t=this._flags[e];if(this._recordAccess(e),!!t)return t.enabled?t.variant??!0:!1}getFlagPayload(e){return this._flags[e]?.payload}onlyAccessed(){let e={};for(let t of this._accessed){let n=this._flags[t];n&&(e[t]=n)}return this._cloneWith(e)}only(e){let t={},n=[];for(let s of e){let i=this._flags[s];i?t[s]=i:n.push(s)}return n.length>0&&this._host.logWarning(`FeatureFlagEvaluations.only() was called with flag keys that are not in the evaluation set and will be dropped: ${n.join(", ")}`),this._cloneWith(t)}get keys(){return Object.keys(this._flags)}_getEventProperties(){let e={},t=[];for(let[n,s]of Object.entries(this._flags)){let i=s.enabled===!1?!1:s.variant??!0;e[`$feature/${n}`]=i,s.enabled&&t.push(n)}return t.length>0&&(t.sort(),e.$active_feature_flags=t),e}_cloneWith(e){return new r({host:this._host,distinctId:this._distinctId,groups:this._groups,disableGeoip:this._disableGeoip,flags:e,requestId:this._requestId,evaluatedAt:this._evaluatedAt,flagDefinitionsLoadedAt:this._flagDefinitionsLoadedAt,errorsWhileComputing:this._errorsWhileComputing,quotaLimited:this._quotaLimited,accessed:new Set(this._accessed),isSlice:!0})}_recordAccess(e){if(this._accessed.add(e),this._distinctId===""||this._isSlice&&!(e in this._flags))return;let t=this._flags[e],n=t===void 0?void 0:t.enabled===!1?!1:t.variant??!0,s={$feature_flag:e,$feature_flag_response:n,$feature_flag_id:t?.id,$feature_flag_version:t?.version,$feature_flag_reason:t?.reason,locally_evaluated:t?.locallyEvaluated??!1,[`$feature/${e}`]:n,$feature_flag_request_id:this._requestId,$feature_flag_evaluated_at:t?.locallyEvaluated?Date.now():this._evaluatedAt};t?.hasExperiment!==void 0&&(s.$feature_flag_has_experiment=t.hasExperiment),t?.locallyEvaluated&&this._flagDefinitionsLoadedAt!==void 0&&(s.$feature_flag_definitions_loaded_at=this._flagDefinitionsLoadedAt);let i=[];this._errorsWhileComputing&&i.push(je.ERRORS_WHILE_COMPUTING),this._quotaLimited&&i.push(je.QUOTA_LIMITED),t===void 0&&i.push(je.FLAG_MISSING),i.length>0&&(s.$feature_flag_error=i.join(",")),this._host.captureFlagCalledEventIfNeeded({distinctId:this._distinctId,key:e,response:n,groups:this._groups,disableGeoip:this._disableGeoip,properties:s})}};var JS=6e4;function gf(r){return r==="client"||r==="server"?r:"all"}function XS(r,e){return r===e||r==="all"||e==="all"}var Kt=class r extends Error{constructor(e){super(),Error.captureStackTrace(this,this.constructor),this.name="ClientError",this.message=e,Object.setPrototypeOf(this,r.prototype)}};function QS(r,e){r.name=e.name,Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype)}var Fe=class r extends Error{constructor(e){super(e),QS(this,r)}},ks=class{constructor({pollingInterval:e,personalApiKey:t,projectApiKey:n,timeout:s,host:i,customHeaders:o,...a}){this.debugMode=!1,this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.pollerStopped=!1,this.filteredOutFlagKeys=new Set,this.pollingInterval=e,this.personalApiKey=t,this.featureFlags=[],this.featureFlagsByKey={},this.groupTypeMapping={},this.cohorts={},this.loadedSuccessfullyOnce=!1,this.timeout=s,this.projectApiKey=n,this.host=i,this.poller=void 0,this.fetch=a.fetch||fetch,this.onError=a.onError,this.customHeaders=o,this.onLoad=a.onLoad,this.onMinimalFlagCalledEvents=a.onMinimalFlagCalledEvents,this.cacheProvider=a.cacheProvider,this.strictLocalEvaluation=a.strictLocalEvaluation??!1,this.evaluationContexts=a.evaluationContexts,this.loadFeatureFlags()}debug(e=!0){this.debugMode=e}logMsgIfDebug(e){this.debugMode&&e()}withEvaluationSnapshot(e){return e.definitions?e:{...e,evaluationCache:{},definitions:{featureFlagsByKey:this.featureFlagsByKey,groupTypeMapping:this.groupTypeMapping,cohorts:this.cohorts,filteredOutFlagKeys:this.filteredOutFlagKeys,propertyMatchingVersion:this.propertyMatchingVersion}}}createEvaluationContext(e,t={},n={},s={},i={}){return{distinctId:e,groups:t,personProperties:n,groupProperties:s,evaluationCache:i}}async getFeatureFlag(e,t,n={},s={},i={}){await this.loadFeatureFlags();let o,a;if(!this.loadedSuccessfullyOnce)return o;if(a=this.featureFlagsByKey[e],a!==void 0){let c=this.createEvaluationContext(t,n,s,i);try{o=(await this.computeFlagAndPayloadLocally(a,c)).value,this.logMsgIfDebug(()=>console.debug(`Successfully computed flag locally: ${e} -> ${o}`))}catch(l){l instanceof Fe||l instanceof R?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${e}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${e}: ${l}`))}}return o}async getAllFlagsAndPayloads(e,t){await this.loadFeatureFlags();let n={},s={},i=this.featureFlags.length==0,o=t?t.map(c=>this.featureFlagsByKey[c]).filter(Boolean):this.featureFlags,a=this.withEvaluationSnapshot({...e,definitions:void 0});return await Promise.all(o.map(async c=>{try{let{value:l,payload:u}=await this.computeFlagAndPayloadLocally(c,a,{skipLoadCheck:!0});n[c.key]=l,u&&(s[c.key]=u)}catch(l){l instanceof Fe||l instanceof R?this.logMsgIfDebug(()=>console.debug(`${l.name} when computing flag locally: ${c.key}: ${l.message}`)):l instanceof Error&&this.onError?.(new Error(`Error computing flag locally: ${c.key}: ${l}`)),i=!0}})),{response:n,payloads:s,fallbackToFlags:i}}async computeFlagAndPayloadLocally(e,t,n={}){let{matchValue:s,skipLoadCheck:i=!1}=n;if(this.loadedSuccessfullyOnce&&(t=this.withEvaluationSnapshot(t)),i||await this.loadFeatureFlags(),!this.loadedSuccessfullyOnce)return{value:!1,payload:null};t=this.withEvaluationSnapshot(t),e=t.definitions.featureFlagsByKey[e.key]??e;let o;o=s!==void 0?s:await this.computeFlagValueLocally(e,t);let a=zo(e.filters?.payloads,o);return{value:o,payload:a}}async computeFlagValueLocally(e,t){let{distinctId:n,groups:s,personProperties:i,groupProperties:o}=t;if(!e.active)return!1;if(e.ensure_experience_continuity)throw new R("Flag has experience continuity enabled");let c=(e.filters||{}).aggregation_group_type_index;if(c!=null){let l=t.definitions.groupTypeMapping[String(c)];if(!l)throw this.logMsgIfDebug(()=>console.warn(`[FEATURE FLAGS] Unknown group type index ${c} for feature flag ${e.key}`)),new R("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 R(`Can't compute feature flag: ${e.key} without $device_id`);return await this.matchFeatureFlagProperties(e,l,i,t)}}getBucketingValueForFlag(e,t,n){if(e.filters?.aggregation_group_type_index!=null)return t;if(e.bucketing_identifier==="device_id"){let s=n?.$device_id;return s==null||s===""?void 0:s}return t}async evaluateFlagDependency(e,t,n){let{evaluationCache:s}=n,i=e.key;if(!n.definitions.featureFlagsByKey)throw new R("Feature flags not available for dependency evaluation");if(!("dependency_chain"in e))throw new R(`Flag dependency property for '${i}' is missing required 'dependency_chain' field`);let o=e.dependency_chain;if(!Array.isArray(o))throw new R(`Flag dependency property for '${i}' has an invalid 'dependency_chain' (expected array, got ${typeof o})`);if(o.length===0)throw new R(`Circular dependency detected for flag '${i}' (empty dependency chain)`);for(let c of o){if(!(c in s)){let u=n.definitions.featureFlagsByKey[c];if(u)if(u.active)try{let f=await this.computeFlagValueLocally(u,n);s[c]=f}catch(f){throw new R(`Error evaluating flag dependency '${c}' for flag '${i}': ${f}`)}else s[c]=!1;else if(n.definitions.filteredOutFlagKeys.has(c))s[c]=!1;else throw new R(`Missing flag dependency '${c}' for flag '${i}'`)}if(s[c]==null)throw new R(`Dependency '${c}' could not be evaluated`)}let a=s[i];return this.flagEvaluatesToExpectedValue(e.value,a)}flagEvaluatesToExpectedValue(e,t){return typeof e=="boolean"?e===t||typeof t=="string"&&t!==""&&e===!0:typeof e=="string"?t===e:!1}async matchFeatureFlagProperties(e,t,n,s){s=this.withEvaluationSnapshot(s);let i=e.filters||{},o=await Ko(i.holdout,t);if(o!==void 0)return o;let a=i.groups||[],c=i.aggregation_group_type_index,l=i.early_exit??!1,{groups:u,groupProperties:f}=s,p=!1,g;for(let m of a)try{let h=m.aggregation_group_type_index!==void 0?m.aggregation_group_type_index:c,_=n,E=t;if(h!==c&&h!=null){let w=s.definitions.groupTypeMapping[String(h)];if(!w||!(w in u)){this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Skipping group condition for flag '${e.key}': group type index ${h} not available`));continue}if(!(w in f)){p=!0;continue}_=f[w],E=u[w]}let y=await this.isConditionMatch(e,E,m,_,s);if(y==="match"){let w=m.variant,A=i.multivariate?.variants||[];g=w&&A.some(T=>T.key===w)?w:await this.getMatchingVariant(e,E)||!0;break}if(l&&y==="out_of_rollout_bound"){if(p)break;return!1}}catch(h){if(h instanceof Fe)throw h;if(h instanceof R)p=!0;else throw h}if(g!==void 0)return g;if(p)throw new R("Can't determine if feature flag is enabled or not with given properties");return!1}async isConditionMatch(e,t,n,s,i){i=this.withEvaluationSnapshot(i);let o=i.definitions,a=n.rollout_percentage,c=l=>{this.logMsgIfDebug(()=>console.warn(l))};if((n.properties||[]).length>0){for(let l of n.properties){let u=l.type,f=!1;if(u==="cohort"){let p=await hf(l,s,o.cohorts,this.debugMode,g=>this.evaluateFlagDependency(g,s,i),o.propertyMatchingVersion);f=l.operator==="not_in"?!p:p}else f=u==="flag"?await this.evaluateFlagDependency(l,s,i):mf(l,s,c,o.propertyMatchingVersion);if(!f)return"no_match"}if(a==null)return"match"}return a!=null&&await Mr(e.key,t)>a/100?"out_of_rollout_bound":"match"}async getMatchingVariant(e,t){return Go(e.key,t,e.filters?.multivariate?.variants||[])}variantLookupTable(e){return _s(e.filters?.multivariate?.variants||[])}filterFlagsByEvaluationContexts(e){if(!this.evaluationContexts||this.evaluationContexts.length===0)return e;let t=new Set(this.evaluationContexts);return e.filter(n=>{let s=n.evaluation_contexts??n.evaluation_tags;return!s||s.length===0?!0:s.some(i=>t.has(i))})}getEvaluationRuntimeForFlag(e){let t=this.featureFlagsByKey[e];return t?gf(t.evaluation_runtime):void 0}getFlagKeysByEvaluationRuntime(e){return this.featureFlags.filter(t=>XS(gf(t.evaluation_runtime),e)).map(t=>t.key)}updateFlagState(e){let t=this.filterFlagsByEvaluationContexts(e.flags);this.featureFlags=t,this.featureFlagsByKey=t.reduce((s,i)=>(s[i.key]=i,s),{});let n=new Set(t.map(s=>s.key));this.filteredOutFlagKeys=new Set(e.flags.filter(s=>!n.has(s.key)).map(s=>s.key)),this.groupTypeMapping=e.group_type_mapping??e.groupTypeMapping??{},this.cohorts=e.cohorts,this.propertyMatchingVersion=e.property_matching_version??e.propertyMatchingVersion,this.loadedSuccessfullyOnce=!0,this.onMinimalFlagCalledEvents?.((e.minimal_flag_called_events??e.minimalFlagCalledEvents)===!0)}warnAboutExperienceContinuityFlags(e){if(this.strictLocalEvaluation)return;let t=e.filter(n=>n.ensure_experience_continuity);t.length>0&&console.warn(`[PostHog] You are using local evaluation but ${t.length} flag(s) have experience continuity enabled: ${t.map(n=>n.key).join(", ")}. Experience continuity is incompatible with local evaluation and will cause a server request on every flag evaluation, negating local evaluation cost savings. To avoid server requests and unexpected costs, either disable experience continuity on these flags in PostHog, use strictLocalEvaluation: true in client init, or pass onlyEvaluateLocally: true per flag call (flags that cannot be evaluated locally will return undefined).`)}async loadFromCache(e){if(!this.cacheProvider)return!1;try{let t=await this.cacheProvider.getFlagDefinitions();return t?(this.updateFlagState(t),this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] ${e} (${t.flags.length} flags)`)),this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags),!0):!1}catch(t){return this.onError?.(new Error(`Failed to load from cache: ${t}`)),!1}}async loadFeatureFlags(e=!1){if(!(this.loadedSuccessfullyOnce&&!e))return!e&&this.nextFetchAllowedAt&&Date.now()<this.nextFetchAllowedAt?void this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Skipping fetch, in backoff period")):(this.loadingPromise||(this.loadingPromise=this._loadFeatureFlags().catch(t=>this.logMsgIfDebug(()=>console.debug(`[FEATURE FLAGS] Failed to load feature flags: ${t}`))).finally(()=>{this.loadingPromise=void 0})),this.loadingPromise)}isLocalEvaluationReady(){return(this.loadedSuccessfullyOnce??!1)&&(this.featureFlags?.length??0)>0}getFlagDefinitionsLoadedAt(){return this.flagDefinitionsLoadedAt}getPollingInterval(){let e=this.pollingInterval??3e4;return this.shouldBeginExponentialBackoff?Math.min(JS,e*2**this.backOffCount):e}beginBackoff(){this.shouldBeginExponentialBackoff=!0,this.backOffCount+=1,this.nextFetchAllowedAt=Date.now()+this.getPollingInterval()}clearBackoff(){this.shouldBeginExponentialBackoff=!1,this.backOffCount=0,this.nextFetchAllowedAt=void 0}async _loadFeatureFlags(){this.poller&&(clearTimeout(this.poller),this.poller=void 0);try{let e=!0;if(this.cacheProvider)try{e=await this.cacheProvider.shouldFetchFlagDefinitions()}catch(n){this.onError?.(new Error(`Error in shouldFetchFlagDefinitions: ${n}`))}if(!e&&(await this.loadFromCache("Loaded flags from cache (skipped fetch)")||this.loadedSuccessfullyOnce))return;let t=await this._requestFeatureFlagDefinitions();if(!t)return;switch(t.status){case 304:this.logMsgIfDebug(()=>console.debug("[FEATURE FLAGS] Flags not modified (304), using cached data")),this.flagsEtag=t.headers?.get("ETag")??this.flagsEtag,this.loadedSuccessfullyOnce=!0,this.clearBackoff();return;case 401:throw this.beginBackoff(),new Kt(`Your project key or secret key is invalid. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 402:console.warn("[FEATURE FLAGS] Feature flags quota limit exceeded - unsetting all local flags. Learn more about billing limits at https://posthog.com/docs/billing/limits-alerts"),this.featureFlags=[],this.featureFlagsByKey={},this.filteredOutFlagKeys=new Set,this.groupTypeMapping={},this.cohorts={},this.propertyMatchingVersion=void 0,this.onMinimalFlagCalledEvents?.(!1);return;case 403:throw this.beginBackoff(),new Kt(`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 Kt(`You are being rate limited. Setting next polling interval to ${this.getPollingInterval()}ms. More information: https://posthog.com/docs/api#rate-limiting`);case 200:{let n=await t.json()??{};if(!("flags"in n))return void this.onError?.(new Error(`Invalid response when getting feature flags: ${JSON.stringify(n)}`));this.flagsEtag=t.headers?.get("ETag")??void 0;let s=n.group_type_mapping||{},i=n.minimal_flag_called_events===!0,o={flags:n.flags??[],group_type_mapping:s,cohorts:n.cohorts||{},minimal_flag_called_events:i,property_matching_version:n.property_matching_version,propertyMatchingVersion:n.property_matching_version,groupTypeMapping:s,minimalFlagCalledEvents:i};if(this.updateFlagState(o),this.flagDefinitionsLoadedAt=Date.now(),this.clearBackoff(),this.cacheProvider&&e)try{await this.cacheProvider.onFlagDefinitionsReceived(o)}catch(a){this.onError?.(new Error(`Failed to store in cache: ${a}`))}this.onLoad?.(this.featureFlags.length),this.warnAboutExperienceContinuityFlags(this.featureFlags);break}default:return}}catch(e){e instanceof Kt&&this.onError?.(e)}finally{!this.pollerStopped&&this.pollingInterval!==null&&(this.poller=setTimeout(()=>this.loadFeatureFlags(!0),this.getPollingInterval()))}}getPersonalApiKeyRequestOptions(e="GET",t){let n={...this.customHeaders,"Content-Type":"application/json",Authorization:`Bearer ${this.personalApiKey}`};return t&&(n["If-None-Match"]=t),{method:e,headers:n}}async _requestFeatureFlagDefinitions(){let e=`${this.host}/flags/definitions?token=${this.projectApiKey}&send_cohorts`,t=this.getPersonalApiKeyRequestOptions("GET",this.flagsEtag),n=null;if(this.timeout&&typeof this.timeout=="number"){let i=new AbortController;n=te(()=>{i.abort()},this.timeout),t.signal=i.signal}let s=()=>clearTimeout(n);try{let i=this.fetch,o=await i(e,t);return o.status!==200?(s(),o):{status:o.status,headers:o.headers,body:o.body,text:async()=>{try{return await o.text()}finally{s()}},json:async()=>{try{return await o.json()}finally{s()}}}}catch(i){throw s(),i}}async stopPoller(e=3e4){if(this.pollerStopped=!0,clearTimeout(this.poller),this.poller=void 0,this.cacheProvider)try{let t=this.cacheProvider.shutdown();t instanceof Promise&&await Qe(t,e,()=>{throw new Error(`Cache shutdown timeout after ${e}ms`)})}catch(t){this.onError?.(new Error(`Error during cache shutdown: ${t}`))}}};function mf(r,e,t,n){return jo(r,e,{warnFunction:t,propertyMatchingVersion:n})}function ZS(r,e){if(!(r in e))throw new Fe(`cohort ${r} not found in local cohorts - likely a static cohort that requires server evaluation`)}async function hf(r,e,t,n=!1,s,i){let o=String(r.value);ZS(o,t);let a=t[o];return _f(a,e,t,n,s,i)}async function _f(r,e,t,n=!1,s,i){if(!r)return!0;let o=r.type,a=r.values;if(!a||a.length===0)return!0;let c=!1;if("values"in a[0]){for(let l of a)try{let u=await _f(l,e,t,n,s,i);if(o==="AND"){if(!u)return!1}else if(u)return!0}catch(u){if(u instanceof Fe)throw u;if(u instanceof R)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new R("Can't match cohort without a given cohort property value");return o==="AND"}for(let l of a)try{let u;if(l.type==="cohort")u=await hf(l,e,t,n,s,i);else if(l.type==="flag"){if(!s)throw new R(`Flag dependency '${l.key||"unknown"}' cannot be evaluated without a flag dependency evaluator`);u=await s(l)}else u=mf(l,e,void 0,i);let f=l.negation||!1;if(o==="AND"){if(!u&&!f||u&&f)return!1}else if(u&&!f||!u&&f)return!0}catch(u){if(u instanceof Fe)throw u;if(u instanceof R)n&&console.debug(`Failed to compute property ${l} locally: ${u}`),c=!0;else throw u}if(c)throw new R("can't match cohort without a given cohort property value");return o==="AND"}var ey=["--unhandled-rejections","--unhandled_rejections"],ty=new Set(["throw","strict","warn","warn-with-error-code","none"]),ry=[...globalThis.process?.execArgv??[]],ny=globalThis.process?.env?.NODE_OPTIONS;function sy(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 Ef(r){let e;for(let t=0;t<r.length;t++){let n=r[t],s=ey.find(o=>n===o||n.startsWith(`${o}=`));if(!s)continue;let i=n===s?r[++t]:n.slice(s.length+1);ty.has(i)&&(e=i)}return e}function iy(r=ry,e=ny){return Ef(r)??Ef(sy(e??""))??"throw"}var Sf=iy();function yf(r,e,t){r(e,{mechanism:{type:t==="unhandledRejection"?"onunhandledrejection":"onuncaughtexception",handled:!1}})}function oy(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;yf(r,n,s),!t&&i===0&&(t=!0,e(n))},{_posthogErrorHandler:!0})}function bf(r,e,t=Sf){let n=globalThis.process;if(n){if(t==="strict")return void n.on("uncaughtExceptionMonitor",(s,i)=>yf(r,s,i));n.on("uncaughtException",oy(r,e))}}function wf(r,e=Sf){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 ay=2e3,fa=class r{constructor(e,t,n){this.client=e,this._exceptionAutocaptureEnabled=t.enableExceptionAutocapture||!1,this._logger=n,this._rateLimiter=new Zn({...Ou(t),refillInterval:1e4,_logger:this._logger}),this.startAutocaptureIfEnabled()}static isPreviouslyCapturedError(e){return dr(e)&&"__posthog_previously_captured_error"in e&&e.__posthog_previously_captured_error===!0}static async buildEventMessage(e,t,n,s,i){let o={...i},a=e.buildFromUnknown(t,n);a.$exception_list=await e.modifyFrames(a.$exception_list);let c=G.getInjectedReleaseId();return c&&(o.$release_id=c),{event:"$exception",distinctId:s,properties:{...a,...o},_originatedFromCaptureException:!0}}startAutocaptureIfEnabled(){this.isEnabled()&&(bf(this.onException.bind(this),this.onFatalError.bind(this)),wf(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(ay),globalThis.process.exit(1)}isEnabled(){return!this.client.isDisabled&&this._exceptionAutocaptureEnabled}shutdown(){this._rateLimiter.stop()}},St=fa;var Ds=class{getProperty(e){return this._memoryStorage[e]}setProperty(e,t){this._memoryStorage[e]=t!==null?t:void 0}constructor(){this._memoryStorage={}}};function cy(r){return r==="v0"||r==="v1"}function Tf(){let r="u">typeof process?process.env?.POSTHOG_CAPTURE_MODE:void 0;return cy(r)?r:"v0"}var ly="$ai_",Wr="analytics";function Af(r){return typeof r.event=="string"&&r.event.startsWith(ly)}var Gt=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 pa(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 uy(r){return typeof r=="string"?r:void 0}var dy=[{property:"$cookieless_mode",optionKey:"cookieless_mode",coerce:pa},{property:"$ignore_sent_at",optionKey:"disable_skew_correction",coerce:pa},{property:"$process_person_profile",optionKey:"process_person_profile",coerce:pa},{property:"$product_tour_id",optionKey:"product_tour_id",coerce:uy}],fy=[{property:"$session_id",field:"session_id"},{property:"$window_id",field:"window_id"}];function py(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)}function gy(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 vf(r,e,t){t!==void 0&&!(e in r)&&(r[e]=t)}function my(r){let t={...py(r.properties)?r.properties:{}},n={};for(let{property:i,optionKey:o,coerce:a}of dy)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 fy)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,vf(t,"$set",r.$set),vf(t,"$set_once",r.$set_once),{event:String(r.event??""),uuid:String(r.uuid??""),distinct_id:String(r.distinct_id??""),timestamp:gy(r.timestamp),...s,options:n,properties:t}}function Rf(r,{createdAt:e,historicalMigration:t}){let n={created_at:e,batch:r.map(my)};return t&&(n.historical_migration=!0),n}var hy="/i/v1/analytics/events",_y=3e4,Ey=new Set([408,500,502,503,504]),xs=class{constructor(e,t){this.config=e,this.maxBackoffMs=e.maxBackoffMs??_y,this.fetchFn=t.fetch,this.onError=t.onError,this.now=t.now??Date.now,this.sleep=t.sleep??(n=>new Promise(s=>te(s,n))),this.generateRequestId=t.generateRequestId??ee,this.compress=t.compress??Ar}async sendV1Batch(e){if(e.length===0)return;let t=this.generateRequestId(),n=new Date(this.now()).toISOString(),{batch:s}=Rf(e,{createdAt:n,historicalMigration:this.config.historicalMigration}),i=`${this.config.host}${hy}`,o=[],a=s,c=Math.max(1,this.config.maxAttempts);for(let l=1;l<=c;l++){let u=l===c,f=Je({created_at:n,...this.config.historicalMigration?{historical_migration:!0}:{},batch:a}),p,g;try{p=await this.sendOnce(i,f,l,t);let{response:m,signal:h}=p,{status:_}=m;if(_<200||_>=300)if(!u&&Ey.has(_)){let E=this.parseRetryAfter(m);await p.waitFor(p.cancelBody()).catch(()=>{}),g=this.backoffDelay(l,E)}else{let E=await this.buildHttpError(m,_,p.waitFor);return this.surfaceBatchFailure(t,o,a,E)}else{let E;try{E=await p.waitFor(this.parseResponse(m))}catch(A){if(h.aborted)throw A;return this.surfaceBatchFailure(t,o,a,new Error(`Capture V1 returned an unparseable ${_} response body`))}let y=this.classify(a,E,o);if(y.length===0)return this.surfacePartialDrops(t,o);if(u)return void this.onError(new Gt({requestId:t,drops:o,retryExhausted:y.map(A=>A.uuid)}));a=y;let w=this.parseRetryAfter(m);g=this.backoffDelay(l,w)}}catch(m){if(p&&!p.signal.aborted)throw m;if(u)return this.surfaceBatchFailure(t,o,a,m);g=this.backoffDelay(l)}finally{p?.cleanup()}g!==void 0&&await this.sleep(g)}}async sendOnce(e,t,n,s){let i=this.buildHeaders(n,s),o=t;if(this.config.compressionEnabled){let 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=te(()=>{let g=new Error(`Capture V1 request timed out ${c} after ${this.config.requestTimeoutMs}ms`);g.name="AbortError",p(g),a.abort(g)},this.config.requestTimeoutMs)});try{let f=this.fetchFn(e,{method:"POST",headers:i,body:o,signal:a.signal}),p=!1;f.then(E=>{a.signal.aborted&&!p&&this.cancelBody(E)}).catch(()=>{});let g=await Promise.race([f,u]);p=!0,c="while reading the response body";let m=!1,h,_=()=>h??=this.cancelBody(g);return{response:g,signal:a.signal,waitFor:E=>Promise.race([E,u]),cancelBody:_,cleanup:()=>{m||(m=!0,clearTimeout(l),a.signal.aborted&&_())}}}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 Gt({requestId:e,drops:t,retryExhausted:n.map(i=>i.uuid),cause:s}))}surfacePartialDrops(e,t){t.length>0&&this.onError(new Gt({requestId:e,drops:t,retryExhausted:[]}))}async cancelBody(e){try{await e.body?.cancel()}catch{}}};var yt="ai-capture",Ls="/i/v0/ai/batch/";var yy=new TextEncoder;function ma(r){return yy.encode(Je(r)).length}function Mf(r,e=8388608,t=5242880){let n=[],s=[],i=[],o=0;for(let a of r){if(a===void 0)continue;let c=ma(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 by=100,Cf=3e4,wy=5e4,Ty=50,Ay=500,vy="https://us.i.posthog.com",Pf=new Set;function Ns(r,e){Pf.has(r)||(Pf.add(r),console.warn(`[PostHog] ${e}`))}function Ry(r){return typeof r=="string"?r.trim():""}function My(r){return(typeof r=="string"?r.trim():"")||void 0}function Cy(r){return(typeof r=="string"?r.trim():"")||vy}function Py(r){return(Array.isArray(r)?r:[r]).filter(t=>typeof t=="string"&&t.trim().length>0)}function Iy(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 Us=class extends vr{get distinctIdHasSentFlagCalls(){return Object.fromEntries(this._distinctIdHasSentFlagCalls)}set distinctIdHasSentFlagCalls(e){this._distinctIdHasSentFlagCalls=new Map(Object.entries(e??{}))}constructor(e,t={}){let n=Ry(e),s={...t,maxQueueSize:t.maxQueueSize??1e4,flushInterval:t.flushInterval??5e3,host:Cy(t.host),personalApiKey:My(t.secretKey??t.personalApiKey)};if(super(n,s),this._memoryStorage=new Ds,this._aiCaptureRouteActive=!1,this._minimalFlagCalledEvents=!1,this.options=s,this.captureMode=Tf(),this.enableFullAiCapture=s.enableFullAiCapture===!0,this.context=this.initializeContext(),this.options.featureFlagsPollingInterval=typeof s.featureFlagsPollingInterval=="number"?Math.max(s.featureFlagsPollingInterval,by):s.featureFlagsPollingInterval===null?null:Cf,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('A project API key ("phc_...") was provided as secretKey or personalApiKey. Pass the project API key as the first constructor argument. For local evaluation, set secretKey (or the deprecated personalApiKey alias) to a server-only Project Secret API Key ("phs_...") or Personal API Key ("phx_...") with feature flag read access.');s.enableLocalEvaluation!==!1&&(this.featureFlagsPoller=new ks({pollingInterval:this.options.featureFlagsPollingInterval,personalApiKey:s.personalApiKey,projectApiKey:n,timeout:s.requestTimeout??1e4,host:this.host,fetch:s.fetch,onError:o=>{this._events.emit("error",o)},onLoad:o=>{this._events.emit("localEvaluationFlagsLoaded",o)},onMinimalFlagCalledEvents:o=>{this._minimalFlagCalledEvents=o},customHeaders:this.getCustomHeaders(),cacheProvider:s.flagDefinitionCacheProvider,strictLocalEvaluation:s.strictLocalEvaluation,evaluationContexts:s.evaluationContexts??s.evaluationEnvironments}))}this.errorTracking=new St(this,s,this._logger),this._distinctIdHasSentFlagCalls=new Map,this.maxCacheSize=s.maxCacheSize||wy}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:gr([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??Ay,s=t>=n;if(this._waitUntilCycle.timer!==void 0&&clearTimeout(this._waitUntilCycle.timer),s)return void this.resolveWaitUntilFlush();let i=this.options.waitUntilDebounceMs??Ty;this._waitUntilCycle.timer=te(()=>{this.resolveWaitUntilFlush()},i)}_consumeWaitUntilCycle(){let e=this._waitUntilCycle;return e&&(clearTimeout(e.timer),this._waitUntilCycle=void 0),e?.resolve}async resolveWaitUntilFlush(){let e=this._consumeWaitUntilCycle();try{await this._flushEventsAndSpans()}catch{}finally{e?.()}}getPersistedProperty(e){return this._memoryStorage.getProperty(e)}setPersistedProperty(e,t){return this._memoryStorage.setProperty(e,t)}fetch(e,t){return this.options.fetch?this.options.fetch(e,t):fetch(e,t)}getQueueRouteKey(e){return this.captureMode==="v1"&&Af(e)?"ai":Wr}persistedQueueKeyForRoute(e){return e===yt?se.AiCaptureQueue:e==="ai"?se.AiQueue:se.Queue}getActiveQueueRoutes(){let e=this.captureMode==="v1"?[Wr,"ai"]:[Wr];return this._aiCaptureRouteActive&&e.push(yt),e}getBatchEndpointPath(e){return e===yt?Ls:super.getBatchEndpointPath(e)}async sendBatch(e,t,n=Wr){if(n===yt)return this.sendAiCaptureBatch(e,t);if(this.captureMode!=="v1"||n==="ai")return super.sendBatch(e,t,n);let s=e.filter(i=>i!==void 0);await this.getV1Sender().sendV1Batch(s)}async sendAiCaptureBatch(e,t){let{batches:n,dropped:s}=Mf(e);for(let{event:i,bytes:o}of s){let a=`Event ${i} (${o} bytes) exceeds the ${8388608/1048576}MiB limit for ${Ls}, dropping.`;this._logger.error(a),this._events.emit("error",new Error(a))}for(let i of n)await this.sendAiSubBatch(i,t)}async sendAiSubBatch(e,t){try{await super.sendBatch(e,t,yt)}catch(n){if(!Bt(n))throw n;if(e.length===1){let[i]=e,a=`Event ${typeof i.event=="string"?i.event:"unknown"} (${ma(i)} bytes) was rejected with 413 by ${Ls} 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 xs({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 pf}get metrics(){return this._metrics||(this._metrics=new xr(this,Ss(this.options.metrics),this._logger)),this._metrics}initializeSpanContextManager(){return new $r}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 Ur(this,aa(this.options.traces,this.hostResourceAttributes(),this._logger),this._logger,()=>this._tracingContext(),this._spanContextManager,()=>this.scheduleDebouncedFlush())),this._traces}_tracingContext(){let e=this.context?.get();return{distinctId:e?.distinctId,sessionId:e?.sessionId}}startSpan(e,t){return this._tracesPipeline?.startSpan(e,t)??Ze(t,this._spanContextManager.active())}withSpan(e,t,n){let s=typeof t=="function"?void 0:t,i=typeof t=="function"?t:n,o=this._tracesPipeline;return o?s?o.withSpan(e,s,i):o.withSpan(e,i):Nr(this._spanContextManager,Ze(s,this._spanContextManager.active()),i)}getActiveSpan(){return this._spanContextManager.active()??null}getCustomUserAgent(){return`${this.getLibraryId()}/${this.getLibraryVersion()}`}getEvaluationRuntime(){return"server"}getCommonEventProperties(){let e=super.getCommonEventProperties();return(this.options.isServer??!0)&&(e.$is_server=!0),e}enable(){return super.optIn()}disable(){return super.optOut()}debug(e=!0){super.debug(e),this.featureFlagsPoller?.debug(e)}_warnIfInvalidCapture(e,t,n){typeof e=="string"&&this._logger.warn(t),e.event==="$exception"&&!e._originatedFromCaptureException&&this._logger.warn(n)}_sendPreparedEvent(e,t,n,s,i){return this.addPendingPromise(this._prepareEventMessage(t,s).then(({distinctId:o,event:a,properties:c,options:l})=>{let u={timestamp:l.timestamp,disableGeoip:l.disableGeoip,uuid:l.uuid},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=mt(e.uuid,ee);return this._sendPreparedAiEvent({...e,uuid:t},!1),t}async captureAiImmediate(e){if(this.disabled)return;let t=mt(e.uuid,ee);return await this._sendPreparedAiEvent({...e,uuid:t},!0),t}_sendPreparedAiEvent(e,t){return typeof e?.event=="string"&&!e.event.startsWith("$ai_")&&this._logger.debug(`captureAi called with non-AI event ${e.event}; routing it to the AI endpoint anyway.`),this._aiCaptureRouteActive=!0,this._sendPreparedEvent("capture",e,t,void 0,yt)}identify({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!1,{includeContextProperties:!1})}async identifyImmediate({distinctId:e,properties:t={},disableGeoip:n}){let{$set:s,$set_once:i,$anon_distinct_id:o,...a}=t,u={$set:s||a,$set_once:i||{},$anon_distinct_id:o??void 0};await this._sendPreparedEvent("identify",{distinctId:e,event:"$identify",properties:u,disableGeoip:n},!0,{includeContextProperties:!1})}setPersonProperties({distinctId:e,properties:t={},propertiesOnce:n={}}){if(Object.keys(t).length===0&&Object.keys(n).length===0)return;let s={};Object.keys(t).length>0&&(s.$set=t),Object.keys(n).length>0&&(s.$set_once=n),this.capture({distinctId:e,event:"$set",properties:s})}unsetPersonProperties({distinctId:e,properties:t}){let n=Py(t);n.length!==0&&this.capture({distinctId:e,event:"$set",properties:{$unset:n}})}alias(e){this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!1,{includeContextProperties:!1})}async aliasImmediate(e){await this._sendPreparedEvent("alias",{distinctId:e.distinctId,event:"$create_alias",properties:{distinct_id:e.distinctId,alias:e.alias},disableGeoip:e.disableGeoip},!0,{includeContextProperties:!1})}isLocalEvaluationReady(){return this.featureFlagsPoller?.isLocalEvaluationReady()??!1}getFeatureFlagEvaluationRuntime(e){return this.featureFlagsPoller?.getEvaluationRuntimeForFlag(e)}getFeatureFlagKeysByEvaluationRuntime(e){return this.featureFlagsPoller?.getFlagKeysByEvaluationRuntime(e)??[]}async waitForLocalEvaluationReady(e=Cf){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 b=this._flagOverrides[e];if(b===void 0)return;let v=this._payloadOverrides?.[e];return{key:e,enabled:b!==!1,variant:typeof b=="string"?b: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,m=!1,h,_,E,y,w,A,T;if(this.featureFlagsPoller!==void 0){await this.featureFlagsPoller?.loadFeatureFlags();let b=this.featureFlagsPoller?.featureFlagsByKey[e];if(b)try{let v=await this.featureFlagsPoller?.computeFlagAndPayloadLocally(b,p,{matchValue:s});if(v){m=!0;let S=v.value;y=b.id,A="Evaluated locally",T=b.has_experiment,g={key:e,enabled:S!==!1,variant:typeof S=="string"?S:void 0,payload:v.payload??void 0,reason:A,reasonCode:b.active===!1?"flag_disabled":void 0}}}catch(v){if(v instanceof Fe||v instanceof R)this._logger?.info(`${v.name} when computing flag locally: ${e}: ${v.message}`);else throw v}}if(!m&&!c){let b=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,a,[e]);if(b===void 0)E=je.UNKNOWN_ERROR;else{this._minimalFlagCalledEvents=b.minimalFlagCalledEvents===!0,h=b.requestId,_=b.evaluatedAt;let v=[];b.errorsWhileComputingFlags&&v.push(je.ERRORS_WHILE_COMPUTING),b.quotaLimited?.includes("feature_flags")&&v.push(je.QUOTA_LIMITED);let S=b.flags[e];if(S===void 0)v.push(je.FLAG_MISSING);else{y=S.metadata?.id,w=S.metadata?.version,A=S.reason?.description??S.reason?.code,T=S.metadata?.has_experiment;let I;if(S.metadata?.payload!==void 0)try{I=JSON.parse(S.metadata.payload)}catch{I=S.metadata.payload}g={key:e,enabled:S.enabled,variant:S.variant??void 0,payload:I,reason:A,reasonCode:S.reason?.code}}v.length>0&&(E=v.join(","))}}if(i){let b=g===void 0?void 0:g.enabled===!1?!1:g.variant??!0,v={$feature_flag:e,$feature_flag_response:b,$feature_flag_id:y,$feature_flag_version:w,$feature_flag_reason:A,locally_evaluated:m,[`$feature/${e}`]:b,$feature_flag_request_id:h,$feature_flag_evaluated_at:m?Date.now():_};if(T!==void 0&&(v.$feature_flag_has_experiment=T),m&&this.featureFlagsPoller){let S=this.featureFlagsPoller.getFlagDefinitionsLoadedAt();S!==void 0&&(v.$feature_flag_definitions_loaded_at=S)}E&&(v.$feature_flag_error=E),this._captureFlagCalledEventIfNeeded({distinctId:t,key:e,response:b,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){Ns("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(Ns("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){Ns("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),m={},h={},_=!0;if(g&&(m=g.response,h=g.payloads,_=g.fallbackToFlags),_&&!c){let E=await super.getFeatureFlagsAndPayloadsStateless(p.distinctId,p.groups,l,u,o,a);m={...m,...E.flags||{}},h={...h,...E.payloads||{}}}return this._flagOverrides!==void 0&&(m={...m,...this._flagOverrides}),this._payloadOverrides!==void 0&&(h={...h,...this._payloadOverrides}),{featureFlags:m,featureFlagPayloads:h}}async evaluateFlags(e,t){let{distinctId:n,options:s}=this._resolveDistinctId(e,t);if(!n)return this._logger.warn("[PostHog] distinctId is required to evaluate feature flags \u2014 pass it explicitly or use withContext()"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:"",flags:{}});if(this.disabled)return this._logger.warn("The client is disabled"),new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,flags:{}});let{groups:i,disableGeoip:o}=s||{},a=s?.flagKeys??void 0;if(a?.length===0)return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:{}});let{onlyEvaluateLocally:c,personProperties:l,groupProperties:u}=s||{},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,m={},h,_,E=!1,y=!1,w=await this.featureFlagsPoller?.getAllFlagsAndPayloads(p,a),A=new Set;if(w)for(let[b,v]of Object.entries(w.response)){let S=this.featureFlagsPoller?.featureFlagsByKey[b];m[b]={key:b,enabled:v!==!1,variant:typeof v=="string"?v:void 0,payload:w.payloads[b],id:S?.id,version:void 0,reason:"Evaluated locally",locallyEvaluated:!0,hasExperiment:S?.has_experiment},A.add(b)}let T=g!==void 0&&Array.from(g).some(b=>this.featureFlagsPoller?.featureFlagsByKey[b]===void 0);if((w?w.fallbackToFlags||T:!0)&&!c){let b=await super.getFeatureFlagDetailsStateless(p.distinctId,p.groups,l,u,o,a);if(b){this._minimalFlagCalledEvents=b.minimalFlagCalledEvents===!0,h=b.requestId,_=b.evaluatedAt,E=!!b.errorsWhileComputingFlags,y=Array.isArray(b.quotaLimited)&&b.quotaLimited.includes("feature_flags");for(let[v,S]of Object.entries(b.flags)){if(A.has(v))continue;let I;if(S.metadata?.payload!==void 0)try{I=JSON.parse(S.metadata.payload)}catch{I=S.metadata.payload}m[v]={key:v,enabled:S.enabled,variant:S.variant,payload:I,id:S.metadata?.id,version:S.metadata?.version,reason:S.reason?.description??S.reason?.code,locallyEvaluated:!1,hasExperiment:S.metadata?.has_experiment}}}}if(this._flagOverrides!==void 0)for(let[b,v]of Object.entries(this._flagOverrides)){if(v===void 0){delete m[b];continue}let S=m[b];m[b]={key:b,enabled:v!==!1,variant:typeof v=="string"?v:void 0,payload:S?.payload,id:S?.id,version:S?.version,reason:S?.reason,locallyEvaluated:S?.locallyEvaluated??!1,hasExperiment:S?.hasExperiment}}if(this._payloadOverrides!==void 0)for(let[b,v]of Object.entries(this._payloadOverrides)){let S=m[b];S&&(m[b]={...S,payload:v})}if(g!==void 0)for(let b of Object.keys(m))g.has(b)||delete m[b];return new tt({host:this._getFeatureFlagEvaluationsHost(),distinctId:n,groups:i,disableGeoip:o,flags:m,requestId:h,evaluatedAt:_,flagDefinitionsLoadedAt:this.featureFlagsPoller?.getFlagDefinitionsLoadedAt(),errorsWhileComputing:E,quotaLimited:y})}_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(([f],[p])=>f<p?-1:f>p?1:0))}`:"",l=`${n}_${s}${c}`,u=this._distinctIdHasSentFlagCalls.get(t)??new Set;if(this._distinctIdHasSentFlagCalls.delete(t),this._distinctIdHasSentFlagCalls.set(t,u),!u.has(l)){for(u.add(l);this._distinctIdHasSentFlagCalls.size>Math.max(this.maxCacheSize,1);){let f=this._distinctIdHasSentFlagCalls.keys().next().value;if(f===void 0)break;this._distinctIdHasSentFlagCalls.delete(f)}this.capture({distinctId:t,event:"$feature_flag_called",properties:a,groups:i,disableGeoip:o})}}_getFeatureFlagEvaluationsHost(){return this._featureFlagEvaluationsHost||(this._featureFlagEvaluationsHost={captureFlagCalledEventIfNeeded:e=>this._captureFlagCalledEventIfNeeded(e),logWarning:e=>{this.options.featureFlagsLogWarnings!==!1&&console.warn(`[PostHog] ${e}`)}}),this._featureFlagEvaluationsHost}groupIdentify({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!1,{includeContextProperties:!1})}async groupIdentifyImmediate({groupType:e,groupKey:t,properties:n,distinctId:s,disableGeoip:i}){await this._sendPreparedEvent("capture",{distinctId:s||`$${e}_${t}`,event:"$groupidentify",properties:{$group_type:e,$group_key:t,$group_set:n||{}},disableGeoip:i},!0,{includeContextProperties:!1})}async reloadFeatureFlags(){await this.featureFlagsPoller?.loadFeatureFlags(!0)}overrideFeatureFlags(e){let t=n=>Object.fromEntries(n.map(s=>[s,!0]));if(e===!1){this._flagOverrides=void 0,this._payloadOverrides=void 0;return}if(Array.isArray(e)){this._flagOverrides=t(e);return}if(this._isFeatureFlagOverrideOptions(e)){"flags"in e&&(e.flags===!1?this._flagOverrides=void 0:Array.isArray(e.flags)?this._flagOverrides=t(e.flags):e.flags!==void 0&&(this._flagOverrides={...e.flags})),"payloads"in e&&(e.payloads===!1?this._payloadOverrides=void 0:e.payloads!==void 0&&(this._payloadOverrides={...e.payloads}));return}this._flagOverrides={...e}}_isFeatureFlagOverrideOptions(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=e;if("flags"in t){let n=t.flags;if(n===!1||Array.isArray(n)||typeof n=="object"&&n!==null)return!0}if("payloads"in t){let n=t.payloads;if(n===!1||typeof n=="object"&&n!==null)return!0}return!1}withContext(e,t,n){return this.context?this.context.run(e,t,n):t()}getContext(){return this.context?.get()}enterContext(e,t){this.context?.enter(e,t)}async _shutdown(e){let t=Date.now()+(e??3e4),n=this._consumeWaitUntilCycle();await this.featureFlagsPoller?.stopPoller(e),this.errorTracking.shutdown(),this._metrics&&(await Qe(this._metrics.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._metrics.reset()),this._traces&&(await Qe(this._traces.flush().catch(()=>{}),Math.max(0,t-Date.now())),this._traces.reset());try{return await super._shutdown(Math.max(0,t-Date.now()))}finally{this._distinctIdHasSentFlagCalls.clear(),n?.()}}async _requestRemoteConfigPayload(e){if(this.disabled||!this.apiKey||!this.options.personalApiKey)return;let t=`${this.host}/api/projects/@current/feature_flags/${e}/remote_config?token=${encodeURIComponent(this.apiKey)}`,n={method:"GET",headers:{...this.getCustomHeaders(),"Content-Type":"application/json",Authorization:`Bearer ${this.options.personalApiKey}`}},s=null;if(this.options.requestTimeout&&typeof this.options.requestTimeout=="number"){let i=new AbortController;s=te(()=>{i.abort()},this.options.requestTimeout),n.signal=i.signal}try{return await this.fetch(t,n)}catch(i){this._events.emit("error",i);return}finally{s&&clearTimeout(s)}}extractPropertiesFromEvent(e,t){if(!e)return{personProperties:{},groupProperties:{}};let n={},s={};for(let[i,o]of Object.entries(e))if(Cu(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(!St.isPreviouslyCapturedError(e)){let o=new Error("PostHog syntheticException");this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:o},t,n).then(a=>this._capturePreparedEvent({...a,uuid:s,flags:i},!1)))}}async captureExceptionImmediate(e,t,n,s){if(!St.isPreviouslyCapturedError(e)){let i=new Error("PostHog syntheticException");return this.addPendingPromise(St.buildEventMessage(this.getErrorPropertiesBuilder(),e,{syntheticException:i},t,n).then(o=>this.captureImmediate({...o,flags:s})))}}async prepareEventMessage(e){return this._prepareEventMessage(e)}async _prepareEventMessage(e,t={}){let{distinctId:n,event:s,properties:i,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:f}=e,p=this.context?.get(),g=t.includeContextProperties??!0,m=n||p?.distinctId,h=g?{...this.props,...p?.properties||{},...i||{}}:{...i||{}};m||(m=ee(),h.$process_person_profile=!1),g&&p?.sessionId&&!h.$session_id&&(h.$session_id=p.sessionId);let _=this._shouldSendMinimalFlagCalledEvent(s,h)?wr(h):h,E=this._runBeforeSend({distinctId:m,event:s,properties:_,groups:o,flags:a,sendFeatureFlags:c,timestamp:l,disableGeoip:u,uuid:f});if(!E)return Promise.reject(null);let y=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){Ns("sendFeatureFlags","`sendFeatureFlags` is deprecated and will be removed in a future major version. Pass a `flags` snapshot from `posthog.evaluateFlags(...)` instead \u2014 it avoids a second `/flags` request per capture and guarantees the event carries the exact flag values your code branched on.");let w=typeof c=="object"?c:void 0,A=await this.getFeatureFlagsForEvent(E.distinctId,o,u,w);return Iy(A)}return{}}).catch(()=>({})).then(w=>{let A=E.groups||o;return{...w,...E.properties||{},...A!==void 0&&Object.keys(A).length>0?{$groups:A}:{}}});return E.event==="$pageview"&&this.options.__preview_capture_bot_pageviews&&typeof y.$raw_user_agent=="string"&&Iu(y.$raw_user_agent,this.options.custom_blocked_useragents||[])&&(E.event="$bot_pageview",y.$browser_type="bot"),{distinctId:E.distinctId,event:E.event,properties:y,options:{timestamp:E.timestamp,disableGeoip:E.disableGeoip,uuid:E.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 If=require("node:async_hooks"),$s=class{constructor(){this.storage=new If.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 Of=require("node:async_hooks"),Bs=class{active(){return this._storage.getStore()}with(e,t){return this._storage.run(e,t)}constructor(){this._storage=new Of.AsyncLocalStorage}};var kf=require("node:zlib"),Df=require("node:util"),Oy=(0,Df.promisify)(kf.gzip);async function xf(r,e=!0){try{let t=await Oy(r);return new Uint8Array(t)}catch(t){return e&&console.error("Failed to gzip compress data",t),null}}var Ws=require("node:os");function Lf(){let r,e;try{r=(0,Ws.platform)(),e=(0,Ws.release)()}catch{}return Jo(r,e)}var Ff="posthog-node";function ky(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[ha.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(h=>({...h,stacktrace:h.stacktrace?{...h.stacktrace,type:"raw",frames:(h.stacktrace.frames||[]).map(_=>({..._,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},m=G.getInjectedReleaseId();return m&&(g.$release_id=m),e&&t&&(g.$sentry_url=(n||"https://sentry.io/organizations/")+e+"/issues/?project="+t+"&query="+o.event_id),i&&r.capture({event:"$exception",distinctId:c,properties:g}),o}}var ha=class{static{this.POSTHOG_ID_TAG="posthog_distinct_id"}constructor(e,t,n,s,i){this.name=Ff,this.name=Ff,this.setupOnce=function(o,a){let c=a()?.getClient()?.getDsn()?.projectId;o(ky(e,{organization:t,projectId:c,prefix:n,severityAllowList:s,sendExceptionsToPostHog:i??!0}))}}};var Hs=class extends Us{getLibraryId(){return"posthog-node"}compressPayload(e){return xf(e,this.isDebug)}initializeContext(){return new $s}initializeSpanContextManager(){return new Bs}hostResourceAttributes(){return Lf()}createErrorPropertiesBuilder(){return new G.ErrorPropertiesBuilder([new G.EventCoercer,new G.ErrorCoercer,new G.ObjectCoercer,new G.StringCoercer,new G.PrimitiveCoercer],G.createStackParser("node:javascript",G.nodeStackLineParser),[Tu(),e=>cf(e,void 0,this._logger),ff()])}};var Dk=300*1e3,xk=3600*1e3;M();var Ea=null,Dy=!1,xy=3e4,js=null;function Uf(){let r=Date.now();if(js&&r<js.expiresAt)return js.value;let e=dn(process.env,er());return js={value:e,expiresAt:r+xy},e}var Ly=!1;function Fy(){if(!Ea){let r=Ly&&bc(process.env)&&Uf();Ea=new Hs(gn(),{host:mn(),flushAt:20,flushInterval:1e4,disableGeoip:!1,enableExceptionAutocapture:r,before_send:Gy})}return Ea}var Ny=6e4,Uy=500,Hr=new Map;function $y(r,e,t){let n="";try{let s=(t||"").split(`
32
+ `).map(i=>i.trim()).filter(Boolean);n=s.find(i=>i.startsWith("at "))??s[1]??""}catch(s){let i=s instanceof Error?s:new Error(String(s));d.warn("SYSTEM","Telemetry: stack parse failed while fingerprinting; using empty top frame",void 0,i),n=""}return`${r}::${Mc(e)}::${n}`.slice(0,400)}function By(r,e){try{return Wy(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 Wy(r,e){let t=Hr.get(r);if(!t){if(Hr.size>=Uy){let n=null,s=1/0;for(let[i,o]of Hr){let a=Math.max(o.lastSentTs,o.firstTs);a<s&&(s=a,n=i)}n!==null&&Hr.delete(n)}return t={count:1,firstTs:e,lastSentTs:e},Hr.set(r,t),{send:!0,count:1}}if(t.count+=1,e-t.lastSentTs>=Ny){t.lastSentTs=e;let n=t.count;return t.count=0,{send:!0,count:n}}return{send:!1,count:t.count}}var Nf="__cm_rate_limited";function Hy(r){try{return typeof r!="string"||r.length===0?"":yi(Si(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 jy(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=Rc(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=Hy(a.filename))}}}function Ky(r){try{let e=[],t=i=>{typeof i=="string"&&e.push(i)};t(r.$exception_message),t(r.$exception_type),t(r.error_message),t(r.error_type);let n=r.$exception_list;if(Array.isArray(n))for(let i of n)i&&typeof i=="object"&&(t(i.value),t(i.type));let s=e.join(" ");return/chdir/i.test(s)?/\b(?:EPERM|EACCES)\b|operation not permitted|permission denied/i.test(s):!1}catch{return!1}}function Gy(r){try{if(!r||typeof r!="object")return r;let e=r;if(e.event!=="$exception")return r;let t=e.properties??{};if(Ky(t))return null;if(t[Nf]){try{delete t[Nf],e.properties=t}catch{}return r}jy(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=$y(n,s,i),a=By(o,Date.now());if(!a.send)return null;try{t.occurrence_count=a.count,e.properties=t}catch{}return r}catch{return null}}function _a(r,e,t){try{zy(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 zy(r,e,t){if(Dy||!Uf())return;let n=pn({..._n(),...e??{}});if(t?.person?n.$set=hn(n):n.$process_person_profile=!1,process.env.CLAUDE_MEM_TELEMETRY_DEBUG==="1"){process.stderr.write("[telemetry] "+JSON.stringify({event:r,properties:n})+`
33
+ `);return}Fy().capture({distinctId:fn(),event:r,properties:n})}var Vy=["agent-cost-report","babysit","ccs-align","cloud-sync","design-is","do","handoff","how-it-works","knowledge-agent","learn-codebase","make-plan","mem-search","mode-creator","oh-my-issues","pathfinder","screenpipe","smart-explore","standup","timeline-report","version-bump","weekly-digests","what-the","wowerpoint"],Yy=new Set(Vy),$f={skill_id:"other",skill_source:"third_party"};function Bf(r){let e=qy(r);return e&&Yy.has(e)?{skill_id:e,skill_source:"first_party"}:$f}function Wf(r,e){if(r==="Skill"&&!(!e||typeof e!="object"))return e.skill}function qy(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 Jy=new Set(["mem_search","search","timeline","get_observations","get_summaries","get_tool_uses","session_start_context","observation_search","observation_context","memory_search","memory_context"]);function Hf(r){if(!r.startsWith("mcp__"))return null;let e=r.split("__");if(e.length<3)return null;let t=e[1].toLowerCase();return!t.includes("claude-mem")&&!t.includes("claude_mem")&&!t.includes("mcp-search")&&!t.includes("mcp_search")&&!t.includes("cmem")?null:e.slice(2).join("__")}function jf(r){if(!r)return!1;if(r.startsWith("memory_")||r==="mem_search"||r==="get_summaries")return!0;let e=Hf(r);return e!==null&&Jy.has(e)}function Kf(r){return r==="save_memory"||Hf(r)==="save_memory"}var Gf=null,Xy=new Set(["SetTodoList","TodoList","TaskList","TaskOutput","TaskStop","CronCreate","CronList","CronDelete"]),zf=new Map;function Qy(r){let e=zf.get(r);if(e!==void 0)return e;let t=null;try{t=new RegExp(r)}catch(n){d.warn("INGEST","Invalid CLAUDE_MEM_SKIP_BASH_PATTERNS regex \u2014 ignoring",{pattern:r,error:n instanceof Error?n.message:String(n)})}return zf.set(r,t),t}function Zy(r,e){if(!e||typeof e!="object")return"";let t=e,n=r==="Bash"?t.command:r==="exec_command"?t.cmd:void 0;return typeof n=="string"?n:""}function eb(){if(!Gf)throw new Error("ingest helpers used before setIngestContext() \u2014 wiring bug");return Gf}async function Vf(r,e={}){if(jf(r.toolName))return{ok:!0,status:"skipped",reason:"memory_retrieval"};let{sessionManager:t,dbManager:n,eventBroadcaster:s,ensureGeneratorRunning:i}=eb(),o=Z(r.platformSource),a=typeof r.cwd=="string"?r.cwd:"",c=a.trim()?ct(a):null,l=c?.primary??"",u=$.loadFromFile(oe);if(a&&Sn(a,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return{ok:!0,status:"skipped",reason:"project_excluded"};if(zn(r.toolName,u.CLAUDE_MEM_SKIP_TOOLS)){if(r.toolName==="Skill"){let{skill_id:T,skill_source:P}=Bf(Wf(r.toolName,r.toolInput));_a("skill_invoked",{skill_id:T,skill_source:P,skill_trigger:"tool",ide:o})}return{ok:!0,status:"skipped",reason:"tool_excluded"}}if(o==="kimi"&&Xy.has(r.toolName))return{ok:!0,status:"skipped",reason:"tool_excluded"};let f=u.CLAUDE_MEM_SKIP_BASH_PATTERNS.trim(),p=f?Zy(r.toolName,r.toolInput):"";if(p){let T=Qy(f);if(T&&T.test(p))return{ok:!0,status:"skipped",reason:"bash_pattern_excluded"}}let g=bu(r.agentId,r.agentType,u);if(g.skip)return{ok:!0,status:"skipped",reason:g.reason};if(new Set(["Edit","Write","Read","NotebookEdit"]).has(r.toolName)&&r.toolInput&&typeof r.toolInput=="object"){let T=r.toolInput,P=T.file_path||T.notebook_path;if(P&&P.includes("session-memory"))return{ok:!0,status:"skipped",reason:"session_memory_meta"}}let h=n.getSessionStore(),_,E;try{_=h.createSDKSession(r.contentSessionId,l,"",void 0,o),a&&h.setSessionCwd(_,a,c?.keySource),E=h.getPromptNumberFromUserPrompts(r.contentSessionId,_,r.enqueuedAtEpochMs)}catch(T){let P=T instanceof Error?T.message:String(T);return d.error("INGEST","Observation session resolution failed",{contentSessionId:r.contentSessionId,toolName:r.toolName},T instanceof Error?T:new Error(P)),{ok:!1,reason:P,status:500}}if(!qn.checkUserPromptPrivacy(h,r.contentSessionId,E,"observation",_,{tool_name:r.toolName}).allow)return{ok:!0,status:"skipped",reason:"private"};let w=r.toolInput!==void 0?so(JSON.stringify(r.toolInput)):"{}",A=r.toolResponse!==void 0?so(JSON.stringify(r.toolResponse)):"{}";if(r.toolUseId)try{h.upsertToolUse({toolUseId:r.toolUseId,contentSessionId:r.contentSessionId,sessionDbId:_,project:l,platformSource:o,toolName:r.toolName,toolInput:w,toolResponse:A,cwd:a||null,promptNumber:E,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(T){d.warn("INGEST","tool_uses backup write failed (observation still queued)",{sessionId:_,toolName:r.toolName,toolUseId:r.toolUseId},T instanceof Error?T:new Error(String(T)))}return Kf(r.toolName)?{ok:!0,status:"skipped",reason:"explicit_memory_write"}:(t.queueObservation(_,{tool_name:r.toolName,tool_input:w,tool_response:A,prompt_number:E,cwd:a||(d.error("INGEST","Missing cwd when ingesting observation",{sessionId:_,toolName:r.toolName}),""),agentId:typeof r.agentId=="string"?r.agentId:void 0,agentType:typeof r.agentType=="string"?r.agentType:void 0,toolUseId:typeof r.toolUseId=="string"?r.toolUseId:void 0},r.enqueuedAtEpochMs),e.markHandedOff?.(),await i?.(_,"observation"),s.broadcastObservationQueued(_),{ok:!0,sessionDbId:_})}var tb=/agent-transcripts[/\\]([0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})(?:[/\\]|$)/i;function rb(r){let e=typeof r.agentId=="string"?r.agentId.trim():"";return e&&e!=="*"?e:r.path.match(tb)?.[1]}var Kr=class extends Error{constructor(e,t){super(`session init failed for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptAnchorError",this.cause=t}},Gr=class extends Error{constructor(e,t){super(`observation not accepted for transcript session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptObservationError",this.cause=t}},bt=class extends Error{constructor(e,t){super(`transcript event not persisted for session ${e}: ${t instanceof Error?t.message:String(t)}`),this.name="TranscriptSpoolError",this.cause=t}},nb=4096,sb=64,Ks=class{constructor(e="in-process"){this.observationTransport=e}observationTransport;sessions=new Map;fileContexts=new Set;fileSessionKeys=new WeakMap;registerFileContext(e){this.fileContexts.add(e)}pendingToolOwners=new WeakMap;subagentSessionKeys=new Set;resetFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t);n&&n.cwd===e.cwd&&(n.cwd=void 0)}this.retireFileContext(e),e.cwd=void 0,e.sessionId=void 0}retireFileContext(e){for(let t of this.sessionKeysOf(e)){let n=this.sessions.get(t)?.pendingTools;for(let[s,i]of n??[])this.pendingToolOwners.get(i)===e&&n.delete(s)}this.fileContexts.delete(e),this.fileSessionKeys.delete(e),e.pendingTools={}}sessionKeysOf(e){return new Set([...Object.keys(e.pendingTools??{}),...this.fileSessionKeys.get(e)??[]])}async processEntry(e,t,n,s,i){i&&this.registerFileContext(i);for(let o of n.events)ur(e,o.match,n)&&await this.handleEvent(e,t,n,o,s??void 0,i)}getSessionKey(e,t){return`${e.name}:${t}`}getOrCreateSession(e,t){let n=this.getSessionKey(e,t),s=this.sessions.get(n);return s||(s={sessionId:t,platformSource:Z(e.name),...this.subagentSessionKeys.has(n)?{isSubagent:!0}:{}},this.sessions.set(n,s)),s}rememberSubagentSession(e){if(this.subagentSessionKeys.delete(e),this.subagentSessionKeys.add(e),this.subagentSessionKeys.size>nb){let t=this.subagentSessionKeys.values().next().value;t!==void 0&&this.subagentSessionKeys.delete(t)}}async primeSessionContext(e,t,n,s,i){for(let o of n.events)o.action!=="session_context"||!ur(e,o.match,n)||await this.handleEvent(e,t,n,o,s??void 0,i)}resolveSessionId(e,t,n,s,i){let o={watch:t,schema:n},a=s.fields?.sessionId??(n.sessionIdPath?{path:n.sessionIdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:typeof c=="number"?String(c):i&&i.trim()?i:null}resolveCwd(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.cwd??(n.cwdPath?{path:n.cwdPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.workspace?t.workspace:i.cwd}resolveProject(e,t,n,s,i){let o={watch:t,schema:n,session:i},a=s.fields?.project??(n.projectPath?{path:n.projectPath}:void 0),c=Ot(a,e,o);return typeof c=="string"&&c.trim()?c:t.project?t.project:i.cwd?ct(i.cwd).primary:i.project}async handleEvent(e,t,n,s,i,o){let a=this.resolveSessionId(e,t,n,s,o?.sessionId??i);if(!a){d.debug("TRANSCRIPT","Skipping event without sessionId",{event:s.name,watch:t.name});return}o&&(o.sessionId=a);let c=this.getOrCreateSession(t,a),l=this.getSessionKey(t,a);if(o){let g=this.fileSessionKeys.get(o)??new Set;g.add(l),this.fileSessionKeys.set(o,g)}if(o?.pendingTools?.[l]){c.pendingTools??=new Map;for(let[g,m]of Object.entries(o.pendingTools[l]))this.pendingToolOwners.set(m,o),c.pendingTools.has(g)||c.pendingTools.set(g,m)}!c.cwd&&o?.cwd&&(c.cwd=o.cwd);let u=this.resolveCwd(e,t,n,s,c);u&&(c.cwd=u);let f=this.resolveProject(e,t,n,s,c);if(f&&(c.project=f),t.subagentSource&&!c.isSubagent){let g=lr(e,t.subagentSource.path);g!=null&&(c.isSubagent=!0,this.rememberSubagentSession(this.getSessionKey(t,a)))}if(t.subagentOnly&&!c.isSubagent&&s.action!=="session_context"&&s.action!=="session_end")return;let p=Eu(s.fields,e,{watch:t,schema:n,session:c});s.action==="session_context"&&this.applySessionContext(c,p),o&&c.cwd&&(o.cwd=c.cwd);try{switch(s.action){case"session_context":break;case"session_init":await this.handleSessionInit(c,p),t.context?.updateOn?.includes("session_start")&&await this.updateContext(c,t);break;case"user_message":{let g=this.resolveMessageText(p.message)??this.resolveMessageText(p.prompt);g&&await this.anchorUserPrompt(c,g);break}case"assistant_message":c.lastAssistantMessage=this.resolveMessageText(p.message)??c.lastAssistantMessage;break;case"tool_use":await this.handleToolUse(c,t,p,o);break;case"tool_result":await this.handleToolResult(c,t,p,o);break;case"observation":await this.sendObservation(c,t,p);break;case"file_edit":await this.sendFileEdit(c,p);break;case"session_end":await this.handleSessionEnd(c,t);break;default:break}}finally{o&&this.snapshotPendingTools(o,c,l,s.action==="session_end")}}snapshotPendingTools(e,t,n,s){let i=s?{}:{...e.pendingTools?.[n]};for(let[a,c]of t.pendingTools??[])this.pendingToolOwners.get(c)===e&&(i[a]=c);e.pendingTools={...e.pendingTools,[n]:i},Object.keys(i).length===0&&delete e.pendingTools[n];let o=Object.entries(e.pendingTools).flatMap(([a,c])=>Object.keys(c).map(l=>[a,l]));for(let[a,c]of o.slice(0,Math.max(0,o.length-sb))){let l=e.pendingTools[a],u=l[c];delete l[c],Object.keys(l).length===0&&delete e.pendingTools[a];let f=this.sessions.get(a)?.pendingTools;f?.get(c)===u&&f.delete(c)}}applySessionContext(e,t){let n=typeof t.cwd=="string"?t.cwd:void 0,s=typeof t.project=="string"?t.project:void 0;n&&(e.cwd=n),s&&(e.project=s)}resolveMessageText(e){if(typeof e=="string")return e;if(!Array.isArray(e))return;let t=[];for(let n of e)n&&typeof n=="object"&&typeof n.text=="string"&&t.push(n.text);return t.length>0?t.join(`
34
+ `):void 0}async handleSessionInit(e,t){let n=typeof t.prompt=="string"?t.prompt:"";await this.anchorUserPrompt(e,n)}async anchorUserPrompt(e,t){t&&(e.lastUserMessage=t);let n=e.cwd;if(!n){this.skipWithoutCwd(e,"user prompt");return}try{await au({sessionId:e.sessionId,cwd:n,prompt:t,platform:e.platformSource})}catch(s){throw new Kr(e.sessionId,s)}}skipWithoutCwd(e,t){d.debug("TRANSCRIPT",`Skipping a ${t}: the session has no known working directory yet`,{sessionId:e.sessionId})}async handleToolUse(e,t,n,s){let i=typeof n.toolId=="string"?n.toolId:void 0,o=typeof n.toolName=="string"?n.toolName:void 0,a=this.maybeParseJson(n.toolInput),c=this.maybeParseJson(n.toolResponse);if(o==="apply_patch"&&typeof a=="string"){let l=this.parseApplyPatchFiles(a);for(let u of l)await this.sendFileEdit(e,{filePath:u,edits:[{type:"apply_patch",patch:a}]})}if(o&&c!==void 0)await this.sendObservation(e,t,{toolName:o,toolInput:a,toolResponse:c,toolUseId:i});else if(o&&i){e.pendingTools||(e.pendingTools=new Map);let l={toolName:o,toolInput:a};s&&this.pendingToolOwners.set(l,s),e.pendingTools.set(i,l)}}async handleToolResult(e,t,n,s){let i=typeof n.toolId=="string"?n.toolId:void 0,o=typeof n.toolName=="string"?n.toolName:void 0,a=this.maybeParseJson(n.toolResponse),c=this.maybeParseJson(n.toolInput),l=s?.pendingTools?.[this.getSessionKey(t,e.sessionId)],u=i?e.pendingTools?.get(i):void 0,f=s,p=s?(i?l?.[i]:void 0)??(u&&this.pendingToolOwners.get(u)===s?u:void 0):u;if(!p&&s&&i){let g=Array.from(this.fileContexts).flatMap(m=>{let h=m.pendingTools?.[this.getSessionKey(t,e.sessionId)]?.[i];return h&&m.isCurrent?.()!==!1?[{context:m,tool:h}]:[]});g.length===1&&(f=g[0].context,p=g[0].tool)}if(p&&(o||(o=p.toolName),c===void 0&&(c=p.toolInput)),o){if(await this.sendObservation(e,t,{toolName:o,toolInput:c,toolResponse:a,toolUseId:i}),i){e.pendingTools&&e.pendingTools.get(i)===p&&e.pendingTools.delete(i);let g=f?.pendingTools?.[this.getSessionKey(t,e.sessionId)];g&&delete g[i]}}else d.debug("TRANSCRIPT","Dropping tool_result with no resolvable toolName",{sessionId:e.sessionId,toolId:i})}async sendObservation(e,t,n){let s=typeof n.toolName=="string"?n.toolName:void 0;if(!s)return;if(!e.cwd){this.skipWithoutCwd(e,"observation");return}let i={contentSessionId:e.sessionId,cwd:e.cwd,toolName:s,toolInput:this.maybeParseJson(n.toolInput),toolResponse:this.maybeParseJson(n.toolResponse),platformSource:e.platformSource,toolUseId:typeof n.toolUseId=="string"?n.toolUseId:void 0,agentId:rb(t)};if(this.observationTransport==="spool"){try{ar("observation",i)}catch(a){throw new bt(e.sessionId,a)}return}let o=!1;try{let a=await Vf(i,{markHandedOff:()=>{o=!0}});if(!a.ok)throw new Error(a.reason)}catch(a){if(o){d.warn("TRANSCRIPT","Observation accepted before generator kick failed",{sessionId:e.sessionId},a instanceof Error?a:void 0);return}throw new Gr(e.sessionId,a)}}async sendFileEdit(e,t){let n=typeof t.filePath=="string"?t.filePath:void 0;if(n){if(!e.cwd){this.skipWithoutCwd(e,"file edit");return}try{await fu.execute({sessionId:e.sessionId,cwd:e.cwd,filePath:n,edits:Array.isArray(t.edits)?t.edits:void 0,platform:e.platformSource})}catch(s){throw new bt(e.sessionId,s)}}}maybeParseJson(e){if(typeof e!="string")return e;let t=e.trim();if(!t||!(t.startsWith("{")||t.startsWith("[")))return e;try{return JSON.parse(t)}catch(n){return 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(`
35
+ `);for(let s of n){let i=s.trim();if(i.startsWith("*** Update File: "))t.push(i.replace("*** Update File: ","").trim());else if(i.startsWith("*** Add File: "))t.push(i.replace("*** Add File: ","").trim());else if(i.startsWith("*** Delete File: "))t.push(i.replace("*** Delete File: ","").trim());else if(i.startsWith("*** Move to: "))t.push(i.replace("*** Move to: ","").trim());else if(i.startsWith("+++ ")){let o=i.replace("+++ ","").replace(/^b\//,"").trim();o&&o!=="/dev/null"&&t.push(o)}}return Array.from(new Set(t))}async handleSessionEnd(e,t){(!t.subagentOnly||e.isSubagent)&&(await this.queueSummary(e),await this.updateContext(e,t)),e.pendingTools?.clear();let n=this.getSessionKey(t,e.sessionId);this.sessions.delete(n)}async queueSummary(e){if(this.observationTransport==="spool"){try{ar("summarize",{contentSessionId:e.sessionId,platformSource:e.platformSource,lastAssistantMessage:e.lastAssistantMessage??"",...e.cwd?{cwd:e.cwd}:{}})}catch(i){throw new bt(e.sessionId,i)}return}if(!await xn())return;let n=e.lastAssistantMessage??"",s=JSON.stringify({contentSessionId:e.sessionId,last_assistant_message:n,platformSource:e.platformSource,...e.cwd?{cwd:e.cwd}:{}});try{await Ie("/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"||ja(t)||!await xn())return;let s=e.cwd??t.workspace;if(!s)return;let o=ct(s).allProjects.join(","),a=`/api/context/inject?projects=${encodeURIComponent(o)}&platformSource=${encodeURIComponent(e.platformSource)}`,c=X(t.context.path??`${s}/AGENTS.md`),l=jr.default.resolve(c),u=[jr.default.resolve(s),jr.default.resolve(F)];if(!u.some(m=>l.startsWith(m+jr.default.sep)||l===m)){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 Ie(a)}catch(m){d.warn("TRANSCRIPT","Failed to fetch AGENTS.md context",{error:m instanceof Error?m.message:String(m)});return}if(!p.ok)return;let g=(await p.text()).trim();g&&(mu(c,g),d.debug("TRANSCRIPT","Updated AGENTS.md context",{agentsPath:c,watch:t.name}))}};var Yf=Ee(require("node:zlib"),1),zt=require("node:fs");M();function qf(){let r=Yf.zstdDecompressSync;return typeof r=="function"?r:void 0}function Jf(){return qf()!==void 0}var ib=4247762216,ob=64*1024;function Gs(r,e,t,n=Number.POSITIVE_INFINITY){let s=(0,zt.openSync)(r,"r");try{let i=Buffer.alloc(0),o=0,a=(u,f)=>{if(u+f>t)return null;if(u<o||u+f>o+i.length){let p=Math.min(Math.max(f,ob),t-u),g=Buffer.alloc(p);if(i=g.subarray(0,(0,zt.readSync)(s,g,0,p,u)),o=u,i.length<f)return null}return i.subarray(u-o,u-o+f)},c=[],l=e;for(;l<t&&(c.length===0||l-e<n);){let u=l,f=a(l,4);if(!f)return{frames:c,tornStart:u};if(f.readUInt32LE(0)!==ib)throw new Error(`invalid Zstandard frame magic at byte ${l}`);l+=4;let p=a(l,1);if(!p)return{frames:c,tornStart:u};let g=p.readUInt8(0);if(l+=1,(g&8)!==0)throw new Error(`reserved Zstandard frame-header bit at byte ${l-1}`);let m=g>>>6,h=(g&32)!==0,_=(g&4)!==0,E=g&3,y=E===3?4:E,w=m===0?h?1:0:1<<m,A=(h?0:1)+y+w;if(l+A>t)return{frames:c,tornStart:u};for(l+=A;;){let T=a(l,3);if(!T)return{frames:c,tornStart:u};let P=T.readUIntLE(0,3);l+=3;let b=(P&1)!==0,v=P>>>1&3,S=P>>>3;if(v===3)throw new Error(`reserved Zstandard block type at byte ${l-3}`);let I=v===1?1:S;if(l+I>t)return{frames:c,tornStart:u};if(l+=I,b)break}if(_){if(l+4>t)return{frames:c,tornStart:u};l+=4}c.push({start:u,end:l})}return{frames:c,tornStart:null}}finally{(0,zt.closeSync)(s)}}function Sa(r,e){try{let t=qf();if(!t)throw new Error("this runtime cannot decode Zstandard (zlib.zstdDecompressSync is missing)");return t(r.subarray(e.start,e.end))}catch(t){throw d.warn("TRANSCRIPT","Failed to decompress Zstandard frame",{start:e.start,end:e.end,error:t instanceof Error?t.message:String(t)}),t}}function Xf(r,e){return Sa(r,e).toString("utf8")}var Qf=2e3,ab=1e3,cb=256*1024,Zf=4*1024*1024,lb=16*1024*1024,ub=100,ep=100;function zr(){return new Promise(r=>setImmediate(r))}var zs=".jsonl.zstd";async function db(r,e){try{let t=0;for(;t<e;){let n=Gs(r,t,e,lb);if(n.tornStart!==null)return n.tornStart;if(n.frames.length===0)break;t=n.frames[n.frames.length-1].end,await zr()}return t}catch{return e}}var tp=1024*1024;async function sp(r,e,t){let n;if(e){let{frames:i}=Gs(r,0,Math.min(t,tp),1);if(i.length===0)return null;n=Xf(await Ys(r,0,i[0].end),i[0])}else n=(await Ys(r,0,Math.min(t,tp))).toString("utf8");let s=n.indexOf(`
36
+ `);return s<0?null:n.slice(0,s)}async function fb(r,e,t){try{let n=await sp(r,e,t);if(n===null)return null;let s=JSON.parse(n);for(let i of["timestamp","time","createdAt"]){let o=s?.[i],a=typeof o=="number"?o<1e12?o*1e3:o:typeof o=="string"?Date.parse(o):Number.NaN;if(Number.isFinite(a)&&a>0)return a}return null}catch{return null}}function Vs(r){return`${r.dev}:${r.ino}`}function pb(r){try{return(0,N.statSync)(r),!1}catch(e){let t=e.code;return t==="ENOENT"||t==="ENOTDIR"}}var gb=4096;function ba(r,e,t){let n;try{if(n=(0,N.openSync)(r,"r"),Vs((0,N.fstatSync)(n))!==t)return null;let s=Math.max(0,e-gb),i=Buffer.alloc(e-s);return(0,N.readSync)(n,i,0,i.length,s)<i.length?null:(0,rp.createHash)("sha256").update(i).digest("hex")}catch(s){return d.debug("TRANSCRIPT","Could not fingerprint a transcript checkpoint",{file:r},s instanceof Error?s:void 0),null}finally{n!==void 0&&(0,N.closeSync)(n)}}function ip(r,e,t,n,s){return t<n?!1:s===void 0?!0:ba(r,n,e)===s}async function Ys(r,e,t){let n=await(0,np.open)(r,"r");try{let s=Buffer.alloc(t),{bytesRead:i}=await n.read(s,0,t,e);return s.subarray(0,i)}finally{await n.close()}}var ya=class{constructor(e,t,n,s,i="",o=0,a,c,l,u){this.filePath=e;this.onLine=n;this.onOffset=s;this.onReset=l;this.fileIdentity=a,this.checkpointFingerprint=c,this.isZstd=e.endsWith(zs),this.zstdPartialBytes=this.isZstd&&u?Buffer.from(u,"base64"):void 0,this.tailState={offset:t,readOffset:t,partial:this.isZstd?i:""},this.frameLinesDone=this.isZstd?o:0}filePath;onLine;onOffset;onReset;watcher=null;tailState;readTask=null;readPending=!1;closed=!1;isZstd;pendingRecord=Buffer.alloc(0);frameLinesDone;zstdPartialBytes;fileIdentity;checkpointFingerprint;start(){this.requestRead();try{this.watcher=(0,N.watch)(this.filePath,{persistent:!0},()=>{this.requestRead()})}catch(e){d.debug("WORKER","Failed to watch transcript file",{file:this.filePath},e instanceof Error?e:void 0),this.watcher=null}}close(){this.closed=!0,this.watcher?.close(),this.watcher=null}poke(){this.requestRead()}requestRead(){if(!this.closed){if(this.readTask){this.readPending=!0;return}this.readTask=this.drainReads().finally(()=>{this.readTask=null})}}async drainReads(){do this.readPending=!1,await this.readNewData().catch(()=>{}),this.readPending&&await zr();while(this.readPending&&!this.closed)}async readNewData(){if(!(0,N.existsSync)(this.filePath))return;let e=0,t;try{let o=(0,N.statSync)(this.filePath);e=o.size,t=Vs(o)}catch(o){d.debug("WORKER","Failed to stat transcript file",{file:this.filePath},o instanceof Error?o:void 0);return}let n=t!==this.fileIdentity,s=!1;n&&this.fileIdentity!==void 0&&(ip(this.filePath,t,e,this.tailState.offset,this.checkpointFingerprint)?(this.tailState.readOffset=this.tailState.offset,this.pendingRecord=Buffer.alloc(0)):s=!0),this.fileIdentity=t;let i=s||e<this.tailState.readOffset;if(i&&(this.onReset?.(),this.tailState.offset=0,this.tailState.readOffset=0,this.tailState.partial="",this.zstdPartialBytes=void 0,this.pendingRecord=Buffer.alloc(0),this.frameLinesDone=0),e===this.tailState.readOffset){(n||i)&&this.checkpoint(this.tailState.offset,this.tailState.partial);return}this.isZstd?await this.readNewZstdFrames(e):await this.readNewJsonl(e)}checkpoint(e,t="",n=this.zstdPartialBytes){this.zstdPartialBytes=n,this.tailState.offset=e,this.tailState.partial=t,this.checkpointFingerprint=this.fileIdentity===void 0?void 0:ba(this.filePath,e,this.fileIdentity)??void 0,this.onOffset(e,t,this.frameLinesDone,this.fileIdentity,this.checkpointFingerprint,this.zstdPartialBytes?.toString("base64"))}async readNewJsonl(e){let t=this.tailState.readOffset,n;try{n=await Ys(this.filePath,t,Math.min(e-t,Zf))}catch(c){d.debug("WORKER","Failed to read transcript file",{file:this.filePath},c instanceof Error?c:void 0);return}if(n.length===0)return;this.tailState.readOffset=t+n.length;let s=this.pendingRecord.length>0?Buffer.concat([this.pendingRecord,n]):n,i=this.tailState.offset,o=0,a=0;for(let c=s.indexOf(10);c!==-1;c=s.indexOf(10,o)){if(this.closed){this.checkpoint(i+o);return}let l=s.toString("utf8",o,c).trim();if(l)try{await this.onLine(l)}catch{this.pendingRecord=Buffer.alloc(0),this.tailState.readOffset=i+o,this.checkpoint(i+o);return}o=c+1,this.tailState.offset=i+o,l&&++a%ep===0&&(this.checkpoint(this.tailState.offset),await zr())}this.pendingRecord=Buffer.from(s.subarray(o)),this.checkpoint(i+o),this.tailState.readOffset<e&&(this.readPending=!0)}async readNewZstdFrames(e){let t=this.tailState.offset,n,s;try{if(n=Gs(this.filePath,t,e,Zf),n.frames.length===0)return;let o=n.frames[n.frames.length-1].end;if(s=await Ys(this.filePath,t,o-t),s.length<o-t)return}catch(o){d.warn("TRANSCRIPT","Failed to read zstd transcript frames",{file:this.filePath,error:o instanceof Error?o.message:String(o)});return}let i=0;for(let o of n.frames){let a;try{a=Sa(s,{start:o.start-t,end:o.end-t})}catch{this.checkpoint(this.tailState.offset,this.tailState.partial);return}let c=this.tailState.partial,l=this.zstdPartialBytes,u=Buffer.concat([l??Buffer.from(c,"utf8"),a]),f=[],p=0;for(let _=u.indexOf(10);_!==-1;_=u.indexOf(10,p))f.push(u.toString("utf8",p,_)),p=_+1;let g=u.subarray(p),m=g.toString("utf8"),h=Buffer.from(m,"utf8").equals(g)?void 0:Buffer.from(g);for(let _=this.frameLinesDone;_<f.length;_++){if(this.closed){this.frameLinesDone=_,this.checkpoint(o.start,c,l);return}let E=f[_].trim();if(E){try{await this.onLine(E)}catch{this.frameLinesDone=_,this.tailState.readOffset=o.start,this.checkpoint(o.start,c,l);return}++i%ep===0&&await zr()}}this.frameLinesDone=0,this.tailState.offset=o.end,this.tailState.readOffset=o.end,this.tailState.partial=h?"":m,this.zstdPartialBytes=h}this.checkpoint(this.tailState.offset,this.tailState.partial),n.tornStart===null&&this.tailState.offset<e&&(this.readPending=!0)}},qs=class{constructor(e,t,n="in-process"){this.config=e;this.statePath=t;this.processor=new Ks(n),this.state=Ja(t)}config;statePath;processor;tailers=new Map;state;fileContexts=new Map;retirementCandidates=new Set;retirementTimer=null;missingTranscriptGraceMs=ab;rootWatchers=[];rootWatchSettleTimers=new Set;startedAtMs=0;warnedZstdUnsupported=!1;startingTailers=new Set;stopped=!1;async start(){this.stopped=!1,this.startedAtMs=Date.now();for(let e of this.config.watches)await this.setupWatch(e);if(!this.stopped)for(let e of Object.keys(this.state.pendingTools??{}))this.tailers.has(e)||this.scheduleRetirementCheck(e)}stop(){this.stopped=!0;for(let e of this.tailers.values())e.close();this.tailers.clear();for(let e of this.rootWatchers)e.close();this.rootWatchers=[];for(let e of this.rootWatchSettleTimers)clearTimeout(e);this.rootWatchSettleTimers.clear(),this.retirementTimer&&clearTimeout(this.retirementTimer),this.retirementTimer=null,this.retirementCandidates.clear()}async setupWatch(e){let t=this.resolveSchema(e);if(!t){d.warn("TRANSCRIPT","Missing schema for watch",{watch:e.name});return}let n=X(e.path),s=this.resolveWatchFiles(n);for(let o of s)this.getFileContext(o);let i={stateChanged:!1};for(let o of s)await this.addTailer(o,e,t,!1,i),await zr();i.stateChanged&&Zt(this.statePath,this.state),this.watchTranscriptRoot(n,e,t)}watchTranscriptRoot(e,t,n,s=!1){let i=this.selectWatchRoot(e);if(!i){d.debug("TRANSCRIPT","Watch root does not exist, skipping fs.watch",{watch:t.name,path:e});return}let{root:o,recursive:a}=i;try{let c=(0,N.watch)(o,{recursive:a,persistent:!0},(l,u)=>{a?this.handleRootWatchEvent(o,e,t,n,u):this.handleAncestorWatchEvent(c,o,e,t,n,u)});this.rootWatchers.push(c),(s||!a)&&this.settleRootWatch(c,o,a,e,t,n),d.info("TRANSCRIPT",a?"Watching transcript root recursively":"Transcript root does not exist yet; watching its closest existing directory",{watch:t.name,watchRoot:o})}catch(c){d.warn("TRANSCRIPT","Failed to start fs.watch on transcript root",{watch:t.name,watchRoot:o},c instanceof Error?c:void 0)}}handleRootWatchEvent(e,t,n,s,i){if(!i)return;let o=(0,H.resolve)(e,i).replace(/\\/g,"/"),a=this.tailers.get(o);if(a){if(!(0,N.existsSync)(o)){a.close(),this.tailers.delete(o),this.scheduleRetirementCheck(o);return}a.poke();return}this.touchesLiteralPrefix(o,t)&&this.addDiscoveredTailers(t,n,s)}handleAncestorWatchEvent(e,t,n,s,i,o){if(this.stopped||!this.rootWatchers.includes(e)||o&&!this.touchesLiteralPrefix((0,H.resolve)(t,o),n))return;let a=this.selectWatchRoot(n);a&&a.root===t&&!a.recursive||(e.close(),this.rootWatchers=this.rootWatchers.filter(c=>c!==e),this.watchTranscriptRoot(n,s,i,!0),this.addDiscoveredTailers(n,s,i))}settleRootWatch(e,t,n,s,i,o){let a=setTimeout(()=>{this.rootWatchSettleTimers.delete(a),!(this.stopped||!this.rootWatchers.includes(e))&&(n?this.addDiscoveredTailers(s,i,o):this.handleAncestorWatchEvent(e,t,s,i,o,null))},ub);this.rootWatchSettleTimers.add(a)}getFileContext(e){let t=this.fileContexts.get(e);return t||(t={cwd:this.state.cwds?.[e],pendingTools:this.state.pendingTools?.[e],isCurrent:()=>this.isCheckpointedFile(e)},this.fileContexts.set(e,t)),this.processor.registerFileContext(t),t}isCheckpointedFile(e){try{let t=(0,N.statSync)(e);return Vs(t)===this.state.fileIdentities?.[e]&&t.size>=(this.state.offsets[e]??0)}catch{return!1}}scheduleRetirementCheck(e){this.retirementCandidates.add(e),this.retirementTimer??=setTimeout(()=>this.retireMissingTranscripts(),this.missingTranscriptGraceMs)}retireMissingTranscripts(){this.retirementTimer=null;let e=[...this.retirementCandidates];if(this.retirementCandidates.clear(),this.stopped)return;let t=!1;for(let n of e){if(this.tailers.has(n)||!pb(n))continue;let s=this.fileContexts.get(n);s&&this.processor.retireFileContext(s),this.fileContexts.delete(n),this.state.pendingTools?.[n]&&(delete this.state.pendingTools[n],t=!0)}t&&Zt(this.statePath,this.state)}forgetReplacedTranscript(e,t){this.processor.resetFileContext(t),delete this.state.pendingTools?.[e],delete this.state.cwds?.[e]}addDiscoveredTailers(e,t,n){for(let s of this.resolveWatchFiles(e))this.tailers.has(s)||this.addTailer(s,t,n,!0).catch(i=>{d.debug("TRANSCRIPT","Failed to add transcript tailer",{file:s,watch:t.name},i instanceof Error?i:void 0)})}touchesLiteralPrefix(e,t){let n=e.replace(/\\/g,"/"),s=(0,H.resolve)(this.literalWatchPrefix(t)).replace(/\\/g,"/"),i=(o,a)=>o.startsWith(a.endsWith("/")?a:a+"/");return n===s||i(n,s)||i(s,n)}literalWatchPrefix(e){let t=e;if(this.hasGlob(e)){let n=e.split(/[/\\]/),s=[];for(let i of n){if(/[*?[\]{}()]/.test(i))break;s.push(i)}if(s.length===0||s.length===1&&s[0]==="")return"";t=s.join(H.sep)}return t}selectWatchRoot(e){let t=this.literalWatchPrefix(e);if(!t)return null;let n=(0,H.resolve)(t);try{return{root:(0,N.statSync)(n).isDirectory()?n:(0,H.resolve)(n,".."),recursive:!0}}catch{}for(let s=(0,H.resolve)(n,"..");(0,H.resolve)(s,"..")!==s;s=(0,H.resolve)(s,".."))try{if((0,N.statSync)(s).isDirectory())return{root:s,recursive:!1}}catch{}return null}resolveSchema(e){return typeof e.schema=="string"?this.config.schemas?.[e.schema]??null:e.schema}resolveWatchFiles(e){if(this.hasGlob(e))return this.scanGlob(this.normalizeGlobPattern(e));if((0,N.existsSync)(e))try{return(0,N.statSync)(e).isDirectory()?[...this.scanGlob(this.normalizeGlobPattern((0,H.join)(e,"**","*.jsonl"))),...this.scanGlob(this.normalizeGlobPattern((0,H.join)(e,"**",`*${zs}`)))]:[e]}catch(t){return d.debug("WORKER","Failed to stat watch path",{path:e},t instanceof Error?t:void 0),[]}return[]}scanGlob(e){try{return Array.from(new Bun.Glob(e).scanSync({absolute:!0,onlyFiles:!0,dot:!0}))}catch(t){let n=t?.code;if(n==="ENOENT"||n==="ENOTDIR")return[];throw t}}normalizeGlobPattern(e){return e.replace(/\\/g,"/")}hasGlob(e){return/[*?[\]{}()]/.test(e)}async addTailer(e,t,n,s=!1,i){if(e=X(e),!(this.tailers.has(e)||this.startingTailers.has(e))){this.startingTailers.add(e);try{await this.startTailer(e,t,n,s,i)}finally{this.startingTailers.delete(e)}}}async startTailer(e,t,n,s,i){let o=e.endsWith(zs);if(o&&!Jf()){this.warnedZstdUnsupported||(this.warnedZstdUnsupported=!0,d.warn("TRANSCRIPT","Skipping zstd transcripts: this runtime has no zlib.zstdDecompressSync (update Bun or Node)",{file:e}));return}let a=this.extractSessionIdFromPath(e),c=this.getFileContext(e),l=this.state.offsets[e],u=l??0,f=!1;if(l===void 0&&t.startAtEnd)try{let m=(0,N.statSync)(e);if(s&&m.mtimeMs>=this.startedAtMs-Qf&&await this.startedAfterThisWatcher(e,o,m.size)||(u=o?await db(e,m.size):m.size),this.stopped)return;this.state.offsets[e]=u,f=!0}catch(m){d.debug("WORKER","Failed to stat file for startAtEnd offset",{file:e},m instanceof Error?m:void 0),u=0}try{let m=(0,N.statSync)(e),h=Vs(m),_=this.state.fileIdentities?.[e],E=l!==void 0&&_!==void 0&&!ip(e,h,m.size,l,this.state.checkpointFingerprints?.[e]);if(E&&(u=0,this.state.offsets[e]=0,delete this.state.partials?.[e],delete this.state.partialBytes?.[e],delete this.state.frameLines?.[e],this.forgetReplacedTranscript(e,c)),E||h!==_){(this.state.fileIdentities??={})[e]=h;let y=ba(e,u,h);y!==null?(this.state.checkpointFingerprints??={})[e]=y:delete this.state.checkpointFingerprints?.[e],f=!0}}catch(m){d.debug("WORKER","Failed to stat transcript file for its identity",{file:e},m instanceof Error?m:void 0)}f&&(s?Zt(this.statePath,this.state):i&&(i.stateChanged=!0));let p=u>0&&(!!n.sessionIdPath||!!t.subagentSource||!c.cwd),g=new ya(e,u,async m=>{try{p&&(p=!1,await this.primeFromFirstLine(e,u,t,n,a,c)),await this.handleLine(m,t,n,e,a,c)}finally{c.pendingTools&&((this.state.pendingTools??={})[e]=c.pendingTools),c.cwd&&c.cwd!==this.state.cwds?.[e]&&((this.state.cwds??={})[e]=c.cwd)}},(m,h,_,E,y,w)=>{E!==void 0&&((this.state.fileIdentities??={})[e]=E),y!==void 0?(this.state.checkpointFingerprints??={})[e]=y:this.state.checkpointFingerprints&&delete this.state.checkpointFingerprints[e],this.state.offsets[e]=m,h?(this.state.partials??={})[e]=h:this.state.partials&&delete this.state.partials[e],w?(this.state.partialBytes??={})[e]=w:this.state.partialBytes&&delete this.state.partialBytes[e],_>0?(this.state.frameLines??={})[e]=_:this.state.frameLines&&delete this.state.frameLines[e],Zt(this.statePath,this.state)},this.state.partials?.[e]??"",this.state.frameLines?.[e]??0,this.state.fileIdentities?.[e],this.state.checkpointFingerprints?.[e],()=>this.forgetReplacedTranscript(e,c),this.state.partialBytes?.[e]);g.start(),this.tailers.set(e,g),d.info("TRANSCRIPT","Watching transcript file",{file:e,watch:t.name,schema:n.name})}async startedAfterThisWatcher(e,t,n){let s=await fb(e,t,n);return s!==null?s>=this.startedAtMs-Qf:n<=cb}async primeFromFirstLine(e,t,n,s,i,o){try{let a=await sp(e,e.endsWith(zs),t);if(a===null)return;await this.processor.primeSessionContext(JSON.parse(a),n,s,i,o)}catch(a){d.debug("TRANSCRIPT","Could not read the first line of a resumed transcript",{watch:n.name,file:(0,H.basename)(e)},a instanceof Error?a:void 0)}}async handleLine(e,t,n,s,i,o){try{let a=JSON.parse(e);await this.processor.processEntry(a,t,n,i??void 0,o)}catch(a){if(a instanceof Kr||a instanceof Gr||a instanceof bt)throw d.warn("TRANSCRIPT","Transcript event not accepted; it is retried from its own line",{watch:t.name,file:(0,H.basename)(s),error:a.message}),a;a instanceof Error?d.debug("TRANSCRIPT","Failed to parse transcript line",{watch:t.name,file:(0,H.basename)(s)},a):d.warn("TRANSCRIPT","Failed to parse transcript line (non-Error thrown)",{watch:t.name,file:(0,H.basename)(s),error:String(a)})}}extractSessionIdFromPath(e){let t=e.match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i);return t?t[0]:null}};function wa(r,e){let t=r.indexOf(e);return t===-1?null:r[t+1]??null}function op(r){(0,ap.existsSync)(X(r))||(ii(r),console.log(`Created sample config: ${X(r)}`))}async function cp(r,e){switch(r){case"init":{let t=wa(e,"--config")??vt;return ii(t),console.log(`Created sample config: ${X(t)}`),0}case"watch":{let t=wa(e,"--config")??vt;op(t);let n=$.loadFromFile(oe),{config:s,scoped:i,removed:o}=Ka(si(t),n);if(i>0&&console.log(`Scoped ${i} Codex transcript watch(es) to subagent sessions (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true); native hooks capture top-level sessions.`),o>0&&console.log(`Skipped ${o} Codex transcript watch(es): native hooks capture top-level Codex sessions, and subagent capture is opt-in (CLAUDE_MEM_CODEX_SUBAGENT_INGESTION=true).`),s.watches.length===0)return console.log(`No active transcript watches in ${X(t)}; nothing to watch.`),1;let a=X(s.stateFile??Zr),c=new qs(s,a,"spool");await c.start(),console.log("Transcript watcher running. Press Ctrl+C to stop.");let l=()=>{c.stop(),process.exit(0)};return process.on("SIGINT",l),process.on("SIGTERM",l),await new Promise(()=>{})}case"validate":{let t=wa(e,"--config")??vt;return op(t),si(t),console.log(`Config OK: ${X(t)}`),0}default:return console.log("Usage: claude-mem transcript <init|watch|validate> [--config <path>]"),1}}var mb=process.argv[2],hb=process.argv.slice(3);cp(mb,hb).then(r=>{process.exit(r)}).catch(r=>{console.error(r),process.exit(1)});
38
37
  /*! Bundled license information:
39
38
 
40
39
  @posthog/core/dist/vendor/uuidv7.mjs: