| 1 | #!/usr/bin/env node |
| 2 | var XC=Object.create;var Ad=Object.defineProperty;var YC=Object.getOwnPropertyDescriptor;var QC=Object.getOwnPropertyNames;var eO=Object.getPrototypeOf,tO=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var L=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),_e=(t,e)=>{for(var n in e)Ad(t,n,{get:e[n],enumerable:!0})},nO=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of QC(e))!tO.call(t,o)&&o!==n&&Ad(t,o,{get:()=>e[o],enumerable:!(r=YC(e,o))||r.enumerable});return t};var xi=(t,e,n)=>(n=t!=null?XC(eO(t)):{},nO(e||!t||!t.__esModule?Ad(n,"default",{value:t,enumerable:!0}):n,t));var Ld=L((E9,Zb)=>{"use strict";var jd={to(t,e){return e?`\x1B[${e+1};${t+1}H`:`\x1B[${t+1}G`},move(t,e){let n="";return t<0?n+=`\x1B[${-t}D`:t>0&&(n+=`\x1B[${t}C`),e<0?n+=`\x1B[${-e}A`:e>0&&(n+=`\x1B[${e}B`),n},up:(t=1)=>`\x1B[${t}A`,down:(t=1)=>`\x1B[${t}B`,forward:(t=1)=>`\x1B[${t}C`,backward:(t=1)=>`\x1B[${t}D`,nextLine:(t=1)=>"\x1B[E".repeat(t),prevLine:(t=1)=>"\x1B[F".repeat(t),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},gO={up:(t=1)=>"\x1B[S".repeat(t),down:(t=1)=>"\x1B[T".repeat(t)},yO={screen:"\x1B[2J",up:(t=1)=>"\x1B[1J".repeat(t),down:(t=1)=>"\x1B[J".repeat(t),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(t){let e="";for(let n=0;n<t;n++)e+=this.line+(n<t-1?jd.up():"");return t&&(e+=jd.left),e}};Zb.exports={cursor:jd,scroll:gO,erase:yO,beep:"\x07"}});var Jb=L((dV,Bd)=>{var _c=process||{},Kb=_c.argv||[],yc=_c.env||{},FO=!(yc.NO_COLOR||Kb.includes("--no-color"))&&(!!yc.FORCE_COLOR||Kb.includes("--color")||_c.platform==="win32"||(_c.stdout||{}).isTTY&&yc.TERM!=="dumb"||!!yc.CI),ZO=(t,e,n=t)=>r=>{let o=""+r,s=o.indexOf(e,t.length);return~s?t+BO(o,e,n,s)+e:t+o+e},BO=(t,e,n,r)=>{let o="",s=0;do o+=t.substring(s,r)+n,s=r+e.length,r=t.indexOf(e,s);while(~r);return o+t.substring(s)},Gb=(t=FO)=>{let e=t?ZO:()=>String;return{isColorSupported:t,reset:e("\x1B[0m","\x1B[0m"),bold:e("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:e("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:e("\x1B[3m","\x1B[23m"),underline:e("\x1B[4m","\x1B[24m"),inverse:e("\x1B[7m","\x1B[27m"),hidden:e("\x1B[8m","\x1B[28m"),strikethrough:e("\x1B[9m","\x1B[29m"),black:e("\x1B[30m","\x1B[39m"),red:e("\x1B[31m","\x1B[39m"),green:e("\x1B[32m","\x1B[39m"),yellow:e("\x1B[33m","\x1B[39m"),blue:e("\x1B[34m","\x1B[39m"),magenta:e("\x1B[35m","\x1B[39m"),cyan:e("\x1B[36m","\x1B[39m"),white:e("\x1B[37m","\x1B[39m"),gray:e("\x1B[90m","\x1B[39m"),bgBlack:e("\x1B[40m","\x1B[49m"),bgRed:e("\x1B[41m","\x1B[49m"),bgGreen:e("\x1B[42m","\x1B[49m"),bgYellow:e("\x1B[43m","\x1B[49m"),bgBlue:e("\x1B[44m","\x1B[49m"),bgMagenta:e("\x1B[45m","\x1B[49m"),bgCyan:e("\x1B[46m","\x1B[49m"),bgWhite:e("\x1B[47m","\x1B[49m"),blackBright:e("\x1B[90m","\x1B[39m"),redBright:e("\x1B[91m","\x1B[39m"),greenBright:e("\x1B[92m","\x1B[39m"),yellowBright:e("\x1B[93m","\x1B[39m"),blueBright:e("\x1B[94m","\x1B[39m"),magentaBright:e("\x1B[95m","\x1B[39m"),cyanBright:e("\x1B[96m","\x1B[39m"),whiteBright:e("\x1B[97m","\x1B[39m"),bgBlackBright:e("\x1B[100m","\x1B[49m"),bgRedBright:e("\x1B[101m","\x1B[49m"),bgGreenBright:e("\x1B[102m","\x1B[49m"),bgYellowBright:e("\x1B[103m","\x1B[49m"),bgBlueBright:e("\x1B[104m","\x1B[49m"),bgMagentaBright:e("\x1B[105m","\x1B[49m"),bgCyanBright:e("\x1B[106m","\x1B[49m"),bgWhiteBright:e("\x1B[107m","\x1B[49m")}};Bd.exports=Gb();Bd.exports.createColors=Gb});function ki(t,e){let n=process.execPath.replace(/\\/g,"/");if(Jr(e?.platform)){let o=n.split("/").pop().replace(/\.exe$/i,"");qd.has(o)||(n=e?.jsRuntime?.replace(/\\/g,"/")??"node")}let r=t.replace(/\\/g,"/");return`"${n}" "${r}"`}function qe(t,e){if(Jr(e?.platform))return ki(t,e);let r=Vd().path.replace(/\\/g,"/"),o=t.replace(/\\/g,"/");return`"${r}" "${o}"`}function bc(t){if(typeof t!="string"||t.length===0)return null;let e=t.match(/^"([^"]+)"\s+"([^"]+)"\s*$/);return e?{nodePath:e[1],scriptPath:e[2]}:null}function Jr(t){return!!t&&qO.has(t)}var qd,qO,Rn=x(()=>{"use strict";Yo();qd=new Set(["node","bun","deno"]),qO=new Set(["opencode","kilo"])});var rx={};_e(rx,{buildCommand:()=>Xd,detectRuntimes:()=>Xr,getAvailableLanguages:()=>Ti,getRuntimeSummary:()=>Ei,hasBunRuntime:()=>mr,isAllowlistedShell:()=>Yb,resetHookRuntimeCache:()=>XO,resolveHookRuntime:()=>Vd,resolveJavascriptRuntime:()=>nx});import{execFileSync as Gd,execSync as Qo}from"node:child_process";import{existsSync as es}from"node:fs";function Kd(t){let e=t.split(/[\\/]/);return e[e.length-1]??t}function Yb(t){return VO.test(Kd(t))}function WO(t){let e=t.toLowerCase().replace(/\//g,"\\");return/\\windows\\(?:system32|sysnative)\\bash\.exe$/.test(e)||/\\microsoft\\windowsapps\\bash\.exe$/.test(e)}function KO(t){let e=t.toLowerCase().replace(/\//g,"\\");return/\\windows\\(?:system32|sysnative)\\cmd\.exe$/.test(e)}function Ge(t){try{let e=wi?`where ${t}`:`command -v ${t}`;return Qo(e,{stdio:"pipe"}),!0}catch{return!1}}function Wd(t){if(wi)try{let n=Qo(`where ${t}`,{encoding:"utf-8",stdio:"pipe"}).trim().split(/\r?\n/).map(o=>o.trim()).filter(Boolean);if(n.length===0||n.filter(o=>!/\\Microsoft\\WindowsApps\\/i.test(o)).length===0)return!1}catch{return!1}else if(!Ge(t))return!1;try{return wi?Qo(`"${t}" --version`,{stdio:"pipe",timeout:5e3}):Gd(t,["--version"],{stdio:"pipe",timeout:1500}),!0}catch{return!1}}function Jd(){if(Ge("bun"))return!0;for(let t of ex())if(es(t))return!0;return!1}function Qb(){for(let e of ex())if(es(e))return e;if(Ge("bun"))return"bun";let t=process.env.HOME??process.env.USERPROFILE??"";return wi?`${t}\\.bun\\bin\\bun.exe`:`${t}/.bun/bin/bun`}function ex(){let t=process.env.HOME??process.env.USERPROFILE??"";if(wi){let e=process.env.LOCALAPPDATA??"",n=process.env.APPDATA??"";return[...t?[`${t}\\.bun\\bin\\bun.exe`]:[],...e?[`${e}\\bun\\bin\\bun.exe`]:[],...n?[`${n}\\npm\\node_modules\\bun\\bin\\bun.exe`]:[]]}return t?[`${t}/.bun/bin/bun`]:[]}function tx(){let t;try{t=Qo("where bash",{encoding:"utf-8",stdio:"pipe"}).trim().split(/\r?\n/).map(n=>n.trim()).filter(Boolean)}catch{return null}for(let e of t){let n=e.toLowerCase();if(!(n.includes("system32")||n.includes("windowsapps"))){for(let r of GO)if(es(r))return r;return e}}return null}function JO(t=tx()){return t??(Ge("sh")?"sh":Ge("pwsh")?"pwsh":Ge("powershell")?"powershell":"cmd.exe")}function Wt(t,e=["--version"]){try{if(process.platform==="win32"){let n=[t,...e].map(r=>/[\s"&|<>^()%!]/.test(r)?JSON.stringify(r):r).join(" ");return Qo(n,{encoding:"utf-8",stdio:["pipe","pipe","pipe"],timeout:5e3}).trim().split(/\r?\n/)[0]}else return Gd(t,e,{encoding:"utf-8",stdio:["pipe","pipe","pipe"],timeout:5e3}).trim().split(/\r?\n/)[0]}catch{return"unknown"}}function nx(t,e={}){if(t)return t;let n=e.execPath??process.execPath,r=e.commandExists??Ge,o=n.split(/[\\/]/).pop().replace(/\.exe$/i,"");return qd.has(o)&&es(n)?n:r("node")?"node":null}function Xr(){let e=Jd()?Qb():null,n=process.env.SHELL,r=process.platform==="win32",o=r?tx():null,s=n&&es(n)&&Yb(n)&&!(r&&WO(n))&&!(r&&o&&KO(n))?n:null;return{javascript:nx(e),typescript:e||(Ge("tsx")?"tsx":Ge("ts-node")?"ts-node":null),python:Wd("python3")?"python3":Wd("python")?"python":Wd("py")?"py":null,shell:s??(r?JO(o):Ge("bash")?"bash":"sh"),ruby:Ge("ruby")?"ruby":null,go:Ge("go")?"go":null,rust:Ge("rustc")?"rustc":null,php:Ge("php")?"php":null,perl:Ge("perl")?"perl":null,r:Ge("Rscript")?"Rscript":Ge("r")?"r":null,elixir:Ge("elixir")?"elixir":null,csharp:Ge("dotnet-script")?"dotnet-script":null}}function mr(){return Jd()}function XO(){Ht=null}function YO(t){let e=t.trim(),n=/^(\d+)\.(\d+)\.(\d+)/.exec(e);if(!n)return!1;let r=Number(n[1]);return Number.isFinite(r)&&r>=1}function QO(){return es(process.execPath)?{path:process.execPath,isBun:!1}:Ge("node")?{path:"node",isBun:!1}:{path:process.execPath,isBun:!1}}function Vd(){if(Ht)return Ht;let t=QO();try{if(!Jd())return Ht=t,Ht;let e=Qb(),n;try{if(process.platform==="win32"){let r=Qo(`"${e}" --version`,{encoding:"utf-8",stdio:["pipe","pipe","pipe"],timeout:5e3});n=String(r)}else{let r=Gd(e,["--version"],{encoding:"utf-8",stdio:["pipe","pipe","pipe"],timeout:5e3});n=String(r)}}catch{return Ht=t,Ht}return YO(n)?(Ht={path:e,isBun:!0},Ht):(Ht=t,Ht)}catch{return Ht=t,Ht}}function Ei(t){let e=[],n=t.javascript?.endsWith("bun")??!1;return t.javascript?e.push(` JavaScript: ${t.javascript} (${Wt(t.javascript)})${n?" \u26A1":""}`):e.push(" JavaScript: not available (install node or bun \u2014 host process is not a JS runtime)"),t.typescript?e.push(` TypeScript: ${t.typescript} (${Wt(t.typescript)})`):e.push(" TypeScript: not available (install bun, tsx, or ts-node)"),t.python?e.push(` Python: ${t.python} (${Wt(t.python)})`):e.push(" Python: not available"),e.push(` Shell: ${t.shell} (${Wt(t.shell)})`),t.ruby&&e.push(` Ruby: ${t.ruby} (${Wt(t.ruby)})`),t.go&&e.push(` Go: ${t.go} (${Wt(t.go,["version"])})`),t.rust&&e.push(` Rust: ${t.rust} (${Wt(t.rust)})`),t.php&&e.push(` PHP: ${t.php} (${Wt(t.php)})`),t.perl&&e.push(` Perl: ${t.perl} (${Wt(t.perl)})`),t.r&&e.push(` R: ${t.r} (${Wt(t.r)})`),t.elixir&&e.push(` Elixir: ${t.elixir} (${Wt(t.elixir)})`),t.csharp&&e.push(` C#: ${t.csharp} (${Wt(t.csharp)})`),n||(e.push(""),e.push(" Tip: Install Bun for 3-5x faster JS/TS execution \u2192 https://bun.sh")),e.join(` |
| 3 | `)}function Ti(t){let e=["javascript","shell"];return t.typescript&&e.push("typescript"),t.python&&e.push("python"),t.ruby&&e.push("ruby"),t.go&&e.push("go"),t.rust&&e.push("rust"),t.php&&e.push("php"),t.perl&&e.push("perl"),t.r&&e.push("r"),t.elixir&&e.push("elixir"),t.csharp&&e.push("csharp"),e}function Xd(t,e,n){switch(e){case"javascript":if(!t.javascript)throw new Error("No JavaScript runtime available. Install Node.js or Bun on PATH (the host process is not itself a JS runtime).");return Xb.test(Kd(t.javascript))?[t.javascript,"run",n]:[t.javascript,n];case"typescript":if(!t.typescript)throw new Error("No TypeScript runtime available. Install one of: bun (recommended), tsx (npm i -g tsx), or ts-node.");return Xb.test(Kd(t.typescript))?[t.typescript,"run",n]:t.typescript==="tsx"?["tsx",n]:["ts-node",n];case"python":if(!t.python)throw new Error("No Python runtime available. Install python3 or python.");return[t.python,n];case"shell":{if(process.platform==="win32"){let o=t.shell.toLowerCase();if(o.includes("bash")||o.endsWith("/sh")||o.endsWith("\\sh.exe")){let i=n.replace(/'/g,"'\\''");return[t.shell,"-c",`source '${i}'`]}if(o.includes("powershell")||o.includes("pwsh"))return[t.shell,"-NoProfile","-ExecutionPolicy","Bypass","-File",n];let s=o.split(/[\\/]/).pop()??o;if(s==="cmd"||s==="cmd.exe")return[t.shell,"/d","/s","/c",n]}return[t.shell,n]}case"ruby":if(!t.ruby)throw new Error("Ruby not available. Install ruby.");return[t.ruby,n];case"go":if(!t.go)throw new Error("Go not available. Install go.");return["go","run",n];case"rust":{if(!t.rust)throw new Error("Rust not available. Install rustc via https://rustup.rs");return["__rust_compile_run__",n]}case"php":if(!t.php)throw new Error("PHP not available. Install php.");return["php",n];case"perl":if(!t.perl)throw new Error("Perl not available. Install perl.");return["perl",n];case"r":if(!t.r)throw new Error("R not available. Install R / Rscript.");return[t.r,n];case"elixir":if(!t.elixir)throw new Error("Elixir not available. Install elixir.");return["elixir",n];case"csharp":if(!t.csharp)throw new Error("C# not available. Install dotnet-script via `dotnet tool install -g dotnet-script`.");return[t.csharp,n]}}var VO,Xb,wi,GO,Ht,Yo=x(()=>{"use strict";Rn();VO=/^(bash|sh|zsh|dash|pwsh|powershell|cmd)(\.exe)?$/i,Xb=/^bun(\.exe)?$/i;wi=process.platform==="win32";GO=["C:\\Program Files\\Git\\usr\\bin\\bash.exe","C:\\Program Files (x86)\\Git\\usr\\bin\\bash.exe"];Ht=null});function eI(t){let e=[];if(t&&typeof t=="object"){let n=t.command;typeof n=="string"&&e.push(n);let r=t.hooks;if(Array.isArray(r)){for(let o of r)if(o&&typeof o=="object"){let s=o.command;typeof s=="string"&&e.push(s)}}}return e}function tI(t){let e=bc(t);if(e)return e.scriptPath.endsWith(".mjs")?e.scriptPath:null;let n=t.match(/^\s*node\s+"([^"]+\.mjs)"\s*$/);if(n)return n[1];let r=t.match(/^\s*node\s+(\S+\.mjs)\s*$/);return r?r[1]:null}function xc(t,e){let n=new Set,r=t.generateHookConfig(e);for(let o of Object.values(r))if(Array.isArray(o))for(let s of o)for(let i of eI(s)){let a=tI(i);a&&n.add(a)}return[...n]}var Yd=x(()=>{"use strict";Rn()});var ox,sx=x(()=>{"use strict";ox={"claude-code":"claude-code","gemini-cli-mcp-client":"gemini-cli","antigravity-client":"antigravity","antigravity-cli":"antigravity-cli",agy:"antigravity-cli","cursor-vscode":"cursor","Visual-Studio-Code":"vscode-copilot","copilot-cli":"copilot-cli","GitHub Copilot CLI":"copilot-cli","github-copilot-cli":"copilot-cli","JetBrains Client":"jetbrains-copilot","IntelliJ IDEA":"jetbrains-copilot",PyCharm:"jetbrains-copilot",Codex:"codex","codex-mcp-client":"codex","Kilo Code":"kilo","Kiro CLI":"kiro","Pi CLI":"pi","Pi Coding Agent":"pi","omp-coding-agent":"omp",Zed:"zed",zed:"zed","qwen-code":"qwen-code","qwen-cli-mcp-client":"qwen-code","kimi-code":"kimi",kimi:"kimi","Kimi Code":"kimi"}});var tp={};_e(tp,{BunSQLiteAdapter:()=>Sc,NodeSQLiteAdapter:()=>vc,SQLiteBase:()=>Pi,applyWALPragmas:()=>ns,cleanOrphanedWALFiles:()=>rs,closeDB:()=>os,defaultDBPath:()=>ep,deleteDBFiles:()=>kc,hasModernSqlite:()=>cx,isSQLiteCorruptionError:()=>wc,loadDatabase:()=>nt,nodeSqliteHasFts5:()=>ax,renameCorruptDB:()=>ux,withRetry:()=>fr});import{createRequire as nI}from"node:module";import{existsSync as rI,unlinkSync as ix,renameSync as oI}from"node:fs";import{tmpdir as sI}from"node:os";import{join as iI}from"node:path";function ax(t){let e=null;try{return e=new t(":memory:"),e.exec("CREATE VIRTUAL TABLE __fts5_probe USING fts5(x)"),!0}catch{return!1}finally{try{e?.close()}catch{}}}function cx(t,e){let n=e!==void 0?e:globalThis.Bun;if(typeof n<"u"&&n!==null)return!0;let r=t??process.versions,[o,s]=(r.node??"0.0.0").split("."),i=Number(o),a=Number(s);return!Number.isFinite(i)||!Number.isFinite(a)?!1:i>22||i===22&&a>=5}function nt(){if(!ts){let t=nI(import.meta.url);if(globalThis.Bun){let e=t(["bun","sqlite"].join(":")).Database;ts=function(r,o){let s=new e(r,{readonly:o?.readonly,create:!0}),i=new Sc(s);return o?.timeout&&i.pragma(`busy_timeout = ${o.timeout}`),i}}else if(cx()){let e=null;try{({DatabaseSync:e}=t(["node","sqlite"].join(":")))}catch{e=null}e&&ax(e)?ts=function(r,o){let s=new e(r,{readOnly:o?.readonly??!1}),i=new vc(s);return o?.timeout&&i.pragma(`busy_timeout = ${o.timeout}`),i}:ts=t("better-sqlite3")}else ts=t("better-sqlite3")}return ts}function ns(t){t.pragma("journal_mode = WAL"),t.pragma("synchronous = NORMAL");try{t.pragma("mmap_size = 268435456")}catch{}}function rs(t){if(!rI(t))for(let e of["-wal","-shm"])try{ix(t+e)}catch{}}function kc(t){for(let e of["","-wal","-shm"])try{ix(t+e)}catch{}}function os(t){try{t.pragma("wal_checkpoint(TRUNCATE)")}catch{}try{t.close()}catch{}}function ep(t="context-mode"){return iI(sI(),`${t}-${process.pid}.db`)}function fr(t,e=[100,500,2e3]){let n;for(let r=0;r<=e.length;r++)try{return t()}catch(o){let s=o instanceof Error?o.message:String(o);if(!s.includes("SQLITE_BUSY")&&!s.includes("database is locked"))throw o;if(n=o instanceof Error?o:new Error(s),r<e.length){let i=e[r],a=Date.now();for(;Date.now()-a<i;);}}throw new Error(`SQLITE_BUSY: database is locked after ${e.length} retries. Original error: ${n?.message}`)}function wc(t){return t.includes("SQLITE_CORRUPT")||t.includes("SQLITE_NOTADB")||t.includes("database disk image is malformed")||t.includes("file is not a database")}function ux(t){let e=Date.now();for(let n of["","-wal","-shm"])try{oI(t+n,`${t}${n}.corrupt-${e}`)}catch{}}var Sc,vc,ts,$i,Qd,Pi,hr=x(()=>{"use strict";Sc=class{#e;constructor(e){this.#e=e}pragma(e){let r=this.#e.prepare(`PRAGMA ${e}`).all();if(!r||r.length===0)return;if(r.length>1)return r;let o=Object.values(r[0]);return o.length===1?o[0]:r[0]}exec(e){let n="",r=null;for(let s=0;s<e.length;s++){let i=e[s];if(r)n+=i,i===r&&(r=null);else if(i==="'"||i==='"')n+=i,r=i;else if(i===";"){let a=n.trim();a&&this.#e.prepare(a).run(),n=""}else n+=i}let o=n.trim();return o&&this.#e.prepare(o).run(),this}prepare(e){let n=this.#e.prepare(e);return{run:(...r)=>n.run(...r),get:(...r)=>{let o=n.get(...r);return o===null?void 0:o},all:(...r)=>n.all(...r),iterate:(...r)=>n.iterate(...r)}}transaction(e){return this.#e.transaction(e)}close(){this.#e.close()}},vc=class{#e;constructor(e){this.#e=e}pragma(e){let r=this.#e.prepare(`PRAGMA ${e}`).all();if(!r||r.length===0)return;if(r.length>1)return r;let o=Object.values(r[0]);return o.length===1?o[0]:r[0]}exec(e){return this.#e.exec(e),this}prepare(e){let n=this.#e.prepare(e);return{run:(...r)=>n.run(...r),get:(...r)=>n.get(...r),all:(...r)=>n.all(...r),iterate:(...r)=>typeof n.iterate=="function"?n.iterate(...r):n.all(...r)[Symbol.iterator]()}}transaction(e){return(...n)=>{this.#e.exec("BEGIN");try{let r=e(...n);return this.#e.exec("COMMIT"),r}catch(r){throw this.#e.exec("ROLLBACK"),r}}}close(){this.#e.close()}},ts=null;$i=Symbol.for("__context_mode_live_dbs_v3__"),Qd=(()=>{let t=globalThis;return t[$i]||(t[$i]=new Set,process.on("exit",()=>{for(let e of t[$i])os(e);t[$i].clear()})),t[$i]})(),Pi=class{#e;#t;constructor(e){let n=nt();this.#e=e,rs(e);let r;try{r=new n(e,{timeout:3e4}),ns(r)}catch(o){let s=o instanceof Error?o.message:String(o);if(wc(s)){ux(e),rs(e);try{r=new n(e,{timeout:3e4}),ns(r)}catch(i){throw new Error(`Failed to create fresh DB after renaming corrupt file: ${i instanceof Error?i.message:String(i)}`)}}else throw o}this.#t=r,Qd.add(this.#t),this.initSchema(),this.prepareStatements()}get db(){return this.#t}get dbPath(){return this.#e}close(){Qd.delete(this.#t),os(this.#t)}withRetry(e){return fr(e)}cleanup(){Qd.delete(this.#t),os(this.#t),kc(this.#e)}}});var kx={};_e(kx,{SessionDB:()=>Gt,StorageDirectoryError:()=>Kt,_resetWorktreeSuffixCacheForTests:()=>kI,applyMissingSessionEventsColumns:()=>op,clearStorageDirectoryCheckCacheForTests:()=>yI,describeStorageDirectorySource:()=>Ci,ensureSessionEventsSchema:()=>sp,ensureWritableStorageDir:()=>br,formatStorageDirectoryError:()=>cs,getWorktreeSuffix:()=>Oi,hashProjectDirCanonical:()=>rt,hashProjectDirLegacy:()=>On,normalizeWorktreePath:()=>yr,resolveContentStorageDir:()=>Yr,resolveContentStorePath:()=>rp,resolveDefaultSessionDir:()=>Pc,resolveSessionDbPath:()=>us,resolveSessionPath:()=>vx,resolveSessionStorageDir:()=>_r,resolveStatsStorageDir:()=>as});import{createHash as Ri}from"node:crypto";import{execFileSync as aI}from"node:child_process";import{accessSync as cI,constants as uI,existsSync as $c,mkdirSync as lI,realpathSync as dI,renameSync as np}from"node:fs";import{homedir as hx}from"node:os";import{dirname as pI,isAbsolute as gx,join as gr,resolve as is}from"node:path";function Pc(t){let e=t.env??process.env,n=t.legacySessionDirEnv,r=n?e[n]?.trim():void 0;return r&&n?(t.onLegacySessionDir?.(n,r),r):gr(mI(t.configDir,t.configDirEnv,e),"context-mode","sessions")}function mI(t,e,n){let r=e?n[e]:void 0;return r&&r.trim()!==""?dx(r.trim()):dx(t,hx())}function dx(t,e){return t.startsWith("~")?is(hx(),t.replace(/^~[/\\]?/,"")):gx(t)?is(t):e?is(e,t):is(t)}function fI(t,e,n){return new Kt(t,e,Cn,void 0,[`Invalid ${Cn} for context-mode ${t} directory: ${n}`,xx()].join(` |
| 4 | `))}function _x(t){let e=process.env[Cn];if(e===void 0)return{kind:"unset"};let n=e.trim();if(!n)return{kind:"ignored-empty",ignoredEnvVar:Cn,ignoredReason:"empty"};if(!gx(n))throw fI(t,n,`${Cn} must be an absolute path.`);return{kind:"override",root:is(n)}}function hI(t){return t.kind==="ignored-empty"?{ignoredEnvVar:t.ignoredEnvVar,ignoredReason:t.ignoredReason}:{}}function bx(t,e){let n=_x(t);return n.kind!=="override"?null:{kind:t,path:gr(n.root,e),envVar:Cn,source:"override"}}function gI(t,e,n){return{kind:t,path:is(e()),envVar:null,source:"default",...n}}function _r(t){let e=_x("session");return e.kind==="override"?{kind:"session",path:gr(e.root,yx),envVar:Cn,source:"override"}:gI("session",t,hI(e))}function Yr(t){let e=bx("content",lx);if(e)return e;let n=_r(t);return{kind:"content",path:gr(pI(n.path),lx),envVar:n.envVar,source:n.source,ignoredEnvVar:n.ignoredEnvVar,ignoredReason:n.ignoredReason}}function as(t){let e=bx("stats",yx);if(e)return e;let n=_r(t);return{kind:"stats",path:n.path,envVar:n.envVar,source:n.source,ignoredEnvVar:n.ignoredEnvVar,ignoredReason:n.ignoredReason}}function cs(t){return t.message}function Ci(t){return t.source==="override"&&t.envVar?`via ${t.envVar}`:t.ignoredEnvVar&&t.ignoredReason==="empty"?`default; ignored empty ${t.ignoredEnvVar}`:"default"}function yI(){Tc.clear()}function br(t){let e=[t.kind,t.path,t.source,t.envVar??"",t.ignoredEnvVar??"",t.ignoredReason??""].join("\0"),n=Tc.get(e);if(n instanceof Kt)throw n;if(n===t.path)return n;try{return lI(t.path,{recursive:!0}),cI(t.path,uI.W_OK),Tc.set(e,t.path),t.path}catch(r){let o=new Kt(t.kind,xI(r)??t.path,Cn,r,void 0,{ignoredEnvVar:t.ignoredEnvVar,ignoredReason:t.ignoredReason});throw Tc.set(e,o),o}}function _I(t,e,n={}){return[`context-mode ${t} directory is not writable: ${e}`,bI(n),xx()].filter(Boolean).join(` |
| 5 | `)}function bI(t){return t.ignoredEnvVar&&t.ignoredReason==="empty"?`Ignored empty ${t.ignoredEnvVar}; using adapter default.`:null}function xx(){return`Set ${Cn} to a writable absolute path.`}function xI(t){if(!t||typeof t!="object")return null;let e=t.path;return typeof e=="string"&&e.length>0?e:null}function yr(t){let e=t.replace(/\\/g,"/");return/^\/+$/.test(e)?"/":/^[A-Za-z]:\/+$/.test(e)?`${e.slice(0,2)}/`:e.replace(/\/+$/,"")}function px(t){let e=t;try{e=dI.native(t)}catch{}let n=yr(e);return process.platform==="win32"||process.platform==="darwin"?n.toLowerCase():n}function Sx(t,e){return aI("git",["-C",t,...e],{encoding:"utf-8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).trim()}function SI(t){let e=Sx(t,["rev-parse","--show-toplevel"]);return e.length>0?yr(e):null}function vI(t){let e=Sx(t,["worktree","list","--porcelain"]).split(/\r?\n/).find(n=>n.startsWith("worktree "))?.replace("worktree ","")?.trim();return e?yr(e):null}function Oi(t=process.cwd()){let e=process.env.CONTEXT_MODE_SESSION_SUFFIX;if(ss&&ss.projectDir===t&&ss.envSuffix===e)return ss.suffix;let n="";if(e!==void 0)n=e?`__${e}`:"";else try{let r=SI(t),o=vI(t);if(r&&o){let s=px(r),i=px(o);s!==i&&(n=`__${Ri("sha256").update(s).digest("hex").slice(0,8)}`)}}catch{}return ss={projectDir:t,envSuffix:e,suffix:n},n}function kI(){ss=void 0}function On(t){return Ri("sha256").update(yr(t)).digest("hex").slice(0,16)}function rt(t){let e=yr(t),n=process.platform==="darwin"||process.platform==="win32"?e.toLowerCase():e;return Ri("sha256").update(n).digest("hex").slice(0,16)}function rp(t){let{projectDir:e,contentDir:n}=t,r=rt(e),o=gr(n,`${r}.db`);if($c(o))return o;let s=On(e);if(s===r)return o;let i=gr(n,`${s}.db`);if($c(i))try{np(i,o);for(let a of["-wal","-shm"])try{np(i+a,o+a)}catch{}}catch{}return o}function us(t){return vx({...t,ext:".db"})}function vx(t){let{projectDir:e,sessionsDir:n,ext:r}=t,o=t.suffix??Oi(e),s=rt(e),i=gr(n,`${s}${o}${r}`);if($c(i))return i;let a=On(e);if(a===s)return i;let c=gr(n,`${a}${o}${r}`);if($c(c))try{np(c,i)}catch{}return i}function Ec(t){let e=Number(t);return!Number.isFinite(e)||e<=0?0:Math.floor(e)}function op(t){let e=t.pragma("table_xinfo(session_events)"),n=new Set(e.map(o=>o.name)),r=!1;for(let[o,s]of wI)n.has(o)||(t.exec(`ALTER TABLE session_events ADD COLUMN ${o} ${s}`),r=!0);return r&&t.exec("CREATE INDEX IF NOT EXISTS idx_session_events_project ON session_events(session_id, project_dir)"),r}function sp(t,e){let n=null;try{n=new e(t),op(n)}catch{}finally{try{n?.close()}catch{}}}var Cn,yx,lx,Kt,Tc,ss,mx,fx,F,wI,Gt,Jt=x(()=>{"use strict";hr();Cn="CONTEXT_MODE_DIR",yx="sessions",lx="content",Kt=class extends Error{kind;path;overrideEnvVar;ignoredEnvVar;ignoredReason;constructor(e,n,r=Cn,o,s,i={}){super(s??_I(e,n,i),{cause:o}),this.name="StorageDirectoryError",this.kind=e,this.path=n,this.overrideEnvVar=r,this.ignoredEnvVar=i.ignoredEnvVar,this.ignoredReason=i.ignoredReason}},Tc=new Map;mx=1e3,fx=5;F={insertEvent:"insertEvent",getEvents:"getEvents",getEventsByType:"getEventsByType",getEventsByPriority:"getEventsByPriority",getEventsByTypeAndPriority:"getEventsByTypeAndPriority",getEventCount:"getEventCount",getLatestAttributedProject:"getLatestAttributedProject",checkDuplicate:"checkDuplicate",evictLowestPriority:"evictLowestPriority",updateMetaLastEvent:"updateMetaLastEvent",ensureSession:"ensureSession",getSessionStats:"getSessionStats",getSessionRollup:"getSessionRollup",getMaxFileEdits:"getMaxFileEdits",getLatestCommitMessage:"getLatestCommitMessage",incrementCompactCount:"incrementCompactCount",getUsageCursor:"getUsageCursor",setUsageCursor:"setUsageCursor",upsertResume:"upsertResume",getResume:"getResume",markResumeConsumed:"markResumeConsumed",claimLatestUnconsumedResume:"claimLatestUnconsumedResume",deleteEvents:"deleteEvents",deleteMeta:"deleteMeta",deleteResume:"deleteResume",getOldSessions:"getOldSessions",searchEvents:"searchEvents",incrementToolCall:"incrementToolCall",getToolCallTotals:"getToolCallTotals",getToolCallByTool:"getToolCallByTool",getEventBytesSummary:"getEventBytesSummary"},wI=[["project_dir","TEXT NOT NULL DEFAULT ''"],["attribution_source","TEXT NOT NULL DEFAULT 'unknown'"],["attribution_confidence","REAL NOT NULL DEFAULT 0"],["bytes_avoided","INTEGER NOT NULL DEFAULT 0"],["bytes_returned","INTEGER NOT NULL DEFAULT 0"]];Gt=class extends Pi{constructor(e){super(e?.dbPath??ep("session"))}stmt(e){return this.stmts.get(e)}initSchema(){try{let n=this.db.pragma("table_xinfo(session_events)").find(r=>r.name==="data_hash");n&&n.hidden!==0&&this.db.exec("DROP TABLE session_events")}catch{}this.db.exec(` |
| 6 | CREATE TABLE IF NOT EXISTS session_events ( |